@tencent-ai/agent-sdk 0.3.269 → 0.3.270
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/cli/CHANGELOG.md +21 -0
- package/cli/dist/codebuddy-headless.js +111 -108
- package/cli/dist/codebuddy-lite-wb.mjs +143 -140
- package/cli/dist/web-ui/assets/{CanvasPaneStandaloneView-AFymTrqt.js → CanvasPaneStandaloneView-CDO7isWn.js} +1 -1
- package/cli/dist/web-ui/assets/{CanvasView-CoxUIOeY.js → CanvasView-DJNkeBGK.js} +1 -1
- package/cli/dist/web-ui/assets/{ChangesView-CTnio3qy.js → ChangesView-fCuIktEK.js} +1 -1
- package/cli/dist/web-ui/assets/{DocsView-DfGq3q0Y.js → DocsView-B79hLvzs.js} +1 -1
- package/cli/dist/web-ui/assets/{EditorView-CYw2oZg1.js → EditorView-7YnlryBL.js} +1 -1
- package/cli/dist/web-ui/assets/{KeybindingsView-D6w9QUh3.js → KeybindingsView-CIDkpkAb.js} +1 -1
- package/cli/dist/web-ui/assets/{LogsView-CP5xbyy4.js → LogsView-Bcv52scT.js} +1 -1
- package/cli/dist/web-ui/assets/{MetricsView-C2c14t7O.js → MetricsView-DUSiPsda.js} +1 -1
- package/cli/dist/web-ui/assets/{PluginsView-BSEje_UM.js → PluginsView-BTOCj9co.js} +1 -1
- package/cli/dist/web-ui/assets/{RemoteControlView-2f1ZwMQ5.js → RemoteControlView-YqmY0vro.js} +1 -1
- package/cli/dist/web-ui/assets/{SettingsView-tOHto0ek.js → SettingsView-D2wIPOBw.js} +1 -1
- package/cli/dist/web-ui/assets/{SplitContainer-q9iSME5N.js → SplitContainer-DlEN5H4s.js} +1 -1
- package/cli/dist/web-ui/assets/{StatsView-BVIL7ys1.js → StatsView-C7iB42TQ.js} +1 -1
- package/cli/dist/web-ui/assets/{TasksView-BuNGf8H8.js → TasksView-CKm5dh4d.js} +1 -1
- package/cli/dist/web-ui/assets/{TerminalPaneView-IZXBrZd0.js → TerminalPaneView-Cs-7CKCw.js} +1 -1
- package/cli/dist/web-ui/assets/{TracesView-BagVLm59.js → TracesView-4MhXOs0J.js} +1 -1
- package/cli/dist/web-ui/assets/{WorkersView-CFhFpbFC.js → WorkersView-B5SyD2xB.js} +1 -1
- package/cli/dist/web-ui/assets/{abnfDiagram-O67JEVCF-BbyhIfaI.js → abnfDiagram-O67JEVCF-luL6Qe5x.js} +1 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CVyCykh_.js +1 -0
- package/cli/dist/web-ui/assets/{architectureDiagram-NJMV4G6O-DxDD6eVt.js → architectureDiagram-NJMV4G6O-CXZjweyd.js} +1 -1
- package/cli/dist/web-ui/assets/{blockDiagram-BEXU5L5S-DTRa2Tb9.js → blockDiagram-BEXU5L5S-DceMcN-6.js} +1 -1
- package/cli/dist/web-ui/assets/{c4Diagram-YGBWAQC7--r-yED_M.js → c4Diagram-YGBWAQC7-Chr6hcY4.js} +1 -1
- package/cli/dist/web-ui/assets/{canvas-store-BpQ38Vml.js → canvas-store-CLGZ388s.js} +1 -1
- package/cli/dist/web-ui/assets/channel-pxcszUh2.js +1 -0
- package/cli/dist/web-ui/assets/{chunk-3FUC2YCW-CrLNasJM.js → chunk-3FUC2YCW-BRXxiofJ.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-5DYCD2WN-BvGB0nx-.js → chunk-5DYCD2WN-BJidDn4j.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-742MDFTN-BTBNbBjA.js → chunk-742MDFTN-D8PKsc6_.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7INBJB4K-CnYo9mzQ.js → chunk-7INBJB4K-0OOQXMSm.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7M6MHVWA-ChPc3AIy.js → chunk-7M6MHVWA-CinmEwpu.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7PRAP22T-BWJP0sRU.js → chunk-7PRAP22T-D0WpyU-H.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GTNCS2PH-BWIt5JBZ.js → chunk-GTNCS2PH-NNZzPISm.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GWA4HPMP-DPP9EzOc.js → chunk-GWA4HPMP-CVQtrfg2.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-MBY4JIJT-WW7QGbUd.js → chunk-MBY4JIJT-B2Fs2skV.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-NETBCI7D-DvHPTWgP.js → chunk-NETBCI7D-DS15Lcf7.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-O7XYJQB3-DNIHMsy6.js → chunk-O7XYJQB3-irIWVhcH.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-UA2S7LBM-FmyRAjon.js → chunk-UA2S7LBM-DHv_5vdC.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-WEXAMYUT-DPGJtaXE.js → chunk-WEXAMYUT-DTnPpX3o.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-Z7XXMR3K-xCwg-Yew.js → chunk-Z7XXMR3K-CL6QEwjv.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-ZIGJFQKS-C33Iz6Fl.js → chunk-ZIGJFQKS-D-9hFu_x.js} +1 -1
- package/cli/dist/web-ui/assets/{classDiagram-v2-NBCMYWYE-CYRZjfMU.js → classDiagram-v2-NBCMYWYE-BGpw8OWR.js} +1 -1
- package/cli/dist/web-ui/assets/{cssMode-ClDS6DMb.js → cssMode-DYH1pn7V.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefin-OW5HDTMX-BZMPI_-L.js → cynefin-OW5HDTMX-BwDHcOb3.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefinDiagram-VND7K2PF-xv7006O3.js → cynefinDiagram-VND7K2PF-C04bh7p8.js} +1 -1
- package/cli/dist/web-ui/assets/{dagre-6A5THRUB-BaA5Prow.js → dagre-6A5THRUB-Dea8s6xE.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-22UHCM2B-CLPFfA4R.js → diagram-22UHCM2B-DJVauquX.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-3UASUU5V-DX9eVGvg.js → diagram-3UASUU5V-C7-A4v72.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-ATOU4E4O-C6tAUS3M.js → diagram-ATOU4E4O-7B6YBDOj.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-CDSNMT55-C4bjVjgp.js → diagram-CDSNMT55-DMAwoRXf.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MLGK6HIB--R4pb2v7.js → diagram-MLGK6HIB-CNB_vlIZ.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MPIPVDR6-DBZrcvRV.js → diagram-MPIPVDR6-hyhLuNp3.js} +1 -1
- package/cli/dist/web-ui/assets/{ebnfDiagram-ZINNZB2B-guH8XqK5.js → ebnfDiagram-ZINNZB2B-CJWaxsG5.js} +1 -1
- package/cli/dist/web-ui/assets/{editor-store-B581kWHa.js → editor-store-BxjPLrr9.js} +1 -1
- package/cli/dist/web-ui/assets/{editor.main-BDJb4JDA.js → editor.main-Czm6gHJH.js} +2 -2
- package/cli/dist/web-ui/assets/{elk-276RUBZZ-CeiKMULj.js → elk-276RUBZZ-D5Y00SxR.js} +1 -1
- package/cli/dist/web-ui/assets/{erDiagram-OPXOYQCR-sBAqBzrO.js → erDiagram-OPXOYQCR-BmYHBZJv.js} +1 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-D5vLpI9F.js +1 -0
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-Cf58WNhf.js +1 -0
- package/cli/dist/web-ui/assets/{ganttDiagram-FUAMR5RP-C6_HpREX.js → ganttDiagram-FUAMR5RP-DbhB40jH.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraph-4MIJSDKK-BXoSq3Gg.js → gitGraph-4MIJSDKK-mjDyHNS1.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraphDiagram-X574FWY7-CGtaH2jU.js → gitGraphDiagram-X574FWY7-D7jHGUGu.js} +1 -1
- package/cli/dist/web-ui/assets/{htmlMode-D5olfuMo.js → htmlMode-BSBNaQvK.js} +1 -1
- package/cli/dist/web-ui/assets/{index-ClsikMuk.js → index-BtMp20L0.js} +6 -6
- package/cli/dist/web-ui/assets/{info-A6RAGUB7-DEwLfJ7B.js → info-A6RAGUB7-yf2Iyt5X.js} +1 -1
- package/cli/dist/web-ui/assets/{infoDiagram-VRGFBTTK-DCSOdK6X.js → infoDiagram-VRGFBTTK-CmWWZT96.js} +1 -1
- package/cli/dist/web-ui/assets/{ishikawaDiagram-OU5B5YK6-BseHnvYw.js → ishikawaDiagram-OU5B5YK6-NcOpKVNl.js} +1 -1
- package/cli/dist/web-ui/assets/{journeyDiagram-ZHPQQLJL-BRxQJTqW.js → journeyDiagram-ZHPQQLJL-dY4w9tp1.js} +1 -1
- package/cli/dist/web-ui/assets/{jsonMode-Cg5YHEwQ.js → jsonMode-BUaimt20.js} +1 -1
- package/cli/dist/web-ui/assets/{kanban-definition-PNTS6WVX-KI9YMfJk.js → kanban-definition-PNTS6WVX-BctMsDJJ.js} +1 -1
- package/cli/dist/web-ui/assets/{line-DprNiO-0.js → line-BYkTAP3U.js} +1 -1
- package/cli/dist/web-ui/assets/loader-circle-wVK1RLLa.js +1 -0
- package/cli/dist/web-ui/assets/{mermaid-parser.core-GTP4u3FU.js → mermaid-parser.core-BLRTQ_8m.js} +3 -3
- package/cli/dist/web-ui/assets/{mermaid.core-CNUJl-CG.js → mermaid.core-DGYOOYu5.js} +4 -4
- package/cli/dist/web-ui/assets/{mindmap-definition-NLK3R4M7-C2PcP9ry.js → mindmap-definition-NLK3R4M7-DtFEhmgs.js} +1 -1
- package/cli/dist/web-ui/assets/{packet-AYTQ26CC-CZLuLwvG.js → packet-AYTQ26CC-DG8Ws-Q6.js} +1 -1
- package/cli/dist/web-ui/assets/{pegDiagram-GJSIUBJH-Bm2hR9le.js → pegDiagram-GJSIUBJH-C1B_R8sV.js} +1 -1
- package/cli/dist/web-ui/assets/{pie-WAS4IAKB-CRzoh5ox.js → pie-WAS4IAKB-WpUKIR_Y.js} +1 -1
- package/cli/dist/web-ui/assets/{pieDiagram-5QR66LMP-CTJ2r9nd.js → pieDiagram-5QR66LMP-C7VoNMU4.js} +1 -1
- package/cli/dist/web-ui/assets/power-BNRlQx4o.js +1 -0
- package/cli/dist/web-ui/assets/{quadrantDiagram-O4NWA36T-CTKetN5z.js → quadrantDiagram-O4NWA36T-CXYTQ4y2.js} +1 -1
- package/cli/dist/web-ui/assets/{radar-RG4KPBEZ-DXjTvI5t.js → radar-RG4KPBEZ-C3VHLzXv.js} +1 -1
- package/cli/dist/web-ui/assets/{railroad-74A4TZTK-BDdQn4Gc.js → railroad-74A4TZTK-Py_5hLH_.js} +1 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-CqoDhjmj.js +1 -0
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-DUWdDy3z.js +1 -0
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-Co6yi1zs.js +1 -0
- package/cli/dist/web-ui/assets/{railroadDiagram-XR7U4H2S-B_YntG1t.js → railroadDiagram-XR7U4H2S-5OEyONOk.js} +1 -1
- package/cli/dist/web-ui/assets/{requirementDiagram-PLB6GJNP-CDjL2cNi.js → requirementDiagram-PLB6GJNP-DUJYTLHd.js} +1 -1
- package/cli/dist/web-ui/assets/{sankeyDiagram-IPEJSGJF-qXJEVvf1.js → sankeyDiagram-IPEJSGJF-Bedevch2.js} +1 -1
- package/cli/dist/web-ui/assets/{sequenceDiagram-PO4LG4MO-l-r7gLpE.js → sequenceDiagram-PO4LG4MO-pgraPAoD.js} +1 -1
- package/cli/dist/web-ui/assets/{server-O9q4QgxP.js → server-Ccbyj1qh.js} +1 -1
- package/cli/dist/web-ui/assets/{sidebar-store-BI5HJsXT.js → sidebar-store-Rkdixr53.js} +1 -1
- package/cli/dist/web-ui/assets/{stateDiagram-v2-GCMORJYK-IswgvzFJ.js → stateDiagram-v2-GCMORJYK-DALpfmXP.js} +1 -1
- package/cli/dist/web-ui/assets/{swimlanes-2SLR337P-JwNdJjRm.js → swimlanes-2SLR337P-DYo2RgRV.js} +1 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Dxiovvmi.js +8 -0
- package/cli/dist/web-ui/assets/{terminal-store-DxSL6lew.js → terminal-store-DOTQJFag.js} +1 -1
- package/cli/dist/web-ui/assets/{theme-store-B-x3NJPZ.js → theme-store-7kL2_Dih.js} +1 -1
- package/cli/dist/web-ui/assets/{timeline-definition-EJHVYXUP-DZbLKd2p.js → timeline-definition-EJHVYXUP-teGYk-dY.js} +1 -1
- package/cli/dist/web-ui/assets/{timer-CPkvO7Hr.js → timer-DsflRbuo.js} +1 -1
- package/cli/dist/web-ui/assets/{treeView-Q6P3EWNA-ClDx_xC6.js → treeView-Q6P3EWNA-DsuuN89d.js} +1 -1
- package/cli/dist/web-ui/assets/{treemap-WGGIJYW6-RDLtBb4P.js → treemap-WGGIJYW6-BqqhgGGn.js} +1 -1
- package/cli/dist/web-ui/assets/{triangle-alert-RxeG6BcU.js → triangle-alert-BL4rmdOu.js} +1 -1
- package/cli/dist/web-ui/assets/{tsMode-D4E8Qd-x.js → tsMode-B6SPhuNF.js} +1 -1
- package/cli/dist/web-ui/assets/{use-i18n-BCKBlfpd.js → use-i18n-BvJYl_9l.js} +1 -1
- package/cli/dist/web-ui/assets/{usecaseDiagram-POWQR4AR-DEfQU35o.js → usecaseDiagram-POWQR4AR-2sD6xPnt.js} +1 -1
- package/cli/dist/web-ui/assets/{vennDiagram-UO4OBE2U-C4yxYnjL.js → vennDiagram-UO4OBE2U-DHLn-BEs.js} +1 -1
- package/cli/dist/web-ui/assets/{wardley-WFR3VGLG-wNwnrEey.js → wardley-WFR3VGLG-BD5dMb6v.js} +1 -1
- package/cli/dist/web-ui/assets/{wardleyDiagram-VNRHLVJA-nrPZlF5q.js → wardleyDiagram-VNRHLVJA-6V8TM6o7.js} +1 -1
- package/cli/dist/web-ui/assets/{workspace-dock-store-5JIgHIqh.js → workspace-dock-store-D1kqgYR-.js} +1 -1
- package/cli/dist/web-ui/assets/{xychartDiagram-PMCCYNJV-BXJAFZRI.js → xychartDiagram-PMCCYNJV-B5wGEmv3.js} +1 -1
- package/cli/dist/web-ui/assets/{zap-JdzyzkaE.js → zap-u2SXZ7au.js} +1 -1
- package/cli/dist/web-ui/index.html +9 -9
- package/cli/dist/web-ui/sw.js +1 -1
- package/cli/dist-server/2701.codebuddy.js +2 -2
- package/cli/dist-server/3080.codebuddy.js +1 -1
- package/cli/dist-server/3163.codebuddy.js +1 -1
- package/cli/dist-server/codebuddy.js +41 -39
- package/cli/dist-server/types/node/agent-task/agent-task.d.ts +1 -0
- package/cli/dist-server/types/node/permission/brokered-sandbox/host-service.d.ts +1 -0
- package/cli/dist-server/types/node/permission/sandbox-orchestrator.d.ts +2 -1
- package/cli/dist-server/types/node/server/formats/acp/acp-trace-context.d.ts +2 -0
- package/cli/dist-server/types/node/server/types.d.ts +8 -1
- package/cli/dist-server/types/node/utils/clipboard-utils.d.ts +1 -1
- package/cli/dist-server/types/node/utils/image-preparation-guard.d.ts +5 -1
- package/cli/dist-server/types/node/utils/request-scene.d.ts +5 -0
- package/cli/dist-server/types/vendor/cbc-core/node/utils/history-utils.d.ts +33 -8
- package/cli/dist-server/types/vendor/cbc-core/node/utils/input-item-utils.d.ts +27 -0
- package/cli/package.json +4 -4
- package/cli/product.cloudhosted.json +2 -2
- package/cli/product.internal.json +2 -2
- package/cli/product.ioa.json +2 -2
- package/cli/product.json +2 -2
- package/cli/product.selfhosted.json +2 -2
- package/package.json +1 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CHYM9JTs.js +0 -1
- package/cli/dist/web-ui/assets/channel-DtDG5p59.js +0 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-PAdtPpRo.js +0 -1
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-EJkyCIxy.js +0 -1
- package/cli/dist/web-ui/assets/loader-circle-1kyJNWeb.js +0 -1
- package/cli/dist/web-ui/assets/power-CbA3xFVD.js +0 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-C9Q7Ymc5.js +0 -1
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-Bg_FzoOI.js +0 -1
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-cvFGmoWK.js +0 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Bopn2-Vs.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.ids=["3163"],exports.modules={34054(e,t,r){r.r(t),r.d(t,{DEFAULT_REQUEST_MAX_RETRIES:()=>eg,DEFAULT_STREAM_IDLE_TIMEOUT_MS:()=>eu,DEFAULT_FIRST_TOKEN_TIMEOUT_MS:()=>ec,resolveRecoveryFirstTokenTimeoutMs:()=>resolveRecoveryFirstTokenTimeoutMs,resolveRequestMaxRetries:()=>resolveRequestMaxRetries,DEFAULT_MODEL_401_RETRY_DELAY_MS:()=>ef,resolveTimeoutMs:()=>resolveTimeoutMs,WATCHDOG_MAX_BACKOFF_MS:()=>e_,computeRequestRetryDelayMs:()=>computeRequestRetryDelayMs,ModelProviderImpl:()=>eT,isRetryWatchdogEnabled:()=>isRetryWatchdogEnabled,REQUEST_RETRY_BASE_DELAY_MS:()=>eh,MAX_REQUEST_MAX_RETRIES:()=>ep,resolveModel401MaxRetries:()=>resolveModel401MaxRetries,DEFAULT_RECOVERY_FIRST_TOKEN_TIMEOUT_MS:()=>ey,REQUEST_RETRY_MAX_DELAY_MS:()=>em,extractMockE2EResponseDiagnostics:()=>extractMockE2EResponseDiagnostics,resolveModel401RetryDelayMs:()=>resolveModel401RetryDelayMs,createFirstTokenTimeoutResponse:()=>createFirstTokenTimeoutResponse});var s,o,i,n,a,l,d,c,u,h,m,g,p,_,f=r(46193),E=r(57975),y=r(38522),T=r(88523),R=r(7268),S=r(14913),v=r(86482),M=r(21215),A=r(5884),b=r(51147),I=r(9151),k=r(80134),C=r(92735),O=r(96453),D=r(19672),w=r(49839),$=r(20173),L=r(73122),U=r(66678),P=r(34506),q=r(80039),N=r(5178),H=r(14545),x=r(45565),F=r(69712),B=r(18151),G=r(34340),Q=r(43394),V=r(91325),Y=r(89781),K=r(40445),X=r(78725),W=r(19436),z=r(29889),J=r(26234),Z=r(64013),ee=r(68475),et=r(28985),er=r(77598);let ChatNetworkFailoverShadowRecorder=class ChatNetworkFailoverShadowRecorder{constructor(){this.events=[],this.currentBytes=0,this.nextSequence=1}begin(e){if(e)return{operationId:(0,er.randomUUID)(),nextAttempt:1,commitReached:!1}}async observeAttempt(e,t){if(!e)return t();let r=e.nextAttempt++,s=Date.now();try{let o=await t();return this.append({timestamp:Date.now(),routeId:"core-api",operation:"chat.stream",operationId:e.operationId,attempt:r,outcome:"success",httpStatus:o.status,durationMs:Date.now()-s,commitReached:e.commitReached}),o}catch(t){throw this.append({timestamp:Date.now(),routeId:"core-api",operation:"chat.stream",operationId:e.operationId,attempt:r,outcome:"terminal_error",httpStatus:t.response?.status??t.status,transportCode:"string"==typeof t.code?t.code:void 0,durationMs:Date.now()-s,commitReached:e.commitReached}),t}}markCommitReached(e){if(!e||e.commitReached)return;e.commitReached=!0;let t=[...this.events].reverse().find(t=>t.event.operationId===e.operationId);if(t){let e=t.bytes;t.event.commitReached=!0,t.bytes=Buffer.byteLength(JSON.stringify(t.event),"utf8"),this.currentBytes+=t.bytes-e}}recent(e=100){let t=Math.max(0,Math.floor(e));return 0===t?[]:this.events.slice(-t).map(e=>({...e.event}))}clearForTests(){this.events.length=0,this.currentBytes=0,this.nextSequence=1}append(e){let t={...e,sequence:this.nextSequence++},r=Buffer.byteLength(JSON.stringify(t),"utf8");if(!(r>2097152)){for(;this.currentBytes+r>2097152&&this.events.length>0;){let e=this.events.shift();e&&(this.currentBytes-=e.bytes)}this.events.push({bytes:r,event:t}),this.currentBytes+=r}}};let es=new ChatNetworkFailoverShadowRecorder,eo=[50,100,500,1e3,3e3,1e4,6e4],ei=["0_50","50_100","100_500","500_1000","1000_3000","3000_10000","10000_60000","gt_60000"];function SseMonitorSessionData(e,t){let r=e.meta?.["codebuddy.ai/mode"];return{id:e.id,conversationRequestId:t.conversationRequestId,promptRequestId:e.promptRequestId,messageId:t.messageId,traceId:e.traceId,agentName:e.agentName,agentPurpose:t.agentPurpose,isCompressing:e.isCompressing,scene:"string"==typeof r?r:""}}let en="modelError",ea={conversation_id:"\u4F1A\u8BDDID",conversation_request_id:"\u4F1A\u8BDD\u8BF7\u6C42ID",prompt_request_id:"\u63D0\u793A\u8BF7\u6C42ID",trace_id:"\u94FE\u8DEF\u8FFD\u8E2AID",message_id:"\u6D88\u606FID",model:"\u6A21\u578B",agent_name:"\u667A\u80FD\u4F53",scene:"\u573A\u666F",request_type:"\u8BF7\u6C42\u7C7B\u578B",http_begin_status_code:"HTTP\u8FDE\u63A5\u72B6\u6001\u7801",http_end_status_code:"HTTP\u7ED3\u675F\u72B6\u6001\u7801",model_error:"\u6A21\u578B\u9519\u8BEF",model_error_code:"\u6A21\u578B\u9519\u8BEF\u7801",finish_flag:"\u7ED3\u675F\u6807\u8BC6",finish_reason:"\u7ED3\u675F\u539F\u56E0",total_cost_ms:"\u603B\u8017\u65F6(ms)",sse_connect_cost_ms:"SSE\u8FDE\u63A5\u8017\u65F6(ms)",ttft_ms:"\u9996\u5B57\u8017\u65F6TTFT(ms)",text_first_cost_ms:"\u6B63\u6587\u9996\u5B57\u8017\u65F6(ms)",text_total_cost_ms:"\u6B63\u6587\u8FC7\u7A0B\u8017\u65F6(ms)",think_first_cost_ms:"\u601D\u8003\u9996\u5B57\u8017\u65F6(ms)",think_total_cost_ms:"\u601D\u8003\u8FC7\u7A0B\u8017\u65F6(ms)",total_bytes:"\u603B\u5B57\u8282\u6570",total_chunks:"\u603B\u5305\u6570",completion_tokens:"\u8F93\u51FAtoken\u6570",prompt_tokens:"\u8F93\u5165token\u6570",total_tokens:"\u603Btoken\u6570",text_content_bytes:"\u6B63\u6587\u534F\u8BAE\u5B57\u8282\u6570",text_content_chars:"\u6B63\u6587\u53EF\u89C1\u5B57\u7B26\u6570",text_total_tokens:"\u6B63\u6587token\u6570",think_content_bytes:"\u601D\u8003\u534F\u8BAE\u5B57\u8282\u6570",think_content_chars:"\u601D\u8003\u53EF\u89C1\u5B57\u7B26\u6570",think_total_tokens:"\u601D\u8003token\u6570",recv_length:"\u63A5\u6536\u957F\u5EA6",origin_length:"\u539F\u59CB\u957F\u5EA6",report_version:"\u4E0A\u62A5\u7248\u672C",report_source:"\u4E0A\u62A5\u6765\u6E90"},el={"0_50":"0-50ms","50_100":"50-100ms","100_500":"100-500ms","500_1000":"500ms-1s","1000_3000":"1-3s","3000_10000":"3-10s","10000_60000":"10s-60s",gt_60000:">60s"};function createContentStats(){return{bytes:0,contentBytes:0,contentChars:0,tokens:0}}let SseStreamMonitorImpl=class SseStreamMonitorImpl{constructor(e,t,r){for(const s of(this.connectedTime=0,this.currentChunkTime=0,this.firstTokenTime=0,this.firstTextTime=0,this.lastTextTime=0,this.firstThinkTime=0,this.lastThinkTime=0,this.firstToolCallTime=0,this.endTime=0,this.totalBytes=0,this.totalChunks=0,this.completionTokens=0,this.promptTokens=0,this.totalTokens=0,this.textStats=createContentStats(),this.thinkStats=createContentStats(),this.lastTokenTime=0,this.intervalTimes={},this.intervalTotal={},this.finishFlag="",this.isSensitive=!1,this.modelError="",this.modelErrorCode="",this.finishReason="",this.isReportedStart=!1,this.isReportedEnd=!1,this.httpBeginStatusCode=0,this.httpEndStatusCode=200,this.galileo=t,this.logger=r,this.sessionData={...e.sessionData,conversationRequestId:e.sessionData.conversationRequestId??"",promptRequestId:e.sessionData.promptRequestId??"",messageId:e.sessionData.messageId??"",traceId:e.sessionData.traceId??"",agentName:e.sessionData.agentName||"unknown",scene:e.sessionData.scene??""},this.model=e.model,this.requestType=this.resolveRequestType(),this.requestStartTime=Date.now(),this.requestTag=(this.sessionData.conversationRequestId??"").slice(0,8)||this.sessionData.id.slice(0,8),ei))this.intervalTimes[s]=0,this.intervalTotal[s]=0;this.logEnqueue(),this.attachUserAbort(e.abortSignal)}resolveRequestType(){if(this.sessionData.isCompressing)return"compress";let e=this.sessionData.agentPurpose;return e?e.startsWith("custom_agent:")||"conversation"===e||"conversation:compact"===e?"chat":e:"other"}logEnqueue(){try{this.logEvent("enqueue")}catch{}}onStreamOpen(e,t){try{this.connectedTime=Date.now(),e&&(this.sessionData.traceId=e),void 0!==t&&(this.httpBeginStatusCode=t)}catch{}}onFirstData(){try{if(this.isReportedStart||this.isReportedEnd)return;this.isReportedStart=!0;let e=this.connectedTime-this.requestStartTime;this.logEvent("start",{sse_connect_cost_ms:String(e)})}catch{}}onStreamEnd(e,t){try{let r=t?.aborted?"canceled":e,s={recvLength:t?.recvLength??this.totalBytes,originLength:t?.originLength??this.totalBytes};if("error"===r)return void this.onStreamError(t?.errorReason);this.onStreamClose(r,s)}catch{}}attachUserAbort(e){e&&!e.aborted&&(this.userAbortSignal=e,this.onUserAbort=()=>this.onStreamEnd("canceled"),e.addEventListener("abort",this.onUserAbort,{once:!0}))}detachUserAbort(){this.userAbortSignal&&this.onUserAbort&&(this.userAbortSignal.removeEventListener("abort",this.onUserAbort),this.userAbortSignal=void 0,this.onUserAbort=void 0)}onStreamClose(e,t){try{if(this.detachUserAbort(),this.isReportedEnd)return;this.isReportedEnd=!0,this.endTime=Date.now(),this.resolveFinishFlag(e),this.reportEnd(t)}catch{}}onStreamError(e){try{if(this.detachUserAbort(),this.isReportedEnd)return;this.isReportedEnd=!0,this.endTime=Date.now(),this.resolveFinishFlag("error",e),this.reportEnd({recvLength:this.totalBytes,originLength:this.totalBytes})}catch{}}onChunk(e){try{this.currentChunkTime=Date.now(),this.totalBytes+=e.length,this.totalChunks++,this.calculateConsumeInterval(this.currentChunkTime),1===this.totalChunks&&this.onFirstData()}catch{}}onParsedChunk(e){try{e.deltaContent&&this.onTextDelta(e.deltaContent),e.deltaReasoning&&this.onThinkDelta(e.deltaReasoning),e.hasToolCall&&this.onToolCall(),e.usage&&this.onUsage(e.usage),e.finishReason&&this.onFinishReason(e.finishReason)}catch{}}onTextDelta(e){try{if(!e)return;let t=this.chunkTime();0===this.firstTextTime&&(this.firstTextTime=t,0===this.firstTokenTime&&(this.firstTokenTime=t)),this.lastTextTime=t,this.textStats.contentBytes+=Buffer.byteLength(e,"utf8"),this.textStats.contentChars+=[...e].length,this.textStats.tokens++}catch{}}onThinkDelta(e){try{if(!e)return;let t=this.chunkTime();0===this.firstThinkTime&&(this.firstThinkTime=t,0===this.firstTokenTime&&(this.firstTokenTime=t)),this.lastThinkTime=t,this.thinkStats.contentBytes+=Buffer.byteLength(e,"utf8"),this.thinkStats.contentChars+=[...e].length,this.thinkStats.tokens++}catch{}}onToolCall(){try{let e=this.chunkTime();0===this.firstToolCallTime&&(this.firstToolCallTime=e,0===this.firstTokenTime&&(this.firstTokenTime=e))}catch{}}onFinishReason(e){try{if(!e)return;this.finishReason=e}catch{}}onUsage(e){try{if(!e)return;this.completionTokens=e.completion_tokens??0,this.promptTokens=e.prompt_tokens??0,this.totalTokens=e.total_tokens??0}catch{}}onModelError(e,t){try{this.modelError=e,this.modelErrorCode=t,this.onStreamError("modelError")}catch{}}onSensitiveHit(){try{this.isSensitive=!0}catch{}}setHttpEndStatus(e){try{(-2===e||0===e||e>=200&&e<=599)&&(this.httpEndStatusCode=e)}catch{}}chunkTime(){return this.currentChunkTime||Date.now()}calculateConsumeInterval(e){if(0===this.lastTokenTime){this.lastTokenTime=e;return}let t=e-this.lastTokenTime;if(t<0)return;let r=this.getIntervalKey(t);this.intervalTimes[r]++,this.intervalTotal[r]+=t,this.lastTokenTime=e}getIntervalKey(e){for(let t=0;t<eo.length;t++)if(e<eo[t])return ei[t];return ei[ei.length-1]}resolveFinishFlag(e,t){switch(e){case"closed":this.finishFlag=this.modelError?en:this.isSensitive?"sensitive":"done";break;case"canceled":this.finishFlag="manualStop";break;default:this.modelError||"modelError"===t?this.finishFlag=en:"timeout"===t?this.finishFlag="timeout":this.finishFlag="interrupt"}}reportEnd(e){let t=this.endTime-this.requestStartTime,r=this.connectedTime>0?this.connectedTime-this.requestStartTime:0,s=this.firstTextTime>0?this.firstTextTime-this.connectedTime:0,o=this.lastTextTime>0&&this.firstTextTime>0?this.lastTextTime-this.firstTextTime:0,i=this.firstThinkTime>0?this.firstThinkTime-this.connectedTime:0,n=this.lastThinkTime>0&&this.firstThinkTime>0?this.lastThinkTime-this.firstThinkTime:0,a=this.firstTokenTime>0?this.firstTokenTime-this.requestStartTime:0,l={http_begin_status_code:String(this.httpBeginStatusCode),http_end_status_code:String(this.httpEndStatusCode),model_error:this.modelError,model_error_code:this.modelErrorCode,finish_flag:this.finishFlag,finish_reason:this.finishReason,total_cost_ms:String(t),sse_connect_cost_ms:String(r),ttft_ms:String(a),text_first_cost_ms:String(s),text_total_cost_ms:String(o),think_first_cost_ms:String(i),think_total_cost_ms:String(n),total_bytes:String(this.totalBytes),total_chunks:String(this.totalChunks),completion_tokens:String(this.completionTokens),prompt_tokens:String(this.promptTokens),total_tokens:String(this.totalTokens),text_content_bytes:String(this.textStats.contentBytes),text_content_chars:String(this.textStats.contentChars),text_total_tokens:String(this.textStats.tokens),think_content_bytes:String(this.thinkStats.contentBytes),think_content_chars:String(this.thinkStats.contentChars),think_total_tokens:String(this.thinkStats.tokens),recv_length:String(e.recvLength),origin_length:String(e.originLength)};for(let e of ei)l[`interval_${e}_count`]=String(this.intervalTimes[e]??0),l[`interval_${e}_total_ms`]=String(this.intervalTotal[e]??0);this.logEvent("end",l)}sessionLogFields(e){return{conversation_id:e.id,conversation_request_id:e.conversationRequestId??"",prompt_request_id:e.promptRequestId??"",trace_id:e.traceId??"",message_id:e.messageId??"",model:this.model,agent_name:e.agentName??"unknown",scene:e.scene??"",request_type:this.requestType,report_version:"1",report_source:"agent-cli"}}logEvent(e,t){let r={...this.sessionLogFields(this.sessionData),...t};this.writeFileLog(`[SseMonitor#${this.requestTag}] qua.${e}: ${JSON.stringify(r)}`),this.galileo?.logInfo(`agent.sse.qua.${e}`,{type:"custom_event",name:`agent.sse.qua.${e}`,...r})}writeFileLog(e){this.logger.info(e)}printConsoleEvent(e,t){let r=[`[SseMonitor#${this.requestTag}] ===== qua.${e} =====`];for(let[e,s]of Object.entries(t)){let t=this.getFieldCnName(e);r.push(` ${e}(${t}): ${s}`)}r.push(""),process.stdout.write(r.join("\n")+"\n")}getFieldCnName(e){if(ea[e])return ea[e];let t=e.match(/^interval_(.+)_count$/);if(t){let e=el[t[1]]??t[1];return`${e}\u{533A}\u{95F4}\u{6B21}\u{6570}`}let r=e.match(/^interval_(.+)_total_ms$/);if(r){let e=el[r[1]]??r[1];return`${e}\u{533A}\u{95F4}\u{603B}\u{8017}\u{65F6}(ms)`}return e}};var __decorate=function(e,t,r,s){var o,i=arguments.length,n=i<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(n=(i<3?o(n):i>3?o(t,r,n):o(t,r))||n);return i>3&&n&&Object.defineProperty(t,r,n),n},__metadata=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};let ed=(0,E.promisify)(y.gunzip),ec=12e5,eu=12e5;function resolveTimeoutMs(e,t){if(e){let t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}return t}let eh=500,em=32e3,eg=1,ep=15,e_=3e5,ef=2e3,eE=[b.CONVERSATION_ID_HEADER,b.CONVERSATION_REQUEST_ID_HEADER,b.CONVERSATION_MESSAGE_ID_HEADER,b.PARENT_CONVERSATION_ID_HEADER,b.AGENT_TYPE_HEADER,b.COMPACTION_HEADER,b.CONTEXT_COMPACTED_HEADER,b.REQUEST_ID_HEADER,b.AGENT_INTENT,b.AGENT_PURPOSE,b.IDE_TYPE_HEADER,b.IDE_NAME_HEADER,b.IDE_VERSION_HEADER,b.PRODUCT,b.API_KEY_HEADER,b.PRIVATE_DATA_HEADER];function resolveRequestMaxRetries(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,ep)}return eg}function isRetryWatchdogEnabled(e){if("string"!=typeof e)return!1;let t=e.trim().toLowerCase();return"1"===t||"true"===t||"yes"===t}function resolveModel401MaxRetries(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,ep)}return 0}function resolveModel401RetryDelayMs(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,em)}return ef}function computeRequestRetryDelayMs(e,t,r=em,s=Math.random,o=eh){return null!=t&&t>0?Math.min(t,r):(0,A.Rv)(e,{baseDelayMs:o,maxDelayMs:r,random:s})}let ey=3e5;function resolveRecoveryFirstTokenTimeoutMs(e,t){return Math.min(resolveTimeoutMs(e,ey),t)}function createFirstTokenTimeoutResponse(e){return new Response(new ReadableStream({start(t){t.error(new A.wM(e,0,0,!0))}}),{status:200,headers:{"content-type":"text/event-stream"}})}function readResponseHeader(e,t){if(!e||"object"!=typeof e)return;try{let r=e.get?.(t);if(null!=r)return String(r)}catch{}let r=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase()),s=r?e[r]:void 0;return null==s?void 0:String(s)}function extractMockE2EResponseDiagnostics(e){let t={traceId:readResponseHeader(e,"x-mock-trace-id"),requestId:readResponseHeader(e,"x-mock-request-id"),matchSource:readResponseHeader(e,"x-mock-match-source"),matchResult:readResponseHeader(e,"x-mock-match-result"),offset:readResponseHeader(e,"x-mock-offset"),responseId:readResponseHeader(e,"x-mock-response-id"),finishReason:readResponseHeader(e,"x-mock-finish-reason"),dataVersion:readResponseHeader(e,"x-mock-data-version"),instance:readResponseHeader(e,"x-mock-instance"),contentKind:readResponseHeader(e,"x-mock-content-kind")};return Object.values(t).some(e=>void 0!==e)?t:void 0}function isLoopbackEndpoint(e){if("string"!=typeof e||""===e.trim())return!1;try{let{hostname:t}=new URL(e);return"localhost"===t||"127.0.0.1"===t||"[::1]"===t||"::1"===t||t.endsWith(".localhost")}catch{return!1}}let eT=class{constructor(){this.modelRequestProcessors=[],this.modelCache=new Map}normalizeChatCompletionsUrl(e){let t=e.search(/[?#]/),r=t>=0?e.slice(t):"",s=t>=0?e.slice(0,t):e;for(s=s.replace(/\/+$/,"");s.endsWith("/chat/completions");)s=s.slice(0,-17);return`${s}/chat/completions${r}`}async decodeDebugRequestBody(e){return"string"==typeof e?JSON.parse(e):e instanceof Uint8Array?31===e[0]&&139===e[1]?JSON.parse((await ed(e)).toString("utf-8")):JSON.parse(Buffer.from(e).toString("utf-8")):e}isCustomModelRequest(e,t){let r=e||t?.id;return!!(r?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX)||r?.startsWith("custom:"))||t?.trustLevel===I.ModelTrustLevel.CUSTOM||Array.isArray(t?.tags)&&t.tags.includes(I.MODEL_TAG_CUSTOM)}isLocalCustomModelRequest(e,t){let r=e||t?.id;return!!r?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX)}shouldApplyInternalModelRequestHeaders(e,t){return!!t&&!this.isCustomModelRequest(e,t)}applyCustomPassthroughHeaders(e,t,r,s){let o=t.requestOptions?.customPassthroughHeaders;if(o&&this.shouldApplyInternalModelRequestHeaders(r,s))for(let[t,r]of Object.entries(o))this.setHeaderCaseInsensitive(e,t,r)}isRecord(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}mergeRequestProviderData(e,t){if(!t||!this.isRecord(e))return e;let r=this.isRecord(t.extra_vars)?t.extra_vars:void 0,s=this.isRecord(e.extra_vars)?e.extra_vars:{};return{...e,...t,...r?{extra_vars:{...s,...r}}:{}}}injectRequestExtraFieldsMeta(e,t){let r;if(!this.isRecord(t)||0===Object.keys(t).length||!this.isRecord(e))return!1;let s=e.messages;if(!Array.isArray(s)||0===s.length)return!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(this.isRecord(t)&&"user"===t.role){r=t;break}}if(!r)return!1;let o=this.isRecord(r.extra_fields)?r.extra_fields:{},i=this.isRecord(o._meta)?o._meta:{};return r.extra_fields={...o,_meta:{...i,...t}},!0}resolveRootRequestId(e){let t=e.meta?.rootRequestId;return"string"==typeof t&&t.length>0?t:void 0}resolveParentConversationId(e){let t=e.meta?.parentConversationId;if("string"==typeof t&&0!==t.length&&t!==e.id)return t}applyCompactionHeaders(e,t){t?.kind&&this.setHeaderCaseInsensitive(e,b.COMPACTION_HEADER,t.kind),t?.contextCompacted&&this.setHeaderCaseInsensitive(e,b.CONTEXT_COMPACTED_HEADER,t.contextCompacted)}getHeaderCaseInsensitive(e,t){let r=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase());return r?e[r]:void 0}setHeaderCaseInsensitive(e,t,r){let s=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase());s&&delete e[s],e[t]=r}parseSSEChunk(e,t=!1){let r,s,o,i,n=!1,a=!1,l=!1,d=null,c=!1,u="",h="",m="",g=!1;try{for(let p of e.toString("utf-8").split("\n")){let e=p.trim();if(!e.startsWith("data:"))continue;let _=e.slice(5).trim();if(_&&"[DONE]"!==_)try{let e=JSON.parse(_);if(void 0===s&&"string"==typeof e?.id&&e.id.length>0&&(s=e.id),e?.usage!=null){if(c=!0,"object"==typeof e.usage){let t=e.usage.credit;"number"==typeof t&&Number.isFinite(t)&&t>0&&(r=t)}if(t&&"object"==typeof e.usage){let t=e.usage;o={prompt_tokens:"number"==typeof t.prompt_tokens?t.prompt_tokens:void 0,completion_tokens:"number"==typeof t.completion_tokens?t.completion_tokens:void 0,total_tokens:"number"==typeof t.total_tokens?t.total_tokens:void 0}}if(!i&&"object"==typeof e.usage){let t=e.usage;i={prompt_tokens:"number"==typeof t.prompt_tokens?t.prompt_tokens:void 0,completion_tokens:"number"==typeof t.completion_tokens?t.completion_tokens:void 0,total_tokens:"number"==typeof t.total_tokens?t.total_tokens:void 0}}}let p=e?.choices;if(!Array.isArray(p)||0===p.length)continue;for(let e of p){"string"==typeof e.finish_reason&&""!==e.finish_reason&&(n=!0,d=e.finish_reason);let r=e.delta;if(r){let e="string"==typeof r.content&&r.content.length>0,s="string"==typeof r.reasoning_content&&r.reasoning_content.length>0||"string"==typeof r.reasoning&&r.reasoning.length>0,o=Array.isArray(r.tool_calls)&&r.tool_calls.length>0,i="string"==typeof r.refusal&&r.refusal.length>0;s&&(a=!0),(e||s||o||i)&&(n=!0),(e||o||i)&&(l=!0),t&&e&&(u+=r.content),e&&(h+=r.content),s&&(m+=r.reasoning_content??r.reasoning??""),o&&(g=!0)}}if(n&&l&&d&&c)break}catch{}}}catch{}return{hasContent:n,hasReasoning:a,hasSubstantiveContent:l,finishReason:d,hasUsage:c,credit:r,chunkId:s,usage:o,deltaContent:u.length>0?u:void 0,monitorDelta:h.length>0?h:void 0,monitorReasoning:m.length>0?m:void 0,monitorUsage:i,monitorHasToolCall:g||void 0}}normalizeStreamingToolCallIds(e,t){if(!e.includes("tool_calls"))return e;let r=e.split("\n"),s=!1;for(let e=0;e<r.length;e++){let o=r[e].trim();if(!o.startsWith("data:"))continue;let i=o.slice(5).trimStart();if(i&&"[DONE]"!==i)try{let o=JSON.parse(i),n=o?.choices;if(!Array.isArray(n)||0===n.length)continue;let a=n[0]?.delta;if(!a?.tool_calls||!Array.isArray(a.tool_calls)||0===a.tool_calls.length)continue;let l=!1;for(let e of a.tool_calls)null!=e.id&&"string"==typeof e.id&&""!==e.id&&(t.has(e.id)?"number"==typeof e.index&&(delete e.id,l=!0):t.add(e.id));if(l){let t=r[e].startsWith("data: ")?"data: ":"data:";r[e]=`${t}${JSON.stringify(o)}`,s=!0}}catch{}}return s?r.join("\n"):e}createStreamingTextProcessor(){let e=new f.StringDecoder("utf-8"),t=new TextEncoder,r=new Set;return{process:s=>{let o=e.write(s);return 0===o.length?null:t.encode(this.normalizeStreamingToolCallIds(o,r))},flush:()=>{let r=e.end();return r.length>0?t.encode(r):null}}}parseCustomHeaders(e){if(!e)return{};let t={},r=[];for(let s of(e.includes("\\n")?r.push(...e.split("\\n")):e.includes("\n")?r.push(...e.split("\n")):r.push(e),r)){let e=s.trim();if(!e)continue;let r=e.indexOf(":");if(-1===r)continue;let o=e.substring(0,r).trim(),i=e.substring(r+1).trim();o&&i&&(t[o]=i)}return t}async getCustomHeaders(e){let t;this.logger.setContext("ModelProvider");let r=this.parseCustomHeaders(process.env[z.nW]),s=await this.settingsManager.get("env"),o=this.parseCustomHeaders(s?.[z.nW]),i=await this.settingsManager.get("enableModelOptimization"),n=i?.enabled!==!1;if(void 0===i)try{let e=await this.productManager.waitConfiguration();e.productFeatures?.[I.ProductFeature.DisableYuanbaoChannel]===!0&&(n=!1)}catch{}o[b.PRIVATE_DATA_HEADER]=n?"false":"true";let a={};try{let e=S.Context.getRequest()?.body;if(e?.header){let t=Z.HeaderUtils.convertHeaderArrayToObject(e.header);t&&(a=t)}}catch(e){}let l={};try{let e=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue();e?.requestOptions?.headers?(l=e.requestOptions.headers,this.logger.debug(`[ModelProvider] session headers from session ${e.id}: keys=[${Object.keys(l).join(",")}]`)):this.logger.debug(`[ModelProvider] no session headers for session ${e?.id}`)}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] error reading session headers: ${e}`)}let d={...r,...o,...a,...l,...(0,q.Gp)()?.headers};this.logger.debug(`[ModelProvider] merged headers: keys=[${Object.keys(d).join(",")}]`);let c=this.authenticationManager.currentSessionSubject.getValue(),u=(0,q.Gp)()?.auth;process.env[z.QB]&&this.logger.debug("[ModelProvider] API key disabled via env"),u||process.env[z.QB]||(t=s?.[z.XO]||process.env[z.XO]),u?.method==="api_key"&&(t=u.accessToken);try{if(e.modelId){let r=await this.productManager.waitConfiguration(),s=r.models?.find(t=>t.id===e.modelId);s?.apiKey&&(t=s.apiKey,this.logger.debug(`Using custom API key in headers for model ${e.modelId}`))}}catch(e){}t&&(d[b.API_KEY_HEADER]=t,d[R.HttpHeaders.AUTHORIZATION]=`Bearer ${t}`);let h=c?.account,m=h?.enterpriseId?.trim(),g=(0,v.isPersonalAccount)(h)&&!m;return await Z.IOAUtils.applyIOADefaultHeaders(d,s,{enterpriseId:m,skipDefaultEnterpriseHeaders:g}),d}async enableThinking(e){let t=await this.settingsManager.get("alwaysThinkingEnabled");if(!t)return!1;let r=e??await this.agentManager.getModel((await this.agentManager.getDefault()).name);return!!(t&&r.supportsReasoning)}async injectReasoningSummaryIfNeeded(e,t){return!(!(await this.enableThinking(t)||"string"==typeof e?.reasoning_effort||"string"==typeof e?.reasoning?.effort)||e?.reasoning_summary)&&(e.reasoning_summary="auto",!0)}isConnectionLevelRetryableError(e){return!!e&&void 0===e.response&&(0,k.isOriginReplayRetryable)(e)}applyChatFailoverOrigin(e,t){let r=this.productManager?.configuration?.getValue()||{},s=Z.ProxyUtils.resolveRequestUrl(e.url,e.baseURL||r.endpoint||this.productManager?.getEndpoint()||void 0);if(s&&(0,k.isOriginReplayRetryable)(t)){let t=(0,F.XK)(s,r);if(t){(0,F.eP)(e,s,t),this.logger.info?.("[NetworkFailover] Chat origin switched to backup before retry");return}this.logger.info?.(`[NetworkFailover] Chat origin replay skipped: no backup for ${s}`)}let o=(0,B.pinFailoverChatOrigin)(e.url);o&&o!==e.url&&(e.url=o,this.logger.info?.("[NetworkFailover] Chat origin re-pinned before retry"))}shouldSkipRequestLevelRetryAfterChatOriginReplay(e,t){let r=t?.response?.status;return(408===r||502===r||503===r)&&(!!e?.[F.U$]||(0,F.DZ)((0,F.oh)(e)))}isRequestLevelRetryableError(e,t){if(!e)return!1;let r="number"==typeof e.response?.status?e.response.status:void 0,s=this.parseErrorResponseBody(e),matchesCode=t=>t(e)||!!s&&t(s);return!matchesCode(M.ErrorUtils.isQuotaExhaustedError)&&(429===r?t||matchesCode(M.ErrorUtils.isTransientRateLimitBusinessCode):(0,M.isRequestLevelRetryableStatus)(r))}parseErrorResponseBody(e){let t=e?.response?.data;if(t&&"object"==typeof t&&"function"!=typeof t.pipe)return t;if("string"==typeof t&&""!==t.trim())try{let e=JSON.parse(t);return e&&"object"==typeof e?e:void 0}catch{}}hasChatOriginReplayed(e,t){return!!(e?.[F.U$]||t?.config?.[F.U$])||(0,F.DZ)((0,F.oh)(e))}abortableSleep(e,t){return new Promise((r,s)=>{if(t?.aborted)return void s(Error("Request aborted."));let o=setTimeout(()=>{t?.removeEventListener("abort",onAbort),r()},e);"function"==typeof o.unref&&o.unref();let onAbort=()=>{clearTimeout(o),s(Error("Request aborted."))};t?.addEventListener("abort",onAbort,{once:!0})})}async requestWithConnectionRetry(e,t,r,s,o,i,n=!1,a){let l,d=this.sessionManager?.getCurrent()?.agentPurpose===M.AgentPurpose.ContentSecurityReviewer,c=d?0:A.Q9,u=d?0:resolveRequestMaxRetries(process.env.CODEBUDDY_MAX_RETRIES),h=!d&&isRetryWatchdogEnabled(process.env.CODEBUDDY_RETRY_WATCHDOG),m=d?0:resolveModel401MaxRetries(process.env.CODEBUDDY_MODEL_401_MAX_RETRIES),g=resolveModel401RetryDelayMs(process.env.CODEBUDDY_MODEL_401_RETRY_DELAY_MS),p=0,_=0,f=0,E=0,y=(0,q.Gp)(),T=y?.auth;if(!e?.[F.U$]&&(0,F.DZ)((0,F.oh)(e)))throw(0,F.aD)();for(;;)try{globalThis.__CODEBUDDY_STARTUP_PROFILER__?.markEvent("first-model-request");let t=await es.observeAttempt(i,()=>this.restOperations.request(e));return(0,B.recordFailoverOutcome)(e.url),o?.setAttribute("retry_count",p+_+f+E),t}catch(S){(0,B.recordFailoverOutcome)(e.url,S),e?.[F.U$]||this.applyChatFailoverOrigin(e,S),l=S;let i=e?.signal;if(i?.aborted)break;if(this.isConnectionLevelRetryableError(S)){if(p>=c)break;p+=1;let e=(0,A.xX)(p);o?.addEvent("retry_attempt",{attempt:p,kind:"connection",error_code:String(S?.code??""),error_message:String(S?.message??""),delay_ms:Math.round(e)}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Connection-level failure before response headers, backing off and retrying: agent=${t}, requestId=${r}, code=${S?.code}, message=${S?.message}, attempt=${p}/${c}, delayMs=${Math.round(e)}`),await this.modelRequestRetryPhase.during(a,"network",()=>this.abortableSleep(e,i));continue}let d=await (0,G.Af)(S,i);if("cancelled"===d.state||i?.aborted)break;let R=d.policy;if("forbid-retry"===R){let e=S.response?.status;o?.addEvent("retry_policy",{decision:"forbid",status:"number"==typeof e?e:-1}),this.logger.info?.(`[ModelProvider] Gateway retry_policy forbids retry: agent=${t}, requestId=${r}, status=${e}`);break}if(n&&!s&&0===f&&S.response?.status===401){let t=Object.keys(e.headers??{}).find(e=>"authorization"===e.toLowerCase());if((0,q.Gp)()===y&&T?.refresh&&t&&e.headers[t]===`Bearer ${T.accessToken}`)try{let r=await (0,q.tD)(T.accessToken,i??new AbortController().signal);if(r){e.headers[t]=`Bearer ${r.accessToken}`;let s=Object.keys(e.headers).find(e=>e.toLowerCase()===b.API_KEY_HEADER.toLowerCase());s&&e.headers[s]===T.accessToken&&(e.headers[s]=r.accessToken),f++,o?.addEvent("retry_attempt",{attempt:f,kind:"authentication",status:401});continue}}catch{}}if(E<m&&!s&&S.response?.status===401){E+=1,o?.addEvent("retry_attempt",{attempt:E,kind:"auth-401",status:401,delay_ms:g}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] HTTP 401 before generation, retrying blindly (auth proxy may be rotating its token): agent=${t}, requestId=${r}, attempt=${E}/${m}, delayMs=${g}`),await this.abortableSleep(g,i);continue}if(this.isRequestLevelRetryableError(S,s)){let s="force-retry"===R;if(s?this.hasChatOriginReplayed(e,S):this.shouldSkipRequestLevelRetryAfterChatOriginReplay(e,S)){this.logger.info?.(`[ModelProvider] Skip request-level retry after chat origin replay agent=${t}, requestId=${r}`);break}let n=h&&!s,a=s?A.Q9:u;if(!n&&_>=a)break;_+=1;let l=S?.response?.status,d=S?.response?.headers,c=(0,M.parseRetryAfterMs)(d),m=n?e_:em,g=n?(0,M.parseRateLimitResetMs)(d):null,p=null!=g?Math.min(g,m):computeRequestRetryDelayMs(_,c,m,Math.random,s?A.Kf:eh);o?.addEvent("retry_attempt",{attempt:_,kind:"request",status:"number"==typeof l?l:-1,delay_ms:Math.round(p),...s?{retry_policy:"force"}:{}}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Request-level failure before generation, backing off and retrying: agent=${t}, requestId=${r}, status=${l}, attempt=${_}${n?"(watchdog)":`/${a}`}${s?"(retry_policy)":""}, delayMs=${Math.round(p)}${null!=c?`(retry-after=${c}ms)`:""}${null!=g?`(reset-in=${g}ms)`:""}`),await this.abortableSleep(p,i);continue}break}throw o?.setAttribute("retry_count",p+_+f+E),l}getModelTracer(){return this.traceService?.activeTracer??O.u.getTracer("workbuddy.agent.model")}async runWithGalileoModelRequestSpan(e,t){let{parentContext:r,parentSpanId:s}=this.createOtelParentContextFromTraceHeaders(e.headers),o={"span.type":"model_request","http.method":e.method.toUpperCase(),"http.url":this.sanitizeUrlForTrace(e.url),"model.id":e.model,"agent.name":e.agentName,"request.id":e.requestId,"model.stream":e.isStreamRequest,"conversation.request.id":e.headers[b.CONVERSATION_REQUEST_ID_HEADER]??e.requestId,"workbuddy.session_id":e.headers[b.CONVERSATION_ID_HEADER]??"","workbuddy.prompt_request_id":e.promptRequestId??e.headers[b.CONVERSATION_REQUEST_ID_HEADER]??"","workbuddy.message_id":e.headers[b.CONVERSATION_MESSAGE_ID_HEADER]??"","workbuddy.request_id":e.headers[b.REQUEST_ID_HEADER]??e.requestId};try{let t=new URL(e.url);o["http.target"]=`${t.pathname}${t.search}`,o["net.peer.name"]=t.hostname,t.port&&(o["net.peer.port"]=Number(t.port))}catch{}let i=this.getModelTracer().startSpan("codebuddy_code.model_request",{kind:D.v.CLIENT,attributes:o},r);this.injectOtelSpanHeaders(e.headers,i,s);let n=i.spanContext();return this.logger.info(`[GalileoMVP] model request span started: traceId=${n.traceId}, spanId=${n.spanId}, parentSpanId=${s||""}, requestId=${e.requestId}, url=${this.sanitizeUrlForTrace(e.url)}`),w._.with(O.u.setSpan(r,i),async()=>{try{let e=await t(i),r=e?.status;return"number"==typeof r?(i.setAttribute("http.status_code",r),i.setStatus({code:r>=400?$.s.ERROR:$.s.OK,...r>=400?{message:`HTTP ${r}`}:{}})):i.setStatus({code:$.s.OK}),e}catch(e){throw"number"==typeof e.response?.status&&i.setAttribute("http.status_code",e.response.status),e.code&&i.setAttribute("error.code",String(e.code)),i.recordException(e),i.setStatus({code:$.s.ERROR,message:e.message}),e}finally{i.end()}})}createOtelParentContextFromTraceHeaders(e){let t=this.getHeaderCaseInsensitive(e,"b3"),r=t?.split("-")??[],s=this.getHeaderCaseInsensitive(e,"x-b3-traceid")||this.getHeaderCaseInsensitive(e,"x-trace-id")||r[0],o=this.getHeaderCaseInsensitive(e,"x-b3-spanid")||r[1],i=this.getHeaderCaseInsensitive(e,"x-b3-sampled")||r[2];return s&&o&&/^[0-9a-f]{32}$/i.test(s)&&/^[0-9a-f]{16}$/i.test(o)&&"00000000000000000000000000000000"!==s?{parentContext:O.u.setSpanContext(L.l,{traceId:s.toLowerCase(),spanId:o.toLowerCase(),traceFlags:"0"===i||"false"===i?U.X.NONE:U.X.SAMPLED,isRemote:!0}),parentSpanId:o.toLowerCase()}:{parentContext:w._.active()}}createModelStreamSpan(e,t,r,s,o){let i,n=!1;try{let{parentContext:n}=this.createOtelParentContextFromTraceHeaders(e);i=this.getModelTracer().startSpan(C.SPAN_NAME_MODEL_STREAM,{kind:D.v.CLIENT,attributes:{[C.MODEL_STREAM_ATTRS.SPAN_TYPE]:C.SPAN_TYPE_MODEL_STREAM,"model.id":t,"agent.name":r,"request.id":s,"conversation.request.id":e[b.CONVERSATION_REQUEST_ID_HEADER]??s,"workbuddy.session_id":e[b.CONVERSATION_ID_HEADER]??"","workbuddy.prompt_request_id":o??e[b.CONVERSATION_REQUEST_ID_HEADER]??"","workbuddy.message_id":e[b.CONVERSATION_MESSAGE_ID_HEADER]??"","workbuddy.request_id":e[b.REQUEST_ID_HEADER]??s}},n)}catch(e){this.logger.info(`[ModelProvider] model_stream span start failed: ${e}`)}return{span:i,endSpan:(e,t,r)=>{i&&!n&&(n=!0,i.setAttribute(C.MODEL_STREAM_ATTRS.CHUNK_COUNT,e.chunkCount),i.setAttribute(C.MODEL_STREAM_ATTRS.TOTAL_BYTES,e.totalBytes),i.setAttribute("stream.status",t),i.setAttribute("workbuddy.stop_reason",r?.message??t),"error"===t?(r&&i.recordException(r),i.setStatus({code:$.s.ERROR,message:r?.message})):"ok"===t?i.setStatus({code:$.s.OK}):i.addEvent("aborted"),i.end())}}}writeGenAiRequestAttrs(e,t){if(!t||"object"!=typeof t)return;let j=e=>{try{return"string"==typeof e?e:JSON.stringify(e)}catch{return""}},clip=(e,t)=>(0,M.truncateAndCopyString)(e,t),r=(0,C.readOtelLoggingFlags)().logUserPrompts,s={};if("number"==typeof t.temperature&&(s.temperature=t.temperature,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_TEMPERATURE,t.temperature)),"number"==typeof t.top_p&&(s.top_p=t.top_p,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_TOP_P,t.top_p)),"number"==typeof t.max_tokens&&(s.max_tokens=t.max_tokens,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_MAX_TOKENS,t.max_tokens)),void 0!==t.max_completion_tokens&&(s.max_completion_tokens=t.max_completion_tokens),void 0!==t.frequency_penalty&&(s.frequency_penalty=t.frequency_penalty),void 0!==t.presence_penalty&&(s.presence_penalty=t.presence_penalty),void 0!==t.stream&&(s.stream=t.stream),Object.keys(s).length>0&&e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_PARAMETERS,j(s)),Array.isArray(t.messages)&&t.messages.length>0){let s=t.messages,o=j(s);o&&(e.setAttribute(C.LLM_SOURCE_ATTRS.INPUT_MESSAGES,clip(o,C.LLM_SOURCE_VALUE_MAX_SIZE)),o.length>C.LLM_SOURCE_VALUE_MAX_SIZE&&e.setAttribute(C.LLM_SOURCE_ATTRS.INPUT_TRUNCATED,!0)),e.setAttribute(C.LLM_SOURCE_ATTRS.PROMPT_COUNT,s.length);let i=Math.min(s.length,C.MAX_PROMPT_MESSAGES);for(let t=0;t<i;t++){let o=s[t];if(o&&"object"==typeof o){if(o.role&&e.setAttribute(C.LLM_PROMPT_KEYS.role(t),String(o.role)),o.tool_call_id&&e.setAttribute(C.LLM_PROMPT_KEYS.toolCallId(t),String(o.tool_call_id)),Array.isArray(o.tool_calls)&&o.tool_calls.length>0){e.setAttribute(C.LLM_PROMPT_KEYS.toolCallCount(t),o.tool_calls.length);for(let s=0;s<o.tool_calls.length;s++){let i=o.tool_calls[s];if(!i||"object"!=typeof i)continue;let n=C.LLM_PROMPT_KEYS.toolCall(t,s),a=i.function??{};i.id&&e.setAttribute(n.id,String(i.id)),a.name&&e.setAttribute(n.name,String(a.name)),r&&void 0!==a.arguments&&e.setAttribute(n.arguments,clip(j(a.arguments),C.LLM_SOURCE_PROMPT_VALUE_MAX_SIZE))}}if(r&&void 0!==o.content){let r=j(o.content);r&&e.setAttribute(C.LLM_PROMPT_KEYS.content(t),clip(r,C.LLM_SOURCE_PROMPT_VALUE_MAX_SIZE))}}}}}injectOtelSpanHeaders(e,t,r){let s=t.spanContext(),o=(s.traceFlags&U.X.SAMPLED)===U.X.SAMPLED;this.setHeaderCaseInsensitive(e,"traceparent",`00-${s.traceId}-${s.spanId}-${o?"01":"00"}`),this.setHeaderCaseInsensitive(e,"b3",`${s.traceId}-${s.spanId}-${o?"1":"0"}${r?`-${r}`:""}`),this.setHeaderCaseInsensitive(e,"X-B3-TraceId",s.traceId),r&&this.setHeaderCaseInsensitive(e,"X-B3-ParentSpanId",r),this.setHeaderCaseInsensitive(e,"X-B3-SpanId",s.spanId),this.setHeaderCaseInsensitive(e,"X-B3-Sampled",o?"1":"0"),this.setHeaderCaseInsensitive(e,"X-Trace-ID",s.traceId)}sanitizeUrlForTrace(e){return e.replace(/([?&])(key|token|api_key|apikey|secret|password)=[^&]*/gi,"$1$2=***")}axiosToFetchAdapter(){return async(e,t)=>{let r,s,o,i,n,a,l,d="string"==typeof e?e:e.url,c=t?.method||"GET",u=t?.headers,h=t?.body,m=Date.now(),g={};if(u)if(u instanceof Headers)g={},u.forEach((e,t)=>{g[t]=e});else if(Array.isArray(u))for(let[e,t]of(g={},u))g[e]=t;else g={...u};let p=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue(),_=p.abortSignal,f=!!_?.aborted,E=ee.h.getStore(),y=E?.messageId??(0,P.nH)().replace(/-/g,""),T=E?E.conversationRequestId:(0,M.getEffectiveConversationRequestId)(p),S=E?E.purpose:(0,M.getEffectiveAgentPurpose)(p);p.messageId=y,g[b.CONVERSATION_ID_HEADER]=p.id,g[b.CONVERSATION_REQUEST_ID_HEADER]=T||"",g[b.CONVERSATION_MESSAGE_ID_HEADER]=p.messageId,g[b.REQUEST_ID_HEADER]=p.messageId,g[b.AGENT_INTENT]=p.meta?.["codebuddy.ai/mode"]??"craft",process.env.PERSONAL_AGENT_ROLE?g[b.AGENT_PURPOSE]="person_agent":S&&(g[b.AGENT_PURPOSE]=S);let k=p.telemetryClientInfo;if(!k?.ideType||!k.ideName||!k.ideVersion){let e=await this.clientInfoProvider.get();s=e.ideType,o=e.platform,i=e.platformVersion}g[b.IDE_TYPE_HEADER]=k?.ideType||s||N.Vo,g[b.IDE_NAME_HEADER]=k?.ideName||o||"",g[b.IDE_VERSION_HEADER]=k?.ideVersion||i||"0.0.0";let O=null,D=!1;if(h&&"string"==typeof h)try{O=JSON.parse(h)}catch{}else h&&"object"==typeof h&&(O=h);if(O?.model&&(n=O.model),n)try{let e=await this.productManager.waitConfiguration();if(a=e.models?.find(e=>e.id===n),a?.url)if(a.useCustomProtocol)d=a.url,this.logger.info(`Using custom URL for model ${n}: ${d} (useCustomProtocol=true, URL passthrough)`);else{let e=this.isCustomModelRequest(n,a);d=e?this.normalizeChatCompletionsUrl(a.url):a.url,this.logger.info(`Using custom URL for model ${n}: ${d}(raw:${a?.url})${e?" (custom model, ensured /chat/completions)":""}`)}}catch(e){}let w=!this.isCustomModelRequest(n,a)||process.env[z.qL]===V.pg.Selfhosted,$=p.requestOptions?.providerData;if($&&w){let e=this.mergeRequestProviderData(O,$);e!==O&&(O=e,D=!0)}let L=p.requestOptions?.requestExtraFieldsMeta;if(L&&w&&this.injectRequestExtraFieldsMeta(O,L)&&(D=!0),!a?.useCustomProtocol&&/\/chat\/completions(?:[/?#]|$)/.test(d)){let e=this.normalizeChatCompletionsUrl(d);e!==d&&(this.logger.info(`Normalized duplicated /chat/completions in URL: ${d} -> ${e}`),d=e)}for(let[e,t]of Object.entries(await this.getCustomHeaders({modelId:n||""})))this.setHeaderCaseInsensitive(g,e,t);delete g.authorization,delete g["user-agent"];let U=(0,q.Gp)();for(let[e,t]of(U?.auth?.accessToken&&!Object.keys(g).some(e=>"authorization"===e.toLowerCase())&&(g[R.HttpHeaders.AUTHORIZATION]=`Bearer ${U.auth.accessToken}`),Object.entries((0,q.I2)())))Object.keys(g).some(t=>t.toLowerCase()===e.toLowerCase())||(g[e]=t);if(this.isCustomModelRequest(n,a)){let e=Object.keys(g).find(e=>e.toLowerCase()===b.PRIVATE_DATA_HEADER.toLowerCase());e&&delete g[e]}let H=this.agentManager.getVolatilePluginAgentState().internalModelRequestHeaders;if(H&&this.shouldApplyInternalModelRequestHeaders(n,a))for(let[e,t]of Object.entries(H))this.setHeaderCaseInsensitive(g,e,t);this.applyCustomPassthroughHeaders(g,p,n,a),this.setHeaderCaseInsensitive(g,b.REQUEST_ID_HEADER,y),this.setHeaderCaseInsensitive(g,b.CONVERSATION_MESSAGE_ID_HEADER,y),this.setHeaderCaseInsensitive(g,b.CONVERSATION_REQUEST_ID_HEADER,T||"");let x=this.resolveRootRequestId(p);x&&this.setHeaderCaseInsensitive(g,b.ROOT_REQUEST_ID_HEADER,x);let F=this.resolveParentConversationId(p);F&&this.setHeaderCaseInsensitive(g,b.PARENT_CONVERSATION_ID_HEADER,F),this.setHeaderCaseInsensitive(g,b.AGENT_TYPE_HEADER,E?.agentType??(0,M.resolveModelCallAgentType)(p)),this.applyCompactionHeaders(g,E?.compaction);let G=await this.settingsManager.get("env"),Q=!!(G?.[z.hv]||process.env[z.hv]);if(Q)for(let e of(g[v.HTTP_HEADER_SKIP_AUTH_INTERCEPTOR]="1",[...eE,...Object.keys(H??{})]))delete g[e];if(O&&await this.injectReasoningSummaryIfNeeded(O,a)&&(D=!0),O&&n){let e=(0,I.stripCustomLocalModelPrefix)(n);e!==n&&O.model===n&&(O.model=e,D=!0)}if(O&&a?.tags?.includes("custom")&&!1===a.supportsImages&&Array.isArray(O.messages)){let e=!1;for(let t of O.messages)if(Array.isArray(t.content)){let r=t.content.filter(e=>"text"===e.type).map(e=>e.text);t.content=r.join("\n"),e=!0}e&&(D=!0,this.logger.debug(`Flattened array content to string for custom model ${n}`))}if(O&&this.isCustomModelRequest(n,a)&&a?.supportsToolCall===!1){let e=await this.productManager.waitConfiguration();e.productFeatures?.[I.ProductFeature.SkipToolCallSupportCheck]!==!0&&(void 0!==O.tools||void 0!==O.tool_choice)&&(delete O.tools,delete O.tool_choice,D=!0,this.logger.info(`Stripped tools/tool_choice from request body (model ${n} does not support tool calls)`))}D&&O&&"string"==typeof h&&(h=JSON.stringify(O));let Y={url:d,method:c,headers:g,data:h,signal:t?.signal||void 0,modelId:n,maxBodyLength:1/0,maxContentLength:1/0};for(let e of[...this.modelRequestProcessors].sort((e,t)=>(e.priority??1e3)-(t.priority??1e3)))await e.process(Y);if(Q){let e=new Set([...eE,...Object.keys(H??{}),v.HTTP_HEADER_SKIP_AUTH_INTERCEPTOR,"X-User-Id","X-Enterprise-Id","X-Department-Info","X-Tenant-Id","X-Domain","User-Agent","X-Requested-With"].map(e=>e.toLowerCase())),t=["x-stainless-"],r=Y.transformRequest;Y.transformRequest=[...Array.isArray(r)?r:r?[r]:[],(r,s)=>{if(!s)return r;let o=new Set(["common","delete","get","head","post","put","patch"]);for(let r of Object.keys(s)){if(o.has(r))continue;let i=r.toLowerCase();if(e.has(i)){delete s[r];continue}t.some(e=>i.startsWith(e))&&delete s[r]}return r}]}let K="text/event-stream"===g.Accept||"text/event-stream"===g.accept||d.includes("stream=true")||"string"==typeof h&&h.includes('"stream":true');K&&(Y.responseType="stream");let X=this.getHeaderCaseInsensitive(g,b.REQUEST_ID_HEADER)||"unknown",W=this.telemetryService.reportMessageSendTelemetry(g,O??h,K,p),J=p.agentName||"unknown",Z=n||O?.model||"unknown",et=Date.now(),er=K&&(0,M.consumeRecoveryRequestPending)(p),eo=resolveTimeoutMs(process.env.CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS,ec),ei=er?resolveRecoveryFirstTokenTimeoutMs(process.env.CODEBUDDY_RECOVERY_FIRST_TOKEN_TIMEOUT_MS,eo):eo,en=!1;if(er){let e=new AbortController;t?.signal&&(0,A.wp)(t.signal,e),"function"==typeof(l=setTimeout(()=>{en=!0,e.abort()},Math.max(0,ei-(Date.now()-et)))).unref&&l.unref(),Y.signal=e.signal,this.logger.info(`[ModelProvider] Recovery request: first-token deadline=${ei}ms covers response headers and first token, agent=${J}, requestId=${X}`)}let clearRecoveryDeadline=()=>{l&&(clearTimeout(l),l=void 0)};f=f||!!_?.aborted,K&&(r=new SseStreamMonitorImpl({sessionData:SseMonitorSessionData(p,{agentPurpose:S,conversationRequestId:T,messageId:y}),model:Z,abortSignal:_},this.galileoService,this.logger)),this.galileoTimingHook?.reportPromptBuild(et-m,{model:Z,agentName:J});let ea=Y.url?.replace(/([?&])(key|token|api_key|apikey|secret|password)=[^&]*/gi,"$1$2=***");if(this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Sending request: agent=${J}, model=${Z}, requestId=${X}, stream=${K}, url=${ea}`),p.promptReceivedAt&&!p.firstModelRequestTimingReported){p.firstModelRequestTimingReported=!0;let e=p.promptSeq??0,t=Date.now(),r=t-p.promptReceivedAt,s=p.runnerStartedAt?t-p.runnerStartedAt:-1,o=1===e?"first":`n=${e}`;this.logger.info(`[ModelProvider] message-to-model-request latency: ${r}ms (sinceRunnerStart=${s}ms, promptSeq=${e}, kind=${o}, agent=${J}, model=${Z}, sessionId=${p.id})`)}if("function"==typeof this.logger.debug)try{let e=Array.isArray(O?.tools)?O.tools:void 0,t=e?e.map(e=>e?.function?.name??e?.name).filter(Boolean):void 0;this.logger.debug(`[ModelProvider][toolsInBody] requestId=${X} model=${Z} `+(t?`toolCount=${t.length} tools=[${t.join(",")}]`:"tools=<none in body>"))}catch{}process.env.CODEBUDDY_DEBUG_REQUEST&&(async()=>{try{let{messages:e,...t}=await this.decodeDebugRequestBody(Y.data)||{};if(this.logger.info(`[ModelProvider] Request body (no messages): ${JSON.stringify(t)}`),e)for(let t=0;t<e.length;t++){let r=e[t],s=JSON.stringify(r).slice(0,500);this.logger.info(`[ModelProvider] messages[${t}]: ${s}`)}}catch{}})().catch(()=>{});let el=this.isCustomModelRequest(n,a),ed=!!(G?.[z.a1]||process.env[z.a1]),eh=!el&&!a?.useCustomProtocol&&!ed&&/\/v2\/chat\/completions(?:[/?#]|$)/.test(String(Y.url??"")),em=es.begin(K&&eh);if(eh){let e=(0,B.pinFailoverChatOrigin)(Y.url);e!==Y.url&&(Y.url=e,this.logger.info("[NetworkFailover] Chat origin pinned before send"))}try{let e={...g},s=await this.runWithGalileoModelRequestSpan({url:Y.url,method:c,headers:Y.headers,model:Z,agentName:J,requestId:X,isStreamRequest:K,promptRequestId:p.promptRequestId},e=>this.requestWithConnectionRetry(Y,J,X,el,e,em,eh&&!a?.apiKey,p));clearRecoveryDeadline();let o=extractMockE2EResponseDiagnostics(s.headers);if(o&&this.logger.info(`[MockE2E][response] ${JSON.stringify({sessionId:p.id,promptRequestId:p.promptRequestId,conversationRequestId:p.conversationRequestId,modelRequestId:X,model:Z,httpStatus:s.status,...o})}`),p.conversationRequestId&&await this.telemetryService.flushPendingGrowthTelemetry(p,p.conversationRequestId),K||await this.telemetryService.reportMessageResponseTelemetryNonStream(p,W,s,!0),r?.onStreamOpen(p.traceId??"",s.status),!K||!s.data||"function"!=typeof s.data.pipe)return r?.onStreamEnd("error",{aborted:f}),new Response("string"==typeof s.data?s.data:JSON.stringify(s.data),{status:s.status,statusText:s.statusText,headers:s.headers});{let o,i,a,l=t?.signal,isUserAbort=()=>!!_?.aborted,c=s.data,u=!1,h=0,m=0,g=Date.now(),f=!1,{span:E,endSpan:R}=this.createModelStreamSpan(e,Z,J,X,p.promptRequestId),S=(0,C.shouldEmitGenAiSourceAttrs)(),v=[],b=0,k=!1,D=!1;if(S&&E)try{this.writeGenAiRequestAttrs(E,O)}catch(e){this.logger.info(`[ModelProvider] gen_ai request attrs write failed: ${e}`)}let w=resolveTimeoutMs(process.env.CODEBUDDY_STREAM_TIMEOUT_MS,eu),$=(a=parseInt(process.env.CODEBUDDY_REASONING_KEEPALIVE_INTERVAL_MS??"",10),Number.isFinite(a)&&a>0?a:0),L=null,U=null,P=null,q=null,N=null,H=this.createStreamingTextProcessor(),x=0,F=0,B=0,G=0,Q=0,V=!1,Y=!1,K=null,W=!1,z=O?.stream_options?.include_usage===!0,ee=!1,startStreamMonitor=()=>{!U&&(this.logger.info(`[ModelProvider] Stream idle monitor armed: agent=${J}, requestId=${X}, streamIdleTimeoutMs=${w}`),(U=setInterval(()=>{if(f||u){U&&(clearInterval(U),U=null);return}B++;let e=Date.now(),t=e-g;if(c.isPaused?.()&&c.resume(),B%10==0){let r=h-x,s=m-F;if(r>0){let o=e-et;this.logger.info(`[ModelProvider] Stream progress: agent=${J}, requestId=${X}, chunks=${h}(+${r}), bytes=${m}(+${s}), elapsed=${o}ms, idle=${t}ms`),E?.addEvent(C.MODEL_STREAM_EVENT_CHUNK_PROGRESS,{chunks:r,bytes:s,elapsed_ms:o}),x=h,F=m}}if($>0&&V&&!ee&&!Y&&!f&&!u&&h>Q&&e-(G||et)>=$){G=e,Q=h;try{p.combineSubject.next({type:"notice",notice:{kind:"reasoning_in_progress",elapsedMs:e-et,chunkCount:h,bytes:m}})}catch{}}if(t>=w){if(Y)this.logger.info(`[ModelProvider] Graceful close: finish_reason already received, stream idle for ${w}ms, agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}`),gracefulCloseStream();else if(this.logger.error(`[cbc-kw=MODEL_REQUEST] Stream timeout: no data received for ${w}ms, agent=${J}, requestId=${X}, chunkCount=${h}, totalBytes=${m}`),clearAllTimers(),f=!0,u=!0,R({chunkCount:h,totalBytes:m},"error",Error(`Stream timeout after ${w}ms idle`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),L)try{L.error(new A.wM(w,h,m))}catch{}}},1e3))&&"function"==typeof U.unref&&U.unref())},clearFirstTokenTimer=()=>{P&&(clearTimeout(P),P=null)},clearAllTimers=()=>{clearFirstTokenTimer(),U&&(clearInterval(U),U=null),q&&(clearTimeout(q),q=null),N&&l&&(l.removeEventListener("abort",N),N=null)},cancelLocalModelGeneration=()=>{if(n?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX))try{let e=new URL(d).origin,t=`${e}/v1/chat/completions/control`;this.logger.info(`[LocalModel] cancel: POST ${t} model=${n} chunks=${h}`),fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stop"}),signal:AbortSignal.timeout(2e3)}).then(e=>this.logger.info(`[LocalModel] cancel response status=${e.status}`),e=>this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel failed: ${e?.message}`))}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel setup error: ${e?.message}`)}},destroyLocalModelSocket=()=>{if(n?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX))try{let e=c.socket;e?e.destroyed?this.logger.info("[LocalModel] cancel: socket already destroyed"):(e.destroy(),this.logger.info("[LocalModel] cancel: TCP socket destroyed")):this.logger.info("[LocalModel] cancel: socket unavailable")}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel: socket destroy failed: ${e?.message}`)}},gracefulCloseStream=()=>{if(!f&&(f=!0,clearAllTimers(),r?.onStreamEnd("closed",{recvLength:m,originLength:m,aborted:isUserAbort()}),R({chunkCount:h,totalBytes:m},"ok"),c.destroy(),L))try{let e=H.flush();e&&L.enqueue(e),L.close()}catch{}},startFinishReasonGraceTimer=e=>{!q&&!f&&!u&&(this.logger.info(`[ModelProvider] finish_reason="${e}" received, starting grace period: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-et}ms`),(q=setTimeout(()=>{f||u||(this.logger.info(`[ModelProvider] Graceful close after finish_reason: stream idle for 5000ms after finish_reason, agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}`),gracefulCloseStream())},5e3))&&"function"==typeof q.unref&&q.unref())},er=new ReadableStream({start:e=>{L=e;let publishDiscardedStreamCredit=e=>{let t=p.combineSubject;!t||e<=0||(t.next({type:"model",data:{type:"model",event:{usage:{credit:e}},...y?{providerData:{messageId:y}}:{}}}),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Forwarded discarded empty-stream credit: agent=${J}, requestId=${X}, messageId=${y??"unknown"}, credit=${e}`))},failEmptyStream=(e,t)=>{if(!f&&(f=!0,u=!0,o=void 0,clearAllTimers(),"number"==typeof t&&t>0&&publishDiscardedStreamCredit(t),R({chunkCount:h,totalBytes:m},"error",Error("finish_reason=error with no model output")),r?.onModelError("finish_reason=error with no model output","error"),c.destroy(),L))try{L.error(new A.mY(h,m,e,Date.now()-et))}catch{}};{let e=Date.now()-et,t=Math.max(ei-e,0);if(0===t){if(this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout: HTTP response headers took ${e}ms (exceeds ${ei}ms threshold)`),f=!0,u=!0,R({chunkCount:h,totalBytes:m},"error",Error(`First token timeout after ${ei}ms`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),L)try{L.error(new A.wM(ei,h,m,!0))}catch{}}else(P=setTimeout(()=>{if(!V&&!f&&!u){let e=Date.now()-et;if(this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout: no meaningful model output received for ${e}ms (threshold=${ei}ms, received ${h} raw chunks, ${m} bytes)`),f=!0,u=!0,R({chunkCount:h,totalBytes:m},"error",Error(`First token timeout after ${ei}ms`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),L)try{L.error(new A.wM(ei,h,m,!0))}catch{}}},t))&&"function"==typeof P.unref&&P.unref()}c.on("data",t=>{if(h++,m+=t.length,g=Date.now(),r?.onChunk(t),1===h&&this.logger.info(`[ModelProvider] First raw chunk received: agent=${J}, requestId=${X}, elapsed=${Date.now()-et}ms, bytes=${t.length}`),S&&!D&&t.includes('"usage"'))try{let e=this.parseSSEChunk(t,!0).usage;e&&(D=!0,"number"==typeof e.prompt_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_PROMPT_TOKENS,e.prompt_tokens),"number"==typeof e.completion_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_COMPLETION_TOKENS,e.completion_tokens),"number"==typeof e.total_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_TOTAL_TOKENS,e.total_tokens))}catch(e){this.logger.info(`[ModelProvider] gen_ai usage capture failed: ${e}`)}if(!V||!Y||!ee||Y&&z&&!W){let e=this.parseSSEChunk(t,S);if(o){e.credit&&(i=e.credit),(e.hasUsage||e.credit)&&(W=!0,failEmptyStream(o,i));return}if(r?.onParsedChunk({deltaContent:e.monitorDelta,deltaReasoning:e.monitorReasoning,usage:e.monitorUsage,finishReason:e.finishReason,hasToolCall:e.monitorHasToolCall}),S&&e.deltaContent&&!k&&(v.push(e.deltaContent),(b+=e.deltaContent.length)>=C.LLM_SOURCE_VALUE_MAX_SIZE&&(k=!0)),p.telemetry&&!p.telemetry.chunkId&&e.chunkId&&(p.telemetry.chunkId=e.chunkId),!W&&e.hasUsage&&(W=!0,Y&&K&&startFinishReasonGraceTimer(K)),!Y&&"error"===e.finishReason&&!ee&&!e.hasSubstantiveContent){Y=!0,K=e.finishReason;let t=V||e.hasReasoning?"reasoning-only":"no-token";if(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] finish_reason="error" with no substantive model output (${t}), treating as retryable empty stream: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-et}ms`),e.credit&&(i=e.credit),!e.hasUsage){o=t,q||(q=setTimeout(()=>{failEmptyStream(t,i)},5e3),"function"==typeof q.unref&&q.unref()),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Waiting for usage tail before empty-stream abort: agent=${J}, requestId=${X}`);return}failEmptyStream(t,i);return}if(!ee&&e.hasSubstantiveContent&&(ee=!0),!V&&e.hasContent){V=!0,es.markCommitReached(em);let e=Date.now()-et;if(p.telemetry&&(p.telemetry.firstTokenAt=et+e),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] First meaningful token received: agent=${J}, requestId=${X}, ttft=${e}ms, rawChunks=${h}, bytes=${m}`),this.galileoTimingHook?.reportTTFB(e,{model:Z,requestId:X,agentName:J,conversationRequestId:T,messageId:y,promptRequestId:p.promptRequestId}),E?.setAttribute(C.MODEL_STREAM_ATTRS.FIRST_TOKEN_MS,e),E?.addEvent(C.MODEL_STREAM_EVENT_FIRST_TOKEN,{ttft_ms:e,chunk_count:h,bytes:m}),p.telemetry&&!p.telemetry.messageTtfbReported){let e=p.telemetry.firstTokenAt,t=p.meta?.["codebuddy.ai/mode"]??"",r={messageId:y,promptRequestId:p.promptRequestId,conversationRequestId:T,model:Z,agentName:J,scene:t};if(p.telemetry.clientSendTime){let t=e-p.telemetry.clientSendTime;if(t>0&&t<=6e5&&(this.galileoTimingHook?.reportMessageTTFBUser(t,r),S))try{p.conversationRequestRootSpan?.setAttributes({[C.LLM_SOURCE_ATTRS.USER_FIRST_TOKEN_MS]:t})}catch{}}if(p.telemetry.promptStartTime){let t=e-p.telemetry.promptStartTime;t>0&&t<=6e5&&this.galileoTimingHook?.reportMessageTTFBModel(t,r)}p.telemetry.messageTtfbReported=!0}clearFirstTokenTimer(),startStreamMonitor()}if(!Y&&e.finishReason){if(Y=!0,K=e.finishReason,S&&v.length>0){let e=v.join("");if(e){let t=k||e.length>C.LLM_SOURCE_VALUE_MAX_SIZE,r=(0,M.truncateAndCopyString)(e,C.LLM_SOURCE_VALUE_MAX_SIZE);E?.setAttribute(C.LLM_SOURCE_ATTRS.OUTPUT_CONTENT,r),E?.setAttribute(C.LLM_SOURCE_ATTRS.COMPLETION_0_ROLE,"assistant"),E?.setAttribute(C.LLM_SOURCE_ATTRS.COMPLETION_0_CONTENT,r),t&&E?.setAttribute(C.LLM_SOURCE_ATTRS.OUTPUT_TRUNCATED,!0)}}!z||W?startFinishReasonGraceTimer(e.finishReason):this.logger.info(`[ModelProvider] finish_reason="${e.finishReason}" received, waiting for usage tail: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-et}ms`)}}if(!u&&!o){let r=H.process(t);r&&e.enqueue(r)}}),c.on("end",()=>{if(o)return void failEmptyStream(o,i);if(f||u)return;f=!0,clearAllTimers();let t=Date.now()-et;if(this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream completed: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}, elapsed=${t}ms`),R({chunkCount:h,totalBytes:m},"ok"),r?.onStreamEnd("closed",{recvLength:m,originLength:m,aborted:isUserAbort()}),V&&this.galileoTimingHook?.reportModelStreaming(t,{model:Z,agentName:J,conversationRequestId:T}),this.galileoTimingHook?.reportRequestResult(0,void 0,Z,void 0,T,void 0,p.id),!u){let t=H.flush();if(t)try{e.enqueue(t)}catch{}e.close()}}),c.on("error",t=>{if(o&&!isUserAbort())return void failEmptyStream(o,i);if(f||u)return;f=!0,clearAllTimers();let s=Date.now()-et;this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream error: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}, elapsed=${s}ms, error=${t.message}`),R({chunkCount:h,totalBytes:m},"error",t),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort()}),this.galileoTimingHook?.reportRequestResult(-1,"STREAM_ERROR",Z,t.message,T,void 0,p.id),u||e.error(t)}),c.on("close",()=>{if(o&&!isUserAbort())return void failEmptyStream(o,i);if(!f){if(Y)this.logger.info(`[ModelProvider] Stream closed after finish_reason received, treating as completed: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}`),gracefulCloseStream();else if(f=!0,clearAllTimers(),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort()}),R({chunkCount:h,totalBytes:m},"error",Error("Stream closed unexpectedly")),!u&&L)try{0===h?(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream closed before first chunk: agent=${J}, requestId=${X}`),e.error(Error("Stream closed before receiving any data"))):V?(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream closed unexpectedly: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}`),e.error(Error(`Stream closed unexpectedly after receiving ${h} chunks (${m} bytes)`))):(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Empty stream: only placeholder chunks received before close: agent=${J}, requestId=${X}, chunks=${h}, bytes=${m}`),e.error(new A.mY(h,m,"placeholder",Date.now()-et)))}catch{}}}),l&&(N=()=>{f=!0,clearAllTimers(),u=!0,R({chunkCount:h,totalBytes:m},"aborted"),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort(),errorReason:"timeout"}),cancelLocalModelGeneration(),c.destroy(),destroyLocalModelSocket();try{e.close()}catch{}},l.aborted?N():l.addEventListener("abort",N,{once:!0}))},cancel:()=>{f=!0,clearAllTimers(),u=!0,R({chunkCount:h,totalBytes:m},"aborted"),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort(),errorReason:l?.aborted?"timeout":void 0}),cancelLocalModelGeneration(),c.destroy(),destroyLocalModelSocket()}});return new Response(er,{status:s.status,statusText:s.statusText,headers:s.headers})}}catch(s){let e;clearRecoveryDeadline();try{this.logger.error(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Request failed: agent=${J}, requestId=${X}, error=${s?.message}`),this.logger.error(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Error response: status=${s.response?.status}, code=${s?.code}, message=${s?.message}`),this.telemetryService.reportMessageResponseTelemetryStream(p,void 0,void 0,s);let o=s.response?.status??s.status??-2,i=s?.code??`HTTP_${o}`;if(this.galileoTimingHook?.reportRequestResult(o,i,Z,s?.message?(0,M.truncateAndCopyString)(s.message,500):void 0,T,void 0,p.id),r?.setHttpEndStatus(o),f=f||!!_?.aborted,en&&!f)return this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout (recovery request): no response headers within ${ei}ms, agent=${J}, requestId=${X}`),r?.onStreamEnd("error",{aborted:!1,errorReason:"timeout"}),createFirstTokenTimeoutResponse(ei);return r?.onStreamEnd("error",{aborted:f,errorReason:t?.signal?.aborted?"timeout":void 0}),await Promise.race([this.modelErrorAnalyzer.analyze(s,Y),new Promise((t,r)=>{e=setTimeout(()=>r(),5e3)})])}catch{return f=f||!!_?.aborted,r?.onStreamEnd("error",{aborted:f,errorReason:t?.signal?.aborted?"timeout":void 0}),this.modelErrorAnalyzer.createErrorResponse(s?.message||"Unknown error",400,"Client Error")}finally{clearTimeout(e)}}}}async createClient(e,t){if(!t)throw this.authenticationManager.currentSessionSubject.next(void 0),new A.WT;try{let{OpenAI:s}=await r.e("3043").then(r.bind(r,73502));return new s(this.buildOpenAIClientOptions(e,t))}catch(e){if(e.message&&e.message.includes("OPENAI_API_KEY"))throw new A.iN;throw e}}buildOpenAIClientOptions(e,t){return{baseURL:e,apiKey:t,fetch:this.axiosToFetchAdapter(),maxRetries:0,timeout:this.resolveRequestTimeoutMs()}}resolveRequestTimeoutMs(){let e=process.env.CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS;if(e){let t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}return 12e5}getCacheKey(e,t,r){return`${e}@${t}@${r?`:${r}`:""}`}resolveModelBaseURL(e){let{envBaseURL:t,modelConfigUrl:r,productEndpoint:s,modelId:o,modelConfig:i,customEndpoint:n}=e;if(r?.trim())return r;let a=this.productManager.getEndpoint()||s;if(n&&(!a||a===n))return`${n}/v2`;if(t&&!(0,Y.GO)()?.overridesEndpoint)return t;if(this.isLocalCustomModelRequest(o,i)){let e=o||i?.id||"unknown",t=i?.local===!0;throw new A.hG(t?(0,A.zQ)(e):(0,A.JG)(e))}if(!a)throw new A.uJ("Cannot resolve model request endpoint: neither getEndpoint() nor product.endpoint is available yet. Set CODEBUDDY_BASE_URL, or ensure the product configuration has finished loading.");return this.warnIfEnvEndpointMismatch(a),`${a}/v2`}warnIfEnvEndpointMismatch(e){let t,r=process.env[z.qL];if(r&&"ioa"===r.toLowerCase()){try{t=new URL(e).hostname}catch{return}t.endsWith("codebuddy.ai")&&this.logger?.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] resolved baseURL host "${t}" looks like the public cloud, but CODEBUDDY_INTERNET_ENVIRONMENT=${r}. The request will likely fail with 401 endpoint mismatch. Check ProductManager sync state or set CODEBUDDY_BASE_URL as a workaround.`)}}async normalizeNewToolResults(e,t){for(let r of e)"function_call_result"===r.rawItem.type&&await this.functionCallResultAgentInputItemProcessor.process(r.rawItem,t)}async getModel(e){if(!e)throw new A.uJ("model name is required");let t=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue(),r=t.resultSubject.value;if(r?.newItems.length){let e=r.newItems[r.newItems.length-1];e&&(await this.defaultInputItemProcessor.process(e.rawItem,t),await this.normalizeNewToolResults(r.newItems,t))}let s=this.authenticationManager.currentSessionSubject.getValue()?.auth,o=await this.settingsManager.get("env"),i=o?.[z.a1]||process.env[z.a1],n=(0,q.Gp)()?.auth?.accessToken??s?.accessToken,a=await this.productManager.waitConfiguration(),l=a.models?.find(t=>t.id===e),d=(0,Q.f)()?.endpoint,c=this.resolveModelBaseURL({envBaseURL:i,modelConfigUrl:l?.url,productEndpoint:a.endpoint,modelId:e,modelConfig:l,customEndpoint:d});this.logger.debug(`Resolved baseURL for model ${e}: ${c}`);let u=l?.local===!0;if(this.isLocalCustomModelRequest(e,l)&&!u&&!isLoopbackEndpoint(l?.url)&&!l?.apiKey?.trim())throw new A.hG((0,A.$v)(e));l?.apiKey&&(n=l.apiKey,this.logger.debug(`Using custom API key for model ${e}`)),l?.local===!0&&(n="local");let h=this.getCacheKey(c,e,n),m=this.modelCache.get(h);if(!m){if(this.modelCache.size>=et.mr)for(let e=0;e<et.mr/2;e++){let e=this.modelCache.keys().next().value;void 0!==e&&this.modelCache.delete(e)}try{let t=await this.createClient(c,n);m=new A.lS(t,e),this.modelCache.set(h,m)}catch(e){if(e.message&&(e.message.includes("Authentication")||e.message.includes("OPENAI_API_KEY")||!n))throw this.authenticationManager.currentSessionSubject.next(void 0),new A.WT;throw e}}return(0,ee.l)(this.sensitiveModelBoundary.wrapModel(m,t.id,this.securityReviewGate?.isModelBehaviorReviewEnabled(t)===!0),t)}};__decorate([(0,T.Autowired)(R.RestOperations),__metadata("design:type","function"==typeof(s=void 0!==R.RestOperations&&R.RestOperations)?s:Object)],eT.prototype,"restOperations",void 0),__decorate([(0,T.Autowired)(v.AuthenticationManager),__metadata("design:type","function"==typeof(o=void 0!==v.AuthenticationManager&&v.AuthenticationManager)?o:Object)],eT.prototype,"authenticationManager",void 0),__decorate([(0,T.Autowired)(I.ProductManager),__metadata("design:type","function"==typeof(i=void 0!==I.ProductManager&&I.ProductManager)?i:Object)],eT.prototype,"productManager",void 0),__decorate([(0,T.Autowired)(M.SessionManager),__metadata("design:type","function"==typeof(n=void 0!==M.SessionManager&&M.SessionManager)?n:Object)],eT.prototype,"sessionManager",void 0),__decorate([(0,T.Autowired)(M.ModelRequestRetryPhase),__metadata("design:type","function"==typeof(a=void 0!==M.ModelRequestRetryPhase&&M.ModelRequestRetryPhase)?a:Object)],eT.prototype,"modelRequestRetryPhase",void 0),__decorate([(0,T.Autowired)(J.H0),__metadata("design:type","function"==typeof(l=void 0!==J.H0&&J.H0)?l:Object)],eT.prototype,"telemetryService",void 0),__decorate([(0,T.Autowired)(I.ClientInfoProvider),__metadata("design:type","function"==typeof(d=void 0!==I.ClientInfoProvider&&I.ClientInfoProvider)?d:Object)],eT.prototype,"clientInfoProvider",void 0),__decorate([(0,T.Autowired)(M.AgentManager),__metadata("design:type","function"==typeof(c=void 0!==M.AgentManager&&M.AgentManager)?c:Object)],eT.prototype,"agentManager",void 0),__decorate([(0,T.Autowired)(C.Logger),__metadata("design:type","function"==typeof(u=void 0!==C.Logger&&C.Logger)?u:Object)],eT.prototype,"logger",void 0),__decorate([(0,T.Autowired)(C.TraceService),(0,T.Optional)(),__metadata("design:type","function"==typeof(h=void 0!==C.TraceService&&C.TraceService)?h:Object)],eT.prototype,"traceService",void 0),__decorate([(0,T.Autowired)(M.DefaultInputItemProcessor),__metadata("design:type","function"==typeof(m=void 0!==M.DefaultInputItemProcessor&&M.DefaultInputItemProcessor)?m:Object)],eT.prototype,"defaultInputItemProcessor",void 0),__decorate([(0,T.Autowired)(M.FunctionCallResultAgentInputItemProcessor),__metadata("design:type","function"==typeof(g=void 0!==M.FunctionCallResultAgentInputItemProcessor&&M.FunctionCallResultAgentInputItemProcessor)?g:Object)],eT.prototype,"functionCallResultAgentInputItemProcessor",void 0),__decorate([(0,T.Autowired)(et.Iy),__metadata("design:type","function"==typeof(p=void 0!==et.Iy&&et.Iy)?p:Object)],eT.prototype,"modelErrorAnalyzer",void 0),__decorate([(0,T.Autowired)(z.Vr),__metadata("design:type","function"==typeof(_=void 0!==z.Vr&&z.Vr)?_:Object)],eT.prototype,"settingsManager",void 0),__decorate([(0,T.Autowired)(et.TD),__metadata("design:type",Array)],eT.prototype,"modelRequestProcessors",void 0),__decorate([(0,T.Autowired)(W.el),__metadata("design:type",Object)],eT.prototype,"sensitiveModelBoundary",void 0),__decorate([(0,T.Autowired)(X.UD),(0,T.Optional)(),__metadata("design:type",Object)],eT.prototype,"securityReviewGate",void 0),__decorate([(0,T.Autowired)(H.Nx),(0,T.Optional)(),__metadata("design:type",Object)],eT.prototype,"galileoTimingHook",void 0),__decorate([(0,T.Autowired)(x.v),(0,T.Optional)(),__metadata("design:type",Object)],eT.prototype,"galileoService",void 0),eT=__decorate([(0,T.Component)(et.lx,K.Ye)],eT)}};
|
|
1
|
+
"use strict";exports.ids=["3163"],exports.modules={34054(e,t,r){r.r(t),r.d(t,{DEFAULT_REQUEST_MAX_RETRIES:()=>ep,DEFAULT_STREAM_IDLE_TIMEOUT_MS:()=>eh,DEFAULT_FIRST_TOKEN_TIMEOUT_MS:()=>eu,resolveRecoveryFirstTokenTimeoutMs:()=>resolveRecoveryFirstTokenTimeoutMs,resolveRequestMaxRetries:()=>resolveRequestMaxRetries,DEFAULT_MODEL_401_RETRY_DELAY_MS:()=>eE,resolveTimeoutMs:()=>resolveTimeoutMs,WATCHDOG_MAX_BACKOFF_MS:()=>ef,computeRequestRetryDelayMs:()=>computeRequestRetryDelayMs,ModelProviderImpl:()=>eR,isRetryWatchdogEnabled:()=>isRetryWatchdogEnabled,REQUEST_RETRY_BASE_DELAY_MS:()=>em,MAX_REQUEST_MAX_RETRIES:()=>e_,resolveModel401MaxRetries:()=>resolveModel401MaxRetries,DEFAULT_RECOVERY_FIRST_TOKEN_TIMEOUT_MS:()=>ey,REQUEST_RETRY_MAX_DELAY_MS:()=>eg,extractMockE2EResponseDiagnostics:()=>extractMockE2EResponseDiagnostics,resolveModel401RetryDelayMs:()=>resolveModel401RetryDelayMs,createFirstTokenTimeoutResponse:()=>createFirstTokenTimeoutResponse});var s,o,i,n,a,l,d,c,u,h,m,g,p,_,f=r(46193),E=r(57975),T=r(38522),y=r(88523),R=r(7268),S=r(14913),v=r(86482),M=r(21215),A=r(5884),b=r(51147),I=r(9151),k=r(80134),C=r(92735),O=r(96453),D=r(19672),w=r(49839),$=r(20173),L=r(73122),U=r(66678),P=r(34506),q=r(80039),N=r(5178),H=r(14545),x=r(45565),F=r(69712),B=r(18151),G=r(34340),Q=r(43394),V=r(91325),Y=r(89781),K=r(40445),X=r(78725),W=r(19436),z=r(29889),J=r(26234),Z=r(64013),ee=r(21537),et=r(68475),er=r(28985),es=r(77598);let ChatNetworkFailoverShadowRecorder=class ChatNetworkFailoverShadowRecorder{constructor(){this.events=[],this.currentBytes=0,this.nextSequence=1}begin(e){if(e)return{operationId:(0,es.randomUUID)(),nextAttempt:1,commitReached:!1}}async observeAttempt(e,t){if(!e)return t();let r=e.nextAttempt++,s=Date.now();try{let o=await t();return this.append({timestamp:Date.now(),routeId:"core-api",operation:"chat.stream",operationId:e.operationId,attempt:r,outcome:"success",httpStatus:o.status,durationMs:Date.now()-s,commitReached:e.commitReached}),o}catch(t){throw this.append({timestamp:Date.now(),routeId:"core-api",operation:"chat.stream",operationId:e.operationId,attempt:r,outcome:"terminal_error",httpStatus:t.response?.status??t.status,transportCode:"string"==typeof t.code?t.code:void 0,durationMs:Date.now()-s,commitReached:e.commitReached}),t}}markCommitReached(e){if(!e||e.commitReached)return;e.commitReached=!0;let t=[...this.events].reverse().find(t=>t.event.operationId===e.operationId);if(t){let e=t.bytes;t.event.commitReached=!0,t.bytes=Buffer.byteLength(JSON.stringify(t.event),"utf8"),this.currentBytes+=t.bytes-e}}recent(e=100){let t=Math.max(0,Math.floor(e));return 0===t?[]:this.events.slice(-t).map(e=>({...e.event}))}clearForTests(){this.events.length=0,this.currentBytes=0,this.nextSequence=1}append(e){let t={...e,sequence:this.nextSequence++},r=Buffer.byteLength(JSON.stringify(t),"utf8");if(!(r>2097152)){for(;this.currentBytes+r>2097152&&this.events.length>0;){let e=this.events.shift();e&&(this.currentBytes-=e.bytes)}this.events.push({bytes:r,event:t}),this.currentBytes+=r}}};let eo=new ChatNetworkFailoverShadowRecorder,ei=[50,100,500,1e3,3e3,1e4,6e4],en=["0_50","50_100","100_500","500_1000","1000_3000","3000_10000","10000_60000","gt_60000"];function SseMonitorSessionData(e,t){let r=e.meta?.["codebuddy.ai/mode"];return{id:e.id,conversationRequestId:t.conversationRequestId,promptRequestId:e.promptRequestId,messageId:t.messageId,traceId:e.traceId,agentName:e.agentName,agentPurpose:t.agentPurpose,isCompressing:e.isCompressing,scene:"string"==typeof r?r:""}}let ea="modelError",el={conversation_id:"\u4F1A\u8BDDID",conversation_request_id:"\u4F1A\u8BDD\u8BF7\u6C42ID",prompt_request_id:"\u63D0\u793A\u8BF7\u6C42ID",trace_id:"\u94FE\u8DEF\u8FFD\u8E2AID",message_id:"\u6D88\u606FID",model:"\u6A21\u578B",agent_name:"\u667A\u80FD\u4F53",scene:"\u573A\u666F",request_type:"\u8BF7\u6C42\u7C7B\u578B",http_begin_status_code:"HTTP\u8FDE\u63A5\u72B6\u6001\u7801",http_end_status_code:"HTTP\u7ED3\u675F\u72B6\u6001\u7801",model_error:"\u6A21\u578B\u9519\u8BEF",model_error_code:"\u6A21\u578B\u9519\u8BEF\u7801",finish_flag:"\u7ED3\u675F\u6807\u8BC6",finish_reason:"\u7ED3\u675F\u539F\u56E0",total_cost_ms:"\u603B\u8017\u65F6(ms)",sse_connect_cost_ms:"SSE\u8FDE\u63A5\u8017\u65F6(ms)",ttft_ms:"\u9996\u5B57\u8017\u65F6TTFT(ms)",text_first_cost_ms:"\u6B63\u6587\u9996\u5B57\u8017\u65F6(ms)",text_total_cost_ms:"\u6B63\u6587\u8FC7\u7A0B\u8017\u65F6(ms)",think_first_cost_ms:"\u601D\u8003\u9996\u5B57\u8017\u65F6(ms)",think_total_cost_ms:"\u601D\u8003\u8FC7\u7A0B\u8017\u65F6(ms)",total_bytes:"\u603B\u5B57\u8282\u6570",total_chunks:"\u603B\u5305\u6570",completion_tokens:"\u8F93\u51FAtoken\u6570",prompt_tokens:"\u8F93\u5165token\u6570",total_tokens:"\u603Btoken\u6570",text_content_bytes:"\u6B63\u6587\u534F\u8BAE\u5B57\u8282\u6570",text_content_chars:"\u6B63\u6587\u53EF\u89C1\u5B57\u7B26\u6570",text_total_tokens:"\u6B63\u6587token\u6570",think_content_bytes:"\u601D\u8003\u534F\u8BAE\u5B57\u8282\u6570",think_content_chars:"\u601D\u8003\u53EF\u89C1\u5B57\u7B26\u6570",think_total_tokens:"\u601D\u8003token\u6570",recv_length:"\u63A5\u6536\u957F\u5EA6",origin_length:"\u539F\u59CB\u957F\u5EA6",report_version:"\u4E0A\u62A5\u7248\u672C",report_source:"\u4E0A\u62A5\u6765\u6E90"},ed={"0_50":"0-50ms","50_100":"50-100ms","100_500":"100-500ms","500_1000":"500ms-1s","1000_3000":"1-3s","3000_10000":"3-10s","10000_60000":"10s-60s",gt_60000:">60s"};function createContentStats(){return{bytes:0,contentBytes:0,contentChars:0,tokens:0}}let SseStreamMonitorImpl=class SseStreamMonitorImpl{constructor(e,t,r){for(const s of(this.connectedTime=0,this.currentChunkTime=0,this.firstTokenTime=0,this.firstTextTime=0,this.lastTextTime=0,this.firstThinkTime=0,this.lastThinkTime=0,this.firstToolCallTime=0,this.endTime=0,this.totalBytes=0,this.totalChunks=0,this.completionTokens=0,this.promptTokens=0,this.totalTokens=0,this.textStats=createContentStats(),this.thinkStats=createContentStats(),this.lastTokenTime=0,this.intervalTimes={},this.intervalTotal={},this.finishFlag="",this.isSensitive=!1,this.modelError="",this.modelErrorCode="",this.finishReason="",this.isReportedStart=!1,this.isReportedEnd=!1,this.httpBeginStatusCode=0,this.httpEndStatusCode=200,this.galileo=t,this.logger=r,this.sessionData={...e.sessionData,conversationRequestId:e.sessionData.conversationRequestId??"",promptRequestId:e.sessionData.promptRequestId??"",messageId:e.sessionData.messageId??"",traceId:e.sessionData.traceId??"",agentName:e.sessionData.agentName||"unknown",scene:e.sessionData.scene??""},this.model=e.model,this.requestType=this.resolveRequestType(),this.requestStartTime=Date.now(),this.requestTag=(this.sessionData.conversationRequestId??"").slice(0,8)||this.sessionData.id.slice(0,8),en))this.intervalTimes[s]=0,this.intervalTotal[s]=0;this.logEnqueue(),this.attachUserAbort(e.abortSignal)}resolveRequestType(){if(this.sessionData.isCompressing)return"compress";let e=this.sessionData.agentPurpose;return e?e.startsWith("custom_agent:")||"conversation"===e||"conversation:compact"===e?"chat":e:"other"}logEnqueue(){try{this.logEvent("enqueue")}catch{}}onStreamOpen(e,t){try{this.connectedTime=Date.now(),e&&(this.sessionData.traceId=e),void 0!==t&&(this.httpBeginStatusCode=t)}catch{}}onFirstData(){try{if(this.isReportedStart||this.isReportedEnd)return;this.isReportedStart=!0;let e=this.connectedTime-this.requestStartTime;this.logEvent("start",{sse_connect_cost_ms:String(e)})}catch{}}onStreamEnd(e,t){try{let r=t?.aborted?"canceled":e,s={recvLength:t?.recvLength??this.totalBytes,originLength:t?.originLength??this.totalBytes};if("error"===r)return void this.onStreamError(t?.errorReason);this.onStreamClose(r,s)}catch{}}attachUserAbort(e){e&&!e.aborted&&(this.userAbortSignal=e,this.onUserAbort=()=>this.onStreamEnd("canceled"),e.addEventListener("abort",this.onUserAbort,{once:!0}))}detachUserAbort(){this.userAbortSignal&&this.onUserAbort&&(this.userAbortSignal.removeEventListener("abort",this.onUserAbort),this.userAbortSignal=void 0,this.onUserAbort=void 0)}onStreamClose(e,t){try{if(this.detachUserAbort(),this.isReportedEnd)return;this.isReportedEnd=!0,this.endTime=Date.now(),this.resolveFinishFlag(e),this.reportEnd(t)}catch{}}onStreamError(e){try{if(this.detachUserAbort(),this.isReportedEnd)return;this.isReportedEnd=!0,this.endTime=Date.now(),this.resolveFinishFlag("error",e),this.reportEnd({recvLength:this.totalBytes,originLength:this.totalBytes})}catch{}}onChunk(e){try{this.currentChunkTime=Date.now(),this.totalBytes+=e.length,this.totalChunks++,this.calculateConsumeInterval(this.currentChunkTime),1===this.totalChunks&&this.onFirstData()}catch{}}onParsedChunk(e){try{e.deltaContent&&this.onTextDelta(e.deltaContent),e.deltaReasoning&&this.onThinkDelta(e.deltaReasoning),e.hasToolCall&&this.onToolCall(),e.usage&&this.onUsage(e.usage),e.finishReason&&this.onFinishReason(e.finishReason)}catch{}}onTextDelta(e){try{if(!e)return;let t=this.chunkTime();0===this.firstTextTime&&(this.firstTextTime=t,0===this.firstTokenTime&&(this.firstTokenTime=t)),this.lastTextTime=t,this.textStats.contentBytes+=Buffer.byteLength(e,"utf8"),this.textStats.contentChars+=[...e].length,this.textStats.tokens++}catch{}}onThinkDelta(e){try{if(!e)return;let t=this.chunkTime();0===this.firstThinkTime&&(this.firstThinkTime=t,0===this.firstTokenTime&&(this.firstTokenTime=t)),this.lastThinkTime=t,this.thinkStats.contentBytes+=Buffer.byteLength(e,"utf8"),this.thinkStats.contentChars+=[...e].length,this.thinkStats.tokens++}catch{}}onToolCall(){try{let e=this.chunkTime();0===this.firstToolCallTime&&(this.firstToolCallTime=e,0===this.firstTokenTime&&(this.firstTokenTime=e))}catch{}}onFinishReason(e){try{if(!e)return;this.finishReason=e}catch{}}onUsage(e){try{if(!e)return;this.completionTokens=e.completion_tokens??0,this.promptTokens=e.prompt_tokens??0,this.totalTokens=e.total_tokens??0}catch{}}onModelError(e,t){try{this.modelError=e,this.modelErrorCode=t,this.onStreamError("modelError")}catch{}}onSensitiveHit(){try{this.isSensitive=!0}catch{}}setHttpEndStatus(e){try{(-2===e||0===e||e>=200&&e<=599)&&(this.httpEndStatusCode=e)}catch{}}chunkTime(){return this.currentChunkTime||Date.now()}calculateConsumeInterval(e){if(0===this.lastTokenTime){this.lastTokenTime=e;return}let t=e-this.lastTokenTime;if(t<0)return;let r=this.getIntervalKey(t);this.intervalTimes[r]++,this.intervalTotal[r]+=t,this.lastTokenTime=e}getIntervalKey(e){for(let t=0;t<ei.length;t++)if(e<ei[t])return en[t];return en[en.length-1]}resolveFinishFlag(e,t){switch(e){case"closed":this.finishFlag=this.modelError?ea:this.isSensitive?"sensitive":"done";break;case"canceled":this.finishFlag="manualStop";break;default:this.modelError||"modelError"===t?this.finishFlag=ea:"timeout"===t?this.finishFlag="timeout":this.finishFlag="interrupt"}}reportEnd(e){let t=this.endTime-this.requestStartTime,r=this.connectedTime>0?this.connectedTime-this.requestStartTime:0,s=this.firstTextTime>0?this.firstTextTime-this.connectedTime:0,o=this.lastTextTime>0&&this.firstTextTime>0?this.lastTextTime-this.firstTextTime:0,i=this.firstThinkTime>0?this.firstThinkTime-this.connectedTime:0,n=this.lastThinkTime>0&&this.firstThinkTime>0?this.lastThinkTime-this.firstThinkTime:0,a=this.firstTokenTime>0?this.firstTokenTime-this.requestStartTime:0,l={http_begin_status_code:String(this.httpBeginStatusCode),http_end_status_code:String(this.httpEndStatusCode),model_error:this.modelError,model_error_code:this.modelErrorCode,finish_flag:this.finishFlag,finish_reason:this.finishReason,total_cost_ms:String(t),sse_connect_cost_ms:String(r),ttft_ms:String(a),text_first_cost_ms:String(s),text_total_cost_ms:String(o),think_first_cost_ms:String(i),think_total_cost_ms:String(n),total_bytes:String(this.totalBytes),total_chunks:String(this.totalChunks),completion_tokens:String(this.completionTokens),prompt_tokens:String(this.promptTokens),total_tokens:String(this.totalTokens),text_content_bytes:String(this.textStats.contentBytes),text_content_chars:String(this.textStats.contentChars),text_total_tokens:String(this.textStats.tokens),think_content_bytes:String(this.thinkStats.contentBytes),think_content_chars:String(this.thinkStats.contentChars),think_total_tokens:String(this.thinkStats.tokens),recv_length:String(e.recvLength),origin_length:String(e.originLength)};for(let e of en)l[`interval_${e}_count`]=String(this.intervalTimes[e]??0),l[`interval_${e}_total_ms`]=String(this.intervalTotal[e]??0);this.logEvent("end",l)}sessionLogFields(e){return{conversation_id:e.id,conversation_request_id:e.conversationRequestId??"",prompt_request_id:e.promptRequestId??"",trace_id:e.traceId??"",message_id:e.messageId??"",model:this.model,agent_name:e.agentName??"unknown",scene:e.scene??"",request_type:this.requestType,report_version:"1",report_source:"agent-cli"}}logEvent(e,t){let r={...this.sessionLogFields(this.sessionData),...t};this.writeFileLog(`[SseMonitor#${this.requestTag}] qua.${e}: ${JSON.stringify(r)}`),this.galileo?.logInfo(`agent.sse.qua.${e}`,{type:"custom_event",name:`agent.sse.qua.${e}`,...r})}writeFileLog(e){this.logger.info(e)}printConsoleEvent(e,t){let r=[`[SseMonitor#${this.requestTag}] ===== qua.${e} =====`];for(let[e,s]of Object.entries(t)){let t=this.getFieldCnName(e);r.push(` ${e}(${t}): ${s}`)}r.push(""),process.stdout.write(r.join("\n")+"\n")}getFieldCnName(e){if(el[e])return el[e];let t=e.match(/^interval_(.+)_count$/);if(t){let e=ed[t[1]]??t[1];return`${e}\u{533A}\u{95F4}\u{6B21}\u{6570}`}let r=e.match(/^interval_(.+)_total_ms$/);if(r){let e=ed[r[1]]??r[1];return`${e}\u{533A}\u{95F4}\u{603B}\u{8017}\u{65F6}(ms)`}return e}};var __decorate=function(e,t,r,s){var o,i=arguments.length,n=i<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(n=(i<3?o(n):i>3?o(t,r,n):o(t,r))||n);return i>3&&n&&Object.defineProperty(t,r,n),n},__metadata=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};let ec=(0,E.promisify)(T.gunzip),eu=12e5,eh=12e5;function resolveTimeoutMs(e,t){if(e){let t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}return t}let em=500,eg=32e3,ep=1,e_=15,ef=3e5,eE=2e3,eT=[b.CONVERSATION_ID_HEADER,b.CONVERSATION_REQUEST_ID_HEADER,b.CONVERSATION_MESSAGE_ID_HEADER,b.PARENT_CONVERSATION_ID_HEADER,b.AGENT_TYPE_HEADER,b.COMPACTION_HEADER,b.CONTEXT_COMPACTED_HEADER,b.REQUEST_ID_HEADER,b.AGENT_INTENT,b.AGENT_PURPOSE,b.IDE_TYPE_HEADER,b.IDE_NAME_HEADER,b.IDE_VERSION_HEADER,b.PRODUCT,b.API_KEY_HEADER,b.PRIVATE_DATA_HEADER];function resolveRequestMaxRetries(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,e_)}return ep}function isRetryWatchdogEnabled(e){if("string"!=typeof e)return!1;let t=e.trim().toLowerCase();return"1"===t||"true"===t||"yes"===t}function resolveModel401MaxRetries(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,e_)}return 0}function resolveModel401RetryDelayMs(e){if(void 0!==e&&""!==e){let t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,eg)}return eE}function computeRequestRetryDelayMs(e,t,r=eg,s=Math.random,o=em){return null!=t&&t>0?Math.min(t,r):(0,A.Rv)(e,{baseDelayMs:o,maxDelayMs:r,random:s})}let ey=3e5;function resolveRecoveryFirstTokenTimeoutMs(e,t){return Math.min(resolveTimeoutMs(e,ey),t)}function createFirstTokenTimeoutResponse(e){return new Response(new ReadableStream({start(t){t.error(new A.wM(e,0,0,!0))}}),{status:200,headers:{"content-type":"text/event-stream"}})}function readResponseHeader(e,t){if(!e||"object"!=typeof e)return;try{let r=e.get?.(t);if(null!=r)return String(r)}catch{}let r=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase()),s=r?e[r]:void 0;return null==s?void 0:String(s)}function extractMockE2EResponseDiagnostics(e){let t={traceId:readResponseHeader(e,"x-mock-trace-id"),requestId:readResponseHeader(e,"x-mock-request-id"),matchSource:readResponseHeader(e,"x-mock-match-source"),matchResult:readResponseHeader(e,"x-mock-match-result"),offset:readResponseHeader(e,"x-mock-offset"),responseId:readResponseHeader(e,"x-mock-response-id"),finishReason:readResponseHeader(e,"x-mock-finish-reason"),dataVersion:readResponseHeader(e,"x-mock-data-version"),instance:readResponseHeader(e,"x-mock-instance"),contentKind:readResponseHeader(e,"x-mock-content-kind")};return Object.values(t).some(e=>void 0!==e)?t:void 0}function isLoopbackEndpoint(e){if("string"!=typeof e||""===e.trim())return!1;try{let{hostname:t}=new URL(e);return"localhost"===t||"127.0.0.1"===t||"[::1]"===t||"::1"===t||t.endsWith(".localhost")}catch{return!1}}let eR=class{constructor(){this.modelRequestProcessors=[],this.modelCache=new Map}normalizeChatCompletionsUrl(e){let t=e.search(/[?#]/),r=t>=0?e.slice(t):"",s=t>=0?e.slice(0,t):e;for(s=s.replace(/\/+$/,"");s.endsWith("/chat/completions");)s=s.slice(0,-17);return`${s}/chat/completions${r}`}async decodeDebugRequestBody(e){return"string"==typeof e?JSON.parse(e):e instanceof Uint8Array?31===e[0]&&139===e[1]?JSON.parse((await ec(e)).toString("utf-8")):JSON.parse(Buffer.from(e).toString("utf-8")):e}isCustomModelRequest(e,t){let r=e||t?.id;return!!(r?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX)||r?.startsWith("custom:"))||t?.trustLevel===I.ModelTrustLevel.CUSTOM||Array.isArray(t?.tags)&&t.tags.includes(I.MODEL_TAG_CUSTOM)}isLocalCustomModelRequest(e,t){let r=e||t?.id;return!!r?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX)}shouldApplyInternalModelRequestHeaders(e,t){return!!t&&!this.isCustomModelRequest(e,t)}applyCustomPassthroughHeaders(e,t,r,s){let o=t.requestOptions?.customPassthroughHeaders;if(o&&this.shouldApplyInternalModelRequestHeaders(r,s))for(let[t,r]of Object.entries(o))this.setHeaderCaseInsensitive(e,t,r)}isRecord(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}mergeRequestProviderData(e,t){if(!t||!this.isRecord(e))return e;let r=this.isRecord(t.extra_vars)?t.extra_vars:void 0,s=this.isRecord(e.extra_vars)?e.extra_vars:{};return{...e,...t,...r?{extra_vars:{...s,...r}}:{}}}injectRequestExtraFieldsMeta(e,t){let r;if(!this.isRecord(t)||0===Object.keys(t).length||!this.isRecord(e))return!1;let s=e.messages;if(!Array.isArray(s)||0===s.length)return!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(this.isRecord(t)&&"user"===t.role){r=t;break}}if(!r)return!1;let o=this.isRecord(r.extra_fields)?r.extra_fields:{},i=this.isRecord(o._meta)?o._meta:{};return r.extra_fields={...o,_meta:{...i,...t}},!0}resolveRootRequestId(e){let t=e.meta?.rootRequestId;return"string"==typeof t&&t.length>0?t:void 0}resolveParentConversationId(e){let t=e.meta?.parentConversationId;if("string"==typeof t&&0!==t.length&&t!==e.id)return t}applyCompactionHeaders(e,t){t?.kind&&this.setHeaderCaseInsensitive(e,b.COMPACTION_HEADER,t.kind),t?.contextCompacted&&this.setHeaderCaseInsensitive(e,b.CONTEXT_COMPACTED_HEADER,t.contextCompacted)}getHeaderCaseInsensitive(e,t){let r=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase());return r?e[r]:void 0}setHeaderCaseInsensitive(e,t,r){let s=Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase());s&&delete e[s],e[t]=r}parseSSEChunk(e,t=!1){let r,s,o,i,n=!1,a=!1,l=!1,d=null,c=!1,u="",h="",m="",g=!1;try{for(let p of e.toString("utf-8").split("\n")){let e=p.trim();if(!e.startsWith("data:"))continue;let _=e.slice(5).trim();if(_&&"[DONE]"!==_)try{let e=JSON.parse(_);if(void 0===s&&"string"==typeof e?.id&&e.id.length>0&&(s=e.id),e?.usage!=null){if(c=!0,"object"==typeof e.usage){let t=e.usage.credit;"number"==typeof t&&Number.isFinite(t)&&t>0&&(r=t)}if(t&&"object"==typeof e.usage){let t=e.usage;o={prompt_tokens:"number"==typeof t.prompt_tokens?t.prompt_tokens:void 0,completion_tokens:"number"==typeof t.completion_tokens?t.completion_tokens:void 0,total_tokens:"number"==typeof t.total_tokens?t.total_tokens:void 0}}if(!i&&"object"==typeof e.usage){let t=e.usage;i={prompt_tokens:"number"==typeof t.prompt_tokens?t.prompt_tokens:void 0,completion_tokens:"number"==typeof t.completion_tokens?t.completion_tokens:void 0,total_tokens:"number"==typeof t.total_tokens?t.total_tokens:void 0}}}let p=e?.choices;if(!Array.isArray(p)||0===p.length)continue;for(let e of p){"string"==typeof e.finish_reason&&""!==e.finish_reason&&(n=!0,d=e.finish_reason);let r=e.delta;if(r){let e="string"==typeof r.content&&r.content.length>0,s="string"==typeof r.reasoning_content&&r.reasoning_content.length>0||"string"==typeof r.reasoning&&r.reasoning.length>0,o=Array.isArray(r.tool_calls)&&r.tool_calls.length>0,i="string"==typeof r.refusal&&r.refusal.length>0;s&&(a=!0),(e||s||o||i)&&(n=!0),(e||o||i)&&(l=!0),t&&e&&(u+=r.content),e&&(h+=r.content),s&&(m+=r.reasoning_content??r.reasoning??""),o&&(g=!0)}}if(n&&l&&d&&c)break}catch{}}}catch{}return{hasContent:n,hasReasoning:a,hasSubstantiveContent:l,finishReason:d,hasUsage:c,credit:r,chunkId:s,usage:o,deltaContent:u.length>0?u:void 0,monitorDelta:h.length>0?h:void 0,monitorReasoning:m.length>0?m:void 0,monitorUsage:i,monitorHasToolCall:g||void 0}}normalizeStreamingToolCallIds(e,t){if(!e.includes("tool_calls"))return e;let r=e.split("\n"),s=!1;for(let e=0;e<r.length;e++){let o=r[e].trim();if(!o.startsWith("data:"))continue;let i=o.slice(5).trimStart();if(i&&"[DONE]"!==i)try{let o=JSON.parse(i),n=o?.choices;if(!Array.isArray(n)||0===n.length)continue;let a=n[0]?.delta;if(!a?.tool_calls||!Array.isArray(a.tool_calls)||0===a.tool_calls.length)continue;let l=!1;for(let e of a.tool_calls)null!=e.id&&"string"==typeof e.id&&""!==e.id&&(t.has(e.id)?"number"==typeof e.index&&(delete e.id,l=!0):t.add(e.id));if(l){let t=r[e].startsWith("data: ")?"data: ":"data:";r[e]=`${t}${JSON.stringify(o)}`,s=!0}}catch{}}return s?r.join("\n"):e}createStreamingTextProcessor(){let e=new f.StringDecoder("utf-8"),t=new TextEncoder,r=new Set;return{process:s=>{let o=e.write(s);return 0===o.length?null:t.encode(this.normalizeStreamingToolCallIds(o,r))},flush:()=>{let r=e.end();return r.length>0?t.encode(r):null}}}parseCustomHeaders(e){if(!e)return{};let t={},r=[];for(let s of(e.includes("\\n")?r.push(...e.split("\\n")):e.includes("\n")?r.push(...e.split("\n")):r.push(e),r)){let e=s.trim();if(!e)continue;let r=e.indexOf(":");if(-1===r)continue;let o=e.substring(0,r).trim(),i=e.substring(r+1).trim();o&&i&&(t[o]=i)}return t}async getCustomHeaders(e){let t;this.logger.setContext("ModelProvider");let r=this.parseCustomHeaders(process.env[z.nW]),s=await this.settingsManager.get("env"),o=this.parseCustomHeaders(s?.[z.nW]),i=await this.settingsManager.get("enableModelOptimization"),n=i?.enabled!==!1;if(void 0===i)try{let e=await this.productManager.waitConfiguration();e.productFeatures?.[I.ProductFeature.DisableYuanbaoChannel]===!0&&(n=!1)}catch{}o[b.PRIVATE_DATA_HEADER]=n?"false":"true";let a={};try{let e=S.Context.getRequest()?.body;if(e?.header){let t=Z.HeaderUtils.convertHeaderArrayToObject(e.header);t&&(a=t)}}catch(e){}let l={};try{let e=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue();e?.requestOptions?.headers?(l=e.requestOptions.headers,this.logger.debug(`[ModelProvider] session headers from session ${e.id}: keys=[${Object.keys(l).join(",")}]`)):this.logger.debug(`[ModelProvider] no session headers for session ${e?.id}`)}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] error reading session headers: ${e}`)}let d={...r,...o,...a,...l,...(0,q.Gp)()?.headers};this.logger.debug(`[ModelProvider] merged headers: keys=[${Object.keys(d).join(",")}]`);let c=this.authenticationManager.currentSessionSubject.getValue(),u=(0,q.Gp)()?.auth;process.env[z.QB]&&this.logger.debug("[ModelProvider] API key disabled via env"),u||process.env[z.QB]||(t=s?.[z.XO]||process.env[z.XO]),u?.method==="api_key"&&(t=u.accessToken);try{if(e.modelId){let r=await this.productManager.waitConfiguration(),s=r.models?.find(t=>t.id===e.modelId);s?.apiKey&&(t=s.apiKey,this.logger.debug(`Using custom API key in headers for model ${e.modelId}`))}}catch(e){}t&&(d[b.API_KEY_HEADER]=t,d[R.HttpHeaders.AUTHORIZATION]=`Bearer ${t}`);let h=c?.account,m=h?.enterpriseId?.trim(),g=(0,v.isPersonalAccount)(h)&&!m;return await Z.IOAUtils.applyIOADefaultHeaders(d,s,{enterpriseId:m,skipDefaultEnterpriseHeaders:g}),d}async enableThinking(e){let t=await this.settingsManager.get("alwaysThinkingEnabled");if(!t)return!1;let r=e??await this.agentManager.getModel((await this.agentManager.getDefault()).name);return!!(t&&r.supportsReasoning)}async injectReasoningSummaryIfNeeded(e,t){return!(!(await this.enableThinking(t)||"string"==typeof e?.reasoning_effort||"string"==typeof e?.reasoning?.effort)||e?.reasoning_summary)&&(e.reasoning_summary="auto",!0)}isConnectionLevelRetryableError(e){return!!e&&void 0===e.response&&(0,k.isOriginReplayRetryable)(e)}applyChatFailoverOrigin(e,t){let r=this.productManager?.configuration?.getValue()||{},s=Z.ProxyUtils.resolveRequestUrl(e.url,e.baseURL||r.endpoint||this.productManager?.getEndpoint()||void 0);if(s&&(0,k.isOriginReplayRetryable)(t)){let t=(0,F.XK)(s,r);if(t){(0,F.eP)(e,s,t),this.logger.info?.("[NetworkFailover] Chat origin switched to backup before retry");return}this.logger.info?.(`[NetworkFailover] Chat origin replay skipped: no backup for ${s}`)}let o=(0,B.pinFailoverChatOrigin)(e.url);o&&o!==e.url&&(e.url=o,this.logger.info?.("[NetworkFailover] Chat origin re-pinned before retry"))}shouldSkipRequestLevelRetryAfterChatOriginReplay(e,t){let r=t?.response?.status;return(408===r||502===r||503===r)&&(!!e?.[F.U$]||(0,F.DZ)((0,F.oh)(e)))}isRequestLevelRetryableError(e,t){if(!e)return!1;let r="number"==typeof e.response?.status?e.response.status:void 0,s=this.parseErrorResponseBody(e),matchesCode=t=>t(e)||!!s&&t(s);return!matchesCode(M.ErrorUtils.isQuotaExhaustedError)&&(429===r?t||matchesCode(M.ErrorUtils.isTransientRateLimitBusinessCode):(0,M.isRequestLevelRetryableStatus)(r))}parseErrorResponseBody(e){let t=e?.response?.data;if(t&&"object"==typeof t&&"function"!=typeof t.pipe)return t;if("string"==typeof t&&""!==t.trim())try{let e=JSON.parse(t);return e&&"object"==typeof e?e:void 0}catch{}}hasChatOriginReplayed(e,t){return!!(e?.[F.U$]||t?.config?.[F.U$])||(0,F.DZ)((0,F.oh)(e))}abortableSleep(e,t){return new Promise((r,s)=>{if(t?.aborted)return void s(Error("Request aborted."));let o=setTimeout(()=>{t?.removeEventListener("abort",onAbort),r()},e);"function"==typeof o.unref&&o.unref();let onAbort=()=>{clearTimeout(o),s(Error("Request aborted."))};t?.addEventListener("abort",onAbort,{once:!0})})}async requestWithConnectionRetry(e,t,r,s,o,i,n=!1,a){let l,d=this.sessionManager?.getCurrent()?.agentPurpose===M.AgentPurpose.ContentSecurityReviewer,c=d?0:A.Q9,u=d?0:resolveRequestMaxRetries(process.env.CODEBUDDY_MAX_RETRIES),h=!d&&isRetryWatchdogEnabled(process.env.CODEBUDDY_RETRY_WATCHDOG),m=d?0:resolveModel401MaxRetries(process.env.CODEBUDDY_MODEL_401_MAX_RETRIES),g=resolveModel401RetryDelayMs(process.env.CODEBUDDY_MODEL_401_RETRY_DELAY_MS),p=0,_=0,f=0,E=0,T=(0,q.Gp)(),y=T?.auth;if(!e?.[F.U$]&&(0,F.DZ)((0,F.oh)(e)))throw(0,F.aD)();for(;;)try{globalThis.__CODEBUDDY_STARTUP_PROFILER__?.markEvent("first-model-request");let t=await eo.observeAttempt(i,()=>this.restOperations.request(e));return(0,B.recordFailoverOutcome)(e.url),o?.setAttribute("retry_count",p+_+f+E),t}catch(S){(0,B.recordFailoverOutcome)(e.url,S),e?.[F.U$]||this.applyChatFailoverOrigin(e,S),l=S;let i=e?.signal;if(i?.aborted)break;if(this.isConnectionLevelRetryableError(S)){if(p>=c)break;p+=1;let e=(0,A.xX)(p);o?.addEvent("retry_attempt",{attempt:p,kind:"connection",error_code:String(S?.code??""),error_message:String(S?.message??""),delay_ms:Math.round(e)}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Connection-level failure before response headers, backing off and retrying: agent=${t}, requestId=${r}, code=${S?.code}, message=${S?.message}, attempt=${p}/${c}, delayMs=${Math.round(e)}`),await this.modelRequestRetryPhase.during(a,"network",()=>this.abortableSleep(e,i));continue}let d=await (0,G.Af)(S,i);if("cancelled"===d.state||i?.aborted)break;let R=d.policy;if("forbid-retry"===R){let e=S.response?.status;o?.addEvent("retry_policy",{decision:"forbid",status:"number"==typeof e?e:-1}),this.logger.info?.(`[ModelProvider] Gateway retry_policy forbids retry: agent=${t}, requestId=${r}, status=${e}`);break}if(n&&!s&&0===f&&S.response?.status===401){let t=Object.keys(e.headers??{}).find(e=>"authorization"===e.toLowerCase());if((0,q.Gp)()===T&&y?.refresh&&t&&e.headers[t]===`Bearer ${y.accessToken}`)try{let r=await (0,q.tD)(y.accessToken,i??new AbortController().signal);if(r){e.headers[t]=`Bearer ${r.accessToken}`;let s=Object.keys(e.headers).find(e=>e.toLowerCase()===b.API_KEY_HEADER.toLowerCase());s&&e.headers[s]===y.accessToken&&(e.headers[s]=r.accessToken),f++,o?.addEvent("retry_attempt",{attempt:f,kind:"authentication",status:401});continue}}catch{}}if(E<m&&!s&&S.response?.status===401){E+=1,o?.addEvent("retry_attempt",{attempt:E,kind:"auth-401",status:401,delay_ms:g}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] HTTP 401 before generation, retrying blindly (auth proxy may be rotating its token): agent=${t}, requestId=${r}, attempt=${E}/${m}, delayMs=${g}`),await this.abortableSleep(g,i);continue}if(this.isRequestLevelRetryableError(S,s)){let s="force-retry"===R;if(s?this.hasChatOriginReplayed(e,S):this.shouldSkipRequestLevelRetryAfterChatOriginReplay(e,S)){this.logger.info?.(`[ModelProvider] Skip request-level retry after chat origin replay agent=${t}, requestId=${r}`);break}let n=h&&!s,a=s?A.Q9:u;if(!n&&_>=a)break;_+=1;let l=S?.response?.status,d=S?.response?.headers,c=(0,M.parseRetryAfterMs)(d),m=n?ef:eg,g=n?(0,M.parseRateLimitResetMs)(d):null,p=null!=g?Math.min(g,m):computeRequestRetryDelayMs(_,c,m,Math.random,s?A.Kf:em);o?.addEvent("retry_attempt",{attempt:_,kind:"request",status:"number"==typeof l?l:-1,delay_ms:Math.round(p),...s?{retry_policy:"force"}:{}}),this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Request-level failure before generation, backing off and retrying: agent=${t}, requestId=${r}, status=${l}, attempt=${_}${n?"(watchdog)":`/${a}`}${s?"(retry_policy)":""}, delayMs=${Math.round(p)}${null!=c?`(retry-after=${c}ms)`:""}${null!=g?`(reset-in=${g}ms)`:""}`),await this.abortableSleep(p,i);continue}break}throw o?.setAttribute("retry_count",p+_+f+E),l}getModelTracer(){return this.traceService?.activeTracer??O.u.getTracer("workbuddy.agent.model")}async runWithGalileoModelRequestSpan(e,t){let{parentContext:r,parentSpanId:s}=this.createOtelParentContextFromTraceHeaders(e.headers),o={"span.type":"model_request","http.method":e.method.toUpperCase(),"http.url":this.sanitizeUrlForTrace(e.url),"model.id":e.model,"agent.name":e.agentName,"request.id":e.requestId,"model.stream":e.isStreamRequest,"conversation.request.id":e.headers[b.CONVERSATION_REQUEST_ID_HEADER]??e.requestId,"workbuddy.session_id":e.headers[b.CONVERSATION_ID_HEADER]??"","workbuddy.prompt_request_id":e.promptRequestId??e.headers[b.CONVERSATION_REQUEST_ID_HEADER]??"","workbuddy.message_id":e.headers[b.CONVERSATION_MESSAGE_ID_HEADER]??"","workbuddy.request_id":e.headers[b.REQUEST_ID_HEADER]??e.requestId};try{let t=new URL(e.url);o["http.target"]=`${t.pathname}${t.search}`,o["net.peer.name"]=t.hostname,t.port&&(o["net.peer.port"]=Number(t.port))}catch{}let i=this.getModelTracer().startSpan("codebuddy_code.model_request",{kind:D.v.CLIENT,attributes:o},r);this.injectOtelSpanHeaders(e.headers,i,s);let n=i.spanContext();return this.logger.info(`[GalileoMVP] model request span started: traceId=${n.traceId}, spanId=${n.spanId}, parentSpanId=${s||""}, requestId=${e.requestId}, url=${this.sanitizeUrlForTrace(e.url)}`),w._.with(O.u.setSpan(r,i),async()=>{try{let e=await t(i),r=e?.status;return"number"==typeof r?(i.setAttribute("http.status_code",r),i.setStatus({code:r>=400?$.s.ERROR:$.s.OK,...r>=400?{message:`HTTP ${r}`}:{}})):i.setStatus({code:$.s.OK}),e}catch(e){throw"number"==typeof e.response?.status&&i.setAttribute("http.status_code",e.response.status),e.code&&i.setAttribute("error.code",String(e.code)),i.recordException(e),i.setStatus({code:$.s.ERROR,message:e.message}),e}finally{i.end()}})}createOtelParentContextFromTraceHeaders(e){let t=this.getHeaderCaseInsensitive(e,"b3"),r=t?.split("-")??[],s=this.getHeaderCaseInsensitive(e,"x-b3-traceid")||this.getHeaderCaseInsensitive(e,"x-trace-id")||r[0],o=this.getHeaderCaseInsensitive(e,"x-b3-spanid")||r[1],i=this.getHeaderCaseInsensitive(e,"x-b3-sampled")||r[2];return s&&o&&/^[0-9a-f]{32}$/i.test(s)&&/^[0-9a-f]{16}$/i.test(o)&&"00000000000000000000000000000000"!==s?{parentContext:O.u.setSpanContext(L.l,{traceId:s.toLowerCase(),spanId:o.toLowerCase(),traceFlags:"0"===i||"false"===i?U.X.NONE:U.X.SAMPLED,isRemote:!0}),parentSpanId:o.toLowerCase()}:{parentContext:w._.active()}}createModelStreamSpan(e,t,r,s,o){let i,n=!1;try{let{parentContext:n}=this.createOtelParentContextFromTraceHeaders(e);i=this.getModelTracer().startSpan(C.SPAN_NAME_MODEL_STREAM,{kind:D.v.CLIENT,attributes:{[C.MODEL_STREAM_ATTRS.SPAN_TYPE]:C.SPAN_TYPE_MODEL_STREAM,"model.id":t,"agent.name":r,"request.id":s,"conversation.request.id":e[b.CONVERSATION_REQUEST_ID_HEADER]??s,"workbuddy.session_id":e[b.CONVERSATION_ID_HEADER]??"","workbuddy.prompt_request_id":o??e[b.CONVERSATION_REQUEST_ID_HEADER]??"","workbuddy.message_id":e[b.CONVERSATION_MESSAGE_ID_HEADER]??"","workbuddy.request_id":e[b.REQUEST_ID_HEADER]??s}},n)}catch(e){this.logger.info(`[ModelProvider] model_stream span start failed: ${e}`)}return{span:i,endSpan:(e,t,r)=>{i&&!n&&(n=!0,i.setAttribute(C.MODEL_STREAM_ATTRS.CHUNK_COUNT,e.chunkCount),i.setAttribute(C.MODEL_STREAM_ATTRS.TOTAL_BYTES,e.totalBytes),i.setAttribute("stream.status",t),i.setAttribute("workbuddy.stop_reason",r?.message??t),"error"===t?(r&&i.recordException(r),i.setStatus({code:$.s.ERROR,message:r?.message})):"ok"===t?i.setStatus({code:$.s.OK}):i.addEvent("aborted"),i.end())}}}writeGenAiRequestAttrs(e,t){if(!t||"object"!=typeof t)return;let j=e=>{try{return"string"==typeof e?e:JSON.stringify(e)}catch{return""}},clip=(e,t)=>(0,M.truncateAndCopyString)(e,t),r=(0,C.readOtelLoggingFlags)().logUserPrompts,s={};if("number"==typeof t.temperature&&(s.temperature=t.temperature,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_TEMPERATURE,t.temperature)),"number"==typeof t.top_p&&(s.top_p=t.top_p,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_TOP_P,t.top_p)),"number"==typeof t.max_tokens&&(s.max_tokens=t.max_tokens,e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_MAX_TOKENS,t.max_tokens)),void 0!==t.max_completion_tokens&&(s.max_completion_tokens=t.max_completion_tokens),void 0!==t.frequency_penalty&&(s.frequency_penalty=t.frequency_penalty),void 0!==t.presence_penalty&&(s.presence_penalty=t.presence_penalty),void 0!==t.stream&&(s.stream=t.stream),Object.keys(s).length>0&&e.setAttribute(C.LLM_SOURCE_ATTRS.REQUEST_PARAMETERS,j(s)),Array.isArray(t.messages)&&t.messages.length>0){let s=t.messages,o=j(s);o&&(e.setAttribute(C.LLM_SOURCE_ATTRS.INPUT_MESSAGES,clip(o,C.LLM_SOURCE_VALUE_MAX_SIZE)),o.length>C.LLM_SOURCE_VALUE_MAX_SIZE&&e.setAttribute(C.LLM_SOURCE_ATTRS.INPUT_TRUNCATED,!0)),e.setAttribute(C.LLM_SOURCE_ATTRS.PROMPT_COUNT,s.length);let i=Math.min(s.length,C.MAX_PROMPT_MESSAGES);for(let t=0;t<i;t++){let o=s[t];if(o&&"object"==typeof o){if(o.role&&e.setAttribute(C.LLM_PROMPT_KEYS.role(t),String(o.role)),o.tool_call_id&&e.setAttribute(C.LLM_PROMPT_KEYS.toolCallId(t),String(o.tool_call_id)),Array.isArray(o.tool_calls)&&o.tool_calls.length>0){e.setAttribute(C.LLM_PROMPT_KEYS.toolCallCount(t),o.tool_calls.length);for(let s=0;s<o.tool_calls.length;s++){let i=o.tool_calls[s];if(!i||"object"!=typeof i)continue;let n=C.LLM_PROMPT_KEYS.toolCall(t,s),a=i.function??{};i.id&&e.setAttribute(n.id,String(i.id)),a.name&&e.setAttribute(n.name,String(a.name)),r&&void 0!==a.arguments&&e.setAttribute(n.arguments,clip(j(a.arguments),C.LLM_SOURCE_PROMPT_VALUE_MAX_SIZE))}}if(r&&void 0!==o.content){let r=j(o.content);r&&e.setAttribute(C.LLM_PROMPT_KEYS.content(t),clip(r,C.LLM_SOURCE_PROMPT_VALUE_MAX_SIZE))}}}}}injectOtelSpanHeaders(e,t,r){let s=t.spanContext(),o=(s.traceFlags&U.X.SAMPLED)===U.X.SAMPLED;this.setHeaderCaseInsensitive(e,"traceparent",`00-${s.traceId}-${s.spanId}-${o?"01":"00"}`),this.setHeaderCaseInsensitive(e,"b3",`${s.traceId}-${s.spanId}-${o?"1":"0"}${r?`-${r}`:""}`),this.setHeaderCaseInsensitive(e,"X-B3-TraceId",s.traceId),r&&this.setHeaderCaseInsensitive(e,"X-B3-ParentSpanId",r),this.setHeaderCaseInsensitive(e,"X-B3-SpanId",s.spanId),this.setHeaderCaseInsensitive(e,"X-B3-Sampled",o?"1":"0"),this.setHeaderCaseInsensitive(e,"X-Trace-ID",s.traceId)}sanitizeUrlForTrace(e){return e.replace(/([?&])(key|token|api_key|apikey|secret|password)=[^&]*/gi,"$1$2=***")}axiosToFetchAdapter(){return async(e,t)=>{let r,s,o,i,n,a,l,d="string"==typeof e?e:e.url,c=t?.method||"GET",u=t?.headers,h=t?.body,m=Date.now(),g={};if(u)if(u instanceof Headers)g={},u.forEach((e,t)=>{g[t]=e});else if(Array.isArray(u))for(let[e,t]of(g={},u))g[e]=t;else g={...u};let p=(0,M.currentTurnCarrier)(),_=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue(),f=_.abortSignal,E=!!f?.aborted,T=et.h.getStore(),y=T?.messageId??(0,P.nH)().replace(/-/g,""),S=T?T.conversationRequestId:(0,M.getEffectiveConversationRequestId)(_),k=T?T.purpose:(0,M.getEffectiveAgentPurpose)(_);_.messageId=y,g[b.CONVERSATION_ID_HEADER]=_.id,g[b.CONVERSATION_REQUEST_ID_HEADER]=S||"",g[b.CONVERSATION_MESSAGE_ID_HEADER]=_.messageId,g[b.REQUEST_ID_HEADER]=_.messageId;let O=(0,ee.i)(_);g[b.AGENT_INTENT]=_.meta?.["codebuddy.ai/mode"]??"craft",process.env.PERSONAL_AGENT_ROLE?g[b.AGENT_PURPOSE]="person_agent":k&&(g[b.AGENT_PURPOSE]=k);let D=_.telemetryClientInfo;if(!D?.ideType||!D.ideName||!D.ideVersion){let e=await this.clientInfoProvider.get();s=e.ideType,o=e.platform,i=e.platformVersion}g[b.IDE_TYPE_HEADER]=D?.ideType||s||N.Vo,g[b.IDE_NAME_HEADER]=D?.ideName||o||"",g[b.IDE_VERSION_HEADER]=D?.ideVersion||i||"0.0.0";let w=null,$=!1;if(h&&"string"==typeof h)try{w=JSON.parse(h)}catch{}else h&&"object"==typeof h&&(w=h);if(w?.model&&(n=w.model),n)try{let e=await this.productManager.waitConfiguration();if(a=e.models?.find(e=>e.id===n),a?.url)if(a.useCustomProtocol)d=a.url,this.logger.info(`Using custom URL for model ${n}: ${d} (useCustomProtocol=true, URL passthrough)`);else{let e=this.isCustomModelRequest(n,a);d=e?this.normalizeChatCompletionsUrl(a.url):a.url,this.logger.info(`Using custom URL for model ${n}: ${d}(raw:${a?.url})${e?" (custom model, ensured /chat/completions)":""}`)}}catch(e){}let L=!this.isCustomModelRequest(n,a)||process.env[z.qL]===V.pg.Selfhosted,U=_.requestOptions?.providerData;if(U&&L){let e=this.mergeRequestProviderData(w,U);e!==w&&(w=e,$=!0)}let H=_.requestOptions?.requestExtraFieldsMeta;if(H&&L&&this.injectRequestExtraFieldsMeta(w,H)&&($=!0),!a?.useCustomProtocol&&/\/chat\/completions(?:[/?#]|$)/.test(d)){let e=this.normalizeChatCompletionsUrl(d);e!==d&&(this.logger.info(`Normalized duplicated /chat/completions in URL: ${d} -> ${e}`),d=e)}let x=this.shouldApplyInternalModelRequestHeaders(n,a);for(let[e,t]of(x&&this.setHeaderCaseInsensitive(g,b.AGENT_INTENT,O??"craft"),Object.entries(await this.getCustomHeaders({modelId:n||""}))))this.setHeaderCaseInsensitive(g,e,t);delete g.authorization,delete g["user-agent"];let F=(0,q.Gp)();for(let[e,t]of(F?.auth?.accessToken&&!Object.keys(g).some(e=>"authorization"===e.toLowerCase())&&(g[R.HttpHeaders.AUTHORIZATION]=`Bearer ${F.auth.accessToken}`),Object.entries((0,q.I2)())))Object.keys(g).some(t=>t.toLowerCase()===e.toLowerCase())||(g[e]=t);if(this.isCustomModelRequest(n,a)){let e=Object.keys(g).find(e=>e.toLowerCase()===b.PRIVATE_DATA_HEADER.toLowerCase());e&&delete g[e]}let G=this.agentManager.getVolatilePluginAgentState().internalModelRequestHeaders;if(G&&this.shouldApplyInternalModelRequestHeaders(n,a))for(let[e,t]of Object.entries(G))this.setHeaderCaseInsensitive(g,e,t);this.applyCustomPassthroughHeaders(g,_,n,a),this.setHeaderCaseInsensitive(g,b.REQUEST_ID_HEADER,y),this.setHeaderCaseInsensitive(g,b.CONVERSATION_MESSAGE_ID_HEADER,y),this.setHeaderCaseInsensitive(g,b.CONVERSATION_REQUEST_ID_HEADER,S||"");let Q=this.resolveRootRequestId(_);Q&&this.setHeaderCaseInsensitive(g,b.ROOT_REQUEST_ID_HEADER,Q);let Y=this.resolveParentConversationId(_);Y&&this.setHeaderCaseInsensitive(g,b.PARENT_CONVERSATION_ID_HEADER,Y),this.setHeaderCaseInsensitive(g,b.AGENT_TYPE_HEADER,T?.agentType??(0,M.resolveModelCallAgentType)(_)),this.applyCompactionHeaders(g,T?.compaction);let K=await this.settingsManager.get("env"),X=!!(K?.[z.hv]||process.env[z.hv]);if(x&&!X)for(let[e,t]of Object.entries(p))this.setHeaderCaseInsensitive(g,e,t);if(X)for(let e of(g[v.HTTP_HEADER_SKIP_AUTH_INTERCEPTOR]="1",[...eT,...Object.keys(G??{})]))delete g[e];if(w&&await this.injectReasoningSummaryIfNeeded(w,a)&&($=!0),w&&n){let e=(0,I.stripCustomLocalModelPrefix)(n);e!==n&&w.model===n&&(w.model=e,$=!0)}if(w&&a?.tags?.includes("custom")&&!1===a.supportsImages&&Array.isArray(w.messages)){let e=!1;for(let t of w.messages)if(Array.isArray(t.content)){let r=t.content.filter(e=>"text"===e.type).map(e=>e.text);t.content=r.join("\n"),e=!0}e&&($=!0,this.logger.debug(`Flattened array content to string for custom model ${n}`))}if(w&&this.isCustomModelRequest(n,a)&&a?.supportsToolCall===!1){let e=await this.productManager.waitConfiguration();e.productFeatures?.[I.ProductFeature.SkipToolCallSupportCheck]!==!0&&(void 0!==w.tools||void 0!==w.tool_choice)&&(delete w.tools,delete w.tool_choice,$=!0,this.logger.info(`Stripped tools/tool_choice from request body (model ${n} does not support tool calls)`))}$&&w&&"string"==typeof h&&(h=JSON.stringify(w));let W={url:d,method:c,headers:g,data:h,signal:t?.signal||void 0,modelId:n,maxBodyLength:1/0,maxContentLength:1/0};for(let e of[...this.modelRequestProcessors].sort((e,t)=>(e.priority??1e3)-(t.priority??1e3)))await e.process(W);if(X){let e=new Set([...eT,...Object.keys(G??{}),v.HTTP_HEADER_SKIP_AUTH_INTERCEPTOR,"X-User-Id","X-Enterprise-Id","X-Department-Info","X-Tenant-Id","X-Domain","User-Agent","X-Requested-With"].map(e=>e.toLowerCase())),t=["x-stainless-"],r=W.transformRequest;W.transformRequest=[...Array.isArray(r)?r:r?[r]:[],(r,s)=>{if(!s)return r;let o=new Set(["common","delete","get","head","post","put","patch"]);for(let r of Object.keys(s)){if(o.has(r))continue;let i=r.toLowerCase();if(e.has(i)){delete s[r];continue}t.some(e=>i.startsWith(e))&&delete s[r]}return r}]}let J="text/event-stream"===g.Accept||"text/event-stream"===g.accept||d.includes("stream=true")||"string"==typeof h&&h.includes('"stream":true');J&&(W.responseType="stream");let Z=this.getHeaderCaseInsensitive(g,b.REQUEST_ID_HEADER)||"unknown",er=this.telemetryService.reportMessageSendTelemetry(g,w??h,J,_),es=_.agentName||"unknown",ei=n||w?.model||"unknown",en=Date.now(),ea=J&&(0,M.consumeRecoveryRequestPending)(_),el=resolveTimeoutMs(process.env.CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS,eu),ed=ea?resolveRecoveryFirstTokenTimeoutMs(process.env.CODEBUDDY_RECOVERY_FIRST_TOKEN_TIMEOUT_MS,el):el,ec=!1;if(ea){let e=new AbortController;t?.signal&&(0,A.wp)(t.signal,e),"function"==typeof(l=setTimeout(()=>{ec=!0,e.abort()},Math.max(0,ed-(Date.now()-en)))).unref&&l.unref(),W.signal=e.signal,this.logger.info(`[ModelProvider] Recovery request: first-token deadline=${ed}ms covers response headers and first token, agent=${es}, requestId=${Z}`)}let clearRecoveryDeadline=()=>{l&&(clearTimeout(l),l=void 0)};E=E||!!f?.aborted,J&&(r=new SseStreamMonitorImpl({sessionData:SseMonitorSessionData(_,{agentPurpose:k,conversationRequestId:S,messageId:y}),model:ei,abortSignal:f},this.galileoService,this.logger)),this.galileoTimingHook?.reportPromptBuild(en-m,{model:ei,agentName:es});let em=W.url?.replace(/([?&])(key|token|api_key|apikey|secret|password)=[^&]*/gi,"$1$2=***");if(this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Sending request: agent=${es}, model=${ei}, requestId=${Z}, stream=${J}, url=${em}`),_.promptReceivedAt&&!_.firstModelRequestTimingReported){_.firstModelRequestTimingReported=!0;let e=_.promptSeq??0,t=Date.now(),r=t-_.promptReceivedAt,s=_.runnerStartedAt?t-_.runnerStartedAt:-1,o=1===e?"first":`n=${e}`;this.logger.info(`[ModelProvider] message-to-model-request latency: ${r}ms (sinceRunnerStart=${s}ms, promptSeq=${e}, kind=${o}, agent=${es}, model=${ei}, sessionId=${_.id})`)}if("function"==typeof this.logger.debug)try{let e=Array.isArray(w?.tools)?w.tools:void 0,t=e?e.map(e=>e?.function?.name??e?.name).filter(Boolean):void 0;this.logger.debug(`[ModelProvider][toolsInBody] requestId=${Z} model=${ei} `+(t?`toolCount=${t.length} tools=[${t.join(",")}]`:"tools=<none in body>"))}catch{}process.env.CODEBUDDY_DEBUG_REQUEST&&(async()=>{try{let{messages:e,...t}=await this.decodeDebugRequestBody(W.data)||{};if(this.logger.info(`[ModelProvider] Request body (no messages): ${JSON.stringify(t)}`),e)for(let t=0;t<e.length;t++){let r=e[t],s=JSON.stringify(r).slice(0,500);this.logger.info(`[ModelProvider] messages[${t}]: ${s}`)}}catch{}})().catch(()=>{});let eg=this.isCustomModelRequest(n,a),ep=!!(K?.[z.a1]||process.env[z.a1]),e_=!eg&&!a?.useCustomProtocol&&!ep&&/\/v2\/chat\/completions(?:[/?#]|$)/.test(String(W.url??"")),ef=eo.begin(J&&e_);if(e_){let e=(0,B.pinFailoverChatOrigin)(W.url);e!==W.url&&(W.url=e,this.logger.info("[NetworkFailover] Chat origin pinned before send"))}try{let e={...g},s=await this.runWithGalileoModelRequestSpan({url:W.url,method:c,headers:W.headers,model:ei,agentName:es,requestId:Z,isStreamRequest:J,promptRequestId:_.promptRequestId},e=>this.requestWithConnectionRetry(W,es,Z,eg,e,ef,e_&&!a?.apiKey,_));clearRecoveryDeadline();let o=extractMockE2EResponseDiagnostics(s.headers);if(o&&this.logger.info(`[MockE2E][response] ${JSON.stringify({sessionId:_.id,promptRequestId:_.promptRequestId,conversationRequestId:_.conversationRequestId,modelRequestId:Z,model:ei,httpStatus:s.status,...o})}`),_.conversationRequestId&&await this.telemetryService.flushPendingGrowthTelemetry(_,_.conversationRequestId),J||await this.telemetryService.reportMessageResponseTelemetryNonStream(_,er,s,!0),r?.onStreamOpen(_.traceId??"",s.status),!J||!s.data||"function"!=typeof s.data.pipe)return r?.onStreamEnd("error",{aborted:E}),new Response("string"==typeof s.data?s.data:JSON.stringify(s.data),{status:s.status,statusText:s.statusText,headers:s.headers});{let o,i,a,l=t?.signal,isUserAbort=()=>!!f?.aborted,c=s.data,u=!1,h=0,m=0,g=Date.now(),p=!1,{span:E,endSpan:T}=this.createModelStreamSpan(e,ei,es,Z,_.promptRequestId),R=(0,C.shouldEmitGenAiSourceAttrs)(),v=[],b=0,k=!1,D=!1;if(R&&E)try{this.writeGenAiRequestAttrs(E,w)}catch(e){this.logger.info(`[ModelProvider] gen_ai request attrs write failed: ${e}`)}let $=resolveTimeoutMs(process.env.CODEBUDDY_STREAM_TIMEOUT_MS,eh),L=(a=parseInt(process.env.CODEBUDDY_REASONING_KEEPALIVE_INTERVAL_MS??"",10),Number.isFinite(a)&&a>0?a:0),U=null,P=null,q=null,N=null,H=null,x=this.createStreamingTextProcessor(),F=0,B=0,G=0,Q=0,V=0,Y=!1,K=!1,X=null,W=!1,z=w?.stream_options?.include_usage===!0,J=!1,startStreamMonitor=()=>{!P&&(this.logger.info(`[ModelProvider] Stream idle monitor armed: agent=${es}, requestId=${Z}, streamIdleTimeoutMs=${$}`),(P=setInterval(()=>{if(p||u){P&&(clearInterval(P),P=null);return}G++;let e=Date.now(),t=e-g;if(c.isPaused?.()&&c.resume(),G%10==0){let r=h-F,s=m-B;if(r>0){let o=e-en;this.logger.info(`[ModelProvider] Stream progress: agent=${es}, requestId=${Z}, chunks=${h}(+${r}), bytes=${m}(+${s}), elapsed=${o}ms, idle=${t}ms`),E?.addEvent(C.MODEL_STREAM_EVENT_CHUNK_PROGRESS,{chunks:r,bytes:s,elapsed_ms:o}),F=h,B=m}}if(L>0&&Y&&!J&&!K&&!p&&!u&&h>V&&e-(Q||en)>=L){Q=e,V=h;try{_.combineSubject.next({type:"notice",notice:{kind:"reasoning_in_progress",elapsedMs:e-en,chunkCount:h,bytes:m}})}catch{}}if(t>=$){if(K)this.logger.info(`[ModelProvider] Graceful close: finish_reason already received, stream idle for ${$}ms, agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}`),gracefulCloseStream();else if(this.logger.error(`[cbc-kw=MODEL_REQUEST] Stream timeout: no data received for ${$}ms, agent=${es}, requestId=${Z}, chunkCount=${h}, totalBytes=${m}`),clearAllTimers(),p=!0,u=!0,T({chunkCount:h,totalBytes:m},"error",Error(`Stream timeout after ${$}ms idle`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),U)try{U.error(new A.wM($,h,m))}catch{}}},1e3))&&"function"==typeof P.unref&&P.unref())},clearFirstTokenTimer=()=>{q&&(clearTimeout(q),q=null)},clearAllTimers=()=>{clearFirstTokenTimer(),P&&(clearInterval(P),P=null),N&&(clearTimeout(N),N=null),H&&l&&(l.removeEventListener("abort",H),H=null)},cancelLocalModelGeneration=()=>{if(n?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX))try{let e=new URL(d).origin,t=`${e}/v1/chat/completions/control`;this.logger.info(`[LocalModel] cancel: POST ${t} model=${n} chunks=${h}`),fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stop"}),signal:AbortSignal.timeout(2e3)}).then(e=>this.logger.info(`[LocalModel] cancel response status=${e.status}`),e=>this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel failed: ${e?.message}`))}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel setup error: ${e?.message}`)}},destroyLocalModelSocket=()=>{if(n?.startsWith(I.CUSTOM_LOCAL_MODEL_PREFIX))try{let e=c.socket;e?e.destroyed?this.logger.info("[LocalModel] cancel: socket already destroyed"):(e.destroy(),this.logger.info("[LocalModel] cancel: TCP socket destroyed")):this.logger.info("[LocalModel] cancel: socket unavailable")}catch(e){this.logger.warn(`[cbc-kw=MODEL_REQUEST] [LocalModel] cancel: socket destroy failed: ${e?.message}`)}},gracefulCloseStream=()=>{if(!p&&(p=!0,clearAllTimers(),r?.onStreamEnd("closed",{recvLength:m,originLength:m,aborted:isUserAbort()}),T({chunkCount:h,totalBytes:m},"ok"),c.destroy(),U))try{let e=x.flush();e&&U.enqueue(e),U.close()}catch{}},startFinishReasonGraceTimer=e=>{!N&&!p&&!u&&(this.logger.info(`[ModelProvider] finish_reason="${e}" received, starting grace period: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-en}ms`),(N=setTimeout(()=>{p||u||(this.logger.info(`[ModelProvider] Graceful close after finish_reason: stream idle for 5000ms after finish_reason, agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}`),gracefulCloseStream())},5e3))&&"function"==typeof N.unref&&N.unref())},ee=new ReadableStream({start:e=>{U=e;let publishDiscardedStreamCredit=e=>{let t=_.combineSubject;!t||e<=0||(t.next({type:"model",data:{type:"model",event:{usage:{credit:e}},...y?{providerData:{messageId:y}}:{}}}),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Forwarded discarded empty-stream credit: agent=${es}, requestId=${Z}, messageId=${y??"unknown"}, credit=${e}`))},failEmptyStream=(e,t)=>{if(!p&&(p=!0,u=!0,o=void 0,clearAllTimers(),"number"==typeof t&&t>0&&publishDiscardedStreamCredit(t),T({chunkCount:h,totalBytes:m},"error",Error("finish_reason=error with no model output")),r?.onModelError("finish_reason=error with no model output","error"),c.destroy(),U))try{U.error(new A.mY(h,m,e,Date.now()-en))}catch{}};{let e=Date.now()-en,t=Math.max(ed-e,0);if(0===t){if(this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout: HTTP response headers took ${e}ms (exceeds ${ed}ms threshold)`),p=!0,u=!0,T({chunkCount:h,totalBytes:m},"error",Error(`First token timeout after ${ed}ms`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),U)try{U.error(new A.wM(ed,h,m,!0))}catch{}}else(q=setTimeout(()=>{if(!Y&&!p&&!u){let e=Date.now()-en;if(this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout: no meaningful model output received for ${e}ms (threshold=${ed}ms, received ${h} raw chunks, ${m} bytes)`),p=!0,u=!0,T({chunkCount:h,totalBytes:m},"error",Error(`First token timeout after ${ed}ms`)),r?.onStreamEnd("error",{errorReason:"timeout",aborted:isUserAbort()}),c.destroy(),U)try{U.error(new A.wM(ed,h,m,!0))}catch{}}},t))&&"function"==typeof q.unref&&q.unref()}c.on("data",t=>{if(h++,m+=t.length,g=Date.now(),r?.onChunk(t),1===h&&this.logger.info(`[ModelProvider] First raw chunk received: agent=${es}, requestId=${Z}, elapsed=${Date.now()-en}ms, bytes=${t.length}`),R&&!D&&t.includes('"usage"'))try{let e=this.parseSSEChunk(t,!0).usage;e&&(D=!0,"number"==typeof e.prompt_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_PROMPT_TOKENS,e.prompt_tokens),"number"==typeof e.completion_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_COMPLETION_TOKENS,e.completion_tokens),"number"==typeof e.total_tokens&&E?.setAttribute(C.LLM_SOURCE_ATTRS.USAGE_TOTAL_TOKENS,e.total_tokens))}catch(e){this.logger.info(`[ModelProvider] gen_ai usage capture failed: ${e}`)}if(!Y||!K||!J||K&&z&&!W){let e=this.parseSSEChunk(t,R);if(o){e.credit&&(i=e.credit),(e.hasUsage||e.credit)&&(W=!0,failEmptyStream(o,i));return}if(r?.onParsedChunk({deltaContent:e.monitorDelta,deltaReasoning:e.monitorReasoning,usage:e.monitorUsage,finishReason:e.finishReason,hasToolCall:e.monitorHasToolCall}),R&&e.deltaContent&&!k&&(v.push(e.deltaContent),(b+=e.deltaContent.length)>=C.LLM_SOURCE_VALUE_MAX_SIZE&&(k=!0)),_.telemetry&&!_.telemetry.chunkId&&e.chunkId&&(_.telemetry.chunkId=e.chunkId),!W&&e.hasUsage&&(W=!0,K&&X&&startFinishReasonGraceTimer(X)),!K&&"error"===e.finishReason&&!J&&!e.hasSubstantiveContent){K=!0,X=e.finishReason;let t=Y||e.hasReasoning?"reasoning-only":"no-token";if(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] finish_reason="error" with no substantive model output (${t}), treating as retryable empty stream: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-en}ms`),e.credit&&(i=e.credit),!e.hasUsage){o=t,N||(N=setTimeout(()=>{failEmptyStream(t,i)},5e3),"function"==typeof N.unref&&N.unref()),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Waiting for usage tail before empty-stream abort: agent=${es}, requestId=${Z}`);return}failEmptyStream(t,i);return}if(!J&&e.hasSubstantiveContent&&(J=!0),!Y&&e.hasContent){Y=!0,eo.markCommitReached(ef);let e=Date.now()-en;if(_.telemetry&&(_.telemetry.firstTokenAt=en+e),this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] First meaningful token received: agent=${es}, requestId=${Z}, ttft=${e}ms, rawChunks=${h}, bytes=${m}`),this.galileoTimingHook?.reportTTFB(e,{model:ei,requestId:Z,agentName:es,conversationRequestId:S,messageId:y,promptRequestId:_.promptRequestId}),E?.setAttribute(C.MODEL_STREAM_ATTRS.FIRST_TOKEN_MS,e),E?.addEvent(C.MODEL_STREAM_EVENT_FIRST_TOKEN,{ttft_ms:e,chunk_count:h,bytes:m}),_.telemetry&&!_.telemetry.messageTtfbReported){let e=_.telemetry.firstTokenAt,t=O??"",r={messageId:y,promptRequestId:_.promptRequestId,conversationRequestId:S,model:ei,agentName:es,scene:t};if(_.telemetry.clientSendTime){let t=e-_.telemetry.clientSendTime;if(t>0&&t<=6e5&&(this.galileoTimingHook?.reportMessageTTFBUser(t,r),R))try{_.conversationRequestRootSpan?.setAttributes({[C.LLM_SOURCE_ATTRS.USER_FIRST_TOKEN_MS]:t})}catch{}}if(_.telemetry.promptStartTime){let t=e-_.telemetry.promptStartTime;t>0&&t<=6e5&&this.galileoTimingHook?.reportMessageTTFBModel(t,r)}_.telemetry.messageTtfbReported=!0}clearFirstTokenTimer(),startStreamMonitor()}if(!K&&e.finishReason){if(K=!0,X=e.finishReason,R&&v.length>0){let e=v.join("");if(e){let t=k||e.length>C.LLM_SOURCE_VALUE_MAX_SIZE,r=(0,M.truncateAndCopyString)(e,C.LLM_SOURCE_VALUE_MAX_SIZE);E?.setAttribute(C.LLM_SOURCE_ATTRS.OUTPUT_CONTENT,r),E?.setAttribute(C.LLM_SOURCE_ATTRS.COMPLETION_0_ROLE,"assistant"),E?.setAttribute(C.LLM_SOURCE_ATTRS.COMPLETION_0_CONTENT,r),t&&E?.setAttribute(C.LLM_SOURCE_ATTRS.OUTPUT_TRUNCATED,!0)}}!z||W?startFinishReasonGraceTimer(e.finishReason):this.logger.info(`[ModelProvider] finish_reason="${e.finishReason}" received, waiting for usage tail: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}, elapsed=${Date.now()-en}ms`)}}if(!u&&!o){let r=x.process(t);r&&e.enqueue(r)}}),c.on("end",()=>{if(o)return void failEmptyStream(o,i);if(p||u)return;p=!0,clearAllTimers();let t=Date.now()-en;if(this.logger.info(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream completed: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}, elapsed=${t}ms`),T({chunkCount:h,totalBytes:m},"ok"),r?.onStreamEnd("closed",{recvLength:m,originLength:m,aborted:isUserAbort()}),Y&&this.galileoTimingHook?.reportModelStreaming(t,{model:ei,agentName:es,conversationRequestId:S}),this.galileoTimingHook?.reportRequestResult(0,void 0,ei,void 0,S,void 0,_.id),!u){let t=x.flush();if(t)try{e.enqueue(t)}catch{}e.close()}}),c.on("error",t=>{if(o&&!isUserAbort())return void failEmptyStream(o,i);if(p||u)return;p=!0,clearAllTimers();let s=Date.now()-en;this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream error: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}, elapsed=${s}ms, error=${t.message}`),T({chunkCount:h,totalBytes:m},"error",t),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort()}),this.galileoTimingHook?.reportRequestResult(-1,"STREAM_ERROR",ei,t.message,S,void 0,_.id),u||e.error(t)}),c.on("close",()=>{if(o&&!isUserAbort())return void failEmptyStream(o,i);if(!p){if(K)this.logger.info(`[ModelProvider] Stream closed after finish_reason received, treating as completed: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}`),gracefulCloseStream();else if(p=!0,clearAllTimers(),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort()}),T({chunkCount:h,totalBytes:m},"error",Error("Stream closed unexpectedly")),!u&&U)try{0===h?(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream closed before first chunk: agent=${es}, requestId=${Z}`),e.error(Error("Stream closed before receiving any data"))):Y?(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Stream closed unexpectedly: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}`),e.error(Error(`Stream closed unexpectedly after receiving ${h} chunks (${m} bytes)`))):(this.logger.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Empty stream: only placeholder chunks received before close: agent=${es}, requestId=${Z}, chunks=${h}, bytes=${m}`),e.error(new A.mY(h,m,"placeholder",Date.now()-en)))}catch{}}}),l&&(H=()=>{p=!0,clearAllTimers(),u=!0,T({chunkCount:h,totalBytes:m},"aborted"),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort(),errorReason:"timeout"}),cancelLocalModelGeneration(),c.destroy(),destroyLocalModelSocket();try{e.close()}catch{}},l.aborted?H():l.addEventListener("abort",H,{once:!0}))},cancel:()=>{p=!0,clearAllTimers(),u=!0,T({chunkCount:h,totalBytes:m},"aborted"),r?.onStreamEnd("error",{recvLength:m,originLength:m,aborted:isUserAbort(),errorReason:l?.aborted?"timeout":void 0}),cancelLocalModelGeneration(),c.destroy(),destroyLocalModelSocket()}});return new Response(ee,{status:s.status,statusText:s.statusText,headers:s.headers})}}catch(s){let e;clearRecoveryDeadline();try{this.logger.error(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Request failed: agent=${es}, requestId=${Z}, error=${s?.message}`),this.logger.error(`[cbc-kw=MODEL_REQUEST] [ModelProvider] Error response: status=${s.response?.status}, code=${s?.code}, message=${s?.message}`),this.telemetryService.reportMessageResponseTelemetryStream(_,void 0,void 0,s);let o=s.response?.status??s.status??-2,i=s?.code??`HTTP_${o}`;if(this.galileoTimingHook?.reportRequestResult(o,i,ei,s?.message?(0,M.truncateAndCopyString)(s.message,500):void 0,S,void 0,_.id),r?.setHttpEndStatus(o),E=E||!!f?.aborted,ec&&!E)return this.logger.error(`[cbc-kw=MODEL_REQUEST] First token timeout (recovery request): no response headers within ${ed}ms, agent=${es}, requestId=${Z}`),r?.onStreamEnd("error",{aborted:!1,errorReason:"timeout"}),createFirstTokenTimeoutResponse(ed);return r?.onStreamEnd("error",{aborted:E,errorReason:t?.signal?.aborted?"timeout":void 0}),await Promise.race([this.modelErrorAnalyzer.analyze(s,W),new Promise((t,r)=>{e=setTimeout(()=>r(),5e3)})])}catch{return E=E||!!f?.aborted,r?.onStreamEnd("error",{aborted:E,errorReason:t?.signal?.aborted?"timeout":void 0}),this.modelErrorAnalyzer.createErrorResponse(s?.message||"Unknown error",400,"Client Error")}finally{clearTimeout(e)}}}}async createClient(e,t){if(!t)throw this.authenticationManager.currentSessionSubject.next(void 0),new A.WT;try{let{OpenAI:s}=await r.e("3043").then(r.bind(r,73502));return new s(this.buildOpenAIClientOptions(e,t))}catch(e){if(e.message&&e.message.includes("OPENAI_API_KEY"))throw new A.iN;throw e}}buildOpenAIClientOptions(e,t){return{baseURL:e,apiKey:t,fetch:this.axiosToFetchAdapter(),maxRetries:0,timeout:this.resolveRequestTimeoutMs()}}resolveRequestTimeoutMs(){let e=process.env.CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS;if(e){let t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}return 12e5}getCacheKey(e,t,r){return`${e}@${t}@${r?`:${r}`:""}`}resolveModelBaseURL(e){let{envBaseURL:t,modelConfigUrl:r,productEndpoint:s,modelId:o,modelConfig:i,customEndpoint:n}=e;if(r?.trim())return r;let a=this.productManager.getEndpoint()||s;if(n&&(!a||a===n))return`${n}/v2`;if(t&&!(0,Y.GO)()?.overridesEndpoint)return t;if(this.isLocalCustomModelRequest(o,i)){let e=o||i?.id||"unknown",t=i?.local===!0;throw new A.hG(t?(0,A.zQ)(e):(0,A.JG)(e))}if(!a)throw new A.uJ("Cannot resolve model request endpoint: neither getEndpoint() nor product.endpoint is available yet. Set CODEBUDDY_BASE_URL, or ensure the product configuration has finished loading.");return this.warnIfEnvEndpointMismatch(a),`${a}/v2`}warnIfEnvEndpointMismatch(e){let t,r=process.env[z.qL];if(r&&"ioa"===r.toLowerCase()){try{t=new URL(e).hostname}catch{return}t.endsWith("codebuddy.ai")&&this.logger?.warn(`[cbc-kw=MODEL_REQUEST] [ModelProvider] resolved baseURL host "${t}" looks like the public cloud, but CODEBUDDY_INTERNET_ENVIRONMENT=${r}. The request will likely fail with 401 endpoint mismatch. Check ProductManager sync state or set CODEBUDDY_BASE_URL as a workaround.`)}}async normalizeNewToolResults(e,t){for(let r of e)"function_call_result"===r.rawItem.type&&await this.functionCallResultAgentInputItemProcessor.process(r.rawItem,t)}async getModel(e){if(!e)throw new A.uJ("model name is required");let t=this.sessionManager.getCurrent()||this.sessionManager.sessionSubject.getValue(),r=t.resultSubject.value;if(r?.newItems.length){let e=r.newItems[r.newItems.length-1];e&&(await this.defaultInputItemProcessor.process(e.rawItem,t),await this.normalizeNewToolResults(r.newItems,t))}let s=this.authenticationManager.currentSessionSubject.getValue()?.auth,o=await this.settingsManager.get("env"),i=o?.[z.a1]||process.env[z.a1],n=(0,q.Gp)()?.auth?.accessToken??s?.accessToken,a=await this.productManager.waitConfiguration(),l=a.models?.find(t=>t.id===e),d=(0,Q.f)()?.endpoint,c=this.resolveModelBaseURL({envBaseURL:i,modelConfigUrl:l?.url,productEndpoint:a.endpoint,modelId:e,modelConfig:l,customEndpoint:d});this.logger.debug(`Resolved baseURL for model ${e}: ${c}`);let u=l?.local===!0;if(this.isLocalCustomModelRequest(e,l)&&!u&&!isLoopbackEndpoint(l?.url)&&!l?.apiKey?.trim())throw new A.hG((0,A.$v)(e));l?.apiKey&&(n=l.apiKey,this.logger.debug(`Using custom API key for model ${e}`)),l?.local===!0&&(n="local");let h=this.getCacheKey(c,e,n),m=this.modelCache.get(h);if(!m){if(this.modelCache.size>=er.mr)for(let e=0;e<er.mr/2;e++){let e=this.modelCache.keys().next().value;void 0!==e&&this.modelCache.delete(e)}try{let t=await this.createClient(c,n);m=new A.lS(t,e),this.modelCache.set(h,m)}catch(e){if(e.message&&(e.message.includes("Authentication")||e.message.includes("OPENAI_API_KEY")||!n))throw this.authenticationManager.currentSessionSubject.next(void 0),new A.WT;throw e}}return(0,et.l)(this.sensitiveModelBoundary.wrapModel(m,t.id,this.securityReviewGate?.isModelBehaviorReviewEnabled(t)===!0),t)}};__decorate([(0,y.Autowired)(R.RestOperations),__metadata("design:type","function"==typeof(s=void 0!==R.RestOperations&&R.RestOperations)?s:Object)],eR.prototype,"restOperations",void 0),__decorate([(0,y.Autowired)(v.AuthenticationManager),__metadata("design:type","function"==typeof(o=void 0!==v.AuthenticationManager&&v.AuthenticationManager)?o:Object)],eR.prototype,"authenticationManager",void 0),__decorate([(0,y.Autowired)(I.ProductManager),__metadata("design:type","function"==typeof(i=void 0!==I.ProductManager&&I.ProductManager)?i:Object)],eR.prototype,"productManager",void 0),__decorate([(0,y.Autowired)(M.SessionManager),__metadata("design:type","function"==typeof(n=void 0!==M.SessionManager&&M.SessionManager)?n:Object)],eR.prototype,"sessionManager",void 0),__decorate([(0,y.Autowired)(M.ModelRequestRetryPhase),__metadata("design:type","function"==typeof(a=void 0!==M.ModelRequestRetryPhase&&M.ModelRequestRetryPhase)?a:Object)],eR.prototype,"modelRequestRetryPhase",void 0),__decorate([(0,y.Autowired)(J.H0),__metadata("design:type","function"==typeof(l=void 0!==J.H0&&J.H0)?l:Object)],eR.prototype,"telemetryService",void 0),__decorate([(0,y.Autowired)(I.ClientInfoProvider),__metadata("design:type","function"==typeof(d=void 0!==I.ClientInfoProvider&&I.ClientInfoProvider)?d:Object)],eR.prototype,"clientInfoProvider",void 0),__decorate([(0,y.Autowired)(M.AgentManager),__metadata("design:type","function"==typeof(c=void 0!==M.AgentManager&&M.AgentManager)?c:Object)],eR.prototype,"agentManager",void 0),__decorate([(0,y.Autowired)(C.Logger),__metadata("design:type","function"==typeof(u=void 0!==C.Logger&&C.Logger)?u:Object)],eR.prototype,"logger",void 0),__decorate([(0,y.Autowired)(C.TraceService),(0,y.Optional)(),__metadata("design:type","function"==typeof(h=void 0!==C.TraceService&&C.TraceService)?h:Object)],eR.prototype,"traceService",void 0),__decorate([(0,y.Autowired)(M.DefaultInputItemProcessor),__metadata("design:type","function"==typeof(m=void 0!==M.DefaultInputItemProcessor&&M.DefaultInputItemProcessor)?m:Object)],eR.prototype,"defaultInputItemProcessor",void 0),__decorate([(0,y.Autowired)(M.FunctionCallResultAgentInputItemProcessor),__metadata("design:type","function"==typeof(g=void 0!==M.FunctionCallResultAgentInputItemProcessor&&M.FunctionCallResultAgentInputItemProcessor)?g:Object)],eR.prototype,"functionCallResultAgentInputItemProcessor",void 0),__decorate([(0,y.Autowired)(er.Iy),__metadata("design:type","function"==typeof(p=void 0!==er.Iy&&er.Iy)?p:Object)],eR.prototype,"modelErrorAnalyzer",void 0),__decorate([(0,y.Autowired)(z.Vr),__metadata("design:type","function"==typeof(_=void 0!==z.Vr&&z.Vr)?_:Object)],eR.prototype,"settingsManager",void 0),__decorate([(0,y.Autowired)(er.TD),__metadata("design:type",Array)],eR.prototype,"modelRequestProcessors",void 0),__decorate([(0,y.Autowired)(W.el),__metadata("design:type",Object)],eR.prototype,"sensitiveModelBoundary",void 0),__decorate([(0,y.Autowired)(X.UD),(0,y.Optional)(),__metadata("design:type",Object)],eR.prototype,"securityReviewGate",void 0),__decorate([(0,y.Autowired)(H.Nx),(0,y.Optional)(),__metadata("design:type",Object)],eR.prototype,"galileoTimingHook",void 0),__decorate([(0,y.Autowired)(x.v),(0,y.Optional)(),__metadata("design:type",Object)],eR.prototype,"galileoService",void 0),eR=__decorate([(0,y.Component)(er.lx,K.Ye)],eR)}};
|