blade-code 0.10.69 → 0.10.71

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.
Files changed (71) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-2e7sedzn.js → chunk-0tm20v38.js} +2 -2
  3. package/dist/{chunk-n6rgqmf7.js → chunk-0vrgrw71.js} +1 -1
  4. package/dist/{chunk-qd9vk8t1.js → chunk-1je1xw6v.js} +6 -6
  5. package/dist/{chunk-50jthhfq.js → chunk-1pjkgfez.js} +1 -1
  6. package/dist/{chunk-jj0b6n20.js → chunk-1w83z8j0.js} +1 -1
  7. package/dist/{chunk-nxek5ev2.js → chunk-2428hhvj.js} +1 -1
  8. package/dist/{chunk-ypqp368c.js → chunk-2px6hzdc.js} +1 -1
  9. package/dist/chunk-3as0bkqy.js +1 -0
  10. package/dist/{chunk-7cm6tfnn.js → chunk-3hy06st1.js} +1 -1
  11. package/dist/{chunk-asgyyv1s.js → chunk-4ke8k0xw.js} +2 -2
  12. package/dist/{chunk-8gd0ksz7.js → chunk-4pexpa3h.js} +1 -1
  13. package/dist/{chunk-1z9wct9w.js → chunk-5te2jqt3.js} +1 -1
  14. package/dist/{chunk-kf070906.js → chunk-82htkvz8.js} +1 -1
  15. package/dist/chunk-8j568nm6.js +1 -0
  16. package/dist/{chunk-5147jh26.js → chunk-92x15fzx.js} +1 -1
  17. package/dist/chunk-93tvxmqg.js +8 -0
  18. package/dist/{chunk-6pkyc8r6.js → chunk-97aywyzn.js} +1 -1
  19. package/dist/{chunk-dktrankr.js → chunk-9hchc346.js} +1 -1
  20. package/dist/{chunk-ppsvzgs5.js → chunk-9q852bsc.js} +2 -2
  21. package/dist/{chunk-z9p0by31.js → chunk-ahg9vjb6.js} +1 -1
  22. package/dist/{chunk-ptcb5fb7.js → chunk-axtzde5k.js} +1 -1
  23. package/dist/{chunk-4ge1jkf8.js → chunk-azw0jckv.js} +1 -1
  24. package/dist/{chunk-v712dqde.js → chunk-be30r8an.js} +1 -1
  25. package/dist/{chunk-1xjzd1jn.js → chunk-byqxaa9v.js} +1 -1
  26. package/dist/{chunk-dfrgc84s.js → chunk-cff9gphh.js} +1 -1
  27. package/dist/{chunk-kwv6vyst.js → chunk-ckqpt15b.js} +1 -1
  28. package/dist/{chunk-g324ww9d.js → chunk-d3ttqmyt.js} +262 -263
  29. package/dist/{chunk-68zek95f.js → chunk-dwb2nmms.js} +1 -1
  30. package/dist/{chunk-16n849z3.js → chunk-fcmgwzrj.js} +1 -1
  31. package/dist/{chunk-c8h3c8an.js → chunk-fcv8b6ny.js} +1 -1
  32. package/dist/{chunk-mgv3qr9b.js → chunk-gtcxybv5.js} +1 -1
  33. package/dist/chunk-gvbx0t4j.js +1 -0
  34. package/dist/{chunk-kmarzy98.js → chunk-j0p54tqt.js} +1 -1
  35. package/dist/{chunk-bbcb9jzb.js → chunk-j9q1wyxg.js} +1 -1
  36. package/dist/chunk-jzntxp7f.js +3 -0
  37. package/dist/{chunk-zdxxqchm.js → chunk-mtphps19.js} +1 -1
  38. package/dist/chunk-n827nys9.js +1 -0
  39. package/dist/{chunk-xjse24zd.js → chunk-nwzpnx7m.js} +1 -1
  40. package/dist/chunk-nx31fkkf.js +166 -0
  41. package/dist/{chunk-b793bj62.js → chunk-qgrq04hb.js} +7 -7
  42. package/dist/chunk-qnsvae10.js +1 -0
  43. package/dist/chunk-r9d4mjxj.js +2 -0
  44. package/dist/{chunk-yvg961q3.js → chunk-rm9hbew3.js} +1 -1
  45. package/dist/{chunk-rpmmy3qs.js → chunk-s77sbxr7.js} +1 -1
  46. package/dist/chunk-sp3bn8qh.js +1 -0
  47. package/dist/{chunk-98n2rxmq.js → chunk-t2wgf9tq.js} +1 -1
  48. package/dist/{chunk-2da7j2sw.js → chunk-trn6r1g3.js} +1 -1
  49. package/dist/{chunk-crkkpx3m.js → chunk-v7p533ff.js} +1 -1
  50. package/dist/{chunk-ftmbgtnk.js → chunk-vthgpdbd.js} +1 -1
  51. package/dist/{chunk-hcv17986.js → chunk-wfy851et.js} +1 -1
  52. package/dist/chunk-wneeq8cr.js +1 -0
  53. package/dist/{chunk-efemjy9y.js → chunk-wrfay5r3.js} +1 -1
  54. package/dist/{chunk-a0j0xwt1.js → chunk-x9tvjkjv.js} +1 -1
  55. package/dist/{chunk-qjg390mv.js → chunk-xdz5zrjt.js} +1 -1
  56. package/dist/chunk-xzz69esf.js +1 -0
  57. package/dist/chunk-zdnk7qtn.js +5 -0
  58. package/package.json +1 -1
  59. package/dist/chunk-0f8nn2h1.js +0 -5
  60. package/dist/chunk-5d2cdvdy.js +0 -2
  61. package/dist/chunk-8gzm51m8.js +0 -1
  62. package/dist/chunk-bvyydst6.js +0 -166
  63. package/dist/chunk-e7pssnr9.js +0 -1
  64. package/dist/chunk-eym0bdee.js +0 -1
  65. package/dist/chunk-hsgcdk2a.js +0 -1
  66. package/dist/chunk-m65pse74.js +0 -1
  67. package/dist/chunk-q9y9hxnt.js +0 -1
  68. package/dist/chunk-qz0pe10c.js +0 -1
  69. package/dist/chunk-t2gq918a.js +0 -3
  70. package/dist/chunk-w3fy09rw.js +0 -8
  71. package/dist/chunk-w67k19a1.js +0 -1
@@ -1,2 +1,2 @@
1
- import{je as B}from"./chunk-yn51162x.js";import{bh as Y}from"./chunk-ypqp368c.js";import{eh as Z,hh as $}from"./chunk-t8xmh4w2.js";import{createHash as H}from"node:crypto";var N="fast-mode-2026-02-01";function R(q,z,x){if(z.api!=="anthropic-messages"||x.providerValue!=="fast")return q;let J={...q},w=Object.keys(J).find((G)=>G.toLowerCase()==="anthropic-beta")??"anthropic-beta",Q=new Set((J[w]??"").split(",").map((G)=>G.trim()).filter(Boolean));return Q.add(N),J[w]=[...Q].join(","),J}function D(q){return`BLADE_MODEL_API_KEY_${H("sha256").update(q).digest("hex").slice(0,32).toUpperCase()}`}function F(q,z){if(!q.fallbackModels?.length)return;return q.fallbackModels.map((x)=>{let J=(z.models??[]).filter((G)=>G.provider===x.provider&&G.model===x.model),w=x.configId?(z.models??[]).find((G)=>G.id===x.configId):J.length===1?J[0]:void 0;if(x.configId&&!w)throw Error(`Unknown fallback model config ID: ${x.configId}`);if(w&&(w.provider!==x.provider||w.model!==x.model))throw Error(`Fallback model config ${w.id} does not match ${x.provider}/${x.model}`);if(!x.configId&&J.length>1)throw Error(`Fallback model ${x.provider}/${x.model} is ambiguous; set configId`);if(!w)return x;let Q=w.provider===q.provider;return{...x,configId:w.id,channel:{apiKey:process.env[D(w.id)]??(Q?process.env.BLADE_API_KEY:void 0),baseUrl:w.overrides?.baseUrl??(Q?process.env.BLADE_BASE_URL:void 0),temperature:w.overrides?.temperature??z.temperature,maxOutputTokens:w.overrides?.maxOutputTokens,timeout:w.overrides?.timeout??z.timeout,streamIdleTimeout:w.overrides?.streamIdleTimeout,apiVersion:w.overrides?.apiVersion,customHeaders:w.overrides?.customHeaders,enablePromptCaching:w.overrides?.enablePromptCaching}}})}function h(q,z,x,J=Y(),w="auto",Q="auto"){let G=J.resolveConfig(q),U=B(G,x),W=$(G,w),X=Z(G,Q),L=q.overrides;return{config:q,model:G,displayName:q.displayName??G.name,chat:{provider:q.provider,model:q.model,apiKey:process.env[D(q.id)]??process.env.BLADE_API_KEY,baseUrl:process.env.BLADE_BASE_URL??L?.baseUrl,temperature:L?.temperature??z.temperature,maxContextTokens:G.contextWindow,maxOutputTokens:L?.maxOutputTokens,timeout:L?.timeout??z.timeout,streamIdleTimeout:L?.streamIdleTimeout,reasoningEnabled:U.effective!=="off",...U.effective==="off"?{}:{reasoningEffort:U.effective},...W.providerValue?{serviceTier:W.providerValue}:{},...X.providerValue?{responseVerbosity:X.providerValue}:{},fallbackModels:F(q,z),enablePromptCaching:L?.enablePromptCaching,customHeaders:R(L?.customHeaders,G,W),apiVersion:L?.apiVersion,maxRetries:L?.maxRetries,providerCircuitBreakerOpenMs:z.providerCircuitBreakerOpenMs,providerRequestConcurrency:z.providerRequestConcurrency,providerRequestAdmissionMs:z.providerRequestAdmissionMs,providerRequestPendingBytes:z.providerRequestPendingBytes,modelCatalog:J},reasoning:U,serviceTier:W,responseVerbosity:X}}function j(q,z=Y()){try{return q.displayName??z.getModel(q.provider,q.model).name}catch{return q.displayName??q.model}}
1
+ import{je as B}from"./chunk-yn51162x.js";import{bh as Y}from"./chunk-2px6hzdc.js";import{eh as Z,hh as $}from"./chunk-t8xmh4w2.js";import{createHash as H}from"node:crypto";var N="fast-mode-2026-02-01";function R(q,z,x){if(z.api!=="anthropic-messages"||x.providerValue!=="fast")return q;let J={...q},w=Object.keys(J).find((G)=>G.toLowerCase()==="anthropic-beta")??"anthropic-beta",Q=new Set((J[w]??"").split(",").map((G)=>G.trim()).filter(Boolean));return Q.add(N),J[w]=[...Q].join(","),J}function D(q){return`BLADE_MODEL_API_KEY_${H("sha256").update(q).digest("hex").slice(0,32).toUpperCase()}`}function F(q,z){if(!q.fallbackModels?.length)return;return q.fallbackModels.map((x)=>{let J=(z.models??[]).filter((G)=>G.provider===x.provider&&G.model===x.model),w=x.configId?(z.models??[]).find((G)=>G.id===x.configId):J.length===1?J[0]:void 0;if(x.configId&&!w)throw Error(`Unknown fallback model config ID: ${x.configId}`);if(w&&(w.provider!==x.provider||w.model!==x.model))throw Error(`Fallback model config ${w.id} does not match ${x.provider}/${x.model}`);if(!x.configId&&J.length>1)throw Error(`Fallback model ${x.provider}/${x.model} is ambiguous; set configId`);if(!w)return x;let Q=w.provider===q.provider;return{...x,configId:w.id,channel:{apiKey:process.env[D(w.id)]??(Q?process.env.BLADE_API_KEY:void 0),baseUrl:w.overrides?.baseUrl??(Q?process.env.BLADE_BASE_URL:void 0),temperature:w.overrides?.temperature??z.temperature,maxOutputTokens:w.overrides?.maxOutputTokens,timeout:w.overrides?.timeout??z.timeout,streamIdleTimeout:w.overrides?.streamIdleTimeout,apiVersion:w.overrides?.apiVersion,customHeaders:w.overrides?.customHeaders,enablePromptCaching:w.overrides?.enablePromptCaching}}})}function h(q,z,x,J=Y(),w="auto",Q="auto"){let G=J.resolveConfig(q),U=B(G,x),W=$(G,w),X=Z(G,Q),L=q.overrides;return{config:q,model:G,displayName:q.displayName??G.name,chat:{provider:q.provider,model:q.model,apiKey:process.env[D(q.id)]??process.env.BLADE_API_KEY,baseUrl:process.env.BLADE_BASE_URL??L?.baseUrl,temperature:L?.temperature??z.temperature,maxContextTokens:G.contextWindow,maxOutputTokens:L?.maxOutputTokens,timeout:L?.timeout??z.timeout,streamIdleTimeout:L?.streamIdleTimeout,reasoningEnabled:U.effective!=="off",...U.effective==="off"?{}:{reasoningEffort:U.effective},...W.providerValue?{serviceTier:W.providerValue}:{},...X.providerValue?{responseVerbosity:X.providerValue}:{},fallbackModels:F(q,z),enablePromptCaching:L?.enablePromptCaching,customHeaders:R(L?.customHeaders,G,W),apiVersion:L?.apiVersion,maxRetries:L?.maxRetries,providerCircuitBreakerOpenMs:z.providerCircuitBreakerOpenMs,providerRequestConcurrency:z.providerRequestConcurrency,providerRequestAdmissionMs:z.providerRequestAdmissionMs,providerRequestPendingBytes:z.providerRequestPendingBytes,modelCatalog:J},reasoning:U,serviceTier:W,responseVerbosity:X}}function j(q,z=Y()){try{return q.displayName??z.getModel(q.provider,q.model).name}catch{return q.displayName??q.model}}
2
2
  export{D as fe,h as ge,j as he};
@@ -1,4 +1,4 @@
1
- import{m as MH,n as fH,o as yH,p as SH,q as TH,r as bH}from"./chunk-mgv3qr9b.js";import{A as JH,v as AH,w as t,x as e,y as HH,z as d}from"./chunk-1xjzd1jn.js";import{N as jH,P as xH,Q as UH,S as VH,V as _H}from"./chunk-g324ww9d.js";import"./chunk-b793bj62.js";import"./chunk-5147jh26.js";import{db as s,pb as LH,yb as WH}from"./chunk-bvyydst6.js";import"./chunk-th4jjfgm.js";import{Cc as O,Nc as a,nc as QH,rc as DH}from"./chunk-6pkyc8r6.js";import"./chunk-0wxkymqv.js";import"./chunk-zdxxqchm.js";import{jd as PH}from"./chunk-7cm6tfnn.js";import{ld as FH,md as EH,nd as zH}from"./chunk-nxek5ev2.js";import{od as GH}from"./chunk-s7jsadnc.js";import"./chunk-bjqjdw34.js";import{Od as NH}from"./chunk-qd9vk8t1.js";import"./chunk-v508x7cg.js";import"./chunk-0j22w4wh.js";import"./chunk-0f8nn2h1.js";import"./chunk-efemjy9y.js";import"./chunk-yn51162x.js";import"./chunk-c8h3c8an.js";import"./chunk-ptcb5fb7.js";import"./chunk-hat9v5c5.js";import"./chunk-cdy9efgm.js";import"./chunk-zvz2cnt4.js";import"./chunk-asgyyv1s.js";import"./chunk-m57w4p91.js";import"./chunk-kf070906.js";import{ig as YH}from"./chunk-h0ft81a3.js";import{kg as BH,mg as H,ng as KH,pg as N}from"./chunk-v0rsz1rt.js";import"./chunk-xz6y0w4n.js";import{wg as g}from"./chunk-k0pa8874.js";import"./chunk-6pyktfa4.js";import"./chunk-98n2rxmq.js";import"./chunk-ypqp368c.js";import"./chunk-t8xmh4w2.js";import"./chunk-4ge1jkf8.js";import"./chunk-t2gq918a.js";import"./chunk-5d2cdvdy.js";import"./chunk-ppsvzgs5.js";import"./chunk-hcv17986.js";import MJ from"yargs";import{hideBin as fJ}from"yargs/helpers";function p(K,V,Q){if(K.off){K.off(V,Q);return}K.removeListener?.(V,Q)}function wH(K,V){if(!K.once&&!K.on||!K.off&&!K.removeListener)throw Error("Writable returned false without an observable drain contract");return new Promise((Q,q)=>{let J=!1,Z=()=>{p(K,"drain",x),p(K,"error",j),V.removeEventListener("abort",G)},W=(F)=>{if(J)return;J=!0,Z(),F()},x=()=>W(Q),j=(F)=>W(()=>q(F??Error("Writable emitted an error"))),G=()=>W(()=>q(V.reason??Error("Writable drain aborted")));if(V.aborted){G();return}let f=K.once?.bind(K)??K.on?.bind(K);f?.("drain",x),f?.("error",j),V.addEventListener("abort",G,{once:!0})})}async function mH(K,V,Q){if(K.destroyed||K.writableEnded)throw Error("Writable is already closed");if(K.write(V)===!1)await wH(K,Q)}class v{options;queues;sinkErrorListeners=[];failed=!1;closing=!1;handleAbort=()=>{this.fail(new d("aborted","Headless output was aborted",{cause:this.options.signal?.reason}))};constructor(K,V={}){this.options=V;let Q=(q)=>new JH({maxPendingItems:V.maxPendingItems??t,maxPendingBytes:V.maxPendingBytes??e,writeTimeoutMs:V.writeTimeoutMs??HH,sizeOf:(J)=>Buffer.byteLength(J),write:(J,Z)=>mH(K[q],J,Z),onFailure:(J)=>this.fail(J)});if(this.queues={stdout:Q("stdout"),stderr:Q("stderr")},this.observeSinkErrors(K.stdout),K.stderr!==K.stdout)this.observeSinkErrors(K.stderr);if(V.signal?.addEventListener("abort",this.handleAbort,{once:!0}),V.signal?.aborted)this.handleAbort()}write(K,V){return this.queues[K].offer(V).accepted}async flush(){await Promise.all([this.queues.stdout.flush(),this.queues.stderr.flush()])}close(K){if(this.closing||this.failed)return;this.closing=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K)}stats(){return{stdout:this.queues.stdout.stats(),stderr:this.queues.stderr.stats()}}observeSinkErrors(K){if(!K.on||!K.off&&!K.removeListener)return;let V=(Q)=>{this.fail(new d("write_failed","Headless writable failed",{cause:Q??Error("Writable emitted an error")}))};K.on("error",V),this.sinkErrorListeners.push({writer:K,listener:V})}fail(K){if(this.closing||this.failed)return;this.failed=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K),this.options.onFailure?.(K)}removeSinkErrorListeners(){for(let{writer:K,listener:V}of this.sinkErrorListeners.splice(0))p(K,"error",V)}}var ZH=1;function D(K){return H.Object({event_version:H.Literal(ZH),...K})}var cH=D({type:H.Literal("content_delta"),delta:H.String()}),uH=D({type:H.Literal("thinking_delta"),delta:H.String()}),dH=D({type:H.Literal("thinking"),content:H.String()}),pH=D({type:H.Literal("stream_end")}),vH=D({type:H.Literal("content"),content:H.String()}),lH=D({type:H.Literal("structured_output"),output:H.Record(H.String(),H.Unknown()),schema_digest:H.String({pattern:"^[a-f0-9]{64}$"})}),l=N(["readonly","write","execute"]),aH=H.Object({kind:l,scope:N(["global","session"]),queue_position:H.Integer({minimum:1}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:1})}),sH=D({type:H.Literal("tool_start"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l)}),iH=D({type:H.Literal("tool_progress"),tool_name:H.String(),message:H.String(),progress:H.Optional(H.Number()),total:H.Optional(H.Number()),admission:H.Optional(aH)}),oH=H.Object({auto_backgrounded:H.Literal(!0),background_reason:H.Literal("foreground_budget"),foreground_budget_ms:H.Integer({minimum:1}),shell_id:H.String({minLength:1,maxLength:128,pattern:"^bash_[A-Za-z0-9-]+$"}),pid:H.Optional(H.Integer({minimum:1})),terminal_transport:N(["local","acp"])}),rH=D({type:H.Literal("tool_result"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l),success:H.Optional(H.Boolean()),error_type:H.Optional(H.String()),error_message:H.Optional(H.String()),background:H.Optional(oH)}),nH=D({type:H.Literal("mcp_catalog_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),tH=D({type:H.Literal("mcp_content_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),content_kind:N(["resources","resource_templates","prompts"]),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),eH=D({type:H.Literal("mcp_resource_updated"),revision:H.Integer({minimum:1}),server_name:H.String(),uri:H.String()}),HJ=D({type:H.Literal("mcp_connection_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),phase:N(["reconnecting","recovered","failed"]),reason:H.String(),attempt:H.Integer({minimum:0}),max_attempts:H.Integer({minimum:0}),next_retry_at:H.Optional(H.Integer({minimum:0})),error:H.Optional(H.String())}),JJ=D({type:H.Literal("mcp_log"),revision:H.Integer({minimum:1}),server_name:H.String(),level:N(["debug","info","notice","warning","error","critical","alert","emergency"]),logger:H.Optional(H.String()),message:H.String(),projected_bytes:H.Integer({minimum:0}),data_sha256:H.String(),truncated:H.Boolean(),details_omitted:H.Boolean(),timestamp:H.Integer({minimum:0}),synthetic:H.Optional(H.Boolean())}),KJ=D({type:H.Literal("mcp_instructions_changed"),revision:H.Integer({minimum:0}),server_name:H.String(),action:N(["added","removed"]),reason:N(["snapshot","connection","disconnection"]),text:H.Optional(H.String()),source_bytes:H.Optional(H.Integer({minimum:0})),projected_bytes:H.Optional(H.Integer({minimum:0})),sha256:H.Optional(H.String()),truncated:H.Optional(H.Boolean()),details_omitted:H.Optional(H.Boolean())}),VJ=D({type:H.Literal("mcp_task_changed"),revision:H.Integer({minimum:0}),task_id:H.String(),server_name:H.String(),tool_name:H.String(),status:N(["working","input_required","interrupted","completed","failed","cancelled"]),status_message:H.Optional(H.String()),created_at:H.Integer({minimum:0}),updated_at:H.Integer({minimum:0}),completed_at:H.Optional(H.Integer({minimum:0})),has_result:H.Boolean(),error:H.Optional(H.String())}),ZJ=D({type:H.Literal("project_rules_loaded"),files:H.Array(H.Object({id:H.String(),relative_path:H.String(),source:N(["project","local"]),conditional:H.Boolean(),content_sha256:H.String({pattern:"^[a-f0-9]{64}$"})})),trigger_paths:H.Array(H.String()),blocked_write:H.Boolean()}),$J=D({type:H.Literal("user_shell_started"),execution_id:H.String(),command:H.String(),auxiliary:H.Boolean()}),qJ=D({type:H.Literal("user_shell_output"),execution_id:H.String(),stream:N(["stdout","stderr"]),chunk:H.String(),stream_truncated:H.Boolean()}),XJ=D({type:H.Literal("user_shell_completed"),execution_id:H.String(),message_id:H.String(),status:N(["completed","failed","aborted","timed_out","spawn_error"]),exit_code:H.Union([H.Integer(),H.Null()]),duration_ms:H.Number({minimum:0}),stdout:H.String(),stderr:H.String(),truncated:H.Boolean(),auxiliary:H.Boolean()}),YJ=D({type:H.Literal("phase"),phase:N(["turn","searching","inspecting","target_hit","executing","completed"]),status:N(["ongoing","hit","done"]),message:H.String(),turn:H.Optional(H.Number()),tool_name:H.Optional(H.String()),target:H.Optional(H.String())}),BJ=D({type:H.Literal("tool_detail"),tool_name:H.String(),detail:H.String()}),NJ=D({type:H.Literal("task_update"),tasks:H.Array(VH)}),QJ=D({type:H.Literal("goal"),state:N(["updated","cleared"]),goal_id:H.Optional(H.String()),status:H.Optional(N(["active","verifying","paused","blocked","usage_limited","budget_limited","complete"])),verification_attempt:H.Optional(H.Integer({minimum:1})),verification_status:H.Optional(N(["pending","pass","fail","partial"])),verifier_session_id:H.Optional(H.String()),verification_evidence_sha256:H.Optional(H.String({pattern:"^[a-f0-9]{64}$"}))}),DJ=D({type:H.Literal("subagent"),state:N(["spawned","completed"]),session_id:H.String(),subagent_type:H.Optional(H.String()),success:H.Optional(H.Boolean()),summary:H.Optional(H.String()),verification_verdict:H.Optional(N(["pass","fail","partial"])),resumed_from:H.Optional(H.String()),root_agent_id:H.Optional(H.String()),resume_depth:H.Optional(H.Integer({minimum:0}))}),LJ=D({type:H.Literal("token_usage"),input_tokens:H.Number(),output_tokens:H.Number(),total_tokens:H.Number(),max_context_tokens:H.Number(),cache_read_tokens:H.Optional(H.Number()),cache_write_tokens:H.Optional(H.Number()),prompt_cache_break:H.Optional(H.Object({reason:N(["model_changed","system_prompt_changed","tools_changed","request_policy_changed","ttl_expired","server_side"]),previous_cache_read_tokens:H.Number(),cache_read_tokens:H.Number(),cache_write_tokens:H.Number(),token_drop:H.Number(),elapsed_ms:H.Number(),call_number:H.Number(),system_prompt_changed:H.Boolean(),system_char_delta:H.Number(),tools_changed:H.Boolean(),added_tool_count:H.Number(),removed_tool_count:H.Number(),changed_tool_count:H.Number(),model_changed:H.Boolean(),request_policy_changed:H.Boolean()})),cost_usd:H.Optional(H.Number())}),WJ=D({type:H.Literal("compacting"),state:N(["started","completed"]),reason:H.Optional(N(["threshold","context_limit","turn_limit","manual"])),strategy:H.Optional(N(["llm","fallback","snip"])),outcome:H.Optional(N(["completed","fallback","failed"])),pre_tokens:H.Optional(H.Number({minimum:0})),post_tokens:H.Optional(H.Number({minimum:0}))}),jJ=D({type:H.Literal("provider_retry"),phase:N(["scheduled","waiting","attempt","recovered","exhausted"]),attempt:H.Integer({minimum:0}),max_retries:H.Integer({minimum:0}),reason:N(["rate_limit","server_error","timeout","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),delay_ms:H.Optional(H.Integer({minimum:0})),next_retry_at:H.Optional(H.Integer({minimum:0})),mode:H.Optional(N(["standard","bounded_foreground"])),recovery_budget_ms:H.Optional(H.Integer({minimum:0})),recovery_elapsed_ms:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0})),exhausted_by:H.Optional(N(["attempt_limit","recovery_budget"]))}),xJ=D({type:H.Literal("provider_admission"),phase:N(["queued","admitted","rejected"]),request_class:N(["foreground","background","internal"]),resource:N(["stream","pending_count","pending_bytes"]),scope:N(["global","domain","owner","class"]),reason:H.Optional(N(["capacity","queue_full","wait_timeout","closed"])),queue_position:H.Integer({minimum:0}),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:0}),wait_ms:H.Integer({minimum:0}),max_wait_ms:H.Integer({minimum:0}),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),UJ=D({type:H.Literal("provider_circuit"),phase:N(["opened","waiting","probe","closed","reopened","rejected"]),reason:N(["rate_limit","server_error","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),retry_after_ms:H.Optional(H.Integer({minimum:0})),next_probe_at:H.Optional(H.Integer({minimum:0})),open_duration_ms:H.Integer({minimum:0}),sample_count:H.Optional(H.Integer({minimum:0})),failure_count:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),_J=D({type:H.Literal("provider_stall"),phase:N(["detected","recovered"]),stall_count:H.Integer({minimum:1}),duration_ms:H.Integer({minimum:0}),warning_after_ms:H.Integer({minimum:1}),timeout_ms:H.Integer({minimum:1}),output_started:H.Boolean()}),GJ=D({type:H.Literal("action_stationarity"),phase:N(["detected","recovered","halted"]),tool_name:H.String(),run_length:H.Integer({minimum:1}),nudge_threshold:H.Integer({minimum:1}),halt_threshold:H.Integer({minimum:1}),progress_aware:H.Boolean()}),PJ=D({type:H.Literal("turn_limit"),turns_count:H.Number(),action:H.Literal("continue")}),FJ=D({type:H.Literal("task_session"),session_id:H.String(),project_path:H.String(),source_project_path:H.String(),isolation:N(["local","worktree"]),worktree_branch:H.Optional(H.String()),base_commit:H.Optional(H.String())}),EJ=D({type:H.Literal("task_admission"),state:N(["queued","running"]),queue_position:H.Optional(H.Integer({minimum:1})),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),max_concurrent_tasks:H.Integer({minimum:1})}),zJ=D({type:H.Literal("output"),content:H.String(),exit_code:H.Number()}),AJ=D({type:H.Literal("error"),message:H.String()}),aJ=KH(H.Union([cH,uH,dH,pH,vH,lH,sH,iH,rH,nH,tH,eH,HJ,JJ,KJ,VJ,ZJ,$J,qJ,XJ,YJ,BJ,NJ,QJ,DJ,LJ,WJ,xJ,UJ,jJ,_J,GJ,PJ,FJ,EJ,zJ,AJ]));function $H(K,V){return{event_version:ZH,type:K,...V}}function yJ(K){if(!K||typeof K!=="object"||Array.isArray(K))return;let V=K;if(V.auto_backgrounded!==!0||V.background_reason!=="foreground_budget"||!Number.isSafeInteger(V.foreground_budget_ms)||V.foreground_budget_ms<=0||typeof V.shell_id!=="string"||!/^bash_[A-Za-z0-9-]+$/.test(V.shell_id)||V.shell_id.length>128||V.terminal_transport!=="local"&&V.terminal_transport!=="acp"||V.pid!==void 0&&(!Number.isSafeInteger(V.pid)||V.pid<=0))return;return{auto_backgrounded:!0,background_reason:"foreground_budget",foreground_budget_ms:V.foreground_budget_ms,shell_id:V.shell_id,...V.pid===void 0?{}:{pid:V.pid},terminal_transport:V.terminal_transport}}function SJ(K){let V=new AbortController,Q=(Z)=>{if(!V.signal.aborted)V.abort(Z)},q=()=>Q("interrupt"),J=()=>Q(K?.signal?.reason);if(K?.signal){if(K.signal.addEventListener("abort",J,{once:!0}),K.signal.aborted)J()}else process.once("SIGINT",q),process.once("SIGTERM",q);return{signal:V.signal,abort:Q,dispose:()=>{K?.signal?.removeEventListener("abort",J),process.removeListener("SIGINT",q),process.removeListener("SIGTERM",q)}}}var TJ=N(["text","jsonl"]),bJ=H.Object({headless:H.Optional(H.Boolean()),message:H.Optional(H.String()),_:H.Optional(H.Array(H.Union([H.String(),H.Number()]))),model:H.Optional(H.String()),systemPrompt:H.Optional(H.String()),appendSystemPrompt:H.Optional(H.String()),verificationAgent:H.Optional(H.Boolean()),maxTurns:H.Optional(H.Refine(H.Integer(),(K)=>K===-1||K>0,()=>"must be -1 (unlimited) or a positive integer")),permissionMode:H.Optional(H.Enum(YH)),mcpConfig:H.Optional(H.Array(H.String())),strictMcpConfig:H.Optional(H.Boolean()),sessionId:H.Optional(H.String()),allowedTools:H.Optional(H.Array(H.String())),disallowedTools:H.Optional(H.Array(H.String())),agents:H.Optional(H.String()),continue:H.Optional(H.Boolean()),resume:H.Optional(H.Union([H.String(),H.Boolean()])),forkSession:H.Optional(H.Boolean()),taskIsolation:H.Optional(N(["local","worktree"])),outputFormat:H.Optional(TJ),jsonSchema:H.Optional(H.String()),outputSchema:H.Optional(H.String())});class RH{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(K){this.openedThinking=K}hasOpenThinking(){return this.openedThinking}completeStream(){let K={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,K}}function RJ(K){return K.issues.map((V)=>`${V.path.join(".")||"options"}: ${V.message}`).join("; ")}function IJ(K){let V=BH(bJ,K);if(!V.success)throw Error(`Invalid headless options: ${RJ(V.error)}`);return V.data}function gJ(K){return K.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(V)=>V.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("verification-agent",{describe:"Run the built-in independent verification agent after non-trivial changes",type:"boolean",default:!0}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}).option("json-schema",{alias:["jsonSchema"],describe:"Inline JSON Schema for the structured final response",type:"string"}).option("output-schema",{alias:["outputSchema"],describe:"Path to a JSON Schema file for the structured final response",type:"string"}).option("task-isolation",{alias:["taskIsolation"],choices:["local","worktree"],describe:"Dispatch a new durable task in the selected workspace mode",type:"string"}),async(V)=>{if(!V.headless)return;let Q=await mJ(V);process.exit(Q)})}function L(K,V=""){K.write(`${V}
1
+ import{m as MH,n as fH,o as yH,p as SH,q as TH,r as bH}from"./chunk-gtcxybv5.js";import{A as JH,v as AH,w as t,x as e,y as HH,z as d}from"./chunk-byqxaa9v.js";import{N as jH,P as xH,Q as UH,S as VH,V as _H}from"./chunk-d3ttqmyt.js";import"./chunk-qgrq04hb.js";import"./chunk-92x15fzx.js";import{db as s,pb as LH,yb as WH}from"./chunk-nx31fkkf.js";import"./chunk-th4jjfgm.js";import{Cc as O,Nc as a,nc as QH,rc as DH}from"./chunk-97aywyzn.js";import"./chunk-0wxkymqv.js";import"./chunk-mtphps19.js";import{jd as PH}from"./chunk-3hy06st1.js";import{ld as FH,md as EH,nd as zH}from"./chunk-2428hhvj.js";import{od as GH}from"./chunk-s7jsadnc.js";import"./chunk-bjqjdw34.js";import{Od as NH}from"./chunk-1je1xw6v.js";import"./chunk-v508x7cg.js";import"./chunk-0j22w4wh.js";import"./chunk-zdnk7qtn.js";import"./chunk-wrfay5r3.js";import"./chunk-yn51162x.js";import"./chunk-fcv8b6ny.js";import"./chunk-axtzde5k.js";import"./chunk-hat9v5c5.js";import"./chunk-cdy9efgm.js";import"./chunk-zvz2cnt4.js";import"./chunk-4ke8k0xw.js";import"./chunk-m57w4p91.js";import"./chunk-82htkvz8.js";import{ig as YH}from"./chunk-h0ft81a3.js";import{kg as BH,mg as H,ng as KH,pg as N}from"./chunk-v0rsz1rt.js";import"./chunk-xz6y0w4n.js";import{wg as g}from"./chunk-k0pa8874.js";import"./chunk-6pyktfa4.js";import"./chunk-t2wgf9tq.js";import"./chunk-2px6hzdc.js";import"./chunk-t8xmh4w2.js";import"./chunk-azw0jckv.js";import"./chunk-jzntxp7f.js";import"./chunk-r9d4mjxj.js";import"./chunk-9q852bsc.js";import"./chunk-wfy851et.js";import MJ from"yargs";import{hideBin as fJ}from"yargs/helpers";function p(K,V,Q){if(K.off){K.off(V,Q);return}K.removeListener?.(V,Q)}function wH(K,V){if(!K.once&&!K.on||!K.off&&!K.removeListener)throw Error("Writable returned false without an observable drain contract");return new Promise((Q,q)=>{let J=!1,Z=()=>{p(K,"drain",x),p(K,"error",j),V.removeEventListener("abort",G)},W=(F)=>{if(J)return;J=!0,Z(),F()},x=()=>W(Q),j=(F)=>W(()=>q(F??Error("Writable emitted an error"))),G=()=>W(()=>q(V.reason??Error("Writable drain aborted")));if(V.aborted){G();return}let f=K.once?.bind(K)??K.on?.bind(K);f?.("drain",x),f?.("error",j),V.addEventListener("abort",G,{once:!0})})}async function mH(K,V,Q){if(K.destroyed||K.writableEnded)throw Error("Writable is already closed");if(K.write(V)===!1)await wH(K,Q)}class v{options;queues;sinkErrorListeners=[];failed=!1;closing=!1;handleAbort=()=>{this.fail(new d("aborted","Headless output was aborted",{cause:this.options.signal?.reason}))};constructor(K,V={}){this.options=V;let Q=(q)=>new JH({maxPendingItems:V.maxPendingItems??t,maxPendingBytes:V.maxPendingBytes??e,writeTimeoutMs:V.writeTimeoutMs??HH,sizeOf:(J)=>Buffer.byteLength(J),write:(J,Z)=>mH(K[q],J,Z),onFailure:(J)=>this.fail(J)});if(this.queues={stdout:Q("stdout"),stderr:Q("stderr")},this.observeSinkErrors(K.stdout),K.stderr!==K.stdout)this.observeSinkErrors(K.stderr);if(V.signal?.addEventListener("abort",this.handleAbort,{once:!0}),V.signal?.aborted)this.handleAbort()}write(K,V){return this.queues[K].offer(V).accepted}async flush(){await Promise.all([this.queues.stdout.flush(),this.queues.stderr.flush()])}close(K){if(this.closing||this.failed)return;this.closing=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K)}stats(){return{stdout:this.queues.stdout.stats(),stderr:this.queues.stderr.stats()}}observeSinkErrors(K){if(!K.on||!K.off&&!K.removeListener)return;let V=(Q)=>{this.fail(new d("write_failed","Headless writable failed",{cause:Q??Error("Writable emitted an error")}))};K.on("error",V),this.sinkErrorListeners.push({writer:K,listener:V})}fail(K){if(this.closing||this.failed)return;this.failed=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K),this.options.onFailure?.(K)}removeSinkErrorListeners(){for(let{writer:K,listener:V}of this.sinkErrorListeners.splice(0))p(K,"error",V)}}var ZH=1;function D(K){return H.Object({event_version:H.Literal(ZH),...K})}var cH=D({type:H.Literal("content_delta"),delta:H.String()}),uH=D({type:H.Literal("thinking_delta"),delta:H.String()}),dH=D({type:H.Literal("thinking"),content:H.String()}),pH=D({type:H.Literal("stream_end")}),vH=D({type:H.Literal("content"),content:H.String()}),lH=D({type:H.Literal("structured_output"),output:H.Record(H.String(),H.Unknown()),schema_digest:H.String({pattern:"^[a-f0-9]{64}$"})}),l=N(["readonly","write","execute"]),aH=H.Object({kind:l,scope:N(["global","session"]),queue_position:H.Integer({minimum:1}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:1})}),sH=D({type:H.Literal("tool_start"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l)}),iH=D({type:H.Literal("tool_progress"),tool_name:H.String(),message:H.String(),progress:H.Optional(H.Number()),total:H.Optional(H.Number()),admission:H.Optional(aH)}),oH=H.Object({auto_backgrounded:H.Literal(!0),background_reason:H.Literal("foreground_budget"),foreground_budget_ms:H.Integer({minimum:1}),shell_id:H.String({minLength:1,maxLength:128,pattern:"^bash_[A-Za-z0-9-]+$"}),pid:H.Optional(H.Integer({minimum:1})),terminal_transport:N(["local","acp"])}),rH=D({type:H.Literal("tool_result"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l),success:H.Optional(H.Boolean()),error_type:H.Optional(H.String()),error_message:H.Optional(H.String()),background:H.Optional(oH)}),nH=D({type:H.Literal("mcp_catalog_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),tH=D({type:H.Literal("mcp_content_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),content_kind:N(["resources","resource_templates","prompts"]),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),eH=D({type:H.Literal("mcp_resource_updated"),revision:H.Integer({minimum:1}),server_name:H.String(),uri:H.String()}),HJ=D({type:H.Literal("mcp_connection_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),phase:N(["reconnecting","recovered","failed"]),reason:H.String(),attempt:H.Integer({minimum:0}),max_attempts:H.Integer({minimum:0}),next_retry_at:H.Optional(H.Integer({minimum:0})),error:H.Optional(H.String())}),JJ=D({type:H.Literal("mcp_log"),revision:H.Integer({minimum:1}),server_name:H.String(),level:N(["debug","info","notice","warning","error","critical","alert","emergency"]),logger:H.Optional(H.String()),message:H.String(),projected_bytes:H.Integer({minimum:0}),data_sha256:H.String(),truncated:H.Boolean(),details_omitted:H.Boolean(),timestamp:H.Integer({minimum:0}),synthetic:H.Optional(H.Boolean())}),KJ=D({type:H.Literal("mcp_instructions_changed"),revision:H.Integer({minimum:0}),server_name:H.String(),action:N(["added","removed"]),reason:N(["snapshot","connection","disconnection"]),text:H.Optional(H.String()),source_bytes:H.Optional(H.Integer({minimum:0})),projected_bytes:H.Optional(H.Integer({minimum:0})),sha256:H.Optional(H.String()),truncated:H.Optional(H.Boolean()),details_omitted:H.Optional(H.Boolean())}),VJ=D({type:H.Literal("mcp_task_changed"),revision:H.Integer({minimum:0}),task_id:H.String(),server_name:H.String(),tool_name:H.String(),status:N(["working","input_required","interrupted","completed","failed","cancelled"]),status_message:H.Optional(H.String()),created_at:H.Integer({minimum:0}),updated_at:H.Integer({minimum:0}),completed_at:H.Optional(H.Integer({minimum:0})),has_result:H.Boolean(),error:H.Optional(H.String())}),ZJ=D({type:H.Literal("project_rules_loaded"),files:H.Array(H.Object({id:H.String(),relative_path:H.String(),source:N(["project","local"]),conditional:H.Boolean(),content_sha256:H.String({pattern:"^[a-f0-9]{64}$"})})),trigger_paths:H.Array(H.String()),blocked_write:H.Boolean()}),$J=D({type:H.Literal("user_shell_started"),execution_id:H.String(),command:H.String(),auxiliary:H.Boolean()}),qJ=D({type:H.Literal("user_shell_output"),execution_id:H.String(),stream:N(["stdout","stderr"]),chunk:H.String(),stream_truncated:H.Boolean()}),XJ=D({type:H.Literal("user_shell_completed"),execution_id:H.String(),message_id:H.String(),status:N(["completed","failed","aborted","timed_out","spawn_error"]),exit_code:H.Union([H.Integer(),H.Null()]),duration_ms:H.Number({minimum:0}),stdout:H.String(),stderr:H.String(),truncated:H.Boolean(),auxiliary:H.Boolean()}),YJ=D({type:H.Literal("phase"),phase:N(["turn","searching","inspecting","target_hit","executing","completed"]),status:N(["ongoing","hit","done"]),message:H.String(),turn:H.Optional(H.Number()),tool_name:H.Optional(H.String()),target:H.Optional(H.String())}),BJ=D({type:H.Literal("tool_detail"),tool_name:H.String(),detail:H.String()}),NJ=D({type:H.Literal("task_update"),tasks:H.Array(VH)}),QJ=D({type:H.Literal("goal"),state:N(["updated","cleared"]),goal_id:H.Optional(H.String()),status:H.Optional(N(["active","verifying","paused","blocked","usage_limited","budget_limited","complete"])),verification_attempt:H.Optional(H.Integer({minimum:1})),verification_status:H.Optional(N(["pending","pass","fail","partial"])),verifier_session_id:H.Optional(H.String()),verification_evidence_sha256:H.Optional(H.String({pattern:"^[a-f0-9]{64}$"}))}),DJ=D({type:H.Literal("subagent"),state:N(["spawned","completed"]),session_id:H.String(),subagent_type:H.Optional(H.String()),success:H.Optional(H.Boolean()),summary:H.Optional(H.String()),verification_verdict:H.Optional(N(["pass","fail","partial"])),resumed_from:H.Optional(H.String()),root_agent_id:H.Optional(H.String()),resume_depth:H.Optional(H.Integer({minimum:0}))}),LJ=D({type:H.Literal("token_usage"),input_tokens:H.Number(),output_tokens:H.Number(),total_tokens:H.Number(),max_context_tokens:H.Number(),cache_read_tokens:H.Optional(H.Number()),cache_write_tokens:H.Optional(H.Number()),prompt_cache_break:H.Optional(H.Object({reason:N(["model_changed","system_prompt_changed","tools_changed","request_policy_changed","ttl_expired","server_side"]),previous_cache_read_tokens:H.Number(),cache_read_tokens:H.Number(),cache_write_tokens:H.Number(),token_drop:H.Number(),elapsed_ms:H.Number(),call_number:H.Number(),system_prompt_changed:H.Boolean(),system_char_delta:H.Number(),tools_changed:H.Boolean(),added_tool_count:H.Number(),removed_tool_count:H.Number(),changed_tool_count:H.Number(),model_changed:H.Boolean(),request_policy_changed:H.Boolean()})),cost_usd:H.Optional(H.Number())}),WJ=D({type:H.Literal("compacting"),state:N(["started","completed"]),reason:H.Optional(N(["threshold","context_limit","turn_limit","manual"])),strategy:H.Optional(N(["llm","fallback","snip"])),outcome:H.Optional(N(["completed","fallback","failed"])),pre_tokens:H.Optional(H.Number({minimum:0})),post_tokens:H.Optional(H.Number({minimum:0}))}),jJ=D({type:H.Literal("provider_retry"),phase:N(["scheduled","waiting","attempt","recovered","exhausted"]),attempt:H.Integer({minimum:0}),max_retries:H.Integer({minimum:0}),reason:N(["rate_limit","server_error","timeout","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),delay_ms:H.Optional(H.Integer({minimum:0})),next_retry_at:H.Optional(H.Integer({minimum:0})),mode:H.Optional(N(["standard","bounded_foreground"])),recovery_budget_ms:H.Optional(H.Integer({minimum:0})),recovery_elapsed_ms:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0})),exhausted_by:H.Optional(N(["attempt_limit","recovery_budget"]))}),xJ=D({type:H.Literal("provider_admission"),phase:N(["queued","admitted","rejected"]),request_class:N(["foreground","background","internal"]),resource:N(["stream","pending_count","pending_bytes"]),scope:N(["global","domain","owner","class"]),reason:H.Optional(N(["capacity","queue_full","wait_timeout","closed"])),queue_position:H.Integer({minimum:0}),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:0}),wait_ms:H.Integer({minimum:0}),max_wait_ms:H.Integer({minimum:0}),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),UJ=D({type:H.Literal("provider_circuit"),phase:N(["opened","waiting","probe","closed","reopened","rejected"]),reason:N(["rate_limit","server_error","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),retry_after_ms:H.Optional(H.Integer({minimum:0})),next_probe_at:H.Optional(H.Integer({minimum:0})),open_duration_ms:H.Integer({minimum:0}),sample_count:H.Optional(H.Integer({minimum:0})),failure_count:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),_J=D({type:H.Literal("provider_stall"),phase:N(["detected","recovered"]),stall_count:H.Integer({minimum:1}),duration_ms:H.Integer({minimum:0}),warning_after_ms:H.Integer({minimum:1}),timeout_ms:H.Integer({minimum:1}),output_started:H.Boolean()}),GJ=D({type:H.Literal("action_stationarity"),phase:N(["detected","recovered","halted"]),tool_name:H.String(),run_length:H.Integer({minimum:1}),nudge_threshold:H.Integer({minimum:1}),halt_threshold:H.Integer({minimum:1}),progress_aware:H.Boolean()}),PJ=D({type:H.Literal("turn_limit"),turns_count:H.Number(),action:H.Literal("continue")}),FJ=D({type:H.Literal("task_session"),session_id:H.String(),project_path:H.String(),source_project_path:H.String(),isolation:N(["local","worktree"]),worktree_branch:H.Optional(H.String()),base_commit:H.Optional(H.String())}),EJ=D({type:H.Literal("task_admission"),state:N(["queued","running"]),queue_position:H.Optional(H.Integer({minimum:1})),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),max_concurrent_tasks:H.Integer({minimum:1})}),zJ=D({type:H.Literal("output"),content:H.String(),exit_code:H.Number()}),AJ=D({type:H.Literal("error"),message:H.String()}),aJ=KH(H.Union([cH,uH,dH,pH,vH,lH,sH,iH,rH,nH,tH,eH,HJ,JJ,KJ,VJ,ZJ,$J,qJ,XJ,YJ,BJ,NJ,QJ,DJ,LJ,WJ,xJ,UJ,jJ,_J,GJ,PJ,FJ,EJ,zJ,AJ]));function $H(K,V){return{event_version:ZH,type:K,...V}}function yJ(K){if(!K||typeof K!=="object"||Array.isArray(K))return;let V=K;if(V.auto_backgrounded!==!0||V.background_reason!=="foreground_budget"||!Number.isSafeInteger(V.foreground_budget_ms)||V.foreground_budget_ms<=0||typeof V.shell_id!=="string"||!/^bash_[A-Za-z0-9-]+$/.test(V.shell_id)||V.shell_id.length>128||V.terminal_transport!=="local"&&V.terminal_transport!=="acp"||V.pid!==void 0&&(!Number.isSafeInteger(V.pid)||V.pid<=0))return;return{auto_backgrounded:!0,background_reason:"foreground_budget",foreground_budget_ms:V.foreground_budget_ms,shell_id:V.shell_id,...V.pid===void 0?{}:{pid:V.pid},terminal_transport:V.terminal_transport}}function SJ(K){let V=new AbortController,Q=(Z)=>{if(!V.signal.aborted)V.abort(Z)},q=()=>Q("interrupt"),J=()=>Q(K?.signal?.reason);if(K?.signal){if(K.signal.addEventListener("abort",J,{once:!0}),K.signal.aborted)J()}else process.once("SIGINT",q),process.once("SIGTERM",q);return{signal:V.signal,abort:Q,dispose:()=>{K?.signal?.removeEventListener("abort",J),process.removeListener("SIGINT",q),process.removeListener("SIGTERM",q)}}}var TJ=N(["text","jsonl"]),bJ=H.Object({headless:H.Optional(H.Boolean()),message:H.Optional(H.String()),_:H.Optional(H.Array(H.Union([H.String(),H.Number()]))),model:H.Optional(H.String()),systemPrompt:H.Optional(H.String()),appendSystemPrompt:H.Optional(H.String()),verificationAgent:H.Optional(H.Boolean()),maxTurns:H.Optional(H.Refine(H.Integer(),(K)=>K===-1||K>0,()=>"must be -1 (unlimited) or a positive integer")),permissionMode:H.Optional(H.Enum(YH)),mcpConfig:H.Optional(H.Array(H.String())),strictMcpConfig:H.Optional(H.Boolean()),sessionId:H.Optional(H.String()),allowedTools:H.Optional(H.Array(H.String())),disallowedTools:H.Optional(H.Array(H.String())),agents:H.Optional(H.String()),continue:H.Optional(H.Boolean()),resume:H.Optional(H.Union([H.String(),H.Boolean()])),forkSession:H.Optional(H.Boolean()),taskIsolation:H.Optional(N(["local","worktree"])),outputFormat:H.Optional(TJ),jsonSchema:H.Optional(H.String()),outputSchema:H.Optional(H.String())});class RH{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(K){this.openedThinking=K}hasOpenThinking(){return this.openedThinking}completeStream(){let K={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,K}}function RJ(K){return K.issues.map((V)=>`${V.path.join(".")||"options"}: ${V.message}`).join("; ")}function IJ(K){let V=BH(bJ,K);if(!V.success)throw Error(`Invalid headless options: ${RJ(V.error)}`);return V.data}function gJ(K){return K.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(V)=>V.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("verification-agent",{describe:"Run the built-in independent verification agent after non-trivial changes",type:"boolean",default:!0}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}).option("json-schema",{alias:["jsonSchema"],describe:"Inline JSON Schema for the structured final response",type:"string"}).option("output-schema",{alias:["outputSchema"],describe:"Path to a JSON Schema file for the structured final response",type:"string"}).option("task-isolation",{alias:["taskIsolation"],choices:["local","worktree"],describe:"Dispatch a new durable task in the selected workspace mode",type:"string"}),async(V)=>{if(!V.headless)return;let Q=await mJ(V);process.exit(Q)})}function L(K,V=""){K.write(`${V}
2
2
  `)}function CJ(K){return`[task] [${K.status}] ${K.subject}`}function kJ(){return{requestConfirmation:async(K)=>K.type==="mcpElicitation"?{approved:!1,reason:"headless-mcp-elicitation-unavailable",elicitation:{action:"cancel"}}:K.type==="mcpSampling"?{approved:!1,reason:"headless-mcp-sampling-unavailable"}:{approved:!0,reason:"headless-auto-approved",scope:"session"}}}function hJ(K){if(!(K instanceof Error))return"Unknown error";let q=K.lastError??K;if(q.responseBody)try{let W=JSON.parse(q.responseBody)?.error?.message;if(W)return q.statusCode?`${W} (HTTP ${q.statusCode})`:W}catch{}let J=K.message.match(/Last error:\s*(.+)$/);if(J)return J[1];return K.message}function OJ(K){return K==="jsonl"?"jsonl":"text"}function qH(K,V){let Q=(...q)=>{for(let J of q){let Z=V[J];if(typeof Z==="string"&&Z.trim()!=="")return Z}return};switch(K){case"Read":case"Edit":case"Write":case"UndoEdit":return Q("file_path");case"ApplyPatch":return"multi-file patch";case"NotebookEdit":return Q("notebook_path");case"Grep":return Q("path","pattern");case"Glob":return Q("pattern");case"WebFetch":return Q("url");case"WebSearch":return Q("query");case"Bash":return Q("command","description");case"Task":return Q("description");case"LSP":return Q("filePath","operation");case"EnterWorktree":return Q("name");case"ExitWorktree":return Q("action");default:return}}function wJ(K,V,Q,q){let J=new Set(["Glob","Grep","WebSearch","LS"]),Z=new Set(["Read","WebFetch"]);if(new Set(["Edit","Write","ApplyPatch","NotebookEdit","Bash","LSP","UndoEdit","EnterWorktree","ExitWorktree"]).has(K)&&!q.targetLocked)return{phase:"target_hit",status:"hit",message:`Target locked: ${V}`,shouldLockTarget:!0};if(q.targetLocked)return{phase:"executing",status:"hit",message:Q?`Working within target: ${V}`:`Executing: ${V}`,shouldLockTarget:!1};if(J.has(K))return{phase:"searching",status:"ongoing",message:`Still searching: ${V}`,shouldLockTarget:!1};if(Z.has(K))return{phase:"inspecting",status:"ongoing",message:`Inspecting candidate: ${V}`,shouldLockTarget:!1};return{phase:"executing",status:q.targetLocked?"hit":"ongoing",message:`Executing: ${V}`,shouldLockTarget:!1}}function XH(K,V,Q=!1){let q=(J,Z)=>{K.stdout.write(`${JSON.stringify($H(J,Z))}
3
3
  `)};return{contentDelta(J){if(V==="jsonl"){q("content_delta",{delta:J});return}if(Q)return;K.stdout.write(J)},thinkingDelta(J,Z){if(V==="jsonl")return q("thinking_delta",{delta:J}),Z;if(!Z)K.stderr.write("[thinking] ");return K.stderr.write(J),!0},thinking(J){if(V==="jsonl"){q("thinking",{content:J});return}L(K.stderr,`[thinking] ${J}`)},streamEnd(J,Z){if(V==="jsonl"){q("stream_end",{});return}if(Z)K.stderr.write(`
4
4
  `);if(J)K.stdout.write(`
@@ -1 +1 @@
1
- import{Gd as a,Hd as b,Id as c,Jd as d,Kd as e,Ld as f,Md as g,Nd as h,Od as i,Pd as j,Qd as k,Rd as l,Sd as m,Td as n,Ud as o,Vd as p,Wd as q}from"./chunk-qd9vk8t1.js";import"./chunk-v508x7cg.js";import"./chunk-0j22w4wh.js";import"./chunk-kf070906.js";import"./chunk-h0ft81a3.js";import"./chunk-v0rsz1rt.js";import"./chunk-xz6y0w4n.js";import"./chunk-k0pa8874.js";import"./chunk-6pyktfa4.js";import"./chunk-98n2rxmq.js";import"./chunk-ypqp368c.js";import"./chunk-t8xmh4w2.js";import"./chunk-4ge1jkf8.js";import"./chunk-t2gq918a.js";import"./chunk-5d2cdvdy.js";import"./chunk-ppsvzgs5.js";import"./chunk-hcv17986.js";export{a as vanillaStore,c as sessionActions,l as getThinkingModeEnabled,b as getState,n as getServiceTier,o as getResponseVerbosity,m as getReasoningEffort,j as getModelById,e as getMessages,k as getMcpServers,i as getCurrentModel,f as getConfig,p as getCommunicationStyle,h as getAllModels,g as ensureStoreInitialized,q as configActions,d as appActions};
1
+ import{Gd as a,Hd as b,Id as c,Jd as d,Kd as e,Ld as f,Md as g,Nd as h,Od as i,Pd as j,Qd as k,Rd as l,Sd as m,Td as n,Ud as o,Vd as p,Wd as q}from"./chunk-1je1xw6v.js";import"./chunk-v508x7cg.js";import"./chunk-0j22w4wh.js";import"./chunk-82htkvz8.js";import"./chunk-h0ft81a3.js";import"./chunk-v0rsz1rt.js";import"./chunk-xz6y0w4n.js";import"./chunk-k0pa8874.js";import"./chunk-6pyktfa4.js";import"./chunk-t2wgf9tq.js";import"./chunk-2px6hzdc.js";import"./chunk-t8xmh4w2.js";import"./chunk-azw0jckv.js";import"./chunk-jzntxp7f.js";import"./chunk-r9d4mjxj.js";import"./chunk-9q852bsc.js";import"./chunk-wfy851et.js";export{a as vanillaStore,c as sessionActions,l as getThinkingModeEnabled,b as getState,n as getServiceTier,o as getResponseVerbosity,m as getReasoningEffort,j as getModelById,e as getMessages,k as getMcpServers,i as getCurrentModel,f as getConfig,p as getCommunicationStyle,h as getAllModels,g as ensureStoreInitialized,q as configActions,d as appActions};
@@ -0,0 +1 @@
1
+ import{fe as a,ge as b,he as c}from"./chunk-wrfay5r3.js";import"./chunk-yn51162x.js";import"./chunk-2px6hzdc.js";import"./chunk-t8xmh4w2.js";import"./chunk-9q852bsc.js";import"./chunk-wfy851et.js";export{b as resolveModelConfig,c as getModelDisplayName,a as getModelApiKeyEnvironmentVariable};
@@ -0,0 +1,5 @@
1
+ import{Ag as TE,Bg as gf,Cg as lf,Dg as xE,Eg as Wf,Gg as $f,Ig as Kf,Jg as If,Kg as uf,Lg as Cf,Ng as Df,Og as Ff,Qg as s}from"./chunk-6pyktfa4.js";import{Xg as g}from"./chunk-t2wgf9tq.js";import{$g as P_,bh as Xf}from"./chunk-2px6hzdc.js";import{eh as e_}from"./chunk-t8xmh4w2.js";var YE={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},T_=(f)=>YE[f]||{};var cE=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function Vf(f){return typeof f==="string"&&cE.has(f)}function Xh(f){if(!f.aborted)return;if(Vf(f.reason))return f.reason;return"user-cancel"}function Wh(f){if(Vf(f))return!0;if(!(f instanceof Error))return!1;if(f.name==="AbortError")return!0;if(f instanceof DOMException&&f.name==="AbortError")return!0;if(f.message.includes("aborted"))return!0;return!1}function x_(...f){let _=f.filter(Boolean);if(_.length===0)return new AbortController().signal;if(_.length===1)return _[0];let E=AbortSignal;if(typeof E.any==="function")return E.any(_);for(let x of _)if(x.aborted)return x;let h=new AbortController,T=new Map;for(let x of _){let S=()=>{h.abort(x.reason);for(let[P,t]of T)P.removeEventListener("abort",t)};T.set(x,S)}for(let[x,S]of T)x.addEventListener("abort",S,{once:!0});return h.signal}function i(f,_,E){let h=E?.throwOnAbort??!1;if(_?.aborted){if(h)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((T,x)=>{let S,P=setTimeout(()=>{if(_&&S)_.removeEventListener("abort",S);T()},f);if(_)S=()=>{if(clearTimeout(P),h)x(new DOMException("Aborted","AbortError"));else T()},_.addEventListener("abort",S,{once:!0})})}var bE=g("Chat"),OE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function jf(f){if(typeof f==="string")return f;return f.filter((_)=>_.type==="text").map((_)=>_.text).join(`
2
+ `)}function BE(f){if(!f)return{};try{let _=JSON.parse(f);return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}catch{return bE.warn("[PiAIChatService] Invalid historical tool arguments",{value:f}),{}}}function VE(f){let _=f.match(/^data:([^;,]+);base64,(.+)$/s);return _?{mimeType:_[1],data:_[2]}:void 0}async function jE(f,_){let E=VE(f);if(E)return{type:"image",...E};if(!/^https?:\/\//i.test(f))return{type:"text",text:`[Unsupported image source: ${f}]`};let h=await fetch(f,{signal:_});if(!h.ok)throw Error(`Failed to load image ${f}: HTTP ${h.status}`);return{type:"image",mimeType:h.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await h.arrayBuffer()).toString("base64")}}async function M_(f,_,E,h,T){let x=f.filter((t)=>t.role==="system").map((t)=>jf(t.content)).filter(Boolean).join(`
3
+
4
+ `),S=[];for(let t of f){if(t.role==="system")continue;if(t.role==="user"){let N=_.input.includes("image"),M=typeof t.content==="string"?t.content:await Promise.all(t.content.map((R)=>R.type==="text"?Promise.resolve({type:"text",text:R.text}):N?jE(R.image_url.url,h):Promise.resolve({type:"text",text:"[Image omitted: current model does not support image input]"})));S.push({role:"user",content:M,timestamp:Date.now()});continue}if(t.role==="assistant"){let N=[];if(t.reasoningContent?.trim())N.push({type:"thinking",thinking:t.reasoningContent});let M=jf(t.content);if(M)N.push({type:"text",text:M});for(let R of t.tool_calls??[]){if(!("function"in R))continue;N.push({type:"toolCall",id:R.id,name:R.function.name,arguments:BE(R.function.arguments)})}S.push({role:"assistant",content:N,api:_.api,provider:_.provider,model:_.id,usage:OE,stopReason:t.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}S.push({role:"toolResult",toolCallId:t.tool_call_id??"",toolName:t.name??"unknown",content:[{type:"text",text:jf(t.content)}],isError:!1,timestamp:Date.now()})}let P=E?.filter((t)=>!T||t.name===T).map((t)=>({name:t.name,description:t.description,parameters:t.parameters,constrainedSampling:t.constrainedSampling})).sort((t,N)=>t.name<N.name?-1:t.name>N.name?1:0);return{...x?{systemPrompt:x}:{},messages:S,...P?.length?{tools:P}:{}}}function R_(f){let _=[];for(let E=0;E<f.length;E++){let h=f[E];if(h.role==="tool")continue;let T=h.role==="assistant"&&h.tool_calls?.length?h.tool_calls:void 0;if(!T){_.push(h);continue}let x=[],S=E+1;while(S<f.length&&f[S].role==="tool")x.push(f[S++]);let P=new Set(T.map((M)=>M.id)),t=x.filter((M)=>M.tool_call_id&&P.has(M.tool_call_id)),N=new Set(t.map((M)=>M.tool_call_id));if(P.size===T.length&&t.length===P.size&&N.size===P.size)_.push(h,...t);E=S-1}return _}function A_(f){return f.some((_)=>_.role==="assistant"&&Boolean(_.tool_calls?.length)&&!_.reasoningContent?.trim())}function S_(f,_){return{...f,..._.baseUrl?{baseUrl:P_(f.api,_.baseUrl)}:{},..._.maxOutputTokens?{maxTokens:_.maxOutputTokens}:{}}}function zf(f){let _=f.modelCatalog??Xf();return{models:_.models,model:S_(_.getModel(f.provider,f.model),f)}}function N_(f,_){let E=f.modelCatalog??Xf();return S_(E.getModel(_.provider,_.model),f)}import{createHash as XE}from"node:crypto";var zE=32,JE=1000,WE=512,$E=2000,kE=0.1,LE=0.05,GE=0.9,ZE=300000,QE=3600000;class Jf{sessions=new Map;observe(f){if(f.retention==="none"){this.sessions.delete(f.sessionId);return}let _=f.now??Date.now(),E=KE(f,_),h=this.sessions.get(f.sessionId);if(E.callCount=(h?.callCount??0)+1,this.touch(f.sessionId,E),h&&E.contextEpoch!==h.contextEpoch)return;if(!h||h.cacheReadTokens<JE)return;let T=h.cacheReadTokens-E.cacheReadTokens,x=Math.min($E,Math.max(WE,h.cacheReadTokens*kE));if(T<x||E.cacheReadTokens>=h.cacheReadTokens*(1-LE))return;let S=E.modelIdentity!==h.modelIdentity,P=E.systemHash!==h.systemHash,t=E.toolsHash!==h.toolsHash,N=E.policyHash!==h.policyHash;if(!(S||P||t||N)&&E.promptTokens<h.promptTokens*GE)return;let R=Math.max(0,_-h.recordedAt),u=h.retention==="long"?QE:ZE,Y=S?"model_changed":P?"system_prompt_changed":t?"tools_changed":N?"request_policy_changed":R>=u?"ttl_expired":"server_side",$=CE(h,E);return{reason:Y,previousCacheReadTokens:h.cacheReadTokens,cacheReadTokens:E.cacheReadTokens,cacheWriteTokens:Math.max(0,f.usage.cacheCreationInputTokens??0),tokenDrop:T,elapsedMs:R,callNumber:E.callCount,systemPromptChanged:P,systemCharDelta:E.systemChars-h.systemChars,toolsChanged:t,addedToolCount:$.added,removedToolCount:$.removed,changedToolCount:$.changed,modelChanged:S,requestPolicyChanged:N}}clear(f){if(f)this.sessions.delete(f);else this.sessions.clear()}statsForTests(){return{sessions:this.sessions.size}}touch(f,_){this.sessions.delete(f),this.sessions.set(f,_);while(this.sessions.size>zE){let E=this.sessions.keys().next().value;if(E===void 0)break;this.sessions.delete(E)}}}function KE(f,_){let E=[...f.tools??f.context.tools??[]].map((h)=>({identityHash:ff(h.name),contractHash:ff(_f(h))})).sort((h,T)=>h.identityHash<T.identityHash?-1:h.identityHash>T.identityHash?1:0);return{modelIdentity:f.modelIdentity,systemHash:ff(f.context.systemPrompt??""),systemChars:f.context.systemPrompt?.length??0,toolsHash:ff(_f(E)),toolFingerprints:E,policyHash:ff(_f(f.policy)),contextEpoch:f.contextEpoch??"",retention:f.retention,promptTokens:Number.isFinite(f.usage.promptTokens)?Math.max(0,f.usage.promptTokens):0,cacheReadTokens:Math.max(0,f.usage.cacheReadInputTokens??0),recordedAt:_,callCount:1}}function CE(f,_){let E=new Map(f.toolFingerprints.map((T)=>[T.identityHash,T.contractHash])),h=new Map(_.toolFingerprints.map((T)=>[T.identityHash,T.contractHash]));return{added:[...h.keys()].filter((T)=>!E.has(T)).length,removed:[...E.keys()].filter((T)=>!h.has(T)).length,changed:[...h].filter(([T,x])=>E.has(T)&&E.get(T)!==x).length}}function _f(f){if(f===null||typeof f!=="object")return JSON.stringify(f)??"undefined";if(Array.isArray(f))return`[${f.map(_f).join(",")}]`;let _=f;return`{${Object.keys(_).sort().map((E)=>`${JSON.stringify(E)}:${_f(_[E])}`).join(",")}}`}function ff(f){return XE("sha256").update(f).digest("hex")}import{randomBytes as vE}from"node:crypto";import{createHmac as FE}from"node:crypto";function oE(f){try{let _=new URL(f);if(_.hash="",_.hostname=_.hostname.toLowerCase(),_.searchParams.sort(),_.pathname!=="/")_.pathname=_.pathname.replace(/\/+$/,"");return _.toString()}catch{return f.trim().replace(/\/+$/,"")}}function sE(f){if(!f)return[];return Object.entries(f).map(([_,E])=>[_.trim().toLowerCase(),E.trim()]).sort(([_],[E])=>_.localeCompare(E))}function Pf(f,_,E){let h=JSON.stringify([f.provider.trim(),String(f.api).trim(),oE(f.baseUrl),f.model.trim(),f.serviceTier?.trim()??"",f.apiVersion?.trim()??"",f.apiKey??"",sE(f.customHeaders),E]);return FE("sha256",Buffer.from(_)).update(h).digest("hex")}var wE=60000,pE=4,mE=0.8;var Nf=300000,kf=600000;var I_=128,u_=256,qE=1800000,Sf=50;class hf extends Error{circuit;code="PROVIDER_CIRCUIT_OPEN";constructor(f){super(`Provider circuit open; retry after ${f.retryAfterMs??0}ms`);this.circuit=f;this.name="ProviderCircuitOpenError"}}function Lf(f){return f instanceof hf||f!==null&&typeof f==="object"&&"code"in f&&f.code==="PROVIDER_CIRCUIT_OPEN"}function l(f,_){return f!==void 0&&Number.isSafeInteger(f)&&f>0?f:_}function gE(f,_){return f!==void 0&&Number.isFinite(f)&&f>0&&f<=1?f:_}function lE(f,_){return Pf(f,_,{providerCircuitOpenDurationMs:f.openDurationMs})}function Ef(f){let _=0;for(let E of f)if(E.failure)_++;return _}function D_(f){return f!==void 0&&Number.isInteger(f)&&f>=100&&f<=599?f:void 0}function H_(f){if(f===void 0||!Number.isFinite(f)||f<0)return;return Math.min(Math.ceil(f),$f)}class Y_{#x=new Map;#t=new WeakMap;#f;#E;#T;#h;constructor(f={}){this.#f=f.processSecret?new Uint8Array(f.processSecret):vE(32),this.#E=f.now??(()=>performance.now()),this.#T=f.wallNow??f.now??Date.now,this.#h={maxEntries:Math.min(l(f.maxEntries,I_),I_),maxWindowEntries:Math.min(l(f.maxWindowEntries,u_),u_),windowMs:l(f.windowMs,wE),minSamples:l(f.minSamples,pE),errorRateThreshold:gE(f.errorRateThreshold,mE),idleTtlMs:l(f.idleTtlMs,qE)}}get size(){return this.#x.size}get(f){if(f.openDurationMs===0)return this.#R();let _=this.#E();this.#c(_);let E=lE(f,this.#f),h=this.#x.get(E);if(h)return h.lastTouchedAt=_,this.#_(h,f.probeLeaseMs);if(this.#x.size>=this.#h.maxEntries)this.#D();if(this.#x.size>=this.#h.maxEntries)return this.#R();let T={key:E,state:"closed",samples:[],generation:0,nextAttemptId:1,nextProbeLeaseId:1,configuredOpenDurationMs:f.openDurationMs,effectiveOpenDurationMs:f.openDurationMs,lastTouchedAt:_,detached:!1};return this.#x.set(E,T),this.#_(T,f.probeLeaseMs)}#_(f,_){let E=this,h=Math.max(Nf,Math.min(l(_,Nf),kf));return{preflight:()=>E.#A(f),check:()=>E.#b(f,h),recordSuccess:(T)=>E.#M(T,"success"),recordFailure:(T,x)=>E.#M(T,"failure",x),recordNeutral:(T)=>E.#M(T,"neutral"),abandon:(T)=>E.#N(T),snapshot:()=>E.#j(f)}}#R(){let f=this;return{preflight:()=>({eligible:!0}),check:()=>{let _=Object.freeze({kind:"noop"});return f.#t.set(_,{generation:0,attemptId:0,kind:"noop",settled:!1}),{allowed:!0,probe:!1,token:_}},recordSuccess:(_)=>f.#S(_),recordFailure:(_)=>f.#S(_),recordNeutral:(_)=>f.#S(_),abandon:(_)=>f.#N(_),snapshot:()=>({state:"closed",sampleCount:0,failureCount:0,noop:!0,detached:!1})}}#S(f){let _=this.#t.get(f);if(_?.kind==="noop")_.settled=!0;return}#A(f){let _=this.#E();if(f.detached)return{eligible:!0};if(f.lastTouchedAt=_,this.#I(f,_),f.state==="closed")return{eligible:!0};if(f.state==="open"){let h=f.nextProbeAt??_;return _<h?this.#U(f,h-_):{eligible:!0}}if(f.probeLeaseId===void 0||f.probeLeaseExpiresAt!==void 0&&_>=f.probeLeaseExpiresAt)return{eligible:!0};let E=Math.max(1,(f.probeLeaseExpiresAt??_+Sf)-_);return this.#U(f,Math.min(Sf,E))}#U(f,_){let{allowed:E,...h}=this.#P(f,_);return{eligible:!1,...h}}#b(f,_){let E=this.#E();if(f.detached)return this.#R().check();if(f.lastTouchedAt=E,this.#I(f,E),f.state==="closed")return this.#Y(f,"regular");if(f.state==="open"){let T=f.nextProbeAt??E;if(E<T)return this.#P(f,T-E);f.state="half_open",f.generation++,f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0}if(f.probeLeaseId===void 0||f.probeLeaseExpiresAt!==void 0&&E>=f.probeLeaseExpiresAt)return this.#O(f,E,_);let h=Math.max(1,(f.probeLeaseExpiresAt??E+Sf)-E);return this.#P(f,Math.min(Sf,h))}#Y(f,_,E){let h=Object.freeze({kind:_});return this.#t.set(h,{entry:f,generation:f.generation,attemptId:f.nextAttemptId++,kind:_,...E!==void 0?{probeLeaseId:E}:{},settled:!1}),{allowed:!0,probe:_==="probe",token:h}}#O(f,_,E){let h=f.nextProbeLeaseId++;f.probeLeaseId=h,f.probeLeaseExpiresAt=_+E,f.lastTouchedAt=_;let T=this.#Y(f,"probe",h),x=f.lastFailure??{reason:"server_error"};return{...T,reason:x.reason,...x.statusCode!==void 0?{statusCode:x.statusCode}:{},openDurationMs:f.effectiveOpenDurationMs,sampleCount:f.samples.length,failureCount:Ef(f.samples)}}#P(f,_){let E=f.lastFailure??{reason:"server_error"};return{allowed:!1,state:f.state==="open"?"open":"half_open",reason:E.reason,...E.statusCode!==void 0?{statusCode:E.statusCode}:{},retryAfterMs:Math.max(0,Math.ceil(_)),nextProbeAt:this.#T()+Math.max(0,Math.ceil(_)),openDurationMs:f.effectiveOpenDurationMs,sampleCount:f.samples.length,failureCount:Ef(f.samples)}}#M(f,_,E){let h=this.#t.get(f);if(!h||h.settled)return;if(h.settled=!0,h.kind==="noop"||!h.entry)return;let T=h.entry;if(T.detached||h.generation!==T.generation||h.kind==="regular"&&T.state!=="closed"||h.kind==="probe"&&(T.state!=="half_open"||h.probeLeaseId!==T.probeLeaseId))return;let x=this.#E();if(T.lastTouchedAt=x,h.kind==="probe"){if(_==="failure"&&E)return this.#u(T,E,x,"reopened");return this.#B(T)}if(_==="neutral")return;if(this.#V(T,_==="failure",x),_!=="failure"||!E)return;let S=Ef(T.samples),P=T.samples.length===0?0:S/T.samples.length;if(T.samples.length>=this.#h.minSamples&&P>=this.#h.errorRateThreshold)return this.#u(T,E,x,"opened");return}#u(f,_,E,h){let T={reason:_.reason,...D_(_.statusCode)!==void 0?{statusCode:D_(_.statusCode)}:{},...H_(_.retryAfterMs)!==void 0?{retryAfterMs:H_(_.retryAfterMs)}:{}},x=T.retryAfterMs??0,S=Math.max(f.configuredOpenDurationMs,x);return f.state="open",f.generation++,f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0,f.effectiveOpenDurationMs=S,f.nextProbeAt=E+S,f.lastFailure=T,{phase:h,reason:T.reason,...T.statusCode!==void 0?{statusCode:T.statusCode}:{},retryAfterMs:S,nextProbeAt:this.#T()+S,openDurationMs:S,sampleCount:f.samples.length,failureCount:Ef(f.samples)}}#B(f){let _=f.lastFailure??{reason:"server_error"};return f.state="closed",f.generation++,f.samples=[],f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0,f.nextProbeAt=void 0,f.effectiveOpenDurationMs=f.configuredOpenDurationMs,{phase:"closed",reason:_.reason,..._.statusCode!==void 0?{statusCode:_.statusCode}:{},openDurationMs:f.effectiveOpenDurationMs,sampleCount:0,failureCount:0}}#N(f){let _=this.#t.get(f);if(!_||_.settled)return!1;if(_.settled=!0,_.kind==="noop")return!0;let E=_.entry;if(!E||E.detached||_.kind!=="probe"||_.generation!==E.generation||_.probeLeaseId!==E.probeLeaseId)return!1;return E.probeLeaseId=void 0,E.probeLeaseExpiresAt=void 0,E.lastTouchedAt=this.#E(),!0}#V(f,_,E){if(this.#I(f,E),f.samples.length>=this.#h.maxWindowEntries)f.samples.shift();f.samples.push({at:E,failure:_})}#I(f,_){let E=_-this.#h.windowMs,h=0;while(h<f.samples.length&&f.samples[h].at<E)h++;if(h>0)f.samples.splice(0,h)}#j(f){if(!f.detached)this.#I(f,this.#E());return{state:f.state,sampleCount:f.samples.length,failureCount:Ef(f.samples),...f.nextProbeAt!==void 0?{nextProbeAt:f.nextProbeAt}:{},noop:!1,detached:f.detached}}#c(f){for(let[_,E]of this.#x)if(E.state==="closed"&&f-E.lastTouchedAt>this.#h.idleTtlMs)this.#H(_,E)}#D(){let f;for(let _ of this.#x.values())if(_.state==="closed"&&(!f||_.lastTouchedAt<f.lastTouchedAt))f=_;if(f)this.#H(f.key,f)}#H(f,_){_.detached=!0,this.#x.delete(f)}}var U_;function c_(){return U_??=new Y_,U_}import{randomBytes as aE}from"node:crypto";var b_=16,O_=128,B_=32,V_=3,j_=16,X_=96,z_=24,J_=12,W_=16,$_=4,k_=4,L_=67108864,G_=33554432,Z_=12,Q_=2,K_=2,C_=1,w_=15000,F_=30000;function Gf(){return{foreground:0,background:0,internal:0}}function Zf(){return{inFlight:Gf(),queued:Gf(),pendingBytes:Gf()}}function U(f){return f.foreground+f.background+f.internal}function W(f){return f.background+f.internal}function o_(f){return f.inFlight.foreground===0&&f.inFlight.background===0&&f.inFlight.internal===0&&f.queued.foreground===0&&f.queued.background===0&&f.queued.internal===0&&f.pendingBytes.foreground===0&&f.pendingBytes.background===0&&f.pendingBytes.internal===0}class Tf extends Error{reason;scope;requestClass;resource;inFlight;limit;queued;maxWaitMs;code="PROVIDER_ADMISSION_BUSY";retryable;constructor(f,_,E,h,T,x,S,P){super(f==="queue_full"?`Provider request admission ${_} ${h} queue is full`:f==="wait_timeout"?`Provider request admission timed out waiting for ${_} capacity`:"Provider request admission scheduler is closed");this.reason=f;this.scope=_;this.requestClass=E;this.resource=h;this.inFlight=T;this.limit=x;this.queued=S;this.maxWaitMs=P;this.name="ProviderAdmissionError",this.retryable=f!=="closed"}}function xf(f){return f instanceof Tf||f!==null&&typeof f==="object"&&"code"in f&&f.code==="PROVIDER_ADMISSION_BUSY"}function z(f,_,E){if(f===void 0||!Number.isSafeInteger(f)||f<=0)return _;return Math.min(f,E)}function yE(f){let _=z(f.globalMaxInFlight,b_,b_),E=z(f.globalMaxPending,O_,O_),h=z(f.domainMaxPending,B_,B_),T=Math.min(z(f.ownerMaxInFlight,V_,V_),_),x=Math.min(z(f.ownerMaxPending,j_,j_),E),S=Math.min(z(f.nonForegroundGlobalMaxPending,Math.min(X_,Math.max(1,Math.floor(E*3/4))),X_),E),P=Math.min(z(f.nonForegroundDomainMaxPending,Math.min(z_,Math.max(1,Math.floor(h*3/4))),z_),h),t=Math.min(z(f.nonForegroundOwnerMaxPending,Math.min(J_,Math.max(1,Math.floor(x*3/4))),J_),x),N=Math.min(z(f.internalGlobalMaxPending,Math.min(W_,Math.max(1,Math.floor(E/8))),W_),S),M=Math.min(z(f.internalDomainMaxPending,Math.min($_,Math.max(1,Math.floor(h/8))),$_),P),R=Math.min(z(f.internalOwnerMaxPending,Math.min(k_,Math.max(1,Math.floor(x/4))),k_),t),u=z(f.globalMaxPendingBytes,s,s),Y=Math.min(z(f.domainMaxPendingBytes,L_,L_),u),$=Math.min(z(f.ownerMaxPendingBytes,G_,G_),u),Q=Math.min(z(f.nonForegroundGlobalMaxInFlight,Math.min(Z_,_),Z_),_),K=Math.min(z(f.nonForegroundOwnerMaxInFlight,Math.min(Q_,T),Q_),T),o=Math.min(z(f.internalGlobalMaxInFlight,Math.min(K_,_),K_),_),Uf=z(f.internalDomainMaxInFlight,C_,C_),tf=z(f.agingMs,F_,F_);return{globalMaxInFlight:_,globalMaxPending:E,domainMaxPending:h,ownerMaxInFlight:T,ownerMaxPending:x,nonForegroundGlobalMaxPending:S,nonForegroundDomainMaxPending:P,nonForegroundOwnerMaxPending:t,internalGlobalMaxPending:N,internalDomainMaxPending:M,internalOwnerMaxPending:R,globalMaxPendingBytes:u,domainMaxPendingBytes:Y,ownerMaxPendingBytes:$,nonForegroundGlobalMaxInFlight:Q,nonForegroundOwnerMaxInFlight:K,internalGlobalMaxInFlight:o,internalDomainMaxInFlight:Uf,agingMs:tf}}function s_(f,_){if(!f.trim())throw Error(`${_} must not be blank`)}function dE(f){if(s_(f.sessionId,"sessionId"),s_(f.ownerId,"ownerId"),!Number.isSafeInteger(f.scope.maxConcurrent)||f.scope.maxConcurrent<If||f.scope.maxConcurrent>uf)throw Error(`maxConcurrent must be between ${If} and ${uf}`);if(!Number.isSafeInteger(f.scope.maxPendingBytes)||f.scope.maxPendingBytes<=0||f.scope.maxPendingBytes>s)throw Error(`maxPendingBytes must be between 1 and ${s}`);if(!Number.isSafeInteger(f.pendingBytes)||f.pendingBytes<=0||f.pendingBytes>s+1)throw Error(`pendingBytes must be between 1 and ${s+1}`);if(!Number.isSafeInteger(f.maxWaitMs)||f.maxWaitMs<0||f.maxWaitMs>Df)throw Error(`maxWaitMs must be 0-${Df}`)}function Qf(f,_){if(_!==void 0)return _;if(f?.reason!==void 0)return f.reason;return new DOMException("Provider request admission cancelled","AbortError")}function eE(f,_){return Pf(f,_,{providerRequestConcurrency:f.maxConcurrent,providerRequestPendingBytes:f.maxPendingBytes})}class p_{#x;#t;#f;#E=[];#T=new Map;#h=new Map;#_=Zf();#R=1;#S=0;#A=!1;constructor(f={}){this.#x=f.processSecret?new Uint8Array(f.processSecret):aE(32),this.#t=f.now??(()=>performance.now()),this.#f=yE(f)}admit(f){if(dE(f),this.#A)throw this.#X("closed",f,{scope:"global",resource:"stream",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight},this.#E.length);if(f.signal?.aborted)throw Qf(f.signal);let _=eE(f.scope,this.#x),E=this.#T.get(_),h=this.#h.get(f.ownerId),T=E??this.#Y(f.scope.maxConcurrent),x=h??this.#O();if(this.#E.length===0&&this.#P(T,x,f.requestClass)){if(!E)this.#T.set(_,T);if(!h)this.#h.set(f.ownerId,x),this.#R++;let u=this.#u(_,f.ownerId,f.requestClass),Y=this.#k(f,0);return{ready:Promise.resolve(u),getSnapshot:()=>({...Y}),cancel:()=>{Y={...Y}}}}let S=this.#U(f,T,x);if(S)throw this.#X("queue_full",f,S,this.#E.length);let P=this.#M(T,x,f.requestClass);if(f.maxWaitMs===0)throw this.#X("wait_timeout",f,P,this.#E.length);if(!E)this.#T.set(_,T);if(!h)this.#h.set(f.ownerId,x),this.#R++;let t,N,M=new Promise((u,Y)=>{t=u,N=Y});M.catch(()=>{return});let R={domainKey:_,sessionId:f.sessionId,ownerId:f.ownerId,requestClass:f.requestClass,maxWaitMs:f.maxWaitMs,pendingBytes:f.pendingBytes,enqueuedAt:this.#t(),signal:f.signal,resolve:t,reject:N,settled:!1,admitted:!1};if(f.signal)R.abortListener=()=>this.#c(R,Qf(f.signal)),f.signal.addEventListener("abort",R.abortListener,{once:!0});return R.timer=setTimeout(()=>this.#j(R),f.maxWaitMs),R.timer.unref?.(),this.#E.push(R),this.#b(T,x,R),this.#N(),{ready:M,getSnapshot:()=>this.#$(R),cancel:(u)=>this.#c(R,Qf(f.signal,u))}}close(){if(this.#A)return;this.#A=!0;for(let f of[...this.#E]){let _=this.#T.get(f.domainKey),E=this.#h.get(f.ownerId),h=_&&E?this.#M(_,E,f.requestClass):{scope:"global",resource:"stream",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight};this.#D(f,new Tf("closed",h.scope,f.requestClass,h.resource,h.inFlight,h.limit,this.#E.length,f.maxWaitMs))}}getStats(){return{inFlight:U(this.#_.inFlight),queued:this.#E.length,pendingBytes:U(this.#_.pendingBytes),nonForegroundInFlight:W(this.#_.inFlight),internalInFlight:this.#_.inFlight.internal,nonForegroundQueued:W(this.#_.queued),internalQueued:this.#_.queued.internal,nonForegroundPendingBytes:W(this.#_.pendingBytes),internalPendingBytes:this.#_.pendingBytes.internal,domainCount:this.#T.size,ownerCount:this.#h.size,closed:this.#A}}#U(f,_,E){let h=(M,R,u)=>R>=u?{scope:M,resource:"pending_count",inFlight:R,limit:u}:void 0;if(f.requestClass==="internal"){let M=h("class",this.#_.queued.internal,this.#f.internalGlobalMaxPending)??h("class",E.counters.queued.internal,this.#f.internalOwnerMaxPending)??h("class",_.counters.queued.internal,this.#f.internalDomainMaxPending);if(M)return M}if(f.requestClass!=="foreground"){let M=h("class",W(this.#_.queued),this.#f.nonForegroundGlobalMaxPending)??h("class",W(E.counters.queued),this.#f.nonForegroundOwnerMaxPending)??h("class",W(_.counters.queued),this.#f.nonForegroundDomainMaxPending);if(M)return M}let T=h("global",this.#E.length,this.#f.globalMaxPending)??h("owner",U(E.counters.queued),this.#f.ownerMaxPending)??h("domain",U(_.counters.queued),this.#f.domainMaxPending);if(T)return T;let x=Math.min(f.scope.maxPendingBytes,this.#f.globalMaxPendingBytes),S=Math.min(x,this.#f.domainMaxPendingBytes),P=Math.min(x,this.#f.ownerMaxPendingBytes),t=(M,R)=>f.pendingBytes>R-M,N=(M)=>{if(M==="owner")return{scope:M,resource:"pending_bytes",inFlight:U(E.counters.inFlight),limit:this.#f.ownerMaxInFlight};if(M==="domain")return{scope:M,resource:"pending_bytes",inFlight:U(_.counters.inFlight),limit:_.maxConcurrent};return{scope:M,resource:"pending_bytes",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight}};if(f.requestClass==="internal"){let M=Math.max(1,Math.floor(x/8)),R=Math.max(1,Math.floor(S/4)),u=Math.max(1,Math.floor(P/4));if(t(this.#_.pendingBytes.internal,M)||t(E.counters.pendingBytes.internal,u)||t(_.counters.pendingBytes.internal,R))return N("class")}if(f.requestClass!=="foreground"){let M=Math.max(1,Math.floor(x*3/4)),R=Math.max(1,Math.floor(S*3/4)),u=Math.max(1,Math.floor(P/2));if(t(W(this.#_.pendingBytes),M)||t(W(E.counters.pendingBytes),u)||t(W(_.counters.pendingBytes),R))return N("class")}if(t(U(this.#_.pendingBytes),x))return N("global");if(t(U(E.counters.pendingBytes),P))return N("owner");if(t(U(_.counters.pendingBytes),S))return N("domain");return}#b(f,_,E){let{requestClass:h,pendingBytes:T}=E;this.#_.queued[h]++,f.counters.queued[h]++,_.counters.queued[h]++,this.#_.pendingBytes[h]+=T,f.counters.pendingBytes[h]+=T,_.counters.pendingBytes[h]+=T}#Y(f){return{maxConcurrent:f,counters:Zf()}}#O(){return{order:this.#R,counters:Zf()}}#P(f,_,E){if(U(this.#_.inFlight)>=this.#f.globalMaxInFlight)return!1;if(U(f.counters.inFlight)>=f.maxConcurrent)return!1;if(U(_.counters.inFlight)>=this.#f.ownerMaxInFlight)return!1;if(E==="foreground")return!0;if(W(this.#_.inFlight)>=this.#f.nonForegroundGlobalMaxInFlight)return!1;if(W(_.counters.inFlight)>=this.#f.nonForegroundOwnerMaxInFlight)return!1;let h=Math.max(1,f.maxConcurrent-1);if(W(f.counters.inFlight)>=h)return!1;if(E!=="internal")return!0;return this.#_.inFlight.internal<this.#f.internalGlobalMaxInFlight&&f.counters.inFlight.internal<this.#f.internalDomainMaxInFlight}#M(f,_,E){if(U(_.counters.inFlight)>=this.#f.ownerMaxInFlight)return{scope:"owner",resource:"stream",inFlight:U(_.counters.inFlight),limit:this.#f.ownerMaxInFlight};if(E!=="foreground"&&W(_.counters.inFlight)>=this.#f.nonForegroundOwnerMaxInFlight)return{scope:"class",resource:"stream",inFlight:W(_.counters.inFlight),limit:this.#f.nonForegroundOwnerMaxInFlight};if(U(f.counters.inFlight)>=f.maxConcurrent)return{scope:"domain",resource:"stream",inFlight:U(f.counters.inFlight),limit:f.maxConcurrent};if(E!=="foreground"){let h=Math.max(1,f.maxConcurrent-1);if(W(f.counters.inFlight)>=h)return{scope:"class",resource:"stream",inFlight:W(f.counters.inFlight),limit:h}}if(E==="internal"&&f.counters.inFlight.internal>=this.#f.internalDomainMaxInFlight)return{scope:"class",resource:"stream",inFlight:f.counters.inFlight.internal,limit:this.#f.internalDomainMaxInFlight};if(U(this.#_.inFlight)>=this.#f.globalMaxInFlight)return{scope:"global",resource:"stream",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight};if(E!=="foreground"&&W(this.#_.inFlight)>=this.#f.nonForegroundGlobalMaxInFlight)return{scope:"class",resource:"stream",inFlight:W(this.#_.inFlight),limit:this.#f.nonForegroundGlobalMaxInFlight};if(E==="internal"&&this.#_.inFlight.internal>=this.#f.internalGlobalMaxInFlight)return{scope:"class",resource:"stream",inFlight:this.#_.inFlight.internal,limit:this.#f.internalGlobalMaxInFlight};return{scope:"domain",resource:"stream",inFlight:U(f.counters.inFlight),limit:f.maxConcurrent}}#u(f,_,E){let h=this.#T.get(f),T=this.#h.get(_);if(!h||!T)throw Error("Provider admission accounting state is unavailable");this.#_.inFlight[E]++,h.counters.inFlight[E]++,T.counters.inFlight[E]++;let x=!1;return{release:()=>{if(x)return;x=!0,this.#B(f,_,E)}}}#B(f,_,E){let h=this.#T.get(f),T=this.#h.get(_);if(this.#_.inFlight[E]--,h)h.counters.inFlight[E]--;if(T)T.counters.inFlight[E]--;this.#z(f,_),this.#N()}#N(){if(this.#A)return;while(this.#E.length>0){let f=this.#t(),_=new Map;for(let[P,t]of this.#E.entries()){let N=this.#T.get(t.domainKey),M=this.#h.get(t.ownerId);if(N===void 0||M===void 0||!this.#P(N,M,t.requestClass))continue;let R=this.#V(t,f),u=_.get(t.ownerId);if(!u||R<u.rank||R===u.rank&&P<u.index)_.set(t.ownerId,{pending:t,rank:R,index:P})}let E=[..._.values()].filter(({pending:P})=>{let t=this.#T.get(P.domainKey),N=this.#h.get(P.ownerId);return t!==void 0&&N!==void 0&&this.#P(t,N,P.requestClass)}).map(({pending:P,rank:t})=>({pending:P,rank:t,order:this.#h.get(P.ownerId).order}));if(E.length===0)return;let h=Math.min(...E.map((P)=>P.rank)),T=E.filter((P)=>P.rank===h),S=T.filter((P)=>P.order>this.#S).sort((P,t)=>P.order-t.order)[0]??T.sort((P,t)=>P.order-t.order)[0];this.#I(S.pending,S.order)}}#V(f,_){let E=f.requestClass==="foreground"?0:f.requestClass==="background"?1:2,h=Math.floor(Math.max(0,_-f.enqueuedAt)/this.#f.agingMs);return Math.max(0,E-h)}#I(f,_){if(!this.#H(f,!1))return;f.settled=!0,f.admitted=!0,this.#S=_;let E=this.#u(f.domainKey,f.ownerId,f.requestClass);f.permit=E,f.resolve(E)}#j(f){let _=this.#T.get(f.domainKey),E=this.#h.get(f.ownerId),h=_&&E?this.#M(_,E,f.requestClass):{scope:"global",resource:"stream",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight};this.#D(f,new Tf("wait_timeout",h.scope,f.requestClass,h.resource,h.inFlight,h.limit,this.#E.length,f.maxWaitMs))}#c(f,_){this.#D(f,_)}#D(f,_){if(!this.#H(f))return;f.settled=!0,f.reject(_),this.#N()}#H(f,_=!0){if(f.settled||f.admitted)return!1;let E=this.#E.indexOf(f);if(E<0)return!1;this.#E.splice(E,1);let h=this.#T.get(f.domainKey),T=this.#h.get(f.ownerId);if(h&&T)this.#J(h,T,f);if(this.#W(f),_)this.#z(f.domainKey,f.ownerId);return!0}#J(f,_,E){let{requestClass:h,pendingBytes:T}=E;this.#_.queued[h]--,f.counters.queued[h]--,_.counters.queued[h]--,this.#_.pendingBytes[h]-=T,f.counters.pendingBytes[h]-=T,_.counters.pendingBytes[h]-=T}#W(f){if(f.timer)clearTimeout(f.timer);if(f.timer=void 0,f.signal&&f.abortListener)f.signal.removeEventListener("abort",f.abortListener);f.abortListener=void 0,f.signal=void 0}#z(f,_){let E=this.#T.get(f);if(E&&o_(E.counters))this.#T.delete(f);let h=this.#h.get(_);if(h&&o_(h.counters))this.#h.delete(_)}#$(f){let _=Math.max(0,Math.floor(this.#t()-f.enqueuedAt));if(f.admitted)return{state:"admitted",requestClass:f.requestClass,resource:"stream",scope:"domain",queuePosition:0,queueDepth:this.#E.length,inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight,waitMs:_,maxWaitMs:f.maxWaitMs};let E=this.#T.get(f.domainKey),h=this.#h.get(f.ownerId),T=E&&h?this.#M(E,h,f.requestClass):{scope:"global",resource:"stream",inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight};return{state:"queued",requestClass:f.requestClass,resource:T.resource,scope:T.scope,reason:"capacity",queuePosition:this.#L(f,T.scope),queueDepth:this.#E.length,inFlight:T.inFlight,limit:T.limit,waitMs:_,maxWaitMs:f.maxWaitMs}}#k(f,_){return{state:"admitted",requestClass:f.requestClass,resource:"stream",scope:"domain",queuePosition:0,queueDepth:this.#E.length,inFlight:U(this.#_.inFlight),limit:this.#f.globalMaxInFlight,waitMs:_,maxWaitMs:f.maxWaitMs}}#L(f,_){let E=this.#E.filter((h)=>{switch(_){case"owner":return h.ownerId===f.ownerId;case"domain":return h.domainKey===f.domainKey;case"class":return h.requestClass===f.requestClass;case"global":return!0}});return Math.max(1,E.indexOf(f)+1)}#X(f,_,E,h){return new Tf(f,E.scope,_.requestClass,E.resource,E.inFlight,E.limit,h,_.maxWaitMs)}}var v_;function m_(){return v_??=new p_,v_}function q_(f,_={}){let E=_.maxBytes??134217728,h=_.maxNodes??1e5;if(!Number.isSafeInteger(E)||E<=0||E>=Number.MAX_SAFE_INTEGER)throw Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(h)||h<=0)throw Error("maxNodes must be a positive safe integer");let T=new WeakSet,x=0,S=0,P=!1,t=(M)=>{if(P||M<=0)return;if(!Number.isSafeInteger(M)||M>E-x){x=E+1,P=!0;return}x+=M},N=(M)=>{if(P)return;if(S+=1,S>h){t(E+1);return}if(M===null){t(4);return}switch(typeof M){case"string":t(Buffer.byteLength(M,"utf8"));return;case"number":case"bigint":t(8);return;case"boolean":t(4);return;case"undefined":case"function":case"symbol":return;case"object":break}if(T.has(M))return;if(T.add(M),ArrayBuffer.isView(M)){t(32+M.byteLength);return}if(M instanceof ArrayBuffer){t(32+M.byteLength);return}if(M instanceof Date){t(40);return}if(M instanceof RegExp){t(32+Buffer.byteLength(M.source,"utf8"));return}if(M instanceof Map){t(32);for(let[R,u]of M)if(N(R),N(u),P)return;return}if(M instanceof Set){t(32);for(let R of M)if(N(R),P)return;return}if(M instanceof WeakMap||M instanceof WeakSet){t(32);return}if(Array.isArray(M)){t(16);for(let R of M)if(N(R),P)return;return}t(32);for(let R of Reflect.ownKeys(M)){if(typeof R!=="string")continue;let u=Object.getOwnPropertyDescriptor(M,R);if(!u?.enumerable||!("value"in u))continue;if(t(8+Buffer.byteLength(R,"utf8")),N(u.value),P)return}};return N(f),x}function g_(f){return q_([f.messages,f.context,f.tools,f.requestOptions],{maxBytes:s})}var l_=new WeakSet;class a extends Error{budgetMs;elapsedMs;code="PROVIDER_RECOVERY_BUDGET_EXCEEDED";constructor(f,_){super(`Provider recovery budget exhausted after ${f}ms`);this.budgetMs=f;this.elapsedMs=_;this.name="ProviderRecoveryBudgetExceededError"}}class of extends Error{timeoutMs;code="PROVIDER_REQUEST_DEADLINE_EXCEEDED";constructor(f){super(`Provider request deadline exceeded after ${f}ms`);this.timeoutMs=f;this.name="ProviderRequestDeadlineExceededError"}}var nE=["gousagelimiterror","freeusagelimiterror","monthly usage limit reached","available balance","insufficient_quota","out of budget","quota exceeded","billing"],rE=["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"],iE=["econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","connection error","connection refused","connection lost","other side closed","socket hang up","socket connection was closed","upstream connect","reset before headers","websocket closed","websocket error","http2 request did not get a response"];function a_(f){return(f instanceof Error?f.message:String(f)).toLowerCase()}function fh(f){let _=a_(f);return rE.some((E)=>_.includes(E))}function sf(f){if(f!==null&&typeof f==="object")l_.add(f)}function RT(f){return f!==null&&typeof f==="object"&&l_.has(f)}function _h(f){return f!==null&&typeof f==="object"&&"code"in f?f.code:void 0}function Eh(f){if(f===null||typeof f!=="object")return;let _=f;for(let E of["status","statusCode"]){let h=_[E];if(typeof h==="number"&&Number.isInteger(h))return h}return}function hh(f){let _=f.match(/^(?:error:\s*)?(\d{3})\b/),E=f.match(/\b(?:status(?:\s+code)?|http)[:\s]+(\d{3})\b/),h=Number(_?.[1]??E?.[1]);return Number.isInteger(h)?h:void 0}function y(f,_){let E=a_(f),h=_h(f);if(h==="STREAM_IDLE_TIMEOUT"||h==="PROVIDER_RECOVERY_BUDGET_EXCEEDED"||f instanceof Error&&f.name==="AbortError"||E.includes("request aborted")||E==="aborted")return{retryable:!1};if(nE.some((x)=>E.includes(x))||fh(f))return{retryable:!1};if(_?.shouldRetry==="false")return{retryable:!1,statusCode:_.statusCode};if(h==="PROVIDER_REQUEST_DEADLINE_EXCEEDED")return{retryable:!0,reason:"timeout"};let T=_?.statusCode??Eh(f)??hh(E);if(_?.shouldRetry==="true")return{retryable:!0,reason:T===429?"rate_limit":T===408||T===409?"timeout":"server_error",statusCode:T};if(T===429)return{retryable:!0,reason:"rate_limit",statusCode:T};if(T===408||T===409)return{retryable:!0,reason:"timeout",statusCode:T};if(T!==void 0&&T>=500&&T<=599)return{retryable:!0,reason:"server_error",statusCode:T};if(h==="PROVIDER_STREAM_CLOSED"||E.includes("stream closed before completion")||E.includes("ended without")||E.includes("stream ended before"))return{retryable:!0,reason:"stream_closed",statusCode:T};if(iE.some((x)=>E.includes(x)))return{retryable:!0,reason:"transport",statusCode:T};if(E.includes("timeout")||E.includes("timed out")||E.includes("temporarily unavailable")||E.includes("upstream_error")||E.includes("overloaded")||E.includes("rate limit")||E.includes("too many requests")||E.includes("service unavailable")||E.includes("server error")||E.includes("internal error")||E.includes("please retry")||E.includes("try your request again"))return{retryable:!0,reason:E.includes("rate")||E.includes("too many")?"rate_limit":E.includes("timeout")||E.includes("timed out")?"timeout":"server_error",statusCode:T};return{retryable:!1,statusCode:T}}function vf(f,_){if(!f)return;if(f.retryAfterMs!==void 0){let T=Number.parseFloat(f.retryAfterMs);if(Number.isFinite(T))return Math.max(0,T)}if(f.retryAfter===void 0)return;let E=Number.parseFloat(f.retryAfter);if(Number.isFinite(E))return Math.max(0,E*1000);let h=Date.parse(f.retryAfter);return Number.isFinite(h)?Math.max(0,h-_):void 0}function y_(f,_,E={}){let h=E.now??Date.now(),T=E.maxDelayMs??60000,x=vf(_,h);if(x!==void 0)return Math.min(Math.ceil(x),T);let S=Math.max(0,f-1),P=E.maxExponentialDelayMs??8000,t=Math.min(500*2**S,P),N=Math.max(0,Math.min(1,E.random??Math.random())),M=t*(0.75+N*0.25);return Math.min(Math.round(M),T)}function n_(f,_){let E=f.onPayload;f.onPayload=async(h,T)=>{let x=E?await E(h,T):h;return _(x===void 0?h:x,T)}}function Th(f){if(!f.reasoningEnabled)return;return f.reasoningEffort??f.reasoningLevel??"high"}function wf(f,_,E){if(!f.enablePromptCaching)return"none";if(E&&_.api==="openai-completions"&&!_.baseUrl.includes("api.openai.com"))return"long";return"short"}function xh(f){switch(f){case"minimal":return"MINIMAL";case"low":return"LOW";case"medium":return"MEDIUM";default:return"HIGH"}}function th(f,_,E,h){let T=h?void 0:Th(E);if(!T){if(_.api==="anthropic-messages")f.thinkingEnabled=!1;if(_.api==="google-generative-ai"||_.api==="google-vertex")f.thinking={enabled:!1};return}switch(_.api){case"anthropic-messages":f.thinkingEnabled=!0,f.effort=T;break;case"google-generative-ai":case"google-vertex":f.thinking={enabled:!0,level:xh(T)};break;case"mistral-conversations":f.reasoningEffort="high";break;case"bedrock-converse-stream":case"pi-messages":f.reasoning=T;break;default:f.reasoningEffort=T}}function Mh(f,_,E){if(!E)return;switch(_){case"anthropic-messages":case"bedrock-converse-stream":f.toolChoice={type:"tool",name:E};break;case"openai-completions":case"mistral-conversations":case"pi-messages":f.toolChoice={type:"function",function:{name:E}};break;case"openai-responses":case"openai-codex-responses":case"azure-openai-responses":f.toolChoice={type:"function",name:E};break;case"google-generative-ai":case"google-vertex":f.toolChoice="any";break}}function Rh(f,_,E){let h=E.serviceTier;if(!h)return;if(_.api==="openai-responses"||_.api==="openai-codex-responses"||_.api==="azure-openai-responses"){f.serviceTier=h;return}if(_.api!=="openai-completions"&&!(_.api==="anthropic-messages"&&h==="fast"))return;n_(f,(T)=>{if(!T||typeof T!=="object"||Array.isArray(T))return T;return _.api==="anthropic-messages"?{...T,speed:"fast"}:{...T,service_tier:h}})}function Ah(f,_,E){let h=E.responseVerbosity;if(!h)return;if(e_(_,h),_.api==="openai-codex-responses"){f.textVerbosity=h;return}n_(f,(T)=>{if(!T||typeof T!=="object"||Array.isArray(T))return T;if(_.api==="openai-completions")return{...T,verbosity:h};let x="text"in T&&T.text&&typeof T.text==="object"&&!Array.isArray(T.text)?T.text:{};return{...T,text:{...x,verbosity:h}}})}function r_(f,_,E,h,T=!1){let x={apiKey:f.apiKey,headers:f.customHeaders,signal:E,temperature:h?.temperature??f.temperature??0,maxTokens:h?.maxOutputTokens??f.maxOutputTokens,timeoutMs:f.timeout,maxRetries:0,cacheRetention:wf(f,_,h?.providerSessionId),sessionId:h?.providerSessionId};if(th(x,_,f,T),Mh(x,_.api,h?.toolChoice?.toolName),Rh(x,_,f),Ah(x,_,f),_.api==="azure-openai-responses")x.azureBaseUrl=f.baseUrl,x.azureApiVersion=f.apiVersion,x.azureDeploymentName=_.id;return x}function d_(f,_){let E=_.get("x-should-retry");return{statusCode:f,..._.get("retry-after")!==null?{retryAfter:_.get("retry-after")??void 0}:{},..._.get("retry-after-ms")!==null?{retryAfterMs:_.get("retry-after-ms")??void 0}:{},...E==="true"||E==="false"?{shouldRetry:E}:{}}}var Ph=new Set(["anthropic-messages","openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","pi-messages"]);function i_(f,_,E){let h=f.onResponse;if(f.onResponse=async(x,S)=>{let P=new Headers(x.headers);E(d_(x.status,P)),await h?.(x,S)},!Ph.has(_.api)||typeof globalThis.fetch!=="function")return;let T=typeof f.fetch==="function"?f.fetch:globalThis.fetch.bind(globalThis);f.fetch=async(x,S)=>{let P=await T(x,S);return E(d_(P.status,P.headers)),P}}function fE(f){return{promptTokens:f.input+f.cacheRead+f.cacheWrite,completionTokens:f.output,totalTokens:f.totalTokens,costUsd:f.cost.total,...f.reasoning!==void 0?{reasoningTokens:f.reasoning}:{},...f.cacheWrite>0?{cacheCreationInputTokens:f.cacheWrite}:{},...f.cacheRead>0?{cacheReadInputTokens:f.cacheRead}:{}}}var Hf=300000,Sh=30000;class _E extends Error{timeoutMs;code="STREAM_IDLE_TIMEOUT";constructor(f){super(`Provider stream idle timeout after ${f}ms without an event`);this.timeoutMs=f;this.name="StreamIdleTimeoutError"}}class EE extends Error{code="PROVIDER_STREAM_CLOSED";constructor(){super("Provider stream closed before completion");this.name="ProviderStreamClosedError"}}function pf(f){return f.reason instanceof Error?f.reason:new DOMException("Aborted","AbortError")}function Nh(f){return f.idleTimeoutMs&&f.idleTimeoutMs>0?f.idleTimeoutMs:Hf}function Ih(f,_){if(_===0)return;let E=_!==void 0&&_>0?_:Sh;return Math.max(1,Math.min(E,Math.floor(f/2)))}function uh(f,_,E){if(E?.aborted)return Promise.reject(pf(E));return new Promise((h,T)=>{let x=!1,S=()=>{clearTimeout(M),E?.removeEventListener("abort",N)},P=(R)=>{if(x)return;x=!0,S(),h(R)},t=(R)=>{if(x)return;x=!0,S(),T(R instanceof Error?R:Error(String(R)))},N=()=>{if(E)t(pf(E))},M=setTimeout(()=>P({kind:"timer"}),Math.max(0,_));if(E?.addEventListener("abort",N,{once:!0}),E?.aborted){N();return}f.then((R)=>P({kind:"next",result:R}),t)})}async function*Dh(f,_,E){let h=Nh(_),T=Ih(h,_.stallWarningMs);if(_.signal?.aborted)throw pf(_.signal);let x=Date.now(),S=Promise.resolve().then(()=>f.next()),P;for(;;){let N=await uh(S,(P?h:T??h)-(Date.now()-x),_.signal);if(N.kind==="next"){if(P)yield{...P,phase:"recovered",durationMs:Math.max(P.durationMs,Date.now()-x)};return N.result}if(!P&&T!==void 0){E.stallCount++,P={phase:"detected",stallCount:E.stallCount,durationMs:T,warningAfterMs:T,timeoutMs:h,outputStarted:E.outputStarted},yield P;continue}let M=new _E(h);throw _.abort?.(M),M}}async function*hE(f,_,E,h,T={}){let S=f.stream(_,E,h)[Symbol.asyncIterator](),P=0,t=!1,N={stallCount:0,outputStarted:!1};try{while(!0){let M=Dh(S,T,N),R=await M.next();while(!R.done)yield{providerStall:R.value},R=await M.next();let u=R.value;if(u.done)throw new EE;let Y=u.value;switch(Y.type){case"text_delta":N.outputStarted=!0,yield{content:Y.delta};break;case"thinking_delta":N.outputStarted=!0,yield{reasoningContent:Y.delta};break;case"toolcall_end":N.outputStarted=!0,yield{toolCalls:[{index:P++,id:Y.toolCall.id,type:"function",function:{name:Y.toolCall.name,arguments:JSON.stringify(Y.toolCall.arguments)}}]};break;case"done":t=!0,yield{finishReason:Y.reason,usage:fE(Y.message.usage)};return;case"error":throw Error(Y.error.errorMessage??`Request ${Y.reason==="aborted"?"aborted":"failed"}`)}}}finally{if(!t)Promise.resolve(S.return?.()).catch(()=>{return})}}var mf=g("Chat"),Hh=1;function Uh(f,_){let E=_.provider===f.provider,h=E&&_.channel===void 0,T=_.channel;return{...f,provider:_.provider,model:_.model,apiKey:T?.apiKey??(h?f.apiKey:void 0),baseUrl:T?.baseUrl??(h?f.baseUrl:void 0),temperature:T?.temperature??f.temperature,maxOutputTokens:T?.maxOutputTokens??(h?f.maxOutputTokens:void 0),timeout:T?.timeout??f.timeout,streamIdleTimeout:T?.streamIdleTimeout??f.streamIdleTimeout,apiVersion:T?.apiVersion??(h?f.apiVersion:void 0),customHeaders:T?.customHeaders??(h?f.customHeaders:void 0),enablePromptCaching:T?.enablePromptCaching??(h?f.enablePromptCaching:void 0),serviceTier:E?f.serviceTier:void 0,responseVerbosity:E?f.responseVerbosity:void 0,fallbackModels:void 0}}function Yh(f){return Boolean(f&&f.role==="user"&&Array.isArray(f.content)&&f.content.some((_)=>_.type==="image_url"))}function ch(f){let E=f.findLast((h)=>{let T=h.metadata;return T!==null&&typeof T==="object"&&!Array.isArray(T)&&T.isCompactSummary===!0})?.metadata;return E!==null&&typeof E==="object"&&!Array.isArray(E)&&typeof E.parentId==="string"?E.parentId:""}function bh(f,_){let E=y(f,_);if(!E.retryable||!E.reason)return;let h=E.statusCode;switch(E.reason){case"rate_limit":if(h!==429)return;break;case"server_error":if(h===void 0||h<500||h>599)return;break;case"transport":case"stream_closed":break;case"timeout":return}let T=vf(_,Date.now());return{reason:E.reason,...h!==void 0?{statusCode:h}:{},...T!==void 0?{retryAfterMs:T}:{}}}function qf(f){return f!==null&&typeof f==="object"&&"code"in f&&f.code==="STREAM_IDLE_TIMEOUT"}class af{config;models;model;promptCacheBreakMonitor=new Jf;admissionFallbackOwnerId=`pi-service-${process.pid}-${Hh++}`;constructor(f){let _=zf(f);this.config={...f,maxContextTokens:_.model.contextWindow,maxOutputTokens:f.maxOutputTokens??_.model.maxTokens},this.models=_.models,this.model=_.model,mf.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(f,_,E,h){let T="",x="",S=[],P,t;for await(let N of this.streamChat(f,_,E,h)){T+=N.content??"",x+=N.reasoningContent??"";for(let M of N.toolCalls??[])if(M.id&&M.type==="function"&&M.function?.name)S.push(M);P=N.usage??P,t=N.finishReason??t}return{content:T,...x?{reasoningContent:x}:{},...S.length>0?{toolCalls:S}:{},usage:P,finishReason:t}}async*streamChat(f,_,E,h){let T=h?.toolChoice?.toolName;if(T&&!_?.some((A)=>A.name===T))throw Error(`Required tool is unavailable: ${T}`);let x=R_(f);if(x.some((A)=>Yh(A))&&!this.model.input.includes("image"))throw Error(`${this.model.name} does not support image input`);let S=Boolean(T)||A_(x),P=await M_(x,this.model,_,E,T),t=(A,I)=>{let B=h?.providerSessionId;if(!B||!A.usage)return A;if(!this.config.enablePromptCaching)return this.promptCacheBreakMonitor.clear(B),A;let c=wf(this.config,I,B),H=this.promptCacheBreakMonitor.observe({sessionId:B,modelIdentity:`${I.provider}\x00${I.api}\x00${I.id}`,context:P,retention:c,contextEpoch:ch(x),policy:{baseUrl:I.baseUrl??this.config.baseUrl??"",retention:c,requiredTool:T??"",reasoningEnabled:this.config.reasoningEnabled??!1,reasoningEffort:this.config.reasoningEffort??this.config.reasoningLevel??"",serviceTier:this.config.serviceTier??"",responseVerbosity:this.config.responseVerbosity??"",temperature:h?.temperature??this.config.temperature??0,maxOutputTokens:h?.maxOutputTokens??this.config.maxOutputTokens??0,customHeaders:this.config.customHeaders??{}},usage:A.usage});if(!H)return A;return mf.warn("[PiAIChatService] Prompt cache break detected",{reason:H.reason,previousCacheReadTokens:H.previousCacheReadTokens,cacheReadTokens:H.cacheReadTokens,tokenDrop:H.tokenDrop,callNumber:H.callNumber}),{...A,usage:{...A.usage,promptCacheBreak:H}}},N=g_({messages:x,context:P,tools:_,requestOptions:h}),M=h?.providerRecovery;if(M&&!xE(M.budgetMs))throw Error("Invalid bounded foreground Provider recovery budget");let R=M?.mode==="bounded_foreground"&&M.budgetMs>0?{budgetMs:M.budgetMs,startedAt:void 0}:void 0,u=R?"bounded_foreground":"standard",Y=this.config.maxRetries??2,$=this.config.maxRetries??(R?TE:2),Q=R!==void 0&&this.config.maxRetries===void 0,K=0,o,Uf=this.config.providerCircuitRegistry??c_(),tf=this.config.providerCircuitBreakerOpenMs??Wf,tE=Math.max(Nf,Math.min(this.config.streamIdleTimeout??Hf,kf)),ME=this.config.providerRequestAdmissionScheduler??m_(),RE=this.config.providerRequestConcurrency??Kf,yf=this.config.providerRequestAdmissionMs??Cf,AE=this.config.providerRequestPendingBytes??Ff,Yf=h?.providerAdmission??{sessionId:this.admissionFallbackOwnerId,ownerId:this.admissionFallbackOwnerId,requestClass:"internal"},PE=(A,I)=>Uf.get({provider:A.provider,api:A.api,baseUrl:A.baseUrl??I.baseUrl??"",model:A.id,serviceTier:I.serviceTier,apiVersion:I.apiVersion,apiKey:I.apiKey,customHeaders:I.customHeaders,openDurationMs:tf,probeLeaseMs:tE}),SE=(A,I)=>({provider:A.provider,api:A.api,baseUrl:A.baseUrl??I.baseUrl??"",model:A.id,serviceTier:I.serviceTier,apiVersion:I.apiVersion,apiKey:I.apiKey,customHeaders:I.customHeaders,maxConcurrent:RE,maxPendingBytes:AE}),j=(A=Date.now())=>{if(!R)return;let I=R.startedAt===void 0?0:Math.min(R.budgetMs,Math.max(0,A-R.startedAt));return{recoveryBudgetMs:R.budgetMs,recoveryElapsedMs:I,recoveryRemainingMs:Math.max(0,R.budgetMs-I)}},v=()=>({mode:u,...j()??{}}),df=()=>{if(R&&R.startedAt===void 0)R.startedAt=Date.now()},w=()=>{let A=j();return new a(R?.budgetMs??0,A?.recoveryElapsedMs??0)},d=()=>!Q||K<$+1,cf=(A,I)=>{let{state:B,...c}=I;return{phase:A,...c,...j()?{recoveryRemainingMs:j()?.recoveryRemainingMs}:{}}},ef=(A)=>({phase:"rejected",requestClass:A.requestClass,resource:A.resource,scope:A.scope,reason:A.reason,queuePosition:0,queueDepth:Math.max(0,A.queued),inFlight:Math.max(0,A.inFlight),limit:Math.max(0,A.limit),waitMs:A.reason==="wait_timeout"?A.maxWaitMs:0,maxWaitMs:A.maxWaitMs,...j()?{recoveryRemainingMs:j()?.recoveryRemainingMs}:{}}),NE=async function*(A,I){let B=j()?.recoveryRemainingMs,c=B!==void 0&&R?.startedAt!==void 0?Math.min(yf,B):yf,H;try{H=ME.admit({scope:SE(A,I),sessionId:Yf.sessionId,ownerId:Yf.ownerId,requestClass:Yf.requestClass,maxWaitMs:c,pendingBytes:N,signal:E})}catch(b){if(xf(b)){if(b.reason==="wait_timeout"&&R?.startedAt!==void 0&&(j()?.recoveryRemainingMs??0)<=0)throw w();yield{providerAdmission:ef(b)}}throw b}let L=H.getSnapshot();if(L.state==="admitted")return await H.ready;yield{providerAdmission:cf("queued",L)};let F=H.ready.then((b)=>({kind:"ready",permit:b}),(b)=>({kind:"error",error:b}));while(!0){let b=H.getSnapshot(),O=Math.max(1,Math.min(w_,Math.max(1,c-b.waitMs))),J,X=new Promise((p)=>{J=setTimeout(()=>p({kind:"heartbeat"}),O),J.unref?.()}),G=await Promise.race([F,X]);if(J)clearTimeout(J);if(G.kind==="heartbeat"){yield{providerAdmission:cf("queued",H.getSnapshot())};continue}if(G.kind==="error"){if(xf(G.error)){if(G.error.reason==="wait_timeout"&&R?.startedAt!==void 0&&(j()?.recoveryRemainingMs??0)<=0)throw w();yield{providerAdmission:ef(G.error)}}throw G.error}return yield{providerAdmission:cf("admitted",H.getSnapshot())},G.permit}},IE=(A,I)=>{if(!d())throw w();if(Q)K++;o=void 0;let B=new AbortController,c=E?x_(E,B.signal):B.signal,H=typeof I.timeout==="number"&&Number.isFinite(I.timeout)&&I.timeout>0?Math.max(1,Math.floor(I.timeout)):void 0,L;if(R?.startedAt!==void 0){let O=j()?.recoveryRemainingMs??0;if(O<=0)throw w();L={remainingMs:O,error:new a(R.budgetMs,R.budgetMs)}}let F=r_(I,A,c,h,S);i_(F,A,(O)=>{o=O});let b=hE(this.models,A,P,F,{idleTimeoutMs:I.streamIdleTimeout??Hf,signal:c,abort:(O)=>B.abort(O)});return async function*(){let O,J;try{if(H!==void 0&&(L===void 0||H<L.remainingMs)){let X=new of(H);O=setTimeout(()=>B.abort(X),H),O.unref?.()}if(L){let X=L;J=setTimeout(()=>B.abort(X.error),X.remainingMs),J.unref?.()}yield*b}finally{if(O)clearTimeout(O);if(J)clearTimeout(J)}}()},nf=this,q=(A)=>({phase:A.phase,reason:A.reason,...A.statusCode!==void 0?{statusCode:A.statusCode}:{},...A.retryAfterMs!==void 0?{retryAfterMs:A.retryAfterMs}:{},...A.nextProbeAt!==void 0?{nextProbeAt:A.nextProbeAt}:{},openDurationMs:A.openDurationMs,sampleCount:A.sampleCount,failureCount:A.failureCount,...j()?{recoveryRemainingMs:j()?.recoveryRemainingMs}:{}}),rf=(A,I)=>({phase:A,reason:I.reason,...I.statusCode!==void 0?{statusCode:I.statusCode}:{},retryAfterMs:I.retryAfterMs,...I.nextProbeAt!==void 0?{nextProbeAt:I.nextProbeAt}:{},openDurationMs:I.openDurationMs,sampleCount:I.sampleCount,failureCount:I.failureCount,...j()?{recoveryRemainingMs:j()?.recoveryRemainingMs}:{}}),uE=(A)=>({phase:"probe",reason:A.reason??"server_error",...A.statusCode!==void 0?{statusCode:A.statusCode}:{},openDurationMs:A.openDurationMs??tf,...A.sampleCount!==void 0?{sampleCount:A.sampleCount}:{},...A.failureCount!==void 0?{failureCount:A.failureCount}:{},...j()?{recoveryRemainingMs:j()?.recoveryRemainingMs}:{}}),bf=(A,I,B)=>({providerRetry:{phase:"exhausted",attempt:A,maxRetries:$,reason:I,...B!==void 0?{statusCode:B}:{},...v(),exhaustedBy:"recovery_budget"}}),f_=async function*(A,I,B,c,H){let L,F=!1,b,O,J=PE(A,I);for(let X=0;X<=c;X++){if(!d())break;let G,p;while(!G){let D=J.preflight();while(!D.eligible){if(b=D.reason,O=D.statusCode,!R||!H){let C=rf("rejected",D);throw yield{providerCircuit:C},new hf(C)}df();let V=j()?.recoveryRemainingMs??0;if(V<=0){let C=w();throw yield bf(Q?Math.max(0,K-1):X,D.reason,D.statusCode),C}yield{providerCircuit:rf("waiting",D)};let m=Math.min(Math.max(1,D.retryAfterMs),gf,V);if(await i(m,E,{throwOnAbort:!0}),(j()?.recoveryRemainingMs??0)<=0){let C=w();throw yield bf(Q?Math.max(0,K-1):X,D.reason,D.statusCode),C}D=J.preflight()}try{p=yield*NE(A,I)}catch(Z){if(Z instanceof a)yield bf(Q?Math.max(0,K-1):X,b??"timeout",O);throw Z}let k=J.check();if(k.allowed)G=k;else p.release(),p=void 0}let e=G.token;if(G.probe)yield{providerCircuit:uE(G)};try{let D=!1,k=!1;for await(let Z of IE(A,I)){if(Z.providerStall){yield Z;continue}let V=Q?K-1:X;if(V>0&&b&&!D)D=!0,yield{providerRetry:{phase:"recovered",attempt:V,maxRetries:$,reason:b,...O!==void 0?{statusCode:O}:{},...v()}};if(!k){k=!0;let m=J.recordSuccess(e);if(m)yield{providerCircuit:q(m)}}F=!0,B(),yield t(Z,A)}if(!k){let Z=J.recordSuccess(e);if(Z)yield{providerCircuit:q(Z)}}return}catch(D){if(p?.release(),L=D,nf.logIdleTimeout(D,F,A),await nf.handleAbort(E),D instanceof a){if(F)throw sf(D),D;throw yield{providerRetry:{phase:"exhausted",attempt:Q?Math.max(0,K-1):X,maxRetries:$,reason:b??"timeout",...O!==void 0?{statusCode:O}:{},...v(),exhaustedBy:"recovery_budget"}},D}let k=y(D,o);if(F)throw sf(D),D;let Z=bh(D,o),V=Z?J.recordFailure(e,Z):o&&!qf(D)?J.recordNeutral(e):void 0;if(V)yield{providerCircuit:q(V)};if(!k.retryable||!k.reason){if(X>0&&b)yield{providerRetry:{phase:"exhausted",attempt:Q?Math.max(0,K-1):X,maxRetries:$,reason:b,...O!==void 0?{statusCode:O}:{},...v()}};throw D}b=k.reason,O=k.statusCode;let m=X<c&&d();if(V&&V.phase!=="closed"&&m&&(!R||!H)){let C={...q(V),phase:"rejected"};throw yield{providerCircuit:C},new hf(C)}if(m){df();let C=Q?K:X+1,HE=y_(C,o,R?{maxDelayMs:lf,maxExponentialDelayMs:lf}:void 0),E_=V&&V.phase!=="closed"?V.retryAfterMs??0:0;if(R&&E_>0&&V)yield{providerCircuit:{...q(V),phase:"waiting"}};let UE=j(),Bf=Math.max(HE,E_),n=R?Math.min(Bf,UE?.recoveryRemainingMs??Bf):Bf,Rf={attempt:C,maxRetries:$,reason:k.reason,...k.statusCode!==void 0?{statusCode:k.statusCode}:{}};if(yield{providerRetry:{phase:"scheduled",...Rf,delayMs:n,nextRetryAt:Date.now()+n,...v()}},R){let r=n;while(r>0){let h_=Math.min(r,gf);if(await i(h_,E,{throwOnAbort:!0}),r-=h_,(j()?.recoveryRemainingMs??0)<=0){let Af=w();throw yield{providerRetry:{phase:"exhausted",...Rf,...v(),exhaustedBy:"recovery_budget"}},Af}if(r>0){if(V&&V.phase!=="closed"&&V.nextProbeAt!==void 0){let Af=Math.max(0,V.nextProbeAt-Date.now());if(Af>0)yield{providerCircuit:{...q(V),phase:"waiting",retryAfterMs:Af}}}yield{providerRetry:{phase:"waiting",...Rf,delayMs:n,nextRetryAt:Date.now()+r,...v()}}}}}else await i(n,E,{throwOnAbort:!0});yield{providerRetry:{phase:"attempt",...Rf,...v()}}}else yield{providerRetry:{phase:"exhausted",attempt:Q?Math.max(0,K-1):X,maxRetries:$,reason:k.reason,...k.statusCode!==void 0?{statusCode:k.statusCode}:{},...v(),...R&&(H||!d())?{exhaustedBy:"attempt_limit"}:{}}}}finally{J.abandon(e),p?.release()}}throw L},Of,__=!1,Mf=this.config.fallbackModels??[],DE=R&&Mf.length>0?Math.min(Y,$):$;try{for await(let A of f_(this.model,this.config,()=>{__=!0},DE,Mf.length===0))yield A;return}catch(A){if(Of=A,__||!xf(A)&&!Lf(A)&&!qf(A)&&!y(A,o).retryable)throw A}for(let[A,I]of Mf.entries()){if(!d())break;yield{modelFallback:!0};let B=!1;try{let c=Uh(this.config,I),H=N_(c,I),L=A===Mf.length-1,F=R&&!L?Math.min(Y,$):$;for await(let b of f_(H,c,()=>{B=!0},F,L))yield b;return}catch(c){if(Of=c,B||!xf(c)&&!Lf(c)&&!qf(c)&&!y(c,o).retryable)throw c}}throw Of}async handleAbort(f){if(f?.aborted)await i(0,f,{throwOnAbort:!0})}logIdleTimeout(f,_,E){if(f===null||typeof f!=="object"||!("code"in f)||f.code!=="STREAM_IDLE_TIMEOUT"||!("timeoutMs"in f)||typeof f.timeoutMs!=="number")return;mf.warn("[PiAIChatService] Provider stream idle timeout",{provider:E.provider,model:E.id,timeoutMs:f.timeoutMs,replayBoundaryCrossed:_})}getConfig(){return{...this.config}}updateConfig(f){let _={...this.config,...f},E=zf(_);this.config={..._,maxContextTokens:E.model.contextWindow,maxOutputTokens:_.maxOutputTokens??E.model.maxTokens},this.models=E.models,this.model=E.model}}var Oh=g("Service");async function GT(f){let _=f;if(_.provider){let E=T_(_.provider);if(Object.keys(E).length>0)_={..._,customHeaders:{...E,..._.customHeaders}},Oh.debug(`Injected ${_.provider} specific headers:`,Object.keys(E))}return Bh(_)}function Bh(f){return new af(f)}
5
+ export{Xh as Yd,Wh as Zd,x_ as _d,xf as $d,q_ as ae,fh as be,RT as ce,af as de,GT as ee};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blade-code",
3
- "version": "0.10.69",
3
+ "version": "0.10.71",
4
4
  "private": false,
5
5
  "description": "🗡️ Blade Code - 智能代码助手命令行工具",
6
6
  "type": "module",
@@ -1,5 +0,0 @@
1
- import{Ag as i_,Bg as wf,Cg as pf,Dg as fE,Eg as Xf,Gg as zf,Ig as $f,Jg as uf,Kg as cf,Lg as kf,Ng as Pf,Og as Lf,Qg as Q}from"./chunk-6pyktfa4.js";import{Xg as m}from"./chunk-98n2rxmq.js";import{$g as t_,bh as Cf}from"./chunk-ypqp368c.js";import{eh as l_}from"./chunk-t8xmh4w2.js";var PE={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},f_=(f)=>PE[f]||{};var DE=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function sf(f){return typeof f==="string"&&DE.has(f)}function bT(f){if(!f.aborted)return;if(sf(f.reason))return f.reason;return"user-cancel"}function CT(f){if(sf(f))return!0;if(!(f instanceof Error))return!1;if(f.name==="AbortError")return!0;if(f instanceof DOMException&&f.name==="AbortError")return!0;if(f.message.includes("aborted"))return!0;return!1}function __(...f){let _=f.filter(Boolean);if(_.length===0)return new AbortController().signal;if(_.length===1)return _[0];let E=AbortSignal;if(typeof E.any==="function")return E.any(_);for(let h of _)if(h.aborted)return h;let T=new AbortController,x=new Map;for(let h of _){let u=()=>{T.abort(h.reason);for(let[S,t]of x)S.removeEventListener("abort",t)};x.set(h,u)}for(let[h,u]of x)h.addEventListener("abort",u,{once:!0});return T.signal}function d(f,_,E){let T=E?.throwOnAbort??!1;if(_?.aborted){if(T)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((x,h)=>{let u,S=setTimeout(()=>{if(_&&u)_.removeEventListener("abort",u);x()},f);if(_)u=()=>{if(clearTimeout(S),T)h(new DOMException("Aborted","AbortError"));else x()},_.addEventListener("abort",u,{once:!0})})}var HE=m("Chat"),UE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function Vf(f){if(typeof f==="string")return f;return f.filter((_)=>_.type==="text").map((_)=>_.text).join(`
2
- `)}function YE(f){if(!f)return{};try{let _=JSON.parse(f);return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}catch{return HE.warn("[PiAIChatService] Invalid historical tool arguments",{value:f}),{}}}function NE(f){let _=f.match(/^data:([^;,]+);base64,(.+)$/s);return _?{mimeType:_[1],data:_[2]}:void 0}async function OE(f,_){let E=NE(f);if(E)return{type:"image",...E};if(!/^https?:\/\//i.test(f))return{type:"text",text:`[Unsupported image source: ${f}]`};let T=await fetch(f,{signal:_});if(!T.ok)throw Error(`Failed to load image ${f}: HTTP ${T.status}`);return{type:"image",mimeType:T.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await T.arrayBuffer()).toString("base64")}}async function T_(f,_,E,T,x){let h=f.filter((t)=>t.role==="system").map((t)=>Vf(t.content)).filter(Boolean).join(`
3
-
4
- `),u=[];for(let t of f){if(t.role==="system")continue;if(t.role==="user"){let c=_.input.includes("image"),M=typeof t.content==="string"?t.content:await Promise.all(t.content.map((R)=>R.type==="text"?Promise.resolve({type:"text",text:R.text}):c?OE(R.image_url.url,T):Promise.resolve({type:"text",text:"[Image omitted: current model does not support image input]"})));u.push({role:"user",content:M,timestamp:Date.now()});continue}if(t.role==="assistant"){let c=[];if(t.reasoningContent?.trim())c.push({type:"thinking",thinking:t.reasoningContent});let M=Vf(t.content);if(M)c.push({type:"text",text:M});for(let R of t.tool_calls??[]){if(!("function"in R))continue;c.push({type:"toolCall",id:R.id,name:R.function.name,arguments:YE(R.function.arguments)})}u.push({role:"assistant",content:c,api:_.api,provider:_.provider,model:_.id,usage:UE,stopReason:t.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}u.push({role:"toolResult",toolCallId:t.tool_call_id??"",toolName:t.name??"unknown",content:[{type:"text",text:Vf(t.content)}],isError:!1,timestamp:Date.now()})}let S=E?.filter((t)=>!x||t.name===x).map((t)=>({name:t.name,description:t.description,parameters:t.parameters,constrainedSampling:t.constrainedSampling})).sort((t,c)=>t.name<c.name?-1:t.name>c.name?1:0);return{...h?{systemPrompt:h}:{},messages:u,...S?.length?{tools:S}:{}}}function x_(f){let _=[];for(let E=0;E<f.length;E++){let T=f[E];if(T.role==="tool")continue;let x=T.role==="assistant"&&T.tool_calls?.length?T.tool_calls:void 0;if(!x){_.push(T);continue}let h=[],u=E+1;while(u<f.length&&f[u].role==="tool")h.push(f[u++]);let S=new Set(x.map((M)=>M.id)),t=h.filter((M)=>M.tool_call_id&&S.has(M.tool_call_id)),c=new Set(t.map((M)=>M.tool_call_id));if(S.size===x.length&&t.length===S.size&&c.size===S.size)_.push(T,...t);E=u-1}return _}function h_(f){return f.some((_)=>_.role==="assistant"&&Boolean(_.tool_calls?.length)&&!_.reasoningContent?.trim())}function M_(f,_){return{...f,..._.baseUrl?{baseUrl:t_(f.api,_.baseUrl)}:{},..._.maxOutputTokens?{maxTokens:_.maxOutputTokens}:{}}}function jf(f){let _=f.modelCatalog??Cf();return{models:_.models,model:M_(_.getModel(f.provider,f.model),f)}}function R_(f,_){let E=f.modelCatalog??Cf();return M_(E.getModel(_.provider,_.model),f)}import{createHash as bE}from"node:crypto";var sE=32,VE=1000,CE=512,jE=2000,BE=0.1,XE=0.05,zE=0.9,IE=300000,JE=3600000;class Bf{sessions=new Map;observe(f){if(f.retention==="none"){this.sessions.delete(f.sessionId);return}let _=f.now??Date.now(),E=WE(f,_),T=this.sessions.get(f.sessionId);if(E.callCount=(T?.callCount??0)+1,this.touch(f.sessionId,E),T&&E.contextEpoch!==T.contextEpoch)return;if(!T||T.cacheReadTokens<VE)return;let x=T.cacheReadTokens-E.cacheReadTokens,h=Math.min(jE,Math.max(CE,T.cacheReadTokens*BE));if(x<h||E.cacheReadTokens>=T.cacheReadTokens*(1-XE))return;let u=E.modelIdentity!==T.modelIdentity,S=E.systemHash!==T.systemHash,t=E.toolsHash!==T.toolsHash,c=E.policyHash!==T.policyHash;if(!(u||S||t||c)&&E.promptTokens<T.promptTokens*zE)return;let R=Math.max(0,_-T.recordedAt),D=T.retention==="long"?JE:IE,Y=u?"model_changed":S?"system_prompt_changed":t?"tools_changed":c?"request_policy_changed":R>=D?"ttl_expired":"server_side",z=$E(T,E);return{reason:Y,previousCacheReadTokens:T.cacheReadTokens,cacheReadTokens:E.cacheReadTokens,cacheWriteTokens:Math.max(0,f.usage.cacheCreationInputTokens??0),tokenDrop:x,elapsedMs:R,callNumber:E.callCount,systemPromptChanged:S,systemCharDelta:E.systemChars-T.systemChars,toolsChanged:t,addedToolCount:z.added,removedToolCount:z.removed,changedToolCount:z.changed,modelChanged:u,requestPolicyChanged:c}}clear(f){if(f)this.sessions.delete(f);else this.sessions.clear()}statsForTests(){return{sessions:this.sessions.size}}touch(f,_){this.sessions.delete(f),this.sessions.set(f,_);while(this.sessions.size>sE){let E=this.sessions.keys().next().value;if(E===void 0)break;this.sessions.delete(E)}}}function WE(f,_){let E=[...f.tools??f.context.tools??[]].map((T)=>({identityHash:n(T.name),contractHash:n(i(T))})).sort((T,x)=>T.identityHash<x.identityHash?-1:T.identityHash>x.identityHash?1:0);return{modelIdentity:f.modelIdentity,systemHash:n(f.context.systemPrompt??""),systemChars:f.context.systemPrompt?.length??0,toolsHash:n(i(E)),toolFingerprints:E,policyHash:n(i(f.policy)),contextEpoch:f.contextEpoch??"",retention:f.retention,promptTokens:Number.isFinite(f.usage.promptTokens)?Math.max(0,f.usage.promptTokens):0,cacheReadTokens:Math.max(0,f.usage.cacheReadInputTokens??0),recordedAt:_,callCount:1}}function $E(f,_){let E=new Map(f.toolFingerprints.map((x)=>[x.identityHash,x.contractHash])),T=new Map(_.toolFingerprints.map((x)=>[x.identityHash,x.contractHash]));return{added:[...T.keys()].filter((x)=>!E.has(x)).length,removed:[...E.keys()].filter((x)=>!T.has(x)).length,changed:[...T].filter(([x,h])=>E.has(x)&&E.get(x)!==h).length}}function i(f){if(f===null||typeof f!=="object")return JSON.stringify(f)??"undefined";if(Array.isArray(f))return`[${f.map(i).join(",")}]`;let _=f;return`{${Object.keys(_).sort().map((E)=>`${JSON.stringify(E)}:${i(_[E])}`).join(",")}}`}function n(f){return bE("sha256").update(f).digest("hex")}import{randomBytes as ZE}from"node:crypto";import{createHmac as kE}from"node:crypto";function LE(f){try{let _=new URL(f);if(_.hash="",_.hostname=_.hostname.toLowerCase(),_.searchParams.sort(),_.pathname!=="/")_.pathname=_.pathname.replace(/\/+$/,"");return _.toString()}catch{return f.trim().replace(/\/+$/,"")}}function GE(f){if(!f)return[];return Object.entries(f).map(([_,E])=>[_.trim().toLowerCase(),E.trim()]).sort(([_],[E])=>_.localeCompare(E))}function Rf(f,_,E){let T=JSON.stringify([f.provider.trim(),String(f.api).trim(),LE(f.baseUrl),f.model.trim(),f.serviceTier?.trim()??"",f.apiVersion?.trim()??"",f.apiKey??"",GE(f.customHeaders),E]);return kE("sha256",Buffer.from(_)).update(T).digest("hex")}var KE=60000,QE=4,FE=0.8;var Sf=300000,If=600000;var A_=128,S_=256,vE=1800000,Af=50;class _f extends Error{circuit;code="PROVIDER_CIRCUIT_OPEN";constructor(f){super(`Provider circuit open; retry after ${f.retryAfterMs??0}ms`);this.circuit=f;this.name="ProviderCircuitOpenError"}}function Jf(f){return f instanceof _f||f!==null&&typeof f==="object"&&"code"in f&&f.code==="PROVIDER_CIRCUIT_OPEN"}function q(f,_){return f!==void 0&&Number.isSafeInteger(f)&&f>0?f:_}function oE(f,_){return f!==void 0&&Number.isFinite(f)&&f>0&&f<=1?f:_}function wE(f,_){return Rf(f,_,{providerCircuitOpenDurationMs:f.openDurationMs})}function ff(f){let _=0;for(let E of f)if(E.failure)_++;return _}function u_(f){return f!==void 0&&Number.isInteger(f)&&f>=100&&f<=599?f:void 0}function c_(f){if(f===void 0||!Number.isFinite(f)||f<0)return;return Math.min(Math.ceil(f),zf)}class D_{#h=new Map;#R=new WeakMap;#f;#_;#T;#E;constructor(f={}){this.#f=f.processSecret?new Uint8Array(f.processSecret):ZE(32),this.#_=f.now??(()=>performance.now()),this.#T=f.wallNow??f.now??Date.now,this.#E={maxEntries:Math.min(q(f.maxEntries,A_),A_),maxWindowEntries:Math.min(q(f.maxWindowEntries,S_),S_),windowMs:q(f.windowMs,KE),minSamples:q(f.minSamples,QE),errorRateThreshold:oE(f.errorRateThreshold,FE),idleTtlMs:q(f.idleTtlMs,vE)}}get size(){return this.#h.size}get(f){if(f.openDurationMs===0)return this.#t();let _=this.#_();this.#N(_);let E=wE(f,this.#f),T=this.#h.get(E);if(T)return T.lastTouchedAt=_,this.#x(T,f.probeLeaseMs);if(this.#h.size>=this.#E.maxEntries)this.#s();if(this.#h.size>=this.#E.maxEntries)return this.#t();let x={key:E,state:"closed",samples:[],generation:0,nextAttemptId:1,nextProbeLeaseId:1,configuredOpenDurationMs:f.openDurationMs,effectiveOpenDurationMs:f.openDurationMs,lastTouchedAt:_,detached:!1};return this.#h.set(E,x),this.#x(x,f.probeLeaseMs)}#x(f,_){let E=this,T=Math.max(Sf,Math.min(q(_,Sf),If));return{preflight:()=>E.#c(f),check:()=>E.#P(f,T),recordSuccess:(x)=>E.#U(x,"success"),recordFailure:(x,h)=>E.#U(x,"failure",h),recordNeutral:(x)=>E.#U(x,"neutral"),abandon:(x)=>E.#b(x),snapshot:()=>E.#O(f)}}#t(){let f=this;return{preflight:()=>({eligible:!0}),check:()=>{let _=Object.freeze({kind:"noop"});return f.#R.set(_,{generation:0,attemptId:0,kind:"noop",settled:!1}),{allowed:!0,probe:!1,token:_}},recordSuccess:(_)=>f.#M(_),recordFailure:(_)=>f.#M(_),recordNeutral:(_)=>f.#M(_),abandon:(_)=>f.#b(_),snapshot:()=>({state:"closed",sampleCount:0,failureCount:0,noop:!0,detached:!1})}}#M(f){let _=this.#R.get(f);if(_?.kind==="noop")_.settled=!0;return}#c(f){let _=this.#_();if(f.detached)return{eligible:!0};if(f.lastTouchedAt=_,this.#Y(f,_),f.state==="closed")return{eligible:!0};if(f.state==="open"){let T=f.nextProbeAt??_;return _<T?this.#A(f,T-_):{eligible:!0}}if(f.probeLeaseId===void 0||f.probeLeaseExpiresAt!==void 0&&_>=f.probeLeaseExpiresAt)return{eligible:!0};let E=Math.max(1,(f.probeLeaseExpiresAt??_+Af)-_);return this.#A(f,Math.min(Af,E))}#A(f,_){let{allowed:E,...T}=this.#H(f,_);return{eligible:!1,...T}}#P(f,_){let E=this.#_();if(f.detached)return this.#t().check();if(f.lastTouchedAt=E,this.#Y(f,E),f.state==="closed")return this.#S(f,"regular");if(f.state==="open"){let x=f.nextProbeAt??E;if(E<x)return this.#H(f,x-E);f.state="half_open",f.generation++,f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0}if(f.probeLeaseId===void 0||f.probeLeaseExpiresAt!==void 0&&E>=f.probeLeaseExpiresAt)return this.#D(f,E,_);let T=Math.max(1,(f.probeLeaseExpiresAt??E+Af)-E);return this.#H(f,Math.min(Af,T))}#S(f,_,E){let T=Object.freeze({kind:_});return this.#R.set(T,{entry:f,generation:f.generation,attemptId:f.nextAttemptId++,kind:_,...E!==void 0?{probeLeaseId:E}:{},settled:!1}),{allowed:!0,probe:_==="probe",token:T}}#D(f,_,E){let T=f.nextProbeLeaseId++;f.probeLeaseId=T,f.probeLeaseExpiresAt=_+E,f.lastTouchedAt=_;let x=this.#S(f,"probe",T),h=f.lastFailure??{reason:"server_error"};return{...x,reason:h.reason,...h.statusCode!==void 0?{statusCode:h.statusCode}:{},openDurationMs:f.effectiveOpenDurationMs,sampleCount:f.samples.length,failureCount:ff(f.samples)}}#H(f,_){let E=f.lastFailure??{reason:"server_error"};return{allowed:!1,state:f.state==="open"?"open":"half_open",reason:E.reason,...E.statusCode!==void 0?{statusCode:E.statusCode}:{},retryAfterMs:Math.max(0,Math.ceil(_)),nextProbeAt:this.#T()+Math.max(0,Math.ceil(_)),openDurationMs:f.effectiveOpenDurationMs,sampleCount:f.samples.length,failureCount:ff(f.samples)}}#U(f,_,E){let T=this.#R.get(f);if(!T||T.settled)return;if(T.settled=!0,T.kind==="noop"||!T.entry)return;let x=T.entry;if(x.detached||T.generation!==x.generation||T.kind==="regular"&&x.state!=="closed"||T.kind==="probe"&&(x.state!=="half_open"||T.probeLeaseId!==x.probeLeaseId))return;let h=this.#_();if(x.lastTouchedAt=h,T.kind==="probe"){if(_==="failure"&&E)return this.#u(x,E,h,"reopened");return this.#C(x)}if(_==="neutral")return;if(this.#j(x,_==="failure",h),_!=="failure"||!E)return;let u=ff(x.samples),S=x.samples.length===0?0:u/x.samples.length;if(x.samples.length>=this.#E.minSamples&&S>=this.#E.errorRateThreshold)return this.#u(x,E,h,"opened");return}#u(f,_,E,T){let x={reason:_.reason,...u_(_.statusCode)!==void 0?{statusCode:u_(_.statusCode)}:{},...c_(_.retryAfterMs)!==void 0?{retryAfterMs:c_(_.retryAfterMs)}:{}},h=x.retryAfterMs??0,u=Math.max(f.configuredOpenDurationMs,h);return f.state="open",f.generation++,f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0,f.effectiveOpenDurationMs=u,f.nextProbeAt=E+u,f.lastFailure=x,{phase:T,reason:x.reason,...x.statusCode!==void 0?{statusCode:x.statusCode}:{},retryAfterMs:u,nextProbeAt:this.#T()+u,openDurationMs:u,sampleCount:f.samples.length,failureCount:ff(f.samples)}}#C(f){let _=f.lastFailure??{reason:"server_error"};return f.state="closed",f.generation++,f.samples=[],f.probeLeaseId=void 0,f.probeLeaseExpiresAt=void 0,f.nextProbeAt=void 0,f.effectiveOpenDurationMs=f.configuredOpenDurationMs,{phase:"closed",reason:_.reason,..._.statusCode!==void 0?{statusCode:_.statusCode}:{},openDurationMs:f.effectiveOpenDurationMs,sampleCount:0,failureCount:0}}#b(f){let _=this.#R.get(f);if(!_||_.settled)return!1;if(_.settled=!0,_.kind==="noop")return!0;let E=_.entry;if(!E||E.detached||_.kind!=="probe"||_.generation!==E.generation||_.probeLeaseId!==E.probeLeaseId)return!1;return E.probeLeaseId=void 0,E.probeLeaseExpiresAt=void 0,E.lastTouchedAt=this.#_(),!0}#j(f,_,E){if(this.#Y(f,E),f.samples.length>=this.#E.maxWindowEntries)f.samples.shift();f.samples.push({at:E,failure:_})}#Y(f,_){let E=_-this.#E.windowMs,T=0;while(T<f.samples.length&&f.samples[T].at<E)T++;if(T>0)f.samples.splice(0,T)}#O(f){if(!f.detached)this.#Y(f,this.#_());return{state:f.state,sampleCount:f.samples.length,failureCount:ff(f.samples),...f.nextProbeAt!==void 0?{nextProbeAt:f.nextProbeAt}:{},noop:!1,detached:f.detached}}#N(f){for(let[_,E]of this.#h)if(E.state==="closed"&&f-E.lastTouchedAt>this.#E.idleTtlMs)this.#V(_,E)}#s(){let f;for(let _ of this.#h.values())if(_.state==="closed"&&(!f||_.lastTouchedAt<f.lastTouchedAt))f=_;if(f)this.#V(f.key,f)}#V(f,_){_.detached=!0,this.#h.delete(f)}}var P_;function H_(){return P_??=new D_,P_}import{randomBytes as pE}from"node:crypto";var U_=16,Y_=128,N_=32,O_=3,b_=16,s_=96,V_=24,C_=12,j_=16,B_=4,X_=4,z_=67108864,I_=33554432,J_=12,W_=2,$_=2,k_=1,K_=15000,L_=30000;class Ef extends Error{reason;scope;requestClass;resource;inFlight;limit;queued;maxWaitMs;code="PROVIDER_ADMISSION_BUSY";retryable;constructor(f,_,E,T,x,h,u,S){super(f==="queue_full"?`Provider request admission ${_} ${T} queue is full`:f==="wait_timeout"?`Provider request admission timed out waiting for ${_} capacity`:"Provider request admission scheduler is closed");this.reason=f;this.scope=_;this.requestClass=E;this.resource=T;this.inFlight=x;this.limit=h;this.queued=u;this.maxWaitMs=S;this.name="ProviderAdmissionError",this.retryable=f!=="closed"}}function Tf(f){return f instanceof Ef||f!==null&&typeof f==="object"&&"code"in f&&f.code==="PROVIDER_ADMISSION_BUSY"}function B(f,_,E){if(f===void 0||!Number.isSafeInteger(f)||f<=0)return _;return Math.min(f,E)}function mE(f){let _=B(f.globalMaxInFlight,U_,U_),E=B(f.globalMaxPending,Y_,Y_),T=B(f.domainMaxPending,N_,N_),x=Math.min(B(f.ownerMaxInFlight,O_,O_),_),h=Math.min(B(f.ownerMaxPending,b_,b_),E),u=Math.min(B(f.nonForegroundGlobalMaxPending,Math.min(s_,Math.max(1,Math.floor(E*3/4))),s_),E),S=Math.min(B(f.nonForegroundDomainMaxPending,Math.min(V_,Math.max(1,Math.floor(T*3/4))),V_),T),t=Math.min(B(f.nonForegroundOwnerMaxPending,Math.min(C_,Math.max(1,Math.floor(h*3/4))),C_),h),c=Math.min(B(f.internalGlobalMaxPending,Math.min(j_,Math.max(1,Math.floor(E/8))),j_),u),M=Math.min(B(f.internalDomainMaxPending,Math.min(B_,Math.max(1,Math.floor(T/8))),B_),S),R=Math.min(B(f.internalOwnerMaxPending,Math.min(X_,Math.max(1,Math.floor(h/4))),X_),t),D=B(f.globalMaxPendingBytes,Q,Q),Y=Math.min(B(f.domainMaxPendingBytes,z_,z_),D),z=Math.min(B(f.ownerMaxPendingBytes,I_,I_),D),k=Math.min(B(f.nonForegroundGlobalMaxInFlight,Math.min(J_,_),J_),_),L=Math.min(B(f.nonForegroundOwnerMaxInFlight,Math.min(W_,x),W_),x),K=Math.min(B(f.internalGlobalMaxInFlight,Math.min($_,_),$_),_),Hf=B(f.internalDomainMaxInFlight,k_,k_),xf=B(f.agingMs,L_,L_);return{globalMaxInFlight:_,globalMaxPending:E,domainMaxPending:T,ownerMaxInFlight:x,ownerMaxPending:h,nonForegroundGlobalMaxPending:u,nonForegroundDomainMaxPending:S,nonForegroundOwnerMaxPending:t,internalGlobalMaxPending:c,internalDomainMaxPending:M,internalOwnerMaxPending:R,globalMaxPendingBytes:D,domainMaxPendingBytes:Y,ownerMaxPendingBytes:z,nonForegroundGlobalMaxInFlight:k,nonForegroundOwnerMaxInFlight:L,internalGlobalMaxInFlight:K,internalDomainMaxInFlight:Hf,agingMs:xf}}function G_(f,_){if(!f.trim())throw Error(`${_} must not be blank`)}function qE(f){if(G_(f.sessionId,"sessionId"),G_(f.ownerId,"ownerId"),!Number.isSafeInteger(f.scope.maxConcurrent)||f.scope.maxConcurrent<uf||f.scope.maxConcurrent>cf)throw Error(`maxConcurrent must be between ${uf} and ${cf}`);if(!Number.isSafeInteger(f.scope.maxPendingBytes)||f.scope.maxPendingBytes<=0||f.scope.maxPendingBytes>Q)throw Error(`maxPendingBytes must be between 1 and ${Q}`);if(!Number.isSafeInteger(f.pendingBytes)||f.pendingBytes<=0||f.pendingBytes>Q+1)throw Error(`pendingBytes must be between 1 and ${Q+1}`);if(!Number.isSafeInteger(f.maxWaitMs)||f.maxWaitMs<0||f.maxWaitMs>Pf)throw Error(`maxWaitMs must be 0-${Pf}`)}function Wf(f,_){if(_!==void 0)return _;if(f?.reason!==void 0)return f.reason;return new DOMException("Provider request admission cancelled","AbortError")}function lE(f,_){return Rf(f,_,{providerRequestConcurrency:f.maxConcurrent,providerRequestPendingBytes:f.maxPendingBytes})}class Q_{#h;#R;#f;#_=[];#T=new Map;#E=new Map;#x=0;#t=0;#M=0;#c=0;#A=0;#P=0;#S=0;#D=0;#H=1;#U=0;#u=!1;constructor(f={}){this.#h=f.processSecret?new Uint8Array(f.processSecret):pE(32),this.#R=f.now??(()=>performance.now()),this.#f=mE(f)}admit(f){if(qE(f),this.#u)throw this.#z("closed",f,{scope:"global",resource:"stream",inFlight:this.#x,limit:this.#f.globalMaxInFlight},this.#_.length);if(f.signal?.aborted)throw Wf(f.signal);let _=lE(f.scope,this.#h),E=this.#T.get(_),T=this.#E.get(f.ownerId),x=E??this.#j(f.scope.maxConcurrent),h=T??this.#Y();if(this.#_.length===0&&this.#O(x,h,f.requestClass)){if(!E)this.#T.set(_,x);if(!T)this.#E.set(f.ownerId,h),this.#H++;let D=this.#s(_,f.ownerId,f.requestClass),Y=this.#Q(f,0);return{ready:Promise.resolve(D),getSnapshot:()=>({...Y}),cancel:()=>{Y={...Y}}}}let u=this.#C(f,x,h);if(u)throw this.#z("queue_full",f,u,this.#_.length);let S=this.#N(x,h,f.requestClass);if(f.maxWaitMs===0)throw this.#z("wait_timeout",f,S,this.#_.length);if(!E)this.#T.set(_,x);if(!T)this.#E.set(f.ownerId,h),this.#H++;let t,c,M=new Promise((D,Y)=>{t=D,c=Y});M.catch(()=>{return});let R={domainKey:_,sessionId:f.sessionId,ownerId:f.ownerId,requestClass:f.requestClass,maxWaitMs:f.maxWaitMs,pendingBytes:f.pendingBytes,enqueuedAt:this.#R(),signal:f.signal,resolve:t,reject:c,settled:!1,admitted:!1};if(f.signal)R.abortListener=()=>this.#I(R,Wf(f.signal)),f.signal.addEventListener("abort",R.abortListener,{once:!0});return R.timer=setTimeout(()=>this.#L(R),f.maxWaitMs),R.timer.unref?.(),this.#_.push(R),this.#b(x,h,R),this.#B(),{ready:M,getSnapshot:()=>this.#K(R),cancel:(D)=>this.#I(R,Wf(f.signal,D))}}close(){if(this.#u)return;this.#u=!0;for(let f of[...this.#_]){let _=this.#T.get(f.domainKey),E=this.#E.get(f.ownerId),T=_&&E?this.#N(_,E,f.requestClass):{scope:"global",resource:"stream",inFlight:this.#x,limit:this.#f.globalMaxInFlight};this.#X(f,new Ef("closed",T.scope,f.requestClass,T.resource,T.inFlight,T.limit,this.#_.length,f.maxWaitMs))}}getStats(){return{inFlight:this.#x,queued:this.#_.length,pendingBytes:this.#P,nonForegroundInFlight:this.#t,internalInFlight:this.#M,nonForegroundQueued:this.#c,internalQueued:this.#A,nonForegroundPendingBytes:this.#S,internalPendingBytes:this.#D,domainCount:this.#T.size,ownerCount:this.#E.size,closed:this.#u}}#C(f,_,E){let T=(M,R,D)=>R>=D?{scope:M,resource:"pending_count",inFlight:R,limit:D}:void 0;if(f.requestClass==="internal"){let M=T("class",this.#A,this.#f.internalGlobalMaxPending)??T("class",E.internalQueued,this.#f.internalOwnerMaxPending)??T("class",_.internalQueued,this.#f.internalDomainMaxPending);if(M)return M}if(f.requestClass!=="foreground"){let M=T("class",this.#c,this.#f.nonForegroundGlobalMaxPending)??T("class",E.nonForegroundQueued,this.#f.nonForegroundOwnerMaxPending)??T("class",_.nonForegroundQueued,this.#f.nonForegroundDomainMaxPending);if(M)return M}let x=T("global",this.#_.length,this.#f.globalMaxPending)??T("owner",E.queued,this.#f.ownerMaxPending)??T("domain",_.queued,this.#f.domainMaxPending);if(x)return x;let h=Math.min(f.scope.maxPendingBytes,this.#f.globalMaxPendingBytes),u=Math.min(h,this.#f.domainMaxPendingBytes),S=Math.min(h,this.#f.ownerMaxPendingBytes),t=(M,R)=>f.pendingBytes>R-M,c=(M)=>{if(M==="owner")return{scope:M,resource:"pending_bytes",inFlight:E.inFlight,limit:this.#f.ownerMaxInFlight};if(M==="domain")return{scope:M,resource:"pending_bytes",inFlight:_.inFlight,limit:_.maxConcurrent};return{scope:M,resource:"pending_bytes",inFlight:this.#x,limit:this.#f.globalMaxInFlight}};if(f.requestClass==="internal"){let M=Math.max(1,Math.floor(h/8)),R=Math.max(1,Math.floor(u/4)),D=Math.max(1,Math.floor(S/4));if(t(this.#D,M)||t(E.internalPendingBytes,D)||t(_.internalPendingBytes,R))return c("class")}if(f.requestClass!=="foreground"){let M=Math.max(1,Math.floor(h*3/4)),R=Math.max(1,Math.floor(u*3/4)),D=Math.max(1,Math.floor(S/2));if(t(this.#S,M)||t(E.nonForegroundPendingBytes,D)||t(_.nonForegroundPendingBytes,R))return c("class")}if(t(this.#P,h))return c("global");if(t(E.pendingBytes,S))return c("owner");if(t(_.pendingBytes,u))return c("domain");return}#b(f,_,E){if(f.queued++,_.queued++,this.#P+=E.pendingBytes,f.pendingBytes+=E.pendingBytes,_.pendingBytes+=E.pendingBytes,E.requestClass!=="foreground")this.#c++,f.nonForegroundQueued++,_.nonForegroundQueued++,this.#S+=E.pendingBytes,f.nonForegroundPendingBytes+=E.pendingBytes,_.nonForegroundPendingBytes+=E.pendingBytes;if(E.requestClass==="internal")this.#A++,f.internalQueued++,_.internalQueued++,this.#D+=E.pendingBytes,f.internalPendingBytes+=E.pendingBytes,_.internalPendingBytes+=E.pendingBytes}#j(f){return{maxConcurrent:f,inFlight:0,nonForegroundInFlight:0,internalInFlight:0,queued:0,nonForegroundQueued:0,internalQueued:0,pendingBytes:0,nonForegroundPendingBytes:0,internalPendingBytes:0}}#Y(){return{order:this.#H,inFlight:0,nonForegroundInFlight:0,internalInFlight:0,queued:0,nonForegroundQueued:0,internalQueued:0,pendingBytes:0,nonForegroundPendingBytes:0,internalPendingBytes:0}}#O(f,_,E){if(this.#x>=this.#f.globalMaxInFlight)return!1;if(f.inFlight>=f.maxConcurrent)return!1;if(_.inFlight>=this.#f.ownerMaxInFlight)return!1;if(E==="foreground")return!0;if(this.#t>=this.#f.nonForegroundGlobalMaxInFlight)return!1;if(_.nonForegroundInFlight>=this.#f.nonForegroundOwnerMaxInFlight)return!1;let T=Math.max(1,f.maxConcurrent-1);if(f.nonForegroundInFlight>=T)return!1;if(E!=="internal")return!0;return this.#M<this.#f.internalGlobalMaxInFlight&&f.internalInFlight<this.#f.internalDomainMaxInFlight}#N(f,_,E){if(_.inFlight>=this.#f.ownerMaxInFlight)return{scope:"owner",resource:"stream",inFlight:_.inFlight,limit:this.#f.ownerMaxInFlight};if(E!=="foreground"&&_.nonForegroundInFlight>=this.#f.nonForegroundOwnerMaxInFlight)return{scope:"class",resource:"stream",inFlight:_.nonForegroundInFlight,limit:this.#f.nonForegroundOwnerMaxInFlight};if(f.inFlight>=f.maxConcurrent)return{scope:"domain",resource:"stream",inFlight:f.inFlight,limit:f.maxConcurrent};if(E!=="foreground"){let T=Math.max(1,f.maxConcurrent-1);if(f.nonForegroundInFlight>=T)return{scope:"class",resource:"stream",inFlight:f.nonForegroundInFlight,limit:T}}if(E==="internal"&&f.internalInFlight>=this.#f.internalDomainMaxInFlight)return{scope:"class",resource:"stream",inFlight:f.internalInFlight,limit:this.#f.internalDomainMaxInFlight};if(this.#x>=this.#f.globalMaxInFlight)return{scope:"global",resource:"stream",inFlight:this.#x,limit:this.#f.globalMaxInFlight};if(E!=="foreground"&&this.#t>=this.#f.nonForegroundGlobalMaxInFlight)return{scope:"class",resource:"stream",inFlight:this.#t,limit:this.#f.nonForegroundGlobalMaxInFlight};if(E==="internal"&&this.#M>=this.#f.internalGlobalMaxInFlight)return{scope:"class",resource:"stream",inFlight:this.#M,limit:this.#f.internalGlobalMaxInFlight};return{scope:"domain",resource:"stream",inFlight:f.inFlight,limit:f.maxConcurrent}}#s(f,_,E){let T=this.#T.get(f),x=this.#E.get(_);if(!T||!x)throw Error("Provider admission accounting state is unavailable");if(this.#x++,T.inFlight++,x.inFlight++,E!=="foreground")this.#t++,T.nonForegroundInFlight++,x.nonForegroundInFlight++;if(E==="internal")this.#M++,T.internalInFlight++,x.internalInFlight++;let h=!1;return{release:()=>{if(h)return;h=!0,this.#V(f,_,E)}}}#V(f,_,E){let T=this.#T.get(f),x=this.#E.get(_);if(this.#x=Math.max(0,this.#x-1),T)T.inFlight=Math.max(0,T.inFlight-1);if(x)x.inFlight=Math.max(0,x.inFlight-1);if(E!=="foreground"){if(this.#t=Math.max(0,this.#t-1),T)T.nonForegroundInFlight=Math.max(0,T.nonForegroundInFlight-1);if(x)x.nonForegroundInFlight=Math.max(0,x.nonForegroundInFlight-1)}if(E==="internal"){if(this.#M=Math.max(0,this.#M-1),T)T.internalInFlight=Math.max(0,T.internalInFlight-1);if(x)x.internalInFlight=Math.max(0,x.internalInFlight-1)}this.#W(f,_),this.#B()}#B(){if(this.#u)return;while(this.#_.length>0){let f=this.#R(),_=new Map;for(let[S,t]of this.#_.entries()){let c=this.#T.get(t.domainKey),M=this.#E.get(t.ownerId);if(c===void 0||M===void 0||!this.#O(c,M,t.requestClass))continue;let R=this.#$(t,f),D=_.get(t.ownerId);if(!D||R<D.rank||R===D.rank&&S<D.index)_.set(t.ownerId,{pending:t,rank:R,index:S})}let E=[..._.values()].filter(({pending:S})=>{let t=this.#T.get(S.domainKey),c=this.#E.get(S.ownerId);return t!==void 0&&c!==void 0&&this.#O(t,c,S.requestClass)}).map(({pending:S,rank:t})=>({pending:S,rank:t,order:this.#E.get(S.ownerId).order}));if(E.length===0)return;let T=Math.min(...E.map((S)=>S.rank)),x=E.filter((S)=>S.rank===T),u=x.filter((S)=>S.order>this.#U).sort((S,t)=>S.order-t.order)[0]??x.sort((S,t)=>S.order-t.order)[0];this.#k(u.pending,u.order)}}#$(f,_){let E=f.requestClass==="foreground"?0:f.requestClass==="background"?1:2,T=Math.floor(Math.max(0,_-f.enqueuedAt)/this.#f.agingMs);return Math.max(0,E-T)}#k(f,_){if(!this.#J(f,!1))return;f.settled=!0,f.admitted=!0,this.#U=_;let E=this.#s(f.domainKey,f.ownerId,f.requestClass);f.permit=E,f.resolve(E)}#L(f){let _=this.#T.get(f.domainKey),E=this.#E.get(f.ownerId),T=_&&E?this.#N(_,E,f.requestClass):{scope:"global",resource:"stream",inFlight:this.#x,limit:this.#f.globalMaxInFlight};this.#X(f,new Ef("wait_timeout",T.scope,f.requestClass,T.resource,T.inFlight,T.limit,this.#_.length,f.maxWaitMs))}#I(f,_){this.#X(f,_)}#X(f,_){if(!this.#J(f))return;f.settled=!0,f.reject(_),this.#B()}#J(f,_=!0){if(f.settled||f.admitted)return!1;let E=this.#_.indexOf(f);if(E<0)return!1;this.#_.splice(E,1);let T=this.#T.get(f.domainKey),x=this.#E.get(f.ownerId);if(T&&x)this.#G(T,x,f);if(this.#Z(f),_)this.#W(f.domainKey,f.ownerId);return!0}#G(f,_,E){if(f.queued=Math.max(0,f.queued-1),_.queued=Math.max(0,_.queued-1),this.#P=Math.max(0,this.#P-E.pendingBytes),f.pendingBytes=Math.max(0,f.pendingBytes-E.pendingBytes),_.pendingBytes=Math.max(0,_.pendingBytes-E.pendingBytes),E.requestClass!=="foreground")this.#c=Math.max(0,this.#c-1),f.nonForegroundQueued=Math.max(0,f.nonForegroundQueued-1),_.nonForegroundQueued=Math.max(0,_.nonForegroundQueued-1),this.#S=Math.max(0,this.#S-E.pendingBytes),f.nonForegroundPendingBytes=Math.max(0,f.nonForegroundPendingBytes-E.pendingBytes),_.nonForegroundPendingBytes=Math.max(0,_.nonForegroundPendingBytes-E.pendingBytes);if(E.requestClass==="internal")this.#A=Math.max(0,this.#A-1),f.internalQueued=Math.max(0,f.internalQueued-1),_.internalQueued=Math.max(0,_.internalQueued-1),this.#D=Math.max(0,this.#D-E.pendingBytes),f.internalPendingBytes=Math.max(0,f.internalPendingBytes-E.pendingBytes),_.internalPendingBytes=Math.max(0,_.internalPendingBytes-E.pendingBytes)}#Z(f){if(f.timer)clearTimeout(f.timer);if(f.timer=void 0,f.signal&&f.abortListener)f.signal.removeEventListener("abort",f.abortListener);f.abortListener=void 0,f.signal=void 0}#W(f,_){let E=this.#T.get(f);if(E&&E.inFlight===0&&E.queued===0)this.#T.delete(f);let T=this.#E.get(_);if(T&&T.inFlight===0&&T.queued===0)this.#E.delete(_)}#K(f){let _=Math.max(0,Math.floor(this.#R()-f.enqueuedAt));if(f.admitted)return{state:"admitted",requestClass:f.requestClass,resource:"stream",scope:"domain",queuePosition:0,queueDepth:this.#_.length,inFlight:this.#x,limit:this.#f.globalMaxInFlight,waitMs:_,maxWaitMs:f.maxWaitMs};let E=this.#T.get(f.domainKey),T=this.#E.get(f.ownerId),x=E&&T?this.#N(E,T,f.requestClass):{scope:"global",resource:"stream",inFlight:this.#x,limit:this.#f.globalMaxInFlight};return{state:"queued",requestClass:f.requestClass,resource:x.resource,scope:x.scope,reason:"capacity",queuePosition:this.#F(f,x.scope),queueDepth:this.#_.length,inFlight:x.inFlight,limit:x.limit,waitMs:_,maxWaitMs:f.maxWaitMs}}#Q(f,_){return{state:"admitted",requestClass:f.requestClass,resource:"stream",scope:"domain",queuePosition:0,queueDepth:this.#_.length,inFlight:this.#x,limit:this.#f.globalMaxInFlight,waitMs:_,maxWaitMs:f.maxWaitMs}}#F(f,_){let E=this.#_.filter((T)=>{switch(_){case"owner":return T.ownerId===f.ownerId;case"domain":return T.domainKey===f.domainKey;case"class":return T.requestClass===f.requestClass;case"global":return!0}});return Math.max(1,E.indexOf(f)+1)}#z(f,_,E,T){return new Ef(f,E.scope,_.requestClass,E.resource,E.inFlight,E.limit,T,_.maxWaitMs)}}var Z_;function F_(){return Z_??=new Q_,Z_}function v_(f,_={}){let E=_.maxBytes??134217728,T=_.maxNodes??1e5;if(!Number.isSafeInteger(E)||E<=0||E>=Number.MAX_SAFE_INTEGER)throw Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(T)||T<=0)throw Error("maxNodes must be a positive safe integer");let x=new WeakSet,h=0,u=0,S=!1,t=(M)=>{if(S||M<=0)return;if(!Number.isSafeInteger(M)||M>E-h){h=E+1,S=!0;return}h+=M},c=(M)=>{if(S)return;if(u+=1,u>T){t(E+1);return}if(M===null){t(4);return}switch(typeof M){case"string":t(Buffer.byteLength(M,"utf8"));return;case"number":case"bigint":t(8);return;case"boolean":t(4);return;case"undefined":case"function":case"symbol":return;case"object":break}if(x.has(M))return;if(x.add(M),ArrayBuffer.isView(M)){t(32+M.byteLength);return}if(M instanceof ArrayBuffer){t(32+M.byteLength);return}if(M instanceof Date){t(40);return}if(M instanceof RegExp){t(32+Buffer.byteLength(M.source,"utf8"));return}if(M instanceof Map){t(32);for(let[R,D]of M)if(c(R),c(D),S)return;return}if(M instanceof Set){t(32);for(let R of M)if(c(R),S)return;return}if(M instanceof WeakMap||M instanceof WeakSet){t(32);return}if(Array.isArray(M)){t(16);for(let R of M)if(c(R),S)return;return}t(32);for(let R of Reflect.ownKeys(M)){if(typeof R!=="string")continue;let D=Object.getOwnPropertyDescriptor(M,R);if(!D?.enumerable||!("value"in D))continue;if(t(8+Buffer.byteLength(R,"utf8")),c(D.value),S)return}};return c(f),h}function o_(f){return v_([f.messages,f.context,f.tools,f.requestOptions],{maxBytes:Q})}var w_=new WeakSet;class l extends Error{budgetMs;elapsedMs;code="PROVIDER_RECOVERY_BUDGET_EXCEEDED";constructor(f,_){super(`Provider recovery budget exhausted after ${f}ms`);this.budgetMs=f;this.elapsedMs=_;this.name="ProviderRecoveryBudgetExceededError"}}class Gf extends Error{timeoutMs;code="PROVIDER_REQUEST_DEADLINE_EXCEEDED";constructor(f){super(`Provider request deadline exceeded after ${f}ms`);this.timeoutMs=f;this.name="ProviderRequestDeadlineExceededError"}}var yE=["gousagelimiterror","freeusagelimiterror","monthly usage limit reached","available balance","insufficient_quota","out of budget","quota exceeded","billing"],aE=["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"],gE=["econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","connection error","connection refused","connection lost","other side closed","socket hang up","socket connection was closed","upstream connect","reset before headers","websocket closed","websocket error","http2 request did not get a response"];function p_(f){return(f instanceof Error?f.message:String(f)).toLowerCase()}function rE(f){let _=p_(f);return aE.some((E)=>_.includes(E))}function Zf(f){if(f!==null&&typeof f==="object")w_.add(f)}function Tx(f){return f!==null&&typeof f==="object"&&w_.has(f)}function eE(f){return f!==null&&typeof f==="object"&&"code"in f?f.code:void 0}function dE(f){if(f===null||typeof f!=="object")return;let _=f;for(let E of["status","statusCode"]){let T=_[E];if(typeof T==="number"&&Number.isInteger(T))return T}return}function nE(f){let _=f.match(/^(?:error:\s*)?(\d{3})\b/),E=f.match(/\b(?:status(?:\s+code)?|http)[:\s]+(\d{3})\b/),T=Number(_?.[1]??E?.[1]);return Number.isInteger(T)?T:void 0}function y(f,_){let E=p_(f),T=eE(f);if(T==="STREAM_IDLE_TIMEOUT"||T==="PROVIDER_RECOVERY_BUDGET_EXCEEDED"||f instanceof Error&&f.name==="AbortError"||E.includes("request aborted")||E==="aborted")return{retryable:!1};if(yE.some((h)=>E.includes(h))||rE(f))return{retryable:!1};if(_?.shouldRetry==="false")return{retryable:!1,statusCode:_.statusCode};if(T==="PROVIDER_REQUEST_DEADLINE_EXCEEDED")return{retryable:!0,reason:"timeout"};let x=_?.statusCode??dE(f)??nE(E);if(_?.shouldRetry==="true")return{retryable:!0,reason:x===429?"rate_limit":x===408||x===409?"timeout":"server_error",statusCode:x};if(x===429)return{retryable:!0,reason:"rate_limit",statusCode:x};if(x===408||x===409)return{retryable:!0,reason:"timeout",statusCode:x};if(x!==void 0&&x>=500&&x<=599)return{retryable:!0,reason:"server_error",statusCode:x};if(T==="PROVIDER_STREAM_CLOSED"||E.includes("stream closed before completion")||E.includes("ended without")||E.includes("stream ended before"))return{retryable:!0,reason:"stream_closed",statusCode:x};if(gE.some((h)=>E.includes(h)))return{retryable:!0,reason:"transport",statusCode:x};if(E.includes("timeout")||E.includes("timed out")||E.includes("temporarily unavailable")||E.includes("upstream_error")||E.includes("overloaded")||E.includes("rate limit")||E.includes("too many requests")||E.includes("service unavailable")||E.includes("server error")||E.includes("internal error")||E.includes("please retry")||E.includes("try your request again"))return{retryable:!0,reason:E.includes("rate")||E.includes("too many")?"rate_limit":E.includes("timeout")||E.includes("timed out")?"timeout":"server_error",statusCode:x};return{retryable:!1,statusCode:x}}function Kf(f,_){if(!f)return;if(f.retryAfterMs!==void 0){let x=Number.parseFloat(f.retryAfterMs);if(Number.isFinite(x))return Math.max(0,x)}if(f.retryAfter===void 0)return;let E=Number.parseFloat(f.retryAfter);if(Number.isFinite(E))return Math.max(0,E*1000);let T=Date.parse(f.retryAfter);return Number.isFinite(T)?Math.max(0,T-_):void 0}function m_(f,_,E={}){let T=E.now??Date.now(),x=E.maxDelayMs??60000,h=Kf(_,T);if(h!==void 0)return Math.min(Math.ceil(h),x);let u=Math.max(0,f-1),S=E.maxExponentialDelayMs??8000,t=Math.min(500*2**u,S),c=Math.max(0,Math.min(1,E.random??Math.random())),M=t*(0.75+c*0.25);return Math.min(Math.round(M),x)}function y_(f,_){let E=f.onPayload;f.onPayload=async(T,x)=>{let h=E?await E(T,x):T;return _(h===void 0?T:h,x)}}function iE(f){if(!f.reasoningEnabled)return;return f.reasoningEffort??f.reasoningLevel??"high"}function Qf(f,_,E){if(!f.enablePromptCaching)return"none";if(E&&_.api==="openai-completions"&&!_.baseUrl.includes("api.openai.com"))return"long";return"short"}function fT(f){switch(f){case"minimal":return"MINIMAL";case"low":return"LOW";case"medium":return"MEDIUM";default:return"HIGH"}}function _T(f,_,E,T){let x=T?void 0:iE(E);if(!x){if(_.api==="anthropic-messages")f.thinkingEnabled=!1;if(_.api==="google-generative-ai"||_.api==="google-vertex")f.thinking={enabled:!1};return}switch(_.api){case"anthropic-messages":f.thinkingEnabled=!0,f.effort=x;break;case"google-generative-ai":case"google-vertex":f.thinking={enabled:!0,level:fT(x)};break;case"mistral-conversations":f.reasoningEffort="high";break;case"bedrock-converse-stream":case"pi-messages":f.reasoning=x;break;default:f.reasoningEffort=x}}function ET(f,_,E){if(!E)return;switch(_){case"anthropic-messages":case"bedrock-converse-stream":f.toolChoice={type:"tool",name:E};break;case"openai-completions":case"mistral-conversations":case"pi-messages":f.toolChoice={type:"function",function:{name:E}};break;case"openai-responses":case"openai-codex-responses":case"azure-openai-responses":f.toolChoice={type:"function",name:E};break;case"google-generative-ai":case"google-vertex":f.toolChoice="any";break}}function TT(f,_,E){let T=E.serviceTier;if(!T)return;if(_.api==="openai-responses"||_.api==="openai-codex-responses"||_.api==="azure-openai-responses"){f.serviceTier=T;return}if(_.api!=="openai-completions"&&!(_.api==="anthropic-messages"&&T==="fast"))return;y_(f,(x)=>{if(!x||typeof x!=="object"||Array.isArray(x))return x;return _.api==="anthropic-messages"?{...x,speed:"fast"}:{...x,service_tier:T}})}function xT(f,_,E){let T=E.responseVerbosity;if(!T)return;if(l_(_,T),_.api==="openai-codex-responses"){f.textVerbosity=T;return}y_(f,(x)=>{if(!x||typeof x!=="object"||Array.isArray(x))return x;if(_.api==="openai-completions")return{...x,verbosity:T};let h="text"in x&&x.text&&typeof x.text==="object"&&!Array.isArray(x.text)?x.text:{};return{...x,text:{...h,verbosity:T}}})}function a_(f,_,E,T,x=!1){let h={apiKey:f.apiKey,headers:f.customHeaders,signal:E,temperature:T?.temperature??f.temperature??0,maxTokens:T?.maxOutputTokens??f.maxOutputTokens,timeoutMs:f.timeout,maxRetries:0,cacheRetention:Qf(f,_,T?.providerSessionId),sessionId:T?.providerSessionId};if(_T(h,_,f,x),ET(h,_.api,T?.toolChoice?.toolName),TT(h,_,f),xT(h,_,f),_.api==="azure-openai-responses")h.azureBaseUrl=f.baseUrl,h.azureApiVersion=f.apiVersion,h.azureDeploymentName=_.id;return h}function q_(f,_){let E=_.get("x-should-retry");return{statusCode:f,..._.get("retry-after")!==null?{retryAfter:_.get("retry-after")??void 0}:{},..._.get("retry-after-ms")!==null?{retryAfterMs:_.get("retry-after-ms")??void 0}:{},...E==="true"||E==="false"?{shouldRetry:E}:{}}}var hT=new Set(["anthropic-messages","openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","pi-messages"]);function g_(f,_,E){let T=f.onResponse;if(f.onResponse=async(h,u)=>{let S=new Headers(h.headers);E(q_(h.status,S)),await T?.(h,u)},!hT.has(_.api)||typeof globalThis.fetch!=="function")return;let x=typeof f.fetch==="function"?f.fetch:globalThis.fetch.bind(globalThis);f.fetch=async(h,u)=>{let S=await x(h,u);return E(q_(S.status,S.headers)),S}}function r_(f){return{promptTokens:f.input+f.cacheRead+f.cacheWrite,completionTokens:f.output,totalTokens:f.totalTokens,costUsd:f.cost.total,...f.reasoning!==void 0?{reasoningTokens:f.reasoning}:{},...f.cacheWrite>0?{cacheCreationInputTokens:f.cacheWrite}:{},...f.cacheRead>0?{cacheReadInputTokens:f.cacheRead}:{}}}var Df=300000,tT=30000;class e_ extends Error{timeoutMs;code="STREAM_IDLE_TIMEOUT";constructor(f){super(`Provider stream idle timeout after ${f}ms without an event`);this.timeoutMs=f;this.name="StreamIdleTimeoutError"}}class d_ extends Error{code="PROVIDER_STREAM_CLOSED";constructor(){super("Provider stream closed before completion");this.name="ProviderStreamClosedError"}}function Ff(f){return f.reason instanceof Error?f.reason:new DOMException("Aborted","AbortError")}function MT(f){return f.idleTimeoutMs&&f.idleTimeoutMs>0?f.idleTimeoutMs:Df}function RT(f,_){if(_===0)return;let E=_!==void 0&&_>0?_:tT;return Math.max(1,Math.min(E,Math.floor(f/2)))}function AT(f,_,E){if(E?.aborted)return Promise.reject(Ff(E));return new Promise((T,x)=>{let h=!1,u=()=>{clearTimeout(M),E?.removeEventListener("abort",c)},S=(R)=>{if(h)return;h=!0,u(),T(R)},t=(R)=>{if(h)return;h=!0,u(),x(R instanceof Error?R:Error(String(R)))},c=()=>{if(E)t(Ff(E))},M=setTimeout(()=>S({kind:"timer"}),Math.max(0,_));if(E?.addEventListener("abort",c,{once:!0}),E?.aborted){c();return}f.then((R)=>S({kind:"next",result:R}),t)})}async function*ST(f,_,E){let T=MT(_),x=RT(T,_.stallWarningMs);if(_.signal?.aborted)throw Ff(_.signal);let h=Date.now(),u=Promise.resolve().then(()=>f.next()),S;for(;;){let c=await AT(u,(S?T:x??T)-(Date.now()-h),_.signal);if(c.kind==="next"){if(S)yield{...S,phase:"recovered",durationMs:Math.max(S.durationMs,Date.now()-h)};return c.result}if(!S&&x!==void 0){E.stallCount++,S={phase:"detected",stallCount:E.stallCount,durationMs:x,warningAfterMs:x,timeoutMs:T,outputStarted:E.outputStarted},yield S;continue}let M=new e_(T);throw _.abort?.(M),M}}async function*n_(f,_,E,T,x={}){let u=f.stream(_,E,T)[Symbol.asyncIterator](),S=0,t=!1,c={stallCount:0,outputStarted:!1};try{while(!0){let M=ST(u,x,c),R=await M.next();while(!R.done)yield{providerStall:R.value},R=await M.next();let D=R.value;if(D.done)throw new d_;let Y=D.value;switch(Y.type){case"text_delta":c.outputStarted=!0,yield{content:Y.delta};break;case"thinking_delta":c.outputStarted=!0,yield{reasoningContent:Y.delta};break;case"toolcall_end":c.outputStarted=!0,yield{toolCalls:[{index:S++,id:Y.toolCall.id,type:"function",function:{name:Y.toolCall.name,arguments:JSON.stringify(Y.toolCall.arguments)}}]};break;case"done":t=!0,yield{finishReason:Y.reason,usage:r_(Y.message.usage)};return;case"error":throw Error(Y.error.errorMessage??`Request ${Y.reason==="aborted"?"aborted":"failed"}`)}}}finally{if(!t)Promise.resolve(u.return?.()).catch(()=>{return})}}var vf=m("Chat"),uT=1;function cT(f,_){let E=_.provider===f.provider,T=E&&_.channel===void 0,x=_.channel;return{...f,provider:_.provider,model:_.model,apiKey:x?.apiKey??(T?f.apiKey:void 0),baseUrl:x?.baseUrl??(T?f.baseUrl:void 0),temperature:x?.temperature??f.temperature,maxOutputTokens:x?.maxOutputTokens??(T?f.maxOutputTokens:void 0),timeout:x?.timeout??f.timeout,streamIdleTimeout:x?.streamIdleTimeout??f.streamIdleTimeout,apiVersion:x?.apiVersion??(T?f.apiVersion:void 0),customHeaders:x?.customHeaders??(T?f.customHeaders:void 0),enablePromptCaching:x?.enablePromptCaching??(T?f.enablePromptCaching:void 0),serviceTier:E?f.serviceTier:void 0,responseVerbosity:E?f.responseVerbosity:void 0,fallbackModels:void 0}}function PT(f){return Boolean(f&&f.role==="user"&&Array.isArray(f.content)&&f.content.some((_)=>_.type==="image_url"))}function DT(f){let E=f.findLast((T)=>{let x=T.metadata;return x!==null&&typeof x==="object"&&!Array.isArray(x)&&x.isCompactSummary===!0})?.metadata;return E!==null&&typeof E==="object"&&!Array.isArray(E)&&typeof E.parentId==="string"?E.parentId:""}function HT(f,_){let E=y(f,_);if(!E.retryable||!E.reason)return;let T=E.statusCode;switch(E.reason){case"rate_limit":if(T!==429)return;break;case"server_error":if(T===void 0||T<500||T>599)return;break;case"transport":case"stream_closed":break;case"timeout":return}let x=Kf(_,Date.now());return{reason:E.reason,...T!==void 0?{statusCode:T}:{},...x!==void 0?{retryAfterMs:x}:{}}}function of(f){return f!==null&&typeof f==="object"&&"code"in f&&f.code==="STREAM_IDLE_TIMEOUT"}class mf{config;models;model;promptCacheBreakMonitor=new Bf;admissionFallbackOwnerId=`pi-service-${process.pid}-${uT++}`;constructor(f){let _=jf(f);this.config={...f,maxContextTokens:_.model.contextWindow,maxOutputTokens:f.maxOutputTokens??_.model.maxTokens},this.models=_.models,this.model=_.model,vf.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(f,_,E,T){let x="",h="",u=[],S,t;for await(let c of this.streamChat(f,_,E,T)){x+=c.content??"",h+=c.reasoningContent??"";for(let M of c.toolCalls??[])if(M.id&&M.type==="function"&&M.function?.name)u.push(M);S=c.usage??S,t=c.finishReason??t}return{content:x,...h?{reasoningContent:h}:{},...u.length>0?{toolCalls:u}:{},usage:S,finishReason:t}}async*streamChat(f,_,E,T){let x=T?.toolChoice?.toolName;if(x&&!_?.some((A)=>A.name===x))throw Error(`Required tool is unavailable: ${x}`);let h=x_(f);if(h.some((A)=>PT(A))&&!this.model.input.includes("image"))throw Error(`${this.model.name} does not support image input`);let u=Boolean(x)||h_(h),S=await T_(h,this.model,_,E,x),t=(A,P)=>{let s=T?.providerSessionId;if(!s||!A.usage)return A;if(!this.config.enablePromptCaching)return this.promptCacheBreakMonitor.clear(s),A;let N=Qf(this.config,P,s),U=this.promptCacheBreakMonitor.observe({sessionId:s,modelIdentity:`${P.provider}\x00${P.api}\x00${P.id}`,context:S,retention:N,contextEpoch:DT(h),policy:{baseUrl:P.baseUrl??this.config.baseUrl??"",retention:N,requiredTool:x??"",reasoningEnabled:this.config.reasoningEnabled??!1,reasoningEffort:this.config.reasoningEffort??this.config.reasoningLevel??"",serviceTier:this.config.serviceTier??"",responseVerbosity:this.config.responseVerbosity??"",temperature:T?.temperature??this.config.temperature??0,maxOutputTokens:T?.maxOutputTokens??this.config.maxOutputTokens??0,customHeaders:this.config.customHeaders??{}},usage:A.usage});if(!U)return A;return vf.warn("[PiAIChatService] Prompt cache break detected",{reason:U.reason,previousCacheReadTokens:U.previousCacheReadTokens,cacheReadTokens:U.cacheReadTokens,tokenDrop:U.tokenDrop,callNumber:U.callNumber}),{...A,usage:{...A.usage,promptCacheBreak:U}}},c=o_({messages:h,context:S,tools:_,requestOptions:T}),M=T?.providerRecovery;if(M&&!fE(M.budgetMs))throw Error("Invalid bounded foreground Provider recovery budget");let R=M?.mode==="bounded_foreground"&&M.budgetMs>0?{budgetMs:M.budgetMs,startedAt:void 0}:void 0,D=R?"bounded_foreground":"standard",Y=this.config.maxRetries??2,z=this.config.maxRetries??(R?i_:2),k=R!==void 0&&this.config.maxRetries===void 0,L=0,K,Hf=this.config.providerCircuitRegistry??H_(),xf=this.config.providerCircuitBreakerOpenMs??Xf,_E=Math.max(Sf,Math.min(this.config.streamIdleTimeout??Df,If)),EE=this.config.providerRequestAdmissionScheduler??F_(),TE=this.config.providerRequestConcurrency??$f,qf=this.config.providerRequestAdmissionMs??kf,xE=this.config.providerRequestPendingBytes??Lf,Uf=T?.providerAdmission??{sessionId:this.admissionFallbackOwnerId,ownerId:this.admissionFallbackOwnerId,requestClass:"internal"},hE=(A,P)=>Hf.get({provider:A.provider,api:A.api,baseUrl:A.baseUrl??P.baseUrl??"",model:A.id,serviceTier:P.serviceTier,apiVersion:P.apiVersion,apiKey:P.apiKey,customHeaders:P.customHeaders,openDurationMs:xf,probeLeaseMs:_E}),tE=(A,P)=>({provider:A.provider,api:A.api,baseUrl:A.baseUrl??P.baseUrl??"",model:A.id,serviceTier:P.serviceTier,apiVersion:P.apiVersion,apiKey:P.apiKey,customHeaders:P.customHeaders,maxConcurrent:TE,maxPendingBytes:xE}),C=(A=Date.now())=>{if(!R)return;let P=R.startedAt===void 0?0:Math.min(R.budgetMs,Math.max(0,A-R.startedAt));return{recoveryBudgetMs:R.budgetMs,recoveryElapsedMs:P,recoveryRemainingMs:Math.max(0,R.budgetMs-P)}},F=()=>({mode:D,...C()??{}}),lf=()=>{if(R&&R.startedAt===void 0)R.startedAt=Date.now()},v=()=>{let A=C();return new l(R?.budgetMs??0,A?.recoveryElapsedMs??0)},a=()=>!k||L<z+1,Yf=(A,P)=>{let{state:s,...N}=P;return{phase:A,...N,...C()?{recoveryRemainingMs:C()?.recoveryRemainingMs}:{}}},yf=(A)=>({phase:"rejected",requestClass:A.requestClass,resource:A.resource,scope:A.scope,reason:A.reason,queuePosition:0,queueDepth:Math.max(0,A.queued),inFlight:Math.max(0,A.inFlight),limit:Math.max(0,A.limit),waitMs:A.reason==="wait_timeout"?A.maxWaitMs:0,maxWaitMs:A.maxWaitMs,...C()?{recoveryRemainingMs:C()?.recoveryRemainingMs}:{}}),ME=async function*(A,P){let s=C()?.recoveryRemainingMs,N=s!==void 0&&R?.startedAt!==void 0?Math.min(qf,s):qf,U;try{U=EE.admit({scope:tE(A,P),sessionId:Uf.sessionId,ownerId:Uf.ownerId,requestClass:Uf.requestClass,maxWaitMs:N,pendingBytes:c,signal:E})}catch(O){if(Tf(O)){if(O.reason==="wait_timeout"&&R?.startedAt!==void 0&&(C()?.recoveryRemainingMs??0)<=0)throw v();yield{providerAdmission:yf(O)}}throw O}let J=U.getSnapshot();if(J.state==="admitted")return await U.ready;yield{providerAdmission:Yf("queued",J)};let Z=U.ready.then((O)=>({kind:"ready",permit:O}),(O)=>({kind:"error",error:O}));while(!0){let O=U.getSnapshot(),b=Math.max(1,Math.min(K_,Math.max(1,N-O.waitMs))),X,j=new Promise((o)=>{X=setTimeout(()=>o({kind:"heartbeat"}),b),X.unref?.()}),W=await Promise.race([Z,j]);if(X)clearTimeout(X);if(W.kind==="heartbeat"){yield{providerAdmission:Yf("queued",U.getSnapshot())};continue}if(W.kind==="error"){if(Tf(W.error)){if(W.error.reason==="wait_timeout"&&R?.startedAt!==void 0&&(C()?.recoveryRemainingMs??0)<=0)throw v();yield{providerAdmission:yf(W.error)}}throw W.error}return yield{providerAdmission:Yf("admitted",U.getSnapshot())},W.permit}},RE=(A,P)=>{if(!a())throw v();if(k)L++;K=void 0;let s=new AbortController,N=E?__(E,s.signal):s.signal,U=typeof P.timeout==="number"&&Number.isFinite(P.timeout)&&P.timeout>0?Math.max(1,Math.floor(P.timeout)):void 0,J;if(R?.startedAt!==void 0){let b=C()?.recoveryRemainingMs??0;if(b<=0)throw v();J={remainingMs:b,error:new l(R.budgetMs,R.budgetMs)}}let Z=a_(P,A,N,T,u);g_(Z,A,(b)=>{K=b});let O=n_(this.models,A,S,Z,{idleTimeoutMs:P.streamIdleTimeout??Df,signal:N,abort:(b)=>s.abort(b)});return async function*(){let b,X;try{if(U!==void 0&&(J===void 0||U<J.remainingMs)){let j=new Gf(U);b=setTimeout(()=>s.abort(j),U),b.unref?.()}if(J){let j=J;X=setTimeout(()=>s.abort(j.error),j.remainingMs),X.unref?.()}yield*O}finally{if(b)clearTimeout(b);if(X)clearTimeout(X)}}()},af=this,p=(A)=>({phase:A.phase,reason:A.reason,...A.statusCode!==void 0?{statusCode:A.statusCode}:{},...A.retryAfterMs!==void 0?{retryAfterMs:A.retryAfterMs}:{},...A.nextProbeAt!==void 0?{nextProbeAt:A.nextProbeAt}:{},openDurationMs:A.openDurationMs,sampleCount:A.sampleCount,failureCount:A.failureCount,...C()?{recoveryRemainingMs:C()?.recoveryRemainingMs}:{}}),gf=(A,P)=>({phase:A,reason:P.reason,...P.statusCode!==void 0?{statusCode:P.statusCode}:{},retryAfterMs:P.retryAfterMs,...P.nextProbeAt!==void 0?{nextProbeAt:P.nextProbeAt}:{},openDurationMs:P.openDurationMs,sampleCount:P.sampleCount,failureCount:P.failureCount,...C()?{recoveryRemainingMs:C()?.recoveryRemainingMs}:{}}),AE=(A)=>({phase:"probe",reason:A.reason??"server_error",...A.statusCode!==void 0?{statusCode:A.statusCode}:{},openDurationMs:A.openDurationMs??xf,...A.sampleCount!==void 0?{sampleCount:A.sampleCount}:{},...A.failureCount!==void 0?{failureCount:A.failureCount}:{},...C()?{recoveryRemainingMs:C()?.recoveryRemainingMs}:{}}),Nf=(A,P,s)=>({providerRetry:{phase:"exhausted",attempt:A,maxRetries:z,reason:P,...s!==void 0?{statusCode:s}:{},...F(),exhaustedBy:"recovery_budget"}}),rf=async function*(A,P,s,N,U){let J,Z=!1,O,b,X=hE(A,P);for(let j=0;j<=N;j++){if(!a())break;let W,o;while(!W){let H=X.preflight();while(!H.eligible){if(O=H.reason,b=H.statusCode,!R||!U){let G=gf("rejected",H);throw yield{providerCircuit:G},new _f(G)}lf();let V=C()?.recoveryRemainingMs??0;if(V<=0){let G=v();throw yield Nf(k?Math.max(0,L-1):j,H.reason,H.statusCode),G}yield{providerCircuit:gf("waiting",H)};let w=Math.min(Math.max(1,H.retryAfterMs),wf,V);if(await d(w,E,{throwOnAbort:!0}),(C()?.recoveryRemainingMs??0)<=0){let G=v();throw yield Nf(k?Math.max(0,L-1):j,H.reason,H.statusCode),G}H=X.preflight()}try{o=yield*ME(A,P)}catch($){if($ instanceof l)yield Nf(k?Math.max(0,L-1):j,O??"timeout",b);throw $}let I=X.check();if(I.allowed)W=I;else o.release(),o=void 0}let g=W.token;if(W.probe)yield{providerCircuit:AE(W)};try{let H=!1,I=!1;for await(let $ of RE(A,P)){if($.providerStall){yield $;continue}let V=k?L-1:j;if(V>0&&O&&!H)H=!0,yield{providerRetry:{phase:"recovered",attempt:V,maxRetries:z,reason:O,...b!==void 0?{statusCode:b}:{},...F()}};if(!I){I=!0;let w=X.recordSuccess(g);if(w)yield{providerCircuit:p(w)}}Z=!0,s(),yield t($,A)}if(!I){let $=X.recordSuccess(g);if($)yield{providerCircuit:p($)}}return}catch(H){if(o?.release(),J=H,af.logIdleTimeout(H,Z,A),await af.handleAbort(E),H instanceof l){if(Z)throw Zf(H),H;throw yield{providerRetry:{phase:"exhausted",attempt:k?Math.max(0,L-1):j,maxRetries:z,reason:O??"timeout",...b!==void 0?{statusCode:b}:{},...F(),exhaustedBy:"recovery_budget"}},H}let I=y(H,K);if(Z)throw Zf(H),H;let $=HT(H,K),V=$?X.recordFailure(g,$):K&&!of(H)?X.recordNeutral(g):void 0;if(V)yield{providerCircuit:p(V)};if(!I.retryable||!I.reason){if(j>0&&O)yield{providerRetry:{phase:"exhausted",attempt:k?Math.max(0,L-1):j,maxRetries:z,reason:O,...b!==void 0?{statusCode:b}:{},...F()}};throw H}O=I.reason,b=I.statusCode;let w=j<N&&a();if(V&&V.phase!=="closed"&&w&&(!R||!U)){let G={...p(V),phase:"rejected"};throw yield{providerCircuit:G},new _f(G)}if(w){lf();let G=k?L:j+1,uE=m_(G,K,R?{maxDelayMs:pf,maxExponentialDelayMs:pf}:void 0),df=V&&V.phase!=="closed"?V.retryAfterMs??0:0;if(R&&df>0&&V)yield{providerCircuit:{...p(V),phase:"waiting"}};let cE=C(),bf=Math.max(uE,df),r=R?Math.min(bf,cE?.recoveryRemainingMs??bf):bf,tf={attempt:G,maxRetries:z,reason:I.reason,...I.statusCode!==void 0?{statusCode:I.statusCode}:{}};if(yield{providerRetry:{phase:"scheduled",...tf,delayMs:r,nextRetryAt:Date.now()+r,...F()}},R){let e=r;while(e>0){let nf=Math.min(e,wf);if(await d(nf,E,{throwOnAbort:!0}),e-=nf,(C()?.recoveryRemainingMs??0)<=0){let Mf=v();throw yield{providerRetry:{phase:"exhausted",...tf,...F(),exhaustedBy:"recovery_budget"}},Mf}if(e>0){if(V&&V.phase!=="closed"&&V.nextProbeAt!==void 0){let Mf=Math.max(0,V.nextProbeAt-Date.now());if(Mf>0)yield{providerCircuit:{...p(V),phase:"waiting",retryAfterMs:Mf}}}yield{providerRetry:{phase:"waiting",...tf,delayMs:r,nextRetryAt:Date.now()+e,...F()}}}}}else await d(r,E,{throwOnAbort:!0});yield{providerRetry:{phase:"attempt",...tf,...F()}}}else yield{providerRetry:{phase:"exhausted",attempt:k?Math.max(0,L-1):j,maxRetries:z,reason:I.reason,...I.statusCode!==void 0?{statusCode:I.statusCode}:{},...F(),...R&&(U||!a())?{exhaustedBy:"attempt_limit"}:{}}}}finally{X.abandon(g),o?.release()}}throw J},Of,ef=!1,hf=this.config.fallbackModels??[],SE=R&&hf.length>0?Math.min(Y,z):z;try{for await(let A of rf(this.model,this.config,()=>{ef=!0},SE,hf.length===0))yield A;return}catch(A){if(Of=A,ef||!Tf(A)&&!Jf(A)&&!of(A)&&!y(A,K).retryable)throw A}for(let[A,P]of hf.entries()){if(!a())break;yield{modelFallback:!0};let s=!1;try{let N=cT(this.config,P),U=R_(N,P),J=A===hf.length-1,Z=R&&!J?Math.min(Y,z):z;for await(let O of rf(U,N,()=>{s=!0},Z,J))yield O;return}catch(N){if(Of=N,s||!Tf(N)&&!Jf(N)&&!of(N)&&!y(N,K).retryable)throw N}}throw Of}async handleAbort(f){if(f?.aborted)await d(0,f,{throwOnAbort:!0})}logIdleTimeout(f,_,E){if(f===null||typeof f!=="object"||!("code"in f)||f.code!=="STREAM_IDLE_TIMEOUT"||!("timeoutMs"in f)||typeof f.timeoutMs!=="number")return;vf.warn("[PiAIChatService] Provider stream idle timeout",{provider:E.provider,model:E.id,timeoutMs:f.timeoutMs,replayBoundaryCrossed:_})}getConfig(){return{...this.config}}updateConfig(f){let _={...this.config,...f},E=jf(_);this.config={..._,maxContextTokens:E.model.contextWindow,maxOutputTokens:_.maxOutputTokens??E.model.maxTokens},this.models=E.models,this.model=E.model}}var UT=m("Service");async function zx(f){let _=f;if(_.provider){let E=f_(_.provider);if(Object.keys(E).length>0)_={..._,customHeaders:{...E,..._.customHeaders}},UT.debug(`Injected ${_.provider} specific headers:`,Object.keys(E))}return YT(_)}function YT(f){return new mf(f)}
5
- export{bT as Yd,CT as Zd,__ as _d,Tf as $d,v_ as ae,rE as be,Tx as ce,mf as de,zx as ee};
@@ -1,2 +0,0 @@
1
- import{promises as A}from"node:fs";import q from"node:path";var J=new Map;async function L(B){let b=B;while(!0){try{return await A.lstat(q.join(b,".git")),b}catch(H){if(H.code!=="ENOENT")return}let E=q.dirname(b);if(E===b)return;b=E}}async function M(B){let b=q.join(B,".git"),E=await A.lstat(b);if(E.isDirectory())return B;if(!E.isFile())return;let H=await A.readFile(b,"utf8"),F=/^gitdir:\s*(.+)\s*$/im.exec(H);if(!F)return;let z=await A.realpath(q.isAbsolute(F[1])?F[1]:q.resolve(B,F[1])),I=z;try{let x=(await A.readFile(q.join(z,"commondir"),"utf8")).trim();if(x)I=await A.realpath(q.resolve(z,x))}catch(x){if(x.code!=="ENOENT")throw x}return q.basename(I)===".git"?A.realpath(q.dirname(I)):void 0}async function S(B){if(!q.isAbsolute(B))throw Error("Workspace path must be absolute");let b=await A.realpath(B),E=J.get(b);if(E)return E;let H=b;try{let z=await L(b);if(z){let I=await M(z),x=q.relative(z,b);if(I&&(x===""||!x.startsWith(`..${q.sep}`)&&x!==".."&&!q.isAbsolute(x))){let K=q.resolve(I,x);H=await A.realpath(K).catch(()=>K)}}}catch{}let F={projectPath:b,trustRoot:H};if(J.size>=512){let z=J.keys().next().value;if(z)J.delete(z)}return J.set(b,F),F}
2
- export{S as qh};
@@ -1 +0,0 @@
1
- import{ee as a}from"./chunk-0f8nn2h1.js";import"./chunk-6pyktfa4.js";import"./chunk-98n2rxmq.js";import"./chunk-ypqp368c.js";import"./chunk-t8xmh4w2.js";import"./chunk-ppsvzgs5.js";import"./chunk-hcv17986.js";export{a as createChatServiceAsync};