@bivelio/savings-layer 0.4.17 → 0.4.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var Xs="2026-09-06",bt={"gpt-4.1":{inputPer1k:.002,outputPer1k:.008,cachedInputPer1k:5e-4},"gpt-4.1-mini":{inputPer1k:4e-4,outputPer1k:.0016,cachedInputPer1k:1e-4},"gpt-4.1-nano":{inputPer1k:1e-4,outputPer1k:4e-4,
1
+ var Qs="2026-09-06",bt={"gpt-4.1":{inputPer1k:.002,outputPer1k:.008,cachedInputPer1k:5e-4},"gpt-4.1-mini":{inputPer1k:4e-4,outputPer1k:.0016,cachedInputPer1k:1e-4},"gpt-4.1-nano":{inputPer1k:1e-4,outputPer1k:4e-4,
2
2
  cachedInputPer1k:25e-6},"gpt-4o":{inputPer1k:.0025,outputPer1k:.01,cachedInputPer1k:.00125},"gpt-4o-mini":{inputPer1k:15e-5,outputPer1k:6e-4,cachedInputPer1k:75e-6},"gpt-4-turbo":{inputPer1k:.01,outputPer1k:.03},
3
3
  "gpt-4":{inputPer1k:.03,outputPer1k:.06},"gpt-3.5-turbo":{inputPer1k:5e-4,outputPer1k:.0015},"gpt-5":{inputPer1k:.00125,outputPer1k:.01,cachedInputPer1k:125e-6},"gpt-5-codex":{inputPer1k:.00125,outputPer1k:.01,
4
4
  cachedInputPer1k:125e-6},"gpt-5-mini":{inputPer1k:25e-5,outputPer1k:.002,cachedInputPer1k:25e-6},"gpt-5-nano":{inputPer1k:5e-5,outputPer1k:4e-4,cachedInputPer1k:5e-6},"gpt-5.1-codex":{inputPer1k:.00125,
@@ -17,37 +17,37 @@ u-4-5":{inputPer1k:.001,outputPer1k:.005,cachedInputPer1k:1e-4},"claude-3-5-sonn
17
17
  cachedInputPer1k:75e-6},"gemini-3.5-flash":{inputPer1k:.0015,outputPer1k:.009,cachedInputPer1k:15e-5},"gemini-3.5-flash-lite":{inputPer1k:3e-4,outputPer1k:.0025,cachedInputPer1k:3e-5},"gemini-3.1-pro-\
18
18
  preview":{inputPer1k:.002,outputPer1k:.012,cachedInputPer1k:2e-4},"gemini-2.5-pro":{inputPer1k:.00125,outputPer1k:.01,cachedInputPer1k:125e-6},"gemini-2.5-flash":{inputPer1k:3e-4,outputPer1k:.0025,cachedInputPer1k:3e-5}};
19
19
  function dn(t,e,n){if(!n)return;let o=t[n];if(o)return o;let r=n.lastIndexOf("/"),s=r>=0?n.slice(r+1):n,i=t[s];if(i)return i;for(let a of e){if(!s.startsWith(a))continue;let c=s.charAt(a.length);if(c!==
20
- ""&&c!=="-"&&c!=="."&&c!=="_")continue;let l=s.slice(a.length+1);if(!(/^\d/.test(l)&&!/^\d{4}/.test(l)))return t[a]}}function pn(t){return Object.keys(t).sort((e,n)=>n.length-e.length)}var Qs=pn(bt);function xt(t){
21
- return dn(bt,Qs,t)}Object.fromEntries(Object.keys(bt).map(t=>[t,t]));var fn="0.4.17",Bo="x-bvsala-version";var ei=0;function mn(){let t=globalThis.crypto;if(t?.randomUUID)return t.randomUUID();let e=new Uint8Array(16);if(t?.getRandomValues)t.getRandomValues(e);else {let o=++ei,r=Date.now?Date.now():0;for(let s=0;s<
20
+ ""&&c!=="-"&&c!=="."&&c!=="_")continue;let l=s.slice(a.length+1);if(!(/^\d/.test(l)&&!/^\d{4}/.test(l)))return t[a]}}function pn(t){return Object.keys(t).sort((e,n)=>n.length-e.length)}var ei=pn(bt);function xt(t){
21
+ return dn(bt,ei,t)}Object.fromEntries(Object.keys(bt).map(t=>[t,t]));var fn="0.4.20",No="x-bvsala-version";var ti=0;function mn(){let t=globalThis.crypto;if(t?.randomUUID)return t.randomUUID();let e=new Uint8Array(16);if(t?.getRandomValues)t.getRandomValues(e);else {let o=++ti,r=Date.now?Date.now():0;for(let s=0;s<
22
22
  16;s++)e[s]=(s<6?o>>>s*8:r>>>(s-6)*8)&255;}e[6]=e[6]&15|64,e[8]=e[8]&63|128;let n=[];for(let o=0;o<16;o++)n.push(e[o].toString(16).padStart(2,"0"));return `${n[0]}${n[1]}${n[2]}${n[3]}-${n[4]}${n[5]}-${n[6]}${n[7]}\
23
- -${n[8]}${n[9]}-${n[10]}${n[11]}${n[12]}${n[13]}${n[14]}${n[15]}`}var Gc=["exact","task_equivalent","not_verified","bounded_degradation","rejected"];function Zc(t){return {v:1,task:t.task,goal:t.goal,rules:t.rules??[],facts:t.facts??[],refs:t.refs??[],...t.delta?{delta:t.delta}:{},outputContract:t.outputContract}}var hn=class{id;exact=false;constructor(e="heuristic"){this.id=e;}count(e){if(e.length===0)return 0;let n=e.match(/[A-Za-z]+|\d+|\s+|[^\sA-Za-z\d]/g)??[],o=0;for(let r of n){let s=r[0];if(/\s/.test(s)){let i=(r.
23
+ -${n[8]}${n[9]}-${n[10]}${n[11]}${n[12]}${n[13]}${n[14]}${n[15]}`}var Zc=["exact","task_equivalent","not_verified","bounded_degradation","rejected"];function Qc(t){return {v:1,task:t.task,goal:t.goal,rules:t.rules??[],facts:t.facts??[],refs:t.refs??[],...t.delta?{delta:t.delta}:{},outputContract:t.outputContract}}var hn=class{id;exact=false;constructor(e="heuristic"){this.id=e;}count(e){if(e.length===0)return 0;let n=e.match(/[A-Za-z]+|\d+|\s+|[^\sA-Za-z\d]/g)??[],o=0;for(let r of n){let s=r[0];if(/\s/.test(s)){let i=(r.
24
24
  match(/\n/g)??[]).length;o+=i+Math.floor(Math.max(0,r.length-1)/2);}else /[A-Za-z]/.test(s)?o+=Math.max(1,Math.ceil(r.length/4)):/\d/.test(s)?o+=Math.max(1,Math.ceil(r.length/2)):o+=1;}return Math.max(o,
25
25
  Math.ceil(e.length/4))}},Ne=new hn;var gn=class{estimators=new Map;modelToTokenizer=new Map;fallbackId;constructor(e=Ne){this.fallbackId=e.id,this.estimators.set(e.id,e);}register(e){return this.estimators.set(e.id,e),this}mapModel(e,n){
26
26
  return this.modelToTokenizer.set(e,n),this}resolve(e){let n=e.tokenizer?this.estimators.get(e.tokenizer):void 0;if(n)return n;if(e.model){let o=this.modelToTokenizer.get(e.model);if(o){let r=this.estimators.
27
- get(o);if(r)return r}}return this.estimators.get(this.fallbackId)}count(e,n){return this.resolve(n).count(e)}},No=new gn;var bn=class{constructor(e,n){this.encoder=n;this.id=e;}encoder;id;exact=true;count(e){return e.length===0?0:this.encoder.encode(e).length}},jo={o200k_base:["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini",
28
- "gpt-4.1-nano","o1","o1-mini","o3","o3-mini","o4-mini"],cl100k_base:["gpt-4","gpt-4-turbo","gpt-3.5-turbo","text-embedding-3-small","text-embedding-3-large"]};async function ti(t,e={}){let n=e.codificaciones??
29
- ["o200k_base","cl100k_base"],o=false;for(let r of n){let s;try{s=await import(`gpt-tokenizer/encoding/${r}`);}catch{continue}if(typeof s.encode=="function"){t.register(new bn(r,s)),o=true;for(let i of jo[r]??
30
- [])t.mapModel(i,r),t.mapModel(`openai/${i}`,r);}}return o}var sl=jo,il=ti;var je=class{avoidedLlm=0;baselineLlm=1;actualLlm=0;baselineRetrieval=0;actualRetrieval=0;baselineTools=0;actualTools=0;retries=0;baselineInput=0;actualInput=0;eliminatedInput=0;compressedInput=0;baselineOutput=0;actualOutput=0;eliminatedOutput=0;providerCachedInput=0;cacheWriteInputTokens=0;cacheWritePremiumUsd=0;sentInputLocal=0;removedInputLocal=0;elididoLocal=0;estimatorExact=false;repairOutput=0;repairInput=0;discoveryInput=0;discoveryOutput=0;extraCostUsd=0;cascadeInput=0;cascadeOutput=0;cascadeAttempt(e,n){
27
+ get(o);if(r)return r}}return this.estimators.get(this.fallbackId)}count(e,n){return this.resolve(n).count(e)}},jo=new gn;var bn=class{constructor(e,n){this.encoder=n;this.id=e;}encoder;id;exact=true;count(e){return e.length===0?0:this.encoder.encode(e).length}},$o={o200k_base:["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini",
28
+ "gpt-4.1-nano","o1","o1-mini","o3","o3-mini","o4-mini"],cl100k_base:["gpt-4","gpt-4-turbo","gpt-3.5-turbo","text-embedding-3-small","text-embedding-3-large"]};async function ni(t,e={}){let n=e.codificaciones??
29
+ ["o200k_base","cl100k_base"],o=false;for(let r of n){let s;try{s=await import(`gpt-tokenizer/encoding/${r}`);}catch{continue}if(typeof s.encode=="function"){t.register(new bn(r,s)),o=true;for(let i of $o[r]??
30
+ [])t.mapModel(i,r),t.mapModel(`openai/${i}`,r);}}return o}var al=$o,cl=ni;var je=class{avoidedLlm=0;baselineLlm=1;actualLlm=0;baselineRetrieval=0;actualRetrieval=0;baselineTools=0;actualTools=0;retries=0;baselineInput=0;actualInput=0;eliminatedInput=0;compressedInput=0;baselineOutput=0;actualOutput=0;eliminatedOutput=0;providerCachedInput=0;cacheWriteInputTokens=0;cacheWritePremiumUsd=0;sentInputLocal=0;removedInputLocal=0;elididoLocal=0;estimatorExact=false;repairOutput=0;repairInput=0;discoveryInput=0;discoveryOutput=0;extraCostUsd=0;cascadeInput=0;cascadeOutput=0;cascadeAttempt(e,n){
31
31
  this.cascadeInput+=Math.max(0,e.inputTokens),this.cascadeOutput+=Math.max(0,e.outputTokens),this.extraCostUsd+=Math.max(0,e.inputTokens)/1e3*n.inputPer1k+Math.max(0,e.outputTokens)/1e3*n.outputPer1k;}cacheWritePremium(e,n,o){
32
32
  let r=Math.max(0,e);this.cacheWriteInputTokens+=r,this.cacheWritePremiumUsd+=r/1e3*o.inputPer1k*Math.max(0,n-1);}compressionReport=void 0;eliminate(e){this.eliminatedInput+=Math.max(0,e);}compress(e,n){
33
33
  this.compressedInput+=Math.max(0,e-n);}providerCached(e){this.providerCachedInput+=Math.max(0,e);}avoidCall(e,n){this.avoidedLlm+=1,this.actualLlm=0,this.baselineInput=e,this.baselineOutput=n;}get publishedBaselineOutput(){
34
34
  return this.avoidedLlm===0?Math.max(0,this.actualOutput-this.repairOutput-this.discoveryOutput):this.baselineOutput}estimateCost(e){let n=this.avoidedLlm===0,o="estimated";if(n)if(this.actualInput>0&&
35
- this.sentInputLocal>0){let d=this.actualInput/this.sentInputLocal,f=Math.max(0,this.actualInput-this.repairInput-this.discoveryInput);this.baselineInput=f+Math.round(d*this.removedInputLocal),o=this.removedInputLocal===
35
+ this.sentInputLocal>0){let d=this.actualInput/this.sentInputLocal,m=Math.max(0,this.actualInput-this.repairInput-this.discoveryInput);this.baselineInput=m+Math.round(d*this.removedInputLocal),o=this.removedInputLocal===
36
36
  0?"measured":"estimated";}else this.actualInput>0?(this.baselineInput=this.actualInput,o="measured"):(this.baselineInput=0,o="unmeasured");let r=n?Math.max(0,this.actualOutput-this.repairOutput-this.discoveryOutput):
37
37
  this.baselineOutput,s=e.cachedInputPer1k??e.inputPer1k,i=Math.min(this.providerCachedInput,this.actualInput),a=d=>Math.max(0,d-i)/1e3*e.inputPer1k+i/1e3*s,c=a(this.baselineInput)+r/1e3*e.outputPer1k,l=a(
38
- this.actualInput)+this.actualOutput/1e3*e.outputPer1k+this.extraCostUsd+this.cacheWritePremiumUsd,u=c===0?0:1-l/c;return {baselineEstimate:$o(c),actual:$o(l),netSavings:ni(u),basis:o}}};function $o(t){
39
- return Math.round(t*1e10)/1e10}function ni(t){return Math.round(t*1e6)/1e6}var oi=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,
38
+ this.actualInput)+this.actualOutput/1e3*e.outputPer1k+this.extraCostUsd+this.cacheWritePremiumUsd,u=c===0?0:1-l/c;return {baselineEstimate:Fo(c),actual:Fo(l),netSavings:oi(u),basis:o}}};function Fo(t){
39
+ return Math.round(t*1e10)/1e10}function oi(t){return Math.round(t*1e6)/1e6}var ri=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,
40
40
  4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,
41
41
  1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,
42
- 1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),ri=new TextEncoder;function se(t,e){return t>>>e|t<<32-e}function Fo(t){let e=ri.encode(t),n=e.length*
42
+ 1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),si=new TextEncoder;function se(t,e){return t>>>e|t<<32-e}function zo(t){let e=si.encode(t),n=e.length*
43
43
  8,o=(e.length+8>>6)+1,r=new Uint8Array(o*64);r.set(e),r[e.length]=128;let s=new DataView(r.buffer);s.setUint32(r.length-8,Math.floor(n/4294967296)),s.setUint32(r.length-4,n>>>0);let i=new Uint32Array(
44
44
  [1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),a=new Uint32Array(64);for(let l=0;l<r.length;l+=64){for(let b=0;b<16;b++)a[b]=s.getUint32(l+b*4);for(let b=16;b<
45
- 64;b++){let y=a[b-15],E=a[b-2],C=se(y,7)^se(y,18)^y>>>3,O=se(E,17)^se(E,19)^E>>>10;a[b]=a[b-16]+C+a[b-7]+O|0;}let u=i[0],d=i[1],f=i[2],m=i[3],h=i[4],p=i[5],g=i[6],x=i[7];for(let b=0;b<64;b++){let y=se(
46
- h,6)^se(h,11)^se(h,25),E=h&p^~h&g,C=x+y+E+oi[b]+a[b]|0,O=se(u,2)^se(u,13)^se(u,22),T=u&d^u&f^d&f,D=O+T|0;x=g,g=p,p=h,h=m+C|0,m=f,f=d,d=u,u=C+D|0;}i[0]=i[0]+u|0,i[1]=i[1]+d|0,i[2]=i[2]+f|0,i[3]=i[3]+m|0,
47
- i[4]=i[4]+h|0,i[5]=i[5]+p|0,i[6]=i[6]+g|0,i[7]=i[7]+x|0;}let c="";for(let l=0;l<8;l++)c+=(i[l]>>>0).toString(16).padStart(8,"0");return c}var si=/\s+/g,ii=[[/′′/g,'"'],[/[‘’‚‛′´`]/g,"'"],[/[“”„‟″«»]/g,'"'],[/[‐-―−]/g,"-"],[/⁄/g,"/"],[/…/g,""]],ai=/[¿?¡!;.,:'"·•]/g,ci=/([a-z])\p{M}+/gu,li=/(^|\s)\p{M}+/gu,
48
- xn=/\p{L}/u;function Y(t){return t>="0"&&t<="9"}function yt(t){let e=t.normalize("NFKC").toLowerCase();for(let[n,o]of ii)e=e.replace(n,o);return e=e.normalize("NFD").replace(ci,"$1").replace(li,"$1").
49
- normalize("NFC"),e=e.replace(ai,(n,o,r)=>{let s=r[o-1]??"",i=r[o+1]??"";switch(n){case "\xBF":case "?":case "\xA1":case ";":return Y(s)&&Y(i)?n:"";case "!":return Y(s)?n:"";case ".":case ",":return Y(s)&&Y(i)||
50
- Y(i)&&!Y(s)&&!xn.test(s)?n:"";case ":":return Y(s)&&Y(i)?n:"";case "'":case '"':return xn.test(s)&&xn.test(i)||Y(s)||Y(i)?n:"";default:return Y(s)||Y(i)?n:""}}),e.replace(si," ").trim()}function ie(t){return Fo(
45
+ 64;b++){let y=a[b-15],T=a[b-2],E=se(y,7)^se(y,18)^y>>>3,R=se(T,17)^se(T,19)^T>>>10;a[b]=a[b-16]+E+a[b-7]+R|0;}let u=i[0],d=i[1],m=i[2],f=i[3],h=i[4],g=i[5],p=i[6],x=i[7];for(let b=0;b<64;b++){let y=se(
46
+ h,6)^se(h,11)^se(h,25),T=h&g^~h&p,E=x+y+T+ri[b]+a[b]|0,R=se(u,2)^se(u,13)^se(u,22),C=u&d^u&m^d&m,D=R+C|0;x=p,p=g,g=h,h=f+E|0,f=m,m=d,d=u,u=E+D|0;}i[0]=i[0]+u|0,i[1]=i[1]+d|0,i[2]=i[2]+m|0,i[3]=i[3]+f|0,
47
+ i[4]=i[4]+h|0,i[5]=i[5]+g|0,i[6]=i[6]+p|0,i[7]=i[7]+x|0;}let c="";for(let l=0;l<8;l++)c+=(i[l]>>>0).toString(16).padStart(8,"0");return c}var ii=/\s+/g,ai=[[/′′/g,'"'],[/[‘’‚‛′´`]/g,"'"],[/[“”„‟″«»]/g,'"'],[/[‐-―−]/g,"-"],[/⁄/g,"/"],[/…/g,""]],ci=/[¿?¡!;.,:'"·•]/g,li=/([a-z])\p{M}+/gu,ui=/(^|\s)\p{M}+/gu,
48
+ xn=/\p{L}/u;function Y(t){return t>="0"&&t<="9"}function yt(t){let e=t.normalize("NFKC").toLowerCase();for(let[n,o]of ai)e=e.replace(n,o);return e=e.normalize("NFD").replace(li,"$1").replace(ui,"$1").
49
+ normalize("NFC"),e=e.replace(ci,(n,o,r)=>{let s=r[o-1]??"",i=r[o+1]??"";switch(n){case "\xBF":case "?":case "\xA1":case ";":return Y(s)&&Y(i)?n:"";case "!":return Y(s)?n:"";case ".":case ",":return Y(s)&&Y(i)||
50
+ Y(i)&&!Y(s)&&!xn.test(s)?n:"";case ":":return Y(s)&&Y(i)?n:"";case "'":case '"':return xn.test(s)&&xn.test(i)||Y(s)||Y(i)?n:"";default:return Y(s)||Y(i)?n:""}}),e.replace(ii," ").trim()}function ie(t){return zo(
51
51
  t)}function Se(t){return JSON.stringify(yn(t))}function yn(t){if(Array.isArray(t))return t.map(yn);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=yn(t[n]);return e}return t}
52
52
  function vn(t){return t.replace(/[-_]?\d{4,}.*$/,"").replace(/[-_](mini|nano|small|large|latest)$/i,"")}function kn(t){let e=t.context??{},n=t.messages.filter(s=>s.role==="system").map(s=>s.content).join(
53
53
  `
@@ -55,191 +55,197 @@ function vn(t){return t.replace(/[-_]?\d{4,}.*$/,"").replace(/[-_](mini|nano|sma
55
55
  `),r=(t.tools??[]).map(s=>({id:s.id,risk:s.risk,parameters:s.parameters??null})).sort((s,i)=>s.id.localeCompare(i.id));return {model:t.model,modelFamily:vn(t.model),messages:t.messages,normalizedText:o,
56
56
  systemPromptHash:ie(n),toolsetHash:ie(Se(r)),structuredDataHash:t.structuredData!==void 0?ie(Se(t.structuredData)):"none",schemaVersion:t.response?.version??t.response?.contractId??"none",contractId:t.
57
57
  response?.contractId??null,temperature:t.temperature??null,seed:t.seed??null,tenantId:e.tenantId??"anonymous",authorizationScope:e.authorizationScope??"default",principal:e.sessionId??null,locale:e.locale??
58
- "und",knowledgeEpoch:e.knowledgeEpoch??"none",freshnessBucket:e.freshnessBucket??"any",safetyPolicyVersion:e.safetyPolicyVersion??"none",tokenizer:t.tokenizer,original:t}}var zo="n2";function wn(t,e={}){let n=e.servedModel??t.model,o=Se({tenant:t.tenantId,scope:t.authorizationScope,principal:t.principal,text:t.normalizedText,modelFamily:n===t.model?t.modelFamily:vn(n),
58
+ "und",knowledgeEpoch:e.knowledgeEpoch??"none",freshnessBucket:e.freshnessBucket??"any",safetyPolicyVersion:e.safetyPolicyVersion??"none",tokenizer:t.tokenizer,original:t}}var Vo="n2";function wn(t,e={}){let n=e.servedModel??t.model,o=Se({tenant:t.tenantId,scope:t.authorizationScope,principal:t.principal,text:t.normalizedText,modelFamily:n===t.model?t.modelFamily:vn(n),
59
59
  model:n,system:t.systemPromptHash,contract:t.contractId,schema:t.schemaVersion,tools:t.toolsetHash,data:t.structuredDataHash,locale:t.locale,temperature:t.temperature,seed:t.seed,knowledgeEpoch:t.knowledgeEpoch,
60
- freshness:t.freshnessBucket,safety:t.safetyPolicyVersion});return `bvsala:exact:${zo}:${ie(o)}`}function Vo(t,e={}){let n=Se({tenant:t.tenantId,scope:t.authorizationScope,principal:t.principal,text:t.normalizedText,
60
+ freshness:t.freshnessBucket,safety:t.safetyPolicyVersion});return `bvsala:exact:${Vo}:${ie(o)}`}function Uo(t,e={}){let n=Se({tenant:t.tenantId,scope:t.authorizationScope,principal:t.principal,text:t.normalizedText,
61
61
  model:e.servedModel??t.model,system:t.systemPromptHash,contract:t.contractId,schema:t.schemaVersion,tools:t.toolsetHash,data:t.structuredDataHash,temperature:t.temperature,seed:t.seed,deferrable:e.deferrable===
62
- true,toolDiscovery:e.toolDiscovery===true,maxOut:e.maxOutputTokens??null});return `bvsala:inflight:${zo}:${ie(n)}`}var ui=new RegExp("\\b("+["now|today|current|currently|latest|live|price|prices|stock|availability|weather|score|breaking","ahora|hoy|actual|actualmente|ultimo|\xFAltimo|precio|precios|disponibilidad|cot\
62
+ true,toolDiscovery:e.toolDiscovery===true,maxOut:e.maxOutputTokens??null});return `bvsala:inflight:${Vo}:${ie(n)}`}var di=new RegExp("\\b("+["now|today|current|currently|latest|live|price|prices|stock|availability|weather|score|breaking","ahora|hoy|actual|actualmente|ultimo|\xFAltimo|precio|precios|disponibilidad|cot\
63
63
  izacion|cotizaci\xF3n","ara|avui|preu|preus|disponibilitat|darrer","maintenant|aujourd'hui|actuel|actuelle|dernier|prix|disponibilite|disponibilit\xE9|meteo|m\xE9t\xE9o","jetzt|heute|aktuell|aktuelle|\
64
64
  neueste|preis|preise|verfugbarkeit|verf\xFCgbarkeit|wetter|kurs","adesso|oggi|attuale|ultimo|prezzo|prezzi|disponibilita|disponibilit\xE0|meteo","agora|hoje|atual|ultimo|\xFAltimo|preco|pre\xE7o|precos|pre\xE7\
65
65
  os|disponibilidade|cotacao|cota\xE7\xE3o","nu|vandaag|huidige|laatste|prijs|prijzen|beschikbaarheid|weer|koers","teraz|dzisiaj|dzis|dzi\u015B|aktualny|aktualna|najnowszy|cena|ceny|dostepnosc|dost\u0119pno\u015B\u0107|pog\
66
66
  oda","simdi|\u015Fimdi|bugun|bug\xFCn|guncel|g\xFCncel|son|fiyat|fiyatlar|stok|hava","sekarang|hari ini|terkini|terbaru|harga|ketersediaan|cuaca","bay gio|b\xE2y gi\u1EDD|hom nay|h\xF4m nay|hien tai|hi\u1EC7n t\u1EA1i|moi\
67
- nhat|m\u1EDBi nh\u1EA5t|gia|gi\xE1|thoi tiet|th\u1EDDi ti\u1EBFt"].join("|")+")\\b","i"),di=new RegExp("\\b("+["my|mine|our|ours|account|balance|subscription|invoice|order|profile","mi|mis|mio|m\xEDo|nu\
67
+ nhat|m\u1EDBi nh\u1EA5t|gia|gi\xE1|thoi tiet|th\u1EDDi ti\u1EBFt"].join("|")+")\\b","i"),pi=new RegExp("\\b("+["my|mine|our|ours|account|balance|subscription|invoice|order|profile","mi|mis|mio|m\xEDo|nu\
68
68
  estro|nuestra|cuenta|factura|pedido|saldo|suscripcion|suscripci\xF3n|perfil","meu|meva|nostre|compte|factura|comanda|saldo|subscripcio|subscripci\xF3|perfil","mon|ma|mes|notre|nos|compte|solde|facture\
69
69
  |commande|abonnement|profil","mein|meine|meinem|unser|unsere|konto|kontostand|saldo|rechnung|bestellung|abo|abonnement|profil","mio|mia|miei|nostro|nostra|conto|saldo|fattura|ordine|abbonamento|profil\
70
70
  o","meu|minha|meus|nosso|nossa|conta|saldo|fatura|pedido|assinatura|perfil","mijn|onze|ons|rekening|saldo|factuur|bestelling|abonnement|profiel","moj|m\xF3j|moja|moje|nasz|nasza|konto|saldo|faktura|zamow\
71
71
  ienie|zam\xF3wienie|subskrypcja|profil","benim|bizim|hesap|hesabim|hesab\u0131m|bakiye|fatura|siparis|sipari\u015F|abonelik|profil","saya|kami|akun|saldo|tagihan|pesanan|langganan|profil","cua toi|c\u1EE7a\
72
72
  t\xF4i|tai khoan|t\xE0i kho\u1EA3n|so du|s\u1ED1 d\u01B0|hoa don|h\xF3a \u0111\u01A1n|don hang|\u0111\u01A1n h\xE0ng|thue bao|thu\xEA bao"].join("|")+")\\b","i");function Sn(t){let e=[],n=t.normalizedText,
73
- o=(t.original.tools??[]).some(m=>m.risk==="write"||m.risk==="destructive"),r=t.freshnessBucket==="live"||t.freshnessBucket==="hour"||ui.test(n),s=di.test(n),i=(t.temperature??0)>.3&&t.seed==null;o&&e.
73
+ o=(t.original.tools??[]).some(f=>f.risk==="write"||f.risk==="destructive"),r=t.freshnessBucket==="live"||t.freshnessBucket==="hour"||di.test(n),s=pi.test(n),i=(t.temperature??0)>.3&&t.seed==null;o&&e.
74
74
  push("write/destructive tools present"),r&&e.push("freshness-sensitive request"),s&&e.push("personalized/account-scoped request"),i&&e.push("stochastic sampling (temp>0.3, no seed)");let a=r&&(t.freshnessBucket==
75
75
  null||t.freshnessBucket==="any"),c=t.freshnessBucket==="live",l=s&&t.principal==null,u=!i&&!a&&!c&&!l&&!o;o&&e.push("write/destructive tools \u2192 exact cache off (side effects must execute)"),c&&e.push(
76
76
  "freshnessBucket=live \u2192 exact cache off (answer must be current)"),a&&e.push("freshness-sensitive without a freshness bucket \u2192 exact cache off"),l&&e.push("personalized request with no princ\
77
- ipal (context.sessionId) \u2192 exact cache off");let d=!o&&!r&&!s&&!i&&t.freshnessBucket!=="day",f=!o&&!r&&!s&&!i&&t.freshnessBucket!=="day";return {allowExactCache:u,allowSemanticCache:d,allowElision:f,
77
+ ipal (context.sessionId) \u2192 exact cache off");let d=!o&&!r&&!s&&!i&&t.freshnessBucket!=="day",m=!o&&!r&&!s&&!i&&t.freshnessBucket!=="day";return {allowExactCache:u,allowSemanticCache:d,allowElision:m,
78
78
  allowSingleflight:!o&&!l,allowCompression:true,requiresFreshData:r,hasSideEffects:o,isPersonalized:s,maxCacheAgeMs:t.freshnessBucket==="hour"?36e5:t.freshnessBucket==="day"?864e5:null,reasons:e}}var vt=class{store=new Map;maxEntries;now;constructor(e={}){this.maxEntries=e.maxEntries??1e4,this.now=e.now??(()=>Date.now());}async get(e){let n=this.store.get(e);return n?n.expiresAtMs!==null&&this.
79
79
  now()>n.expiresAtMs?(this.store.delete(e),null):(this.store.delete(e),this.store.set(e,n),n.value):null}async set(e,n,o){if(this.store.size>=this.maxEntries&&!this.store.has(e)){let r=this.store.keys().
80
80
  next().value;r!==void 0&&this.store.delete(r);}this.store.set(e,{value:n,expiresAtMs:o!=null?this.now()+o:null});}async delete(e){this.store.delete(e);}get size(){return this.store.size}};var kt=class{inflight=new Map;waiters=new Map;async run(e,n){let o=this.inflight.get(e);if(o)return this.waiters.set(e,(this.waiters.get(e)??1)+1),{value:await o,coalesced:true};let r=(async()=>n())();this.
81
- inflight.set(e,r),this.waiters.set(e,1);try{return {value:await r,coalesced:!1}}finally{this.inflight.delete(e),this.waiters.delete(e);}}get activeKeys(){return this.inflight.size}};function pi(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619)>>>0;return e}function fi(t){return t.toLowerCase().normalize("NFKC").split(/[^\p{L}\p{N}]+/u).filter(
82
- Boolean)}function mi(t){let e=new Array(256).fill(0),n=fi(t);if(n.length===0)return e;let o=new Map;for(let s=0;s<n.length;s++){let i=n[s];if(o.set(i,(o.get(i)??0)+1),s+1<n.length){let a=`${i}\0${n[s+
83
- 1]}`;o.set(a,(o.get(a)??0)+1);}}for(let[s,i]of o){let a=pi(s),c=a%256,l=a>>>31===1?-1:1;e[c]+=l*(1+Math.log(i));}let r=0;for(let s of e)r+=s*s;if(r=Math.sqrt(r),r===0)return e;for(let s=0;s<e.length;s++)
84
- e[s]/=r;return e}function Uo(t){return mi(t)}var qo=.72;function hi(t,e){let n=Math.min(t.length,e.length),o=0,r=0,s=0;for(let i=0;i<n;i++){let a=t[i],c=e[i];o+=a*c,r+=a*a,s+=c*c;}return r===0||s===0?0:o/(Math.sqrt(r)*Math.sqrt(s))}var gi=new Set(["no","not",
81
+ inflight.set(e,r),this.waiters.set(e,1);try{return {value:await r,coalesced:!1}}finally{this.inflight.delete(e),this.waiters.delete(e);}}get activeKeys(){return this.inflight.size}};function fi(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619)>>>0;return e}function mi(t){return t.toLowerCase().normalize("NFKC").split(/[^\p{L}\p{N}]+/u).filter(
82
+ Boolean)}function hi(t){let e=new Array(256).fill(0),n=mi(t);if(n.length===0)return e;let o=new Map;for(let s=0;s<n.length;s++){let i=n[s];if(o.set(i,(o.get(i)??0)+1),s+1<n.length){let a=`${i}\0${n[s+
83
+ 1]}`;o.set(a,(o.get(a)??0)+1);}}for(let[s,i]of o){let a=fi(s),c=a%256,l=a>>>31===1?-1:1;e[c]+=l*(1+Math.log(i));}let r=0;for(let s of e)r+=s*s;if(r=Math.sqrt(r),r===0)return e;for(let s=0;s<e.length;s++)
84
+ e[s]/=r;return e}function qo(t){return hi(t)}var Ho=.72;function gi(t,e){let n=Math.min(t.length,e.length),o=0,r=0,s=0;for(let i=0;i<n;i++){let a=t[i],c=e[i];o+=a*c,r+=a*a,s+=c*c;}return r===0||s===0?0:o/(Math.sqrt(r)*Math.sqrt(s))}var bi=new Set(["no","not",
85
85
  "never","none","cannot","cant","without","nor","nt","isnt","arent","wasnt","werent","dont","doesnt","didnt","wont","shouldnt","sin","nunca","jamas","jam\xE1s","tampoco","ni","ningun","ning\xFAn","ning\
86
- una","ninguno","nada","nadie","sense","mai","tampoc","cap","gens","ningu","ning\xFA","res"]),bi=new Set(["the","a","an","of","to","in","on","for","and","or","is","are","was","were","what","whats","whi\
86
+ una","ninguno","nada","nadie","sense","mai","tampoc","cap","gens","ningu","ning\xFA","res"]),xi=new Set(["the","a","an","of","to","in","on","for","and","or","is","are","was","were","what","whats","whi\
87
87
  ch","who","whom","how","when","where","me","my","i","you","please","tell","give","show","find","do","does","did","be","that","this","it","with","as","at","by","from","about","into","over","than","then",
88
88
  "s","el","la","los","las","un","una","unos","unas","de","del","al","en","por","para","con","sin","sobre","y","o","u","es","son","era","eran","ser","estar","esta","este","esto","estos","estas","ese","e\
89
89
  sa","eso","que","cual","cuales","quien","quienes","como","cuando","donde","dame","dime","quiero","necesito","puedes","podrias","favor","porfavor","gracias","me","mi","mis","tu","tus","su","sus","lo","\
90
90
  le","se","hay","el","la","els","les","un","una","uns","unes","de","del","dels","al","als","en","per","amb","sense","sobre","i","o","es","son","era","eren","ser","estar","aquest","aquesta","aquests","a\
91
91
  questes","aquell","aquella","que","quin","quina","qui","com","quan","on","dona","vull","necessito","pots","podries","sisplau","gracies","meu","meva","seu","seva","hi"]);function et(t){return (t.match(/\d[\d.,:/-]*/g)??
92
- []).map(e=>e.replace(/[.,:/-]+$/,""))}function En(t,e){if(t.length!==e.length)return false;let n=new Map;for(let o of t)n.set(o,(n.get(o)??0)+1);for(let o of e){let r=n.get(o);if(!r)return false;n.set(o,r-1);}
93
- return true}function tt(t){return t.split(/\s+/).filter(Boolean)}function nt(t){return t.filter(e=>gi.has(e.replace(/'/g,""))||e.endsWith("n't")).length}var xi=/^(system|user|assistant|tool):/;function Ho(t){
92
+ []).map(e=>e.replace(/[.,:/-]+$/,""))}function Tn(t,e){if(t.length!==e.length)return false;let n=new Map;for(let o of t)n.set(o,(n.get(o)??0)+1);for(let o of e){let r=n.get(o);if(!r)return false;n.set(o,r-1);}
93
+ return true}function tt(t){return t.split(/\s+/).filter(Boolean)}function nt(t){return t.filter(e=>bi.has(e.replace(/'/g,""))||e.endsWith("n't")).length}var yi=/^(system|user|assistant|tool):/;function Ko(t){
94
94
  return t.split(`
95
- `).map(e=>{let n=xi.exec(e);return n?{rol:n[1],texto:e.slice(n[0].length)}:{rol:"",texto:e}})}function yi(t,e){let n=Ho(t),o=Ho(e);if(n.length!==o.length)return false;for(let r=0;r<n.length;r++)if(n[r].rol!==
96
- o[r].rol||!vi(n[r].texto,o[r].texto))return false;return true}function vi(t,e){if(!En(et(t),et(e)))return false;let n=tt(t),o=tt(e);if(nt(n)!==nt(o))return false;let r=l=>l.length>1&&!bi.has(l)&&!/^\d/.test(l),s=new Set(
97
- n.filter(r)),i=new Set(o.filter(r));if(s.size===0&&i.size===0)return true;let a=0;for(let l of s)i.has(l)&&a++;let c=s.size+i.size-a;return c===0?true:a/c>=.75}var Ko=class{records=[];embed;verify;similarityThreshold;acceptThreshold;ttlMs;maxRecords;now;constructor(e={}){
98
- let n=e.embed==null;this.embed=e.embed??Uo,this.verify=e.verify,this.similarityThreshold=e.similarityThreshold??(n?qo:.9),this.acceptThreshold=e.acceptThreshold??.85,this.ttlMs=e.ttlMs,this.maxRecords=
95
+ `).map(e=>{let n=yi.exec(e);return n?{rol:n[1],texto:e.slice(n[0].length)}:{rol:"",texto:e}})}function vi(t,e){let n=Ko(t),o=Ko(e);if(n.length!==o.length)return false;for(let r=0;r<n.length;r++)if(n[r].rol!==
96
+ o[r].rol||!ki(n[r].texto,o[r].texto))return false;return true}function ki(t,e){if(!Tn(et(t),et(e)))return false;let n=tt(t),o=tt(e);if(nt(n)!==nt(o))return false;let r=l=>l.length>1&&!xi.has(l)&&!/^\d/.test(l),s=new Set(
97
+ n.filter(r)),i=new Set(o.filter(r));if(s.size===0&&i.size===0)return true;let a=0;for(let l of s)i.has(l)&&a++;let c=s.size+i.size-a;return c===0?true:a/c>=.75}var Jo=class{records=[];embed;verify;similarityThreshold;acceptThreshold;ttlMs;maxRecords;now;constructor(e={}){
98
+ let n=e.embed==null;this.embed=e.embed??qo,this.verify=e.verify,this.similarityThreshold=e.similarityThreshold??(n?Ho:.9),this.acceptThreshold=e.acceptThreshold??.85,this.ttlMs=e.ttlMs,this.maxRecords=
99
99
  e.maxRecords??5e3,this.now=e.now??(()=>Date.now());}async find(e){if(this.records.length===0)return null;let n=await this.embed(e.normalizedText),o=null;for(let r of this.records){if(r.tenantId!==e.tenantId||
100
100
  r.authorizationScope!==e.authorizationScope||r.principal!==e.principal||r.knowledgeEpoch!==e.knowledgeEpoch||r.contractId!==e.contractId||r.model!==e.model||r.systemPromptHash!==e.systemPromptHash||r.
101
101
  structuredDataHash!==e.structuredDataHash||r.locale!==e.locale||r.schemaVersion!==e.schemaVersion||r.safetyPolicyVersion!==e.safetyPolicyVersion||this.ttlMs!=null&&this.now()-r.storedAtMs>this.ttlMs)continue;
102
- let s=hi(n,r.embedding);if(s<this.similarityThreshold||!yi(e.normalizedText,r.query))continue;let i=this.verify?await this.verify(e.normalizedText,r.query):s,a=Math.min(s,i);a<this.acceptThreshold||(!o||
102
+ let s=gi(n,r.embedding);if(s<this.similarityThreshold||!vi(e.normalizedText,r.query))continue;let i=this.verify?await this.verify(e.normalizedText,r.query):s,a=Math.min(s,i);a<this.acceptThreshold||(!o||
103
103
  a>o.confidence)&&(o={record:r,similarity:s,verifierScore:i,confidence:a,ageMs:this.now()-r.storedAtMs});}return o}async store(e,n){let o=await this.embed(e.normalizedText);this.records.length>=this.maxRecords&&
104
104
  this.records.shift(),this.records.push({embedding:o,query:e.normalizedText,answer:n,tenantId:e.tenantId,authorizationScope:e.authorizationScope,principal:e.principal,knowledgeEpoch:e.knowledgeEpoch,contractId:e.
105
105
  contractId,model:e.model,systemPromptHash:e.systemPromptHash,structuredDataHash:e.structuredDataHash,locale:e.locale,schemaVersion:e.schemaVersion,safetyPolicyVersion:e.safetyPolicyVersion,storedAtMs:this.
106
- now()});}invalidateEpoch(e){let n=0;for(let o=this.records.length-1;o>=0;o--)this.records[o].knowledgeEpoch===e&&(this.records.splice(o,1),n++);return n}get size(){return this.records.length}};var Tn=class{resolvers=[];register(e){return this.resolvers.push(e),this}try(e){for(let n of this.resolvers)try{let o=n.try(e);if(o)return o}catch{}return null}get size(){return this.resolvers.length}},
107
- ki={name:"arithmetic",try(t){let n=(t.normalizedText.match(/(?:what\s+is|calculate|compute|how\s+much\s+is|cu[aá]nto\s+es)\s+([0-9+\-*/%.()\s]+)\??$/i)?.[1]??wi(t.normalizedText))?.trim();if(!n)return null;
108
- let o=Ei(n);return o===null||!Number.isFinite(o)?null:{text:Si(o),data:{value:o},resolver:"arithmetic"}}};function wi(t){return /^[0-9+\-*/%.()\s]+$/.test(t.trim())&&/[+\-*/%]/.test(t)?t.trim():null}function Si(t){
106
+ now()});}invalidateEpoch(e){let n=0;for(let o=this.records.length-1;o>=0;o--)this.records[o].knowledgeEpoch===e&&(this.records.splice(o,1),n++);return n}get size(){return this.records.length}};var En=class{resolvers=[];register(e){return this.resolvers.push(e),this}try(e){for(let n of this.resolvers)try{let o=n.try(e);if(o)return o}catch{}return null}get size(){return this.resolvers.length}},
107
+ wi={name:"arithmetic",try(t){let n=(t.normalizedText.match(/(?:what\s+is|calculate|compute|how\s+much\s+is|cu[aá]nto\s+es)\s+([0-9+\-*/%.()\s]+)\??$/i)?.[1]??Si(t.normalizedText))?.trim();if(!n)return null;
108
+ let o=Ei(n);return o===null||!Number.isFinite(o)?null:{text:Ti(o),data:{value:o},resolver:"arithmetic"}}};function Si(t){return /^[0-9+\-*/%.()\s]+$/.test(t.trim())&&/[+\-*/%]/.test(t)?t.trim():null}function Ti(t){
109
109
  return Number.isInteger(t)?String(t):String(Math.round(t*1e9)/1e9)}function Ei(t){let e=t.match(/\d+\.?\d*|[+\-*/%()]/g);if(!e||e.join("")!==t.replace(/\s+/g,""))return null;let n=[],o=[],r={"+":1,"-":1,
110
110
  "*":2,"/":2,"%":2},s=a=>{let c=n.pop(),l=n.pop();if(l===void 0||c===void 0)return false;switch(a){case "+":return n.push(l+c),true;case "-":return n.push(l-c),true;case "*":return n.push(l*c),true;case "/":return c===
111
111
  0?false:(n.push(l/c),true);case "%":return c===0?false:(n.push(l%c),true);default:return false}},i=true;for(let a of e)if(/^\d/.test(a))n.push(Number(a)),i=false;else if(a==="(")o.push(a),i=true;else if(a===")"){for(;o.length&&
112
112
  o[o.length-1]!=="(";)if(!s(o.pop()))return null;if(o.pop()!=="(")return null;i=false;}else {if(i)return null;for(;o.length&&o[o.length-1]!=="("&&r[o[o.length-1]]>=r[a];)if(!s(o.pop()))return null;o.push(a),
113
- i=true;}for(;o.length;){let a=o.pop();if(a==="("||!s(a))return null}return n.length===1?n[0]:null}function Jo(){return new Tn().register(ki)}var Ti=/\b(compare|versus|\bvs\b|difference between|both|and then|after that|which is (?:better|cheaper|faster)|compar[ae]|diferencia entre)\b/i,Wo=/\b(who|what|when|where|which|how many|how much|define|definition|qui[eé]n|qu[eé]|cu[aá]ndo|d[oó]nde|cu[aá]nto)\b/i,
114
- Ri=/\b(summarize|rewrite|translate|classify|extract|reformat|fix|convert|the following|below|above|this text|resume|reescribe|traduce|clasifica)\b/i,wt=class{classifier;maxRounds;constructor(e={}){this.
113
+ i=true;}for(;o.length;){let a=o.pop();if(a==="("||!s(a))return null}return n.length===1?n[0]:null}function Wo(){return new En().register(wi)}var Ri=/\b(compare|versus|\bvs\b|difference between|both|and then|after that|which is (?:better|cheaper|faster)|compar[ae]|diferencia entre)\b/i,Go=/\b(who|what|when|where|which|how many|how much|define|definition|qui[eé]n|qu[eé]|cu[aá]ndo|d[oó]nde|cu[aá]nto)\b/i,
114
+ Ci=/\b(summarize|rewrite|translate|classify|extract|reformat|fix|convert|the following|below|above|this text|resume|reescribe|traduce|clasifica)\b/i,wt=class{classifier;maxRounds;constructor(e={}){this.
115
115
  classifier=e.classifier,this.maxRounds=e.maxRounds??2;}classify(e){let n=e.original.retrieval?.mode,o=e.normalizedText;if((e.original.tools??[]).some(i=>i.risk==="write"||i.risk==="destructive")&&/\b(create|update|delete|send|pay|book|cancel|crea|actualiza|elimina|env[ií]a|paga)\b/i.
116
- test(o))return me("TOOL_ACTION",.9,"imperative + write tool available",0);if(n==="off")return me("NO_RETRIEVAL",1,"retrieval disabled by caller",0);if(Ri.test(o)&&!Wo.test(o))return me("NO_RETRIEVAL",
117
- .8,"self-contained transformation",0);let s=this.classifier?.classify(o);return s&&s.confidence>=.75?me(s.executionClass,s.confidence,"local classifier",Ci(s.executionClass,this.maxRounds)):n==="singl\
118
- e"?me("SINGLE_RETRIEVAL",.7,"caller hint: single",1):n==="multi"?me("MULTI_HOP_RETRIEVAL",.7,"caller hint: multi",Math.min(this.maxRounds,2)):Ti.test(o)?me("MULTI_HOP_RETRIEVAL",.7,"comparison/compoun\
119
- d question",Math.min(this.maxRounds,2)):Wo.test(o)?me("SINGLE_RETRIEVAL",.65,"single factual lookup",1):me("NO_RETRIEVAL",.5,"no retrieval signal (conservative default)",0)}};function Ci(t,e){return t===
120
- "SINGLE_RETRIEVAL"?1:t==="MULTI_HOP_RETRIEVAL"?Math.min(e,2):0}function me(t,e,n,o){return {executionClass:t,confidence:e,reason:n,rounds:o}}var St=class{maxTools;scoreIntentMatch;constructor(e={}){this.maxTools=e.maxTools??8,this.scoreIntentMatch=e.scoreIntentMatch??Ii;}passthrough(e){if(!e||e.length===0)return {tools:[],droppedIds:[],reason:"\
121
- no tools provided",setIsStable:true};let n=e.slice(0,this.maxTools),o=e.slice(this.maxTools).map(r=>r.id);return {tools:n,droppedIds:o,reason:`router off: caller tools passed through unfiltered (${n.length}\
122
- /${e.length}, capped at maxTools=${this.maxTools}; risk gating is the caller's responsibility while routing is off)`,setIsStable:true}}select(e,n,o){if(!n||n.length===0)return {tools:[],droppedIds:[],reason:"\
123
- no tools provided",setIsStable:true};let r=o==="TOOL_ACTION",s=n.filter(p=>r||p.risk==="read"),i=p=>r&&p.risk!=="read",a=s.filter(p=>!i(p)),c=s.filter(p=>i(p)),l=c.map(p=>({tool:p,score:this.scoreIntentMatch(
124
- e,p)})).sort((p,g)=>g.score-p.score).map(p=>p.tool),u=a.map(p=>({tool:p,score:this.scoreIntentMatch(e,p)})).filter(p=>p.score>0).sort((p,g)=>g.score-p.score).map(p=>p.tool),f=[...l.slice(0,this.maxTools),
125
- ...u.slice(0,Math.max(0,this.maxTools-c.length))].map(p=>({tool:p})).map(p=>p.tool).sort((p,g)=>p.id<g.id?-1:p.id>g.id?1:0),m=new Set(f.map(p=>p.id)),h=n.filter(p=>!m.has(p.id)).map(p=>p.id);return {tools:f,
126
- droppedIds:h,reason:`selected ${f.length}/${n.length} by intent match (writes ${r?"allowed":"blocked"})`,setIsStable:h.length===0}}};function Ii(t,e){let n=yt(t),o=0;for(let r of e.intents){let s=yt(r);
127
- s&&(n.includes(s)?o+=2:s.split(/\s+/).some(i=>i.length>3&&n.includes(i))&&(o+=1));}return o}function Oi(t){let e=new Set,n=[];for(let o of t){let r=o.hash??Ai(o.text);e.has(r)||(e.add(r),n.push(o));}return n}function _i(t,e={maxDocuments:5}){let n=e.minDocuments??1,o=[...t].sort((i,a)=>(a.score??
116
+ test(o))return me("TOOL_ACTION",.9,"imperative + write tool available",0);if(n==="off")return me("NO_RETRIEVAL",1,"retrieval disabled by caller",0);if(Ci.test(o)&&!Go.test(o))return me("NO_RETRIEVAL",
117
+ .8,"self-contained transformation",0);let s=this.classifier?.classify(o);return s&&s.confidence>=.75?me(s.executionClass,s.confidence,"local classifier",Ii(s.executionClass,this.maxRounds)):n==="singl\
118
+ e"?me("SINGLE_RETRIEVAL",.7,"caller hint: single",1):n==="multi"?me("MULTI_HOP_RETRIEVAL",.7,"caller hint: multi",Math.min(this.maxRounds,2)):Ri.test(o)?me("MULTI_HOP_RETRIEVAL",.7,"comparison/compoun\
119
+ d question",Math.min(this.maxRounds,2)):Go.test(o)?me("SINGLE_RETRIEVAL",.65,"single factual lookup",1):me("NO_RETRIEVAL",.5,"no retrieval signal (conservative default)",0)}};function Ii(t,e){return t===
120
+ "SINGLE_RETRIEVAL"?1:t==="MULTI_HOP_RETRIEVAL"?Math.min(e,2):0}function me(t,e,n,o){return {executionClass:t,confidence:e,reason:n,rounds:o}}var Rn=class{constructor(e=512){this.cap=e;}cap;map=new Map;read(e){return this.map.get(e)}record(e,n,o){this.map.size>=this.cap&&!this.map.has(e)&&this.map.clear(),this.map.set(e,{ids:n,turns:o});}};function Oi(t){
121
+ return !t.some(e=>Array.isArray(e.intents)&&e.intents.length>0)&&!t.some(e=>typeof e.risk=="string")}var St=class{maxTools;scoreIntentMatch;learningTurns;freezer;constructor(e={}){this.maxTools=e.maxTools??
122
+ 8,this.scoreIntentMatch=e.scoreIntentMatch??_i,this.learningTurns=e.learningTurns??16,this.freezer=e.freezer??new Rn;}passthrough(e){if(!e||e.length===0)return {tools:[],droppedIds:[],reason:"no tools p\
123
+ rovided",setIsStable:true};let n=e.slice(0,this.maxTools),o=e.slice(this.maxTools).map(r=>r.id);return {tools:n,droppedIds:o,reason:`router off: caller tools passed through unfiltered (${n.length}/${e.length}\
124
+ , capped at maxTools=${this.maxTools}; risk gating is the caller's responsibility while routing is off)`,setIsStable:true}}select(e,n,o,r){if(!n||n.length===0)return {tools:[],droppedIds:[],reason:"no to\
125
+ ols provided",setIsStable:true};if(Oi(n)){let p=this.passthrough(n);return {...p,reason:`catalogue declares no \`intents\` and no \`risk\`: nothing to select on, passed through (${p.tools.length}/${n.length}\
126
+ , capped at maxTools=${this.maxTools}). Declare ToolDescriptor.intents/risk to enable pruning`}}let s=o==="TOOL_ACTION",i=n.filter(p=>s||p.risk==="read"),a=p=>s&&p.risk!=="read",c=i.filter(p=>!a(p)),l=i.
127
+ filter(p=>a(p)),u=l.map(p=>({tool:p,score:this.scoreIntentMatch(e,p)})).sort((p,x)=>x.score-p.score).map(p=>p.tool),d=c.map(p=>({tool:p,score:this.scoreIntentMatch(e,p)})).filter(p=>p.score>0).sort((p,x)=>x.
128
+ score-p.score).map(p=>p.tool),f=[...u.slice(0,this.maxTools),...d.slice(0,Math.max(0,this.maxTools-l.length))].map(p=>({tool:p})).map(p=>p.tool).sort((p,x)=>p.id<x.id?-1:p.id>x.id?1:0);if(r!==void 0){
129
+ let p=this.freezer.read(r),x=(p?.turns??0)+1;if(p&&x>this.learningTurns){let y=new Set(p.ids),T=n.filter(R=>y.has(R.id));this.freezer.record(r,p.ids,x);let E=new Set(T.map(R=>R.id));return {tools:T,droppedIds:n.
130
+ filter(R=>!E.has(R.id)).map(R=>R.id),reason:`frozen tool set after ${this.learningTurns} turns (${T.length}/${n.length}): it no longer depends on this request's text, so the prefix cache survives`,setIsStable:true}}
131
+ let b=[...new Set([...p?.ids??[],...f.map(y=>y.id)])].sort().slice(0,this.maxTools);this.freezer.record(r,b,x);}let h=new Set(f.map(p=>p.id)),g=n.filter(p=>!h.has(p.id)).map(p=>p.id);return {tools:f,droppedIds:g,
132
+ reason:`selected ${f.length}/${n.length} by intent match (writes ${s?"allowed":"blocked"})`,setIsStable:g.length===0}}};function _i(t,e){let n=yt(t),o=0;for(let r of Array.isArray(e.intents)?e.intents:
133
+ []){let s=yt(r);s&&(n.includes(s)?o+=2:s.split(/\s+/).some(i=>i.length>3&&n.includes(i))&&(o+=1));}return o}function Ai(t){let e=new Set,n=[];for(let o of t){let r=o.hash??Pi(o.text);e.has(r)||(e.add(r),n.push(o));}return n}function Di(t,e={maxDocuments:5}){let n=e.minDocuments??1,o=[...t].sort((i,a)=>(a.score??
128
134
  0)-(i.score??0));if(o.length<=n)return o;let r=o[0]?.score??0;if(r<=0)return o.slice(0,e.maxDocuments);let s=[];for(let i of o){let a=(i.score??0)/r;if(s.length<n||a>=.4&&s.length<e.maxDocuments)s.push(
129
- i);else break}return s}async function Go(t,e){if(t.execution==="NO_RETRIEVAL"||t.execution==="TOOL_ACTION"||t.execution==="NON_CACHEABLE"||!e.retriever)return {docs:[],rounds:0,retrievedCount:0,keptCount:0};
130
- let n=t.execution==="MULTI_HOP_RETRIEVAL"?Math.min(t.maxRounds,2):1,o=[];for(let i=0;i<n;i++){let a=await e.retriever.retrieve(t.query,t.maxDocuments*2);o.push(...a);}let r=o.length;o=Oi(o),e.reranker&&
131
- (o=await e.reranker.rerank(t.query,o));let s=_i(o,{maxDocuments:t.maxDocuments});return {docs:s,rounds:n,retrievedCount:r,keptCount:s.length}}function Ai(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function Jl(){return {goals:[],confirmedFacts:{},userPreferences:{},decisions:[],openItems:[],evidenceRefs:[]}}function Wl(t,e){let n={goals:[...t.goals],confirmedFacts:{...t.confirmedFacts},userPreferences:{
132
- ...t.userPreferences},decisions:[...t.decisions],openItems:[...t.openItems],evidenceRefs:[...t.evidenceRefs]};for(let[o,r]of Object.entries(e.set??{}))o==="userPreferences"&&Mi(r)?Object.assign(n.userPreferences,
133
- r):n.confirmedFacts[o]=r;for(let[o,r]of Object.entries(e.append??{})){let s=Pi(n,o);s?s.push(...r.map(String)):n.confirmedFacts[o]=r;}for(let o of e.remove??[])delete n.confirmedFacts[o],delete n.userPreferences[o],
134
- Li(n,o);return n}function Gl(t){let e=t.rawTurns??3,n=[],o=Di(t.state);o&&n.push({role:"system",content:`Conversation state:
135
- ${o}`});let r=t.history.slice(-e);return n.push(...r,t.current),n}function Di(t){let e=[];return t.goals.length&&e.push(`goals: ${t.goals.join("; ")}`),Object.keys(t.confirmedFacts).length&&e.push(`fa\
135
+ i);else break}return s}async function Yo(t,e){if(t.execution==="NO_RETRIEVAL"||t.execution==="TOOL_ACTION"||t.execution==="NON_CACHEABLE"||!e.retriever)return {docs:[],rounds:0,retrievedCount:0,keptCount:0};
136
+ let n=t.execution==="MULTI_HOP_RETRIEVAL"?Math.min(t.maxRounds,2):1,o=[];for(let i=0;i<n;i++){let a=await e.retriever.retrieve(t.query,t.maxDocuments*2);o.push(...a);}let r=o.length;o=Ai(o),e.reranker&&
137
+ (o=await e.reranker.rerank(t.query,o));let s=Di(o,{maxDocuments:t.maxDocuments});return {docs:s,rounds:n,retrievedCount:r,keptCount:s.length}}function Pi(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function Gl(){return {goals:[],confirmedFacts:{},userPreferences:{},decisions:[],openItems:[],evidenceRefs:[]}}function Yl(t,e){let n={goals:[...t.goals],confirmedFacts:{...t.confirmedFacts},userPreferences:{
138
+ ...t.userPreferences},decisions:[...t.decisions],openItems:[...t.openItems],evidenceRefs:[...t.evidenceRefs]};for(let[o,r]of Object.entries(e.set??{}))o==="userPreferences"&&Ni(r)?Object.assign(n.userPreferences,
139
+ r):n.confirmedFacts[o]=r;for(let[o,r]of Object.entries(e.append??{})){let s=Mi(n,o);s?s.push(...r.map(String)):n.confirmedFacts[o]=r;}for(let o of e.remove??[])delete n.confirmedFacts[o],delete n.userPreferences[o],
140
+ Bi(n,o);return n}function Zl(t){let e=t.rawTurns??3,n=[],o=Li(t.state);o&&n.push({role:"system",content:`Conversation state:
141
+ ${o}`});let r=t.history.slice(-e);return n.push(...r,t.current),n}function Li(t){let e=[];return t.goals.length&&e.push(`goals: ${t.goals.join("; ")}`),Object.keys(t.confirmedFacts).length&&e.push(`fa\
136
142
  cts: ${JSON.stringify(t.confirmedFacts)}`),Object.keys(t.userPreferences).length&&e.push(`preferences: ${JSON.stringify(t.userPreferences)}`),t.decisions.length&&e.push(`decisions: ${t.decisions.join(
137
143
  "; ")}`),t.openItems.length&&e.push(`open: ${t.openItems.join("; ")}`),e.join(`
138
- `)}function Pi(t,e){switch(e){case "goals":return t.goals;case "decisions":return t.decisions;case "openItems":return t.openItems;case "evidenceRefs":return t.evidenceRefs;default:return null}}function Li(t,e){
139
- for(let n of ["goals","decisions","openItems","evidenceRefs"]){let o=t[n].indexOf(e);o>=0&&t[n].splice(o,1);}}function Mi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Yo={format:"json-compact",supports(){return true},encode(t){return JSON.stringify(t)},instruction(){return ""}};function Zo(t,e={}){let n=e.delimiter??",",o=e.indent??" ",s=t.split(`
140
- `).filter(c=>c.trim().length>0).map(c=>({indent:Bi(c,o),content:c.slice(Xo(c,o))}));if(s.length===0)return {};let i=s[0];if(i.indent===0){let c=i.content.match(/^\[(\d+)\]\{(.*)\}:\s*$/);if(c){let u=$e(
141
- c[2],n),d=Number(c[1]),f=[];for(let m=0,h=1;m<d&&h<s.length;m++,h++){let p=s[h];if(p.indent!==1)break;let g=$e(p.content,n),x={};u.forEach((b,y)=>{x[b]=ot(g[y]??"null");}),f.push(x);}return f}let l=i.content.
142
- match(/^\[(\d+)\]:\s*(.*)$/);if(l){let u=l[2];return Number(l[1])===0||u.trim()===""?[]:$e(u,n).map(ot)}}let[a]=Qo(s,0,0,n);return a}function Xo(t,e){let n=0;for(;t.startsWith(e,n);)n+=e.length;return n}
143
- function Bi(t,e){return Xo(t,e)/e.length}function Qo(t,e,n,o){let r={},s=e;for(;s<t.length;){let i=t[s];if(i.indent<n)break;if(i.indent>n){s++;continue}let a=Ni(i.content,o);if(!a){s++;continue}let{key:c,
144
+ `)}function Mi(t,e){switch(e){case "goals":return t.goals;case "decisions":return t.decisions;case "openItems":return t.openItems;case "evidenceRefs":return t.evidenceRefs;default:return null}}function Bi(t,e){
145
+ for(let n of ["goals","decisions","openItems","evidenceRefs"]){let o=t[n].indexOf(e);o>=0&&t[n].splice(o,1);}}function Ni(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Zo={format:"json-compact",supports(){return true},encode(t){return JSON.stringify(t)},instruction(){return ""}};function Xo(t,e={}){let n=e.delimiter??",",o=e.indent??" ",s=t.split(`
146
+ `).filter(c=>c.trim().length>0).map(c=>({indent:ji(c,o),content:c.slice(Qo(c,o))}));if(s.length===0)return {};let i=s[0];if(i.indent===0){let c=i.content.match(/^\[(\d+)\]\{(.*)\}:\s*$/);if(c){let u=$e(
147
+ c[2],n),d=Number(c[1]),m=[];for(let f=0,h=1;f<d&&h<s.length;f++,h++){let g=s[h];if(g.indent!==1)break;let p=$e(g.content,n),x={};u.forEach((b,y)=>{x[b]=ot(p[y]??"null");}),m.push(x);}return m}let l=i.content.
148
+ match(/^\[(\d+)\]:\s*(.*)$/);if(l){let u=l[2];return Number(l[1])===0||u.trim()===""?[]:$e(u,n).map(ot)}}let[a]=er(s,0,0,n);return a}function Qo(t,e){let n=0;for(;t.startsWith(e,n);)n+=e.length;return n}
149
+ function ji(t,e){return Qo(t,e)/e.length}function er(t,e,n,o){let r={},s=e;for(;s<t.length;){let i=t[s];if(i.indent<n)break;if(i.indent>n){s++;continue}let a=$i(i.content,o);if(!a){s++;continue}let{key:c,
144
150
  kind:l}=a;if(l.type==="scalar")r[c]=l.value,s++;else if(l.type==="inlineArray")r[c]=l.values,s++;else if(l.type==="emptyArray")r[c]=[],s++;else if(l.type==="table"){let u=[];s++;for(let d=0;d<l.count&&
145
- s<t.length;d++,s++){let f=t[s];if(f.indent!==n+1)break;let m=$e(f.content,o),h={};l.columns.forEach((p,g)=>{h[p]=ot(m[g]??"null");}),u.push(h);}r[c]=u;}else {let[u,d]=Qo(t,s+1,n+1,o);r[c]=u,s=d;}}return [r,
146
- s]}function Ni(t,e){let n=t.match(/^([^[:]+)\[(\d+)\]\{(.*)\}:\s*$/);if(n)return {key:Et(n[1]),kind:{type:"table",count:Number(n[2]),columns:$e(n[3],e)}};let o=t.match(/^([^[:]+)\[(\d+)\]:\s*(.*)$/);if(o){
147
- let s=Number(o[2]),i=o[3];return s===0||i.trim()===""?{key:Et(o[1]),kind:{type:"emptyArray"}}:{key:Et(o[1]),kind:{type:"inlineArray",values:$e(i,e).map(ot)}}}let r=t.match(/^([^:]+):\s*(.*)$/);if(r){let s=Et(
151
+ s<t.length;d++,s++){let m=t[s];if(m.indent!==n+1)break;let f=$e(m.content,o),h={};l.columns.forEach((g,p)=>{h[g]=ot(f[p]??"null");}),u.push(h);}r[c]=u;}else {let[u,d]=er(t,s+1,n+1,o);r[c]=u,s=d;}}return [r,
152
+ s]}function $i(t,e){let n=t.match(/^([^[:]+)\[(\d+)\]\{(.*)\}:\s*$/);if(n)return {key:Tt(n[1]),kind:{type:"table",count:Number(n[2]),columns:$e(n[3],e)}};let o=t.match(/^([^[:]+)\[(\d+)\]:\s*(.*)$/);if(o){
153
+ let s=Number(o[2]),i=o[3];return s===0||i.trim()===""?{key:Tt(o[1]),kind:{type:"emptyArray"}}:{key:Tt(o[1]),kind:{type:"inlineArray",values:$e(i,e).map(ot)}}}let r=t.match(/^([^:]+):\s*(.*)$/);if(r){let s=Tt(
148
154
  r[1]),i=r[2];return i===""?{key:s,kind:{type:"object"}}:{key:s,kind:{type:"scalar",value:ot(i)}}}return null}function $e(t,e){let n=[],o="",r=false;for(let s=0;s<t.length;s++){let i=t[s];r?i==='"'?t[s+1]===
149
155
  '"'?(o+='"',s++):r=false:o+=i:i==='"'?r=true:i===e?(n.push(o),o=""):o+=i;}return n.push(o),n.map(s=>s.trim())}function ot(t){return t.startsWith('"')&&t.endsWith('"')&&t.length>=2?t.slice(1,-1).replace(/""/g,
150
- '"'):t==="null"?null:t==="true"?true:t==="false"?false:/^-?\d+$/.test(t)||/^-?\d*\.\d+$/.test(t)?Number(t):t}function Et(t){let e=t.trim();return e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1).replace(/""/g,
151
- '"'):e}function ji(t,e={}){let n=e.delimiter??",",o=e.indent??" ",r=[];return In(null,t,0,r,n,o),r.join(`
152
- `)}function In(t,e,n,o,r,s){let i=s.repeat(n),a=t===null?"":`${Fi(t)}`;if(Array.isArray(e)){$i(a,e,n,o,r,s);return}if(Cn(e)){t!==null&&o.push(`${i}${a}:`);let c=t===null?n:n+1;for(let[l,u]of Object.entries(
153
- e))In(l,u,c,o,r,s);return}o.push(`${i}${a}: ${Tt(e,r)}`);}function $i(t,e,n,o,r,s){let i=s.repeat(n),a=t===""?"":t;if(e.length===0){o.push(`${i}${a}[0]:`);return}if(e.every(Rn)){let d=e.map(f=>Tt(f,r)).
154
- join(r);o.push(`${i}${a}[${e.length}]: ${d}`);return}let c=Rt(e);if(c){o.push(`${i}${a}[${e.length}]{${c.join(r)}}:`);let d=s.repeat(n+1);for(let f of e){let m=c.map(h=>Tt(f[h],r)).join(r);o.push(`${d}${m}`);}
155
- return}o.push(`${i}${a}[${e.length}]:`);let l=n+1,u=s.repeat(l);for(let d of e)if(Rn(d))o.push(`${u}- ${Tt(d,r)}`);else {let f=[];In(null,d,0,f,r,s);let[m,...h]=f;o.push(`${u}- ${m??""}`);for(let p of h)
156
- o.push(`${u}${s}${p}`);}}function Rt(t){if(t.length===0)return null;let e=t[0];if(!Cn(e))return null;let n=Object.keys(e);if(n.length===0)return null;let o=n.slice().sort().join("\0");for(let r of t){if(!Cn(
157
- r))return null;let s=Object.keys(r);if(s.slice().sort().join("\0")!==o)return null;for(let i of s)if(!Rn(r[i]))return null}return n}function Fi(t){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:er(t)}function Tt(t,e){
156
+ '"'):t==="null"?null:t==="true"?true:t==="false"?false:/^-?\d+$/.test(t)||/^-?\d*\.\d+$/.test(t)?Number(t):t}function Tt(t){let e=t.trim();return e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1).replace(/""/g,
157
+ '"'):e}function Fi(t,e={}){let n=e.delimiter??",",o=e.indent??" ",r=[];return On(null,t,0,r,n,o),r.join(`
158
+ `)}function On(t,e,n,o,r,s){let i=s.repeat(n),a=t===null?"":`${Vi(t)}`;if(Array.isArray(e)){zi(a,e,n,o,r,s);return}if(In(e)){t!==null&&o.push(`${i}${a}:`);let c=t===null?n:n+1;for(let[l,u]of Object.entries(
159
+ e))On(l,u,c,o,r,s);return}o.push(`${i}${a}: ${Et(e,r)}`);}function zi(t,e,n,o,r,s){let i=s.repeat(n),a=t===""?"":t;if(e.length===0){o.push(`${i}${a}[0]:`);return}if(e.every(Cn)){let d=e.map(m=>Et(m,r)).
160
+ join(r);o.push(`${i}${a}[${e.length}]: ${d}`);return}let c=Rt(e);if(c){o.push(`${i}${a}[${e.length}]{${c.join(r)}}:`);let d=s.repeat(n+1);for(let m of e){let f=c.map(h=>Et(m[h],r)).join(r);o.push(`${d}${f}`);}
161
+ return}o.push(`${i}${a}[${e.length}]:`);let l=n+1,u=s.repeat(l);for(let d of e)if(Cn(d))o.push(`${u}- ${Et(d,r)}`);else {let m=[];On(null,d,0,m,r,s);let[f,...h]=m;o.push(`${u}- ${f??""}`);for(let g of h)
162
+ o.push(`${u}${s}${g}`);}}function Rt(t){if(t.length===0)return null;let e=t[0];if(!In(e))return null;let n=Object.keys(e);if(n.length===0)return null;let o=n.slice().sort().join("\0");for(let r of t){if(!In(
163
+ r))return null;let s=Object.keys(r);if(s.slice().sort().join("\0")!==o)return null;for(let i of s)if(!Cn(r[i]))return null}return n}function Vi(t){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:tr(t)}function Et(t,e){
158
164
  if(t==null)return "null";if(typeof t=="number")return Number.isFinite(t)?String(t):"null";if(typeof t=="boolean")return t?"true":"false";let n=String(t);return n===""||n.includes(e)||n.includes(`
159
- `)||n.includes('"')||n!==n.trim()||/^(true|false|null)$/.test(n)||/^-?\d/.test(n)?er(n):n}function er(t){return `"${t.replace(/"/g,'""')}"`}function Rn(t){return t===null||typeof t=="string"||typeof t==
160
- "number"||typeof t=="boolean"}function Cn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var zi="Data is the compact encoder: `key[N]{c1,c2}:` declares an N-row table with columns c1,c2; ea\
161
- ch following indented line is one row of delimiter-separated values. `key[N]: a,b` is an inline list. Quoted values use CSV-style escaping.";function Vi(t={}){return {format:"compact-rows",supports(){return true},
162
- encode(e){return ji(e,t)},instruction(){return zi},decode(e){return Zo(e,t)}}}var tr=Vi();var or={format:"csv",supports(t){return Array.isArray(t)&&Rt(t)!==null},encode(t){let e=t,n=Rt(e),o=n.map(nr).join(","),r=e.map(s=>n.map(i=>nr(s[i])).join(","));return [o,...r].join(`
163
- `)},instruction(){return "Data is CSV: first line is the header row; each subsequent line is one record."}};function nr(t){if(t==null)return "";let e=String(t);return /[",\n]/.test(e)?`"${e.replace(/"/g,
164
- '""')}"`:e}var Ct=class{tokenizer;serializers;minSavingsTokens;minSavingsRatio;qualityPenalty;constructor(e){this.tokenizer=e.tokenizer,this.serializers=e.serializers??[Yo,tr,or],this.minSavingsTokens=e.minimumSavingsTokens??
165
+ `)||n.includes('"')||n!==n.trim()||/^(true|false|null)$/.test(n)||/^-?\d/.test(n)?tr(n):n}function tr(t){return `"${t.replace(/"/g,'""')}"`}function Cn(t){return t===null||typeof t=="string"||typeof t==
166
+ "number"||typeof t=="boolean"}function In(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Ui="Data is the compact encoder: `key[N]{c1,c2}:` declares an N-row table with columns c1,c2; ea\
167
+ ch following indented line is one row of delimiter-separated values. `key[N]: a,b` is an inline list. Quoted values use CSV-style escaping.";function qi(t={}){return {format:"compact-rows",supports(){return true},
168
+ encode(e){return Fi(e,t)},instruction(){return Ui},decode(e){return Xo(e,t)}}}var nr=qi();var rr={format:"csv",supports(t){return Array.isArray(t)&&Rt(t)!==null},encode(t){let e=t,n=Rt(e),o=n.map(or).join(","),r=e.map(s=>n.map(i=>or(s[i])).join(","));return [o,...r].join(`
169
+ `)},instruction(){return "Data is CSV: first line is the header row; each subsequent line is one record."}};function or(t){if(t==null)return "";let e=String(t);return /[",\n]/.test(e)?`"${e.replace(/"/g,
170
+ '""')}"`:e}var Ct=class{tokenizer;serializers;minSavingsTokens;minSavingsRatio;qualityPenalty;constructor(e){this.tokenizer=e.tokenizer,this.serializers=e.serializers??[Zo,nr,rr],this.minSavingsTokens=e.minimumSavingsTokens??
165
171
  64,this.minSavingsRatio=e.minimumSavingsRatio??.08,this.qualityPenalty=e.qualityPenalty??(()=>0);}choose(e,n){let o={model:n.model,tokenizer:n.tokenizer},r=[];for(let l of this.serializers){if(!l.supports(
166
- e))continue;let u=l.encode(e);if(l.format!=="json-compact"&&!Ui(l,u,e))continue;let d=l.instruction(e),f=this.tokenizer.count(u,o),m=d?this.tokenizer.count(d,o):0,h=this.qualityPenalty(n.model??"",l.format);
167
- r.push({format:l.format,encoded:u,instruction:d,payloadTokens:f,instructionTokens:m,penalty:h,total:f+m+h});}let s=r.find(l=>l.format==="json-compact"),i={};for(let l of r)i[l.format]=l.total;if(!s){let l=r[0];
168
- return l?rr(l,i,"json baseline unavailable"):{chosen:"json-compact",encoded:JSON.stringify(e),instruction:"",candidateTokens:i,instructionOverheadTokens:0,reason:"no serializer supported payload; defa\
172
+ e))continue;let u=l.encode(e);if(l.format!=="json-compact"&&!Hi(l,u,e))continue;let d=l.instruction(e),m=this.tokenizer.count(u,o),f=d?this.tokenizer.count(d,o):0,h=this.qualityPenalty(n.model??"",l.format);
173
+ r.push({format:l.format,encoded:u,instruction:d,payloadTokens:m,instructionTokens:f,penalty:h,total:m+f+h});}let s=r.find(l=>l.format==="json-compact"),i={};for(let l of r)i[l.format]=l.total;if(!s){let l=r[0];
174
+ return l?sr(l,i,"json baseline unavailable"):{chosen:"json-compact",encoded:JSON.stringify(e),instruction:"",candidateTokens:i,instructionOverheadTokens:0,reason:"no serializer supported payload; defa\
169
175
  ulted to JSON"}}let a=s,c="json baseline (no challenger cleared thresholds)";for(let l of r){if(l.format==="json-compact")continue;let u=s.total-l.total,d=s.total===0?0:u/s.total;u>=this.minSavingsTokens&&
170
- d>=this.minSavingsRatio&&l.total<a.total&&(a=l,c=`${l.format} saved ${u} tokens (${(d*100).toFixed(1)}%) vs json`);}return rr(a,i,c)}};function Ui(t,e,n){if(!t.decode)return false;try{return On(t.decode(e),
171
- n)}catch{return false}}function On(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.isArray(t),o=Array.isArray(e);if(n||o){if(!n||!o||t.length!==e.
172
- length)return false;for(let i=0;i<t.length;i++)if(!On(t[i],e[i]))return false;return true}let r=Object.keys(t),s=Object.keys(e);if(r.length!==s.length)return false;for(let i of r)if(!Object.prototype.hasOwnProperty.
173
- call(e,i)||!On(t[i],e[i]))return false;return true}function rr(t,e,n){return {chosen:t.format,encoded:t.encoded,instruction:t.instruction,candidateTokens:e,instructionOverheadTokens:t.instructionTokens,reason:n}}function ae(t,e,n="$"){let o=[];return _n(t,e,n,o),{valid:o.length===0,errors:o}}function qi(t){if(Array.isArray(t))return "array";if(t===null)return "null";switch(typeof t){case "object":return "object";case "\
174
- string":return "string";case "number":return "number";case "boolean":return "boolean";default:return}}function _n(t,e,n,o){switch(e.enum&&!e.enum.some(s=>Gi(s,t))&&o.push({path:n,message:"value not in enum"}),
175
- e.type??qi(t)){case "object":Hi(t,e,n,o);break;case "array":Ki(t,e,n,o);break;case "string":Ji(t,e,n,o);break;case "number":case "integer":Wi(t,e,n,o);break;case "boolean":typeof t!="boolean"&&o.push({path:n,
176
- message:"expected boolean"});break;case "null":t!==null&&o.push({path:n,message:"expected null"});break;}}function Hi(t,e,n,o){if(typeof t!="object"||t===null||Array.isArray(t)){o.push({path:n,
176
+ d>=this.minSavingsRatio&&l.total<a.total&&(a=l,c=`${l.format} saved ${u} tokens (${(d*100).toFixed(1)}%) vs json`);}return sr(a,i,c)}};function Hi(t,e,n){if(!t.decode)return false;try{return _n(t.decode(e),
177
+ n)}catch{return false}}function _n(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.isArray(t),o=Array.isArray(e);if(n||o){if(!n||!o||t.length!==e.
178
+ length)return false;for(let i=0;i<t.length;i++)if(!_n(t[i],e[i]))return false;return true}let r=Object.keys(t),s=Object.keys(e);if(r.length!==s.length)return false;for(let i of r)if(!Object.prototype.hasOwnProperty.
179
+ call(e,i)||!_n(t[i],e[i]))return false;return true}function sr(t,e,n){return {chosen:t.format,encoded:t.encoded,instruction:t.instruction,candidateTokens:e,instructionOverheadTokens:t.instructionTokens,reason:n}}function ae(t,e,n="$"){let o=[];return An(t,e,n,o),{valid:o.length===0,errors:o}}function Ki(t){if(Array.isArray(t))return "array";if(t===null)return "null";switch(typeof t){case "object":return "object";case "\
180
+ string":return "string";case "number":return "number";case "boolean":return "boolean";default:return}}function An(t,e,n,o){switch(e.enum&&!e.enum.some(s=>Zi(s,t))&&o.push({path:n,message:"value not in enum"}),
181
+ e.type??Ki(t)){case "object":Ji(t,e,n,o);break;case "array":Wi(t,e,n,o);break;case "string":Gi(t,e,n,o);break;case "number":case "integer":Yi(t,e,n,o);break;case "boolean":typeof t!="boolean"&&o.push({path:n,
182
+ message:"expected boolean"});break;case "null":t!==null&&o.push({path:n,message:"expected null"});break;}}function Ji(t,e,n,o){if(typeof t!="object"||t===null||Array.isArray(t)){o.push({path:n,
177
183
  message:"expected object"});return}let r=t;for(let s of e.required??[])s in r||o.push({path:`${n}.${s}`,message:"missing required property"});if(e.additionalProperties===false&&e.properties){let s=new Set(
178
184
  Object.keys(e.properties));for(let i of Object.keys(r))s.has(i)||o.push({path:`${n}.${i}`,message:"additional property not allowed"});}if(e.properties)for(let[s,i]of Object.entries(e.properties))s in r&&
179
- _n(r[s],i,`${n}.${s}`,o);}function Ki(t,e,n,o){if(!Array.isArray(t)){o.push({path:n,message:"expected array"});return}e.maxItems!=null&&t.length>e.maxItems&&o.push({path:n,message:`array exceeds maxIte\
180
- ms ${e.maxItems}`}),e.minItems!=null&&t.length<e.minItems&&o.push({path:n,message:`array below minItems ${e.minItems}`}),e.items&&t.forEach((r,s)=>_n(r,e.items,`${n}[${s}]`,o));}function Ji(t,e,n,o){if(typeof t!=
185
+ An(r[s],i,`${n}.${s}`,o);}function Wi(t,e,n,o){if(!Array.isArray(t)){o.push({path:n,message:"expected array"});return}e.maxItems!=null&&t.length>e.maxItems&&o.push({path:n,message:`array exceeds maxIte\
186
+ ms ${e.maxItems}`}),e.minItems!=null&&t.length<e.minItems&&o.push({path:n,message:`array below minItems ${e.minItems}`}),e.items&&t.forEach((r,s)=>An(r,e.items,`${n}[${s}]`,o));}function Gi(t,e,n,o){if(typeof t!=
181
187
  "string"){o.push({path:n,message:"expected string"});return}if(e.maxLength!=null&&t.length>e.maxLength&&o.push({path:n,message:`string exceeds maxLength ${e.maxLength}`}),e.minLength!=null&&t.length<e.
182
188
  minLength&&o.push({path:n,message:`string below minLength ${e.minLength}`}),e.pattern){let r=null;try{r=new RegExp(e.pattern);}catch{o.push({path:n,message:`schema pattern is not a valid regular expres\
183
- sion: ${e.pattern}`});}r&&!r.test(t)&&o.push({path:n,message:"string does not match pattern"});}}function Wi(t,e,n,o){if(typeof t!="number"||Number.isNaN(t)){o.push({path:n,message:"expected number"});return}
189
+ sion: ${e.pattern}`});}r&&!r.test(t)&&o.push({path:n,message:"string does not match pattern"});}}function Yi(t,e,n,o){if(typeof t!="number"||Number.isNaN(t)){o.push({path:n,message:"expected number"});return}
184
190
  e.type==="integer"&&!Number.isInteger(t)&&o.push({path:n,message:"expected integer"}),e.maximum!=null&&t>e.maximum&&o.push({path:n,message:`number exceeds maximum ${e.maximum}`}),e.minimum!=null&&t<e.
185
- minimum&&o.push({path:n,message:`number below minimum ${e.minimum}`});}function Gi(t,e){return t===e?true:typeof t!=typeof e?false:t&&e&&typeof t=="object"?JSON.stringify(t)===JSON.stringify(e):false}var It=class{contracts=new Map;register(e){return this.contracts.set(e.contractId,e),this}resolve(e){return this.contracts.get(e)}has(e){return this.contracts.has(e)}static lint(e,n="$"){let o=[];return An(
186
- e,n,o),o}};function An(t,e,n){if(t.type==="object"){t.additionalProperties!==false&&n.push(`${e}: object should set additionalProperties:false`);for(let[o,r]of Object.entries(t.properties??{}))An(r,`${e}\
187
- .${o}`,n);}t.type==="array"&&(t.maxItems==null&&n.push(`${e}: array should set maxItems to bound output`),t.items&&An(t.items,`${e}[]`,n)),t.type==="string"&&t.maxLength==null&&!t.enum&&n.push(`${e}: s\
188
- tring should set maxLength or use an enum`);}function sr(t,e,n){for(let o of n)if(o.supports(t,e))return {backend:o.id,reason:`first supporting backend: ${o.id}`};return {backend:"none",reason:"no constrained-decoding backend available; will valid\
189
- ate + repair"}}function xu(t=()=>true){return {id:"provider-native",supports:t}}function Dn(t){let e=t.minimumContextTokens??2e3,n=t.minimumNetTokens??200;if(t.contextTokens<e)return {compress:false,reason:`context ${t.contextTokens} < ${e} min`};let o=t.projectedEliminable-t.compressorCostTokens;
190
- return o<n?{compress:false,reason:`net saving ${o} < ${n} min`}:{compress:true,reason:`net saving ${o} tokens`}}function Tu(t){return {async compress(e){let n=e.protectedSpans??[],o=e.text,r=[];n.forEach((c,l)=>{
191
+ minimum&&o.push({path:n,message:`number below minimum ${e.minimum}`});}function Zi(t,e){return t===e?true:typeof t!=typeof e?false:t&&e&&typeof t=="object"?JSON.stringify(t)===JSON.stringify(e):false}var It=class{contracts=new Map;register(e){return this.contracts.set(e.contractId,e),this}resolve(e){return this.contracts.get(e)}has(e){return this.contracts.has(e)}static lint(e,n="$"){let o=[];return Dn(
192
+ e,n,o),o}};function Dn(t,e,n){if(t.type==="object"){t.additionalProperties!==false&&n.push(`${e}: object should set additionalProperties:false`);for(let[o,r]of Object.entries(t.properties??{}))Dn(r,`${e}\
193
+ .${o}`,n);}t.type==="array"&&(t.maxItems==null&&n.push(`${e}: array should set maxItems to bound output`),t.items&&Dn(t.items,`${e}[]`,n)),t.type==="string"&&t.maxLength==null&&!t.enum&&n.push(`${e}: s\
194
+ tring should set maxLength or use an enum`);}function ir(t,e,n){for(let o of n)if(o.supports(t,e))return {backend:o.id,reason:`first supporting backend: ${o.id}`};return {backend:"none",reason:"no constrained-decoding backend available; will valid\
195
+ ate + repair"}}function vu(t=()=>true){return {id:"provider-native",supports:t}}function Pn(t){let e=t.minimumContextTokens??2e3,n=t.minimumNetTokens??200;if(t.contextTokens<e)return {compress:false,reason:`context ${t.contextTokens} < ${e} min`};let o=t.projectedEliminable-t.compressorCostTokens;
196
+ return o<n?{compress:false,reason:`net saving ${o} < ${n} min`}:{compress:true,reason:`net saving ${o} tokens`}}function Cu(t){return {async compress(e){let n=e.protectedSpans??[],o=e.text,r=[];n.forEach((c,l)=>{
191
197
  let u=`\0PROTECT_${l}\0`;r.push({token:u,span:c}),o=o.split(c.text).join(u);});let s=await t.compress({text:o,...e.targetRatio!=null?{targetRatio:e.targetRatio}:{}}),i=s.compressed,a=true;for(let{token:c,
192
198
  span:l}of r){if(!i.includes(c)){a=false;break}i=i.split(c).join(l.text);}return a?{...s,compressed:i,protectedSpans:n.length,fidelityPassed:true}:{compressed:e.text,originalTokens:s.originalTokens,compressedTokens:s.
193
- originalTokens,protectedSpans:n.length,fidelityPassed:false,skipped:true,reason:"protected span lost during compression; fell back to original"}}}}var Ru={async compress(t){return {compressed:t.text,originalTokens:0,
194
- compressedTokens:0,protectedSpans:(t.protectedSpans??[]).length,fidelityPassed:true,skipped:true,reason:"no compressor configured (noop)"}}};function ir(t,e){let n=i=>i.toLowerCase().replace(/[.,;:!¡?¿()[\]{}"«»…]/g,
199
+ originalTokens,protectedSpans:n.length,fidelityPassed:false,skipped:true,reason:"protected span lost during compression; fell back to original"}}}}var Iu={async compress(t){return {compressed:t.text,originalTokens:0,
200
+ compressedTokens:0,protectedSpans:(t.protectedSpans??[]).length,fidelityPassed:true,skipped:true,reason:"no compressor configured (noop)"}}};function ar(t,e){let n=i=>i.toLowerCase().replace(/[.,;:!¡?¿()[\]{}"«»…]/g,
195
201
  " ").replace(/\s+/g," ").trim(),r=n((i=>{let a=new Set,c=[];for(let l of i.split(`
196
202
  `)){let u=l.trim();u&&a.has(u)||(u&&a.add(u),c.push(l));}return c.join(`
197
- `)})(t)),s=n(e);return !(!En(et(r),et(s))||nt(tt(r))!==nt(tt(s)))}var ar=new WeakSet;function cr(t){ar.add(t);}var Pn=class{id="mock";options;constructor(e={}){this.options=e,cr(this);}async generate(e){let n=e.messages.map(a=>a.content).join(`
203
+ `)})(t)),s=n(e);return !(!Tn(et(r),et(s))||nt(tt(r))!==nt(tt(s)))}var cr=new WeakSet;function lr(t){cr.add(t);}var Ln=class{id="mock";options;constructor(e={}){this.options=e,lr(this);}async generate(e){let n=e.messages.map(a=>a.content).join(`
198
204
  `),o=Ne.count(n);if(e.tools&&e.tools.length>0){let a=JSON.stringify(e.tools.map(c=>({name:c.id,description:c.description,parameters:c.parameters??{}})));o+=Ne.count(a);}let r,s=false;if(e.schema){let a=this.
199
205
  options.data??Ot(e.schema);r=JSON.stringify(a),s=true;}else r=this.options.answer??`mock-response(${e.model})`;let i=Math.min(e.maxOutputTokens??Number.MAX_SAFE_INTEGER,Ne.count(r));return {text:r,usage:{
200
206
  inputTokens:o,outputTokens:i,...this.options.cachedInputTokens!=null?{cachedInputTokens:this.options.cachedInputTokens}:{}},structuredNatively:s}}};function Ot(t){if(t.enum&&t.enum.length>0)return t.enum[0];
201
207
  switch(t.type){case "object":{let e={};for(let n of t.required??[]){let o=t.properties?.[n];e[n]=o?Ot(o):null;}for(let[n,o]of Object.entries(t.properties??{}))n in e||(e[n]=Ot(o));return e}case "array":return t.
202
- items?[Ot(t.items)]:[];case "string":return "mock";case "number":case "integer":return t.minimum??0;case "boolean":return true;case "null":return null;default:return null}}function Pu(t){return new Pn(t)}var Yi={flex:.5,default:1,auto:1,priority:1,fast:1,scale:1,standard:1,batch:.5},_t="flex";function ur(t){if(t==null||t==="")return null;let e=Yi[t];return e==null?{servido:t,factor:null,conDescuento:false}:
203
- {servido:t,factor:e,conDescuento:e<1}}function dr(t,e){return !t||t.factor==null||!t.conDescuento||!Number.isFinite(e)||e<=0?null:e*(1-t.factor)}var Zi="slower and variable: OpenAI publishes no latency\
208
+ items?[Ot(t.items)]:[];case "string":return "mock";case "number":case "integer":return t.minimum??0;case "boolean":return true;case "null":return null;default:return null}}function Mu(t){return new Ln(t)}var Xi={flex:.5,default:1,auto:1,priority:1,fast:1,scale:1,standard:1,batch:.5},_t="flex";function dr(t){if(t==null||t==="")return null;let e=Xi[t];return e==null?{servido:t,factor:null,conDescuento:false}:
209
+ {servido:t,factor:e,conDescuento:e<1}}function pr(t,e){return !t||t.factor==null||!t.conDescuento||!Number.isFinite(e)||e<=0?null:e*(1-t.factor)}var Qi="slower and variable: OpenAI publishes no latency\
204
210
  commitment for the flex tier. What IS documented is the failure shape \u2014 the default SDK timeout is 10 minutes and a request that exceeds it returns 408, and when flex capacity is short the request re\
205
- turns 429 and is not charged. Do not put a deferrable request on a user-facing path.",Xi="unchanged: this provider has no cheaper synchronous processing tier, so nothing was asked for and the request \
206
- was scheduled exactly as it would have been.",pr="this provider has no cheaper synchronous processing tier, so the request was sent unchanged and nothing is credited; on this provider the deferred dis\
207
- count lives only in the asynchronous batch API, which is not a request/response call";function fr(t){return t==null||t===""?Xi:t===_t?Zi:`unknown: this layer has no published latency statement for the\
208
- "${t}" tier.`}var mr=new Set;function G(t,e){mr.has(t)||(mr.add(t),console.warn(e));}function Ae(t){if(t==null||typeof t!="object")return true;let e=t,n=e.properties;if(n&&typeof n=="object"){if(e.additionalProperties!==false)return false;let r=Object.keys(n),s=Array.isArray(e.required)?e.required.
211
+ turns 429 and is not charged. Do not put a deferrable request on a user-facing path.",ea="unchanged: this provider has no cheaper synchronous processing tier, so nothing was asked for and the request \
212
+ was scheduled exactly as it would have been.",fr="this provider has no cheaper synchronous processing tier, so the request was sent unchanged and nothing is credited; on this provider the deferred dis\
213
+ count lives only in the asynchronous batch API, which is not a request/response call";function mr(t){return t==null||t===""?ea:t===_t?Qi:`unknown: this layer has no published latency statement for the\
214
+ "${t}" tier.`}var hr=new Set;function G(t,e){hr.has(t)||(hr.add(t),console.warn(e));}function Ae(t){if(t==null||typeof t!="object")return true;let e=t,n=e.properties;if(n&&typeof n=="object"){if(e.additionalProperties!==false)return false;let r=Object.keys(n),s=Array.isArray(e.required)?e.required.
209
215
  map(String):[];if(r.some(i=>!s.includes(i)))return false;for(let i of Object.values(n))if(!Ae(i))return false}if(e.items!==void 0&&!Ae(e.items))return false;for(let r of ["anyOf","oneOf","allOf"]){let s=e[r];if(Array.
210
- isArray(s)&&s.some(i=>!Ae(i)))return false}let o=e.$defs??e.definitions;return !(o&&typeof o=="object"&&Object.values(o).some(r=>!Ae(r)))}function Qi(t){return !/response_format/i.test(t)||/invalid schema/i.
211
- test(t)?false:/invalid parameter|not supported|unsupported|unrecognized request argument|unknown parameter/i.test(t)}function ea(t){return `Respond with a single JSON object and nothing else: no prose, no\
216
+ isArray(s)&&s.some(i=>!Ae(i)))return false}let o=e.$defs??e.definitions;return !(o&&typeof o=="object"&&Object.values(o).some(r=>!Ae(r)))}function ta(t){return !/response_format/i.test(t)||/invalid schema/i.
217
+ test(t)?false:/invalid parameter|not supported|unsupported|unrecognized request argument|unknown parameter/i.test(t)}function na(t){return `Respond with a single JSON object and nothing else: no prose, no\
212
218
  explanation, no markdown code fences. The object must validate against this JSON Schema:
213
- `+JSON.stringify(t)}var hr=class{id;opts;fetchImpl;sinResponseFormat=new Set;constructor(e){this.opts=e,this.id=`openai-compatible:${e.baseUrl}`,this.fetchImpl=e.fetchImpl??fetch;}async generate(e){let n=this.
214
- opts.stripProviderPrefix?e.model.replace(/^[^/]+\//,""):e.model,o=e.schema!=null&&!this.sinResponseFormat.has(n),r=await this.enviar(n,e,o);if(!r.ok&&r.status===400&&o){let s=await gr(r);if(!Qi(s))throw new Error(
219
+ `+JSON.stringify(t)}var gr=class{id;opts;fetchImpl;sinResponseFormat=new Set;constructor(e){this.opts=e,this.id=`openai-compatible:${e.baseUrl}`,this.fetchImpl=e.fetchImpl??fetch;}async generate(e){let n=this.
220
+ opts.stripProviderPrefix?e.model.replace(/^[^/]+\//,""):e.model,o=e.schema!=null&&!this.sinResponseFormat.has(n),r=await this.enviar(n,e,o);if(!r.ok&&r.status===400&&o){let s=await br(r);if(!ta(s))throw new Error(
215
221
  `provider ${r.status}: ${s}`);this.sinResponseFormat.add(n),G(`sin-response-format:${n}`,`[bvsala] El modelo "${n}" rechaza \`response_format\` con un 400: no tiene structured outputs. Se repite la peti\
216
222
  ci\xF3n pidiendo el JSON por prompt (una sola vez: el modelo queda anotado y las siguientes van directas). El esquema sigue viajando y el layer sigue validando, pero la garant\xEDa la da el layer, no el pro\
217
223
  veedor, y el informe lo dice: \`constraints.backend: "none"\`. Para recuperar la garant\xEDa nativa, usa un modelo con structured outputs (gpt-4o o posterior).`),o=false,r=await this.enviar(n,e,false);}if(!r.
218
- ok){let s=await gr(r);throw new Error(`provider ${r.status}: ${s}`)}return this.leer(r,e,o)}async enviar(e,n,o){let r=n.messages.map(i=>i.role==="tool"?{role:"tool",content:i.content,tool_call_id:i.toolCallId??
224
+ ok){let s=await br(r);throw new Error(`provider ${r.status}: ${s}`)}return this.leer(r,e,o)}async enviar(e,n,o){let r=n.messages.map(i=>i.role==="tool"?{role:"tool",content:i.content,tool_call_id:i.toolCallId??
219
225
  i.metadata?.tool_call_id,...i.name?{name:i.name}:{}}:i.role==="assistant"&&i.toolCalls&&i.toolCalls.length>0?{role:"assistant",content:i.content||null,tool_calls:i.toolCalls.map((a,c)=>({id:a.id??`cal\
220
- l_${c}`,type:"function",function:{name:a.name,arguments:a.arguments}}))}:{role:i.role,content:i.content});n.schema&&!o&&r.push({role:"system",content:ea(n.schema)});let s={model:e,messages:r};if(n.maxOutputTokens!=
226
+ l_${c}`,type:"function",function:{name:a.name,arguments:a.arguments}}))}:{role:i.role,content:i.content});n.schema&&!o&&r.push({role:"system",content:na(n.schema)});let s={model:e,messages:r};if(n.maxOutputTokens!=
221
227
  null&&(s.max_tokens=n.maxOutputTokens),n.temperature!=null&&(s.temperature=n.temperature),n.seed!=null&&(s.seed=n.seed),n.promptCacheKey!=null&&(s.prompt_cache_key=n.promptCacheKey),n.deferrable===true&&
222
228
  (s.service_tier=_t),n.schema&&o){let i=Ae(n.schema);i||G("strict-incompatible","[bvsala] El contrato de respuesta no cumple el modo `strict` de OpenAI (en strict, `required` debe listar TODAS las clav\
223
229
  es de `properties`, y todo objeto necesita `additionalProperties: false`). Se env\xEDa el esquema con `strict: false`: el modelo sigue guiado y el layer sigue validando, pero la garant\xEDa la da el layer, \
224
230
  no el proveedor. Para recuperarla, haz obligatorias todas las claves del contrato."),s.response_format={type:"json_schema",json_schema:{name:"bvsala_contract",schema:n.schema,strict:i}};}return n.tools&&
225
231
  n.tools.length>0&&(s.tools=n.tools.map(i=>({type:"function",function:{name:i.id,...i.description?{description:i.description}:{},parameters:i.parameters??{type:"object",properties:{}}}}))),await this.fetchImpl(
226
232
  `${this.opts.baseUrl.replace(/\/$/,"")}/chat/completions`,{method:"POST",headers:{"content-type":"application/json",...this.opts.apiKey?{authorization:`Bearer ${this.opts.apiKey}`}:{},...this.opts.headers},
227
- body:JSON.stringify(s)})}async leer(e,n,o){let r=await e.json(),s=r.choices?.[0]?.message,i=s?.content??"",a=(s?.tool_calls??[]).map(p=>({...p.id?{id:p.id}:{},name:p.function?.name??"",arguments:p.function?.
228
- arguments??""})).filter(p=>p.name!==""),c=r.usage??{},l=c.prompt_tokens??0,u=c.completion_tokens??0,d=typeof c.prompt_tokens!="number",f=typeof c.completion_tokens!="number";if(this.opts.requireUsage&&
229
- (d||f))throw new Error(`provider returned incomplete usage (prompt=${c.prompt_tokens??"absent"}, completion=${c.completion_tokens??"absent"}); cannot measure cost. For gateways/streaming, ensure usage\
230
- reporting is enabled.`);let m=r.choices?.[0]?.finish_reason,h=typeof r.service_tier=="string"&&r.service_tier!==""?r.service_tier:void 0;return {text:i,...a.length>0?{toolCalls:a}:{},...m?{finishReason:m}:
233
+ body:JSON.stringify(s)})}async leer(e,n,o){let r=await e.json(),s=r.choices?.[0]?.message,i=s?.content??"",a=(s?.tool_calls??[]).map(g=>({...g.id?{id:g.id}:{},name:g.function?.name??"",arguments:g.function?.
234
+ arguments??""})).filter(g=>g.name!==""),c=r.usage??{},l=c.prompt_tokens??0,u=c.completion_tokens??0,d=typeof c.prompt_tokens!="number",m=typeof c.completion_tokens!="number";if(this.opts.requireUsage&&
235
+ (d||m))throw new Error(`provider returned incomplete usage (prompt=${c.prompt_tokens??"absent"}, completion=${c.completion_tokens??"absent"}); cannot measure cost. For gateways/streaming, ensure usage\
236
+ reporting is enabled.`);let f=r.choices?.[0]?.finish_reason,h=typeof r.service_tier=="string"&&r.service_tier!==""?r.service_tier:void 0;return {text:i,...a.length>0?{toolCalls:a}:{},...f?{finishReason:f}:
231
237
  {},...h?{servedServiceTier:h}:{},...n.deferrable===true?{requestedServiceTier:_t}:{},usage:{inputTokens:l,outputTokens:u,...c.prompt_tokens_details?.cached_tokens!=null?{cachedInputTokens:c.prompt_tokens_details.
232
- cached_tokens}:{}},structuredNatively:n.schema!=null&&o,raw:r}}};async function gr(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}function br(t){return `Respond with a single JSON object and nothing else: no prose, no explanation, no markdown code fences. The object must validate against this JSON Schema:
233
- `+JSON.stringify(t)}var At=4,Fe="bvsala_contract",xr=class{id;opts;fetchImpl;constructor(e={}){this.opts=e,this.id=`anthropic:${e.baseUrl??"https://api.anthropic.com/v1"}`,this.fetchImpl=e.fetchImpl??fetch;}async generate(e){
238
+ cached_tokens}:{}},structuredNatively:n.schema!=null&&o,raw:r}}};async function br(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}function xr(t){return `Respond with a single JSON object and nothing else: no prose, no explanation, no markdown code fences. The object must validate against this JSON Schema:
239
+ `+JSON.stringify(t)}var At=4,Fe="bvsala_contract",yr=class{id;opts;fetchImpl;constructor(e={}){this.opts=e,this.id=`anthropic:${e.baseUrl??"https://api.anthropic.com/v1"}`,this.fetchImpl=e.fetchImpl??fetch;}async generate(e){
234
240
  let n=this.construirCuerpo(e),o=(this.opts.baseUrl??"https://api.anthropic.com/v1").replace(/\/$/,""),r=await this.fetchImpl(`${o}/messages`,{method:"POST",headers:{"content-type":"application/json","\
235
241
  anthropic-version":this.opts.apiVersion??"2023-06-01",...this.opts.apiKey?{"x-api-key":this.opts.apiKey}:{},...this.opts.headers},body:JSON.stringify(n.body)});if(!r.ok)throw new Error(`provider ${r.status}\
236
- : ${await oa(r)}`);return this.leer(r,e,n.contratoNativo)}construirCuerpo(e){let{system:n,messages:o,prefijoEnMensajes:r,prefijoEnSystem:s}=ta(e);if(o.length===0)throw new Error("anthropic: the reques\
242
+ : ${await sa(r)}`);return this.leer(r,e,n.contratoNativo)}construirCuerpo(e){let{system:n,messages:o,prefijoEnMensajes:r,prefijoEnSystem:s}=oa(e);if(o.length===0)throw new Error("anthropic: the reques\
237
243
  t has no user/assistant message. The Messages API needs at least one, and system prompts travel in the `system` field \u2014 they do not count.");let i=(e.tools??[]).map(d=>({name:d.id,...d.description?
238
- {description:d.description}:{},input_schema:d.parameters??{type:"object",properties:{}}})),a=false,c=false;if(e.schema){let d=i.length>0,f=i.some(h=>h.name===Fe),m=Ae(e.schema);f?(n.push({type:"text",text:br(
244
+ {description:d.description}:{},input_schema:d.parameters??{type:"object",properties:{}}})),a=false,c=false;if(e.schema){let d=i.length>0,m=i.some(h=>h.name===Fe),f=Ae(e.schema);m?(n.push({type:"text",text:xr(
239
245
  e.schema)}),G("anthropic-contrato-nombre-ocupado",`[bvsala] One of your tools is already named \`${Fe}\`, so the output contract cannot travel as a tool without colliding with it (duplicate tool names \
240
- are a provider error). The schema is sent as prompt text instead, which is measurably more expensive on this API. Rename that tool to get the cheaper path.`)):(!m&&!d&&G("anthropic-strict-incompatible",
246
+ are a provider error). The schema is sent as prompt text instead, which is measurably more expensive on this API. Rename that tool to get the cheaper path.`)):(!f&&!d&&G("anthropic-strict-incompatible",
241
247
  "[bvsala] El contrato de respuesta no cumple el modo `strict` (en strict, `required` debe listar TODAS las claves de `properties`, y todo objeto necesita `additionalProperties: false`). Se env\xEDa el es\
242
- quema sin `strict`: el modelo sigue guiado y el layer sigue validando, pero la garant\xEDa la da el layer, no el proveedor."),a=m&&!d,i.push({name:Fe,description:d?"Return the final answer in the requ\
248
+ quema sin `strict`: el modelo sigue guiado y el layer sigue validando, pero la garant\xEDa la da el layer, no el proveedor."),a=f&&!d,i.push({name:Fe,description:d?"Return the final answer in the requ\
243
249
  ired shape. Use the other tools first if you need data; call this one instead of writing the answer as text.":"Return the final answer in the required shape.",input_schema:e.schema,...a?{strict:true}:{}}),
244
250
  d&&(c=this.opts.forceAnswerThroughTool!==false,G("anthropic-contrato-con-herramientas","[bvsala] This request carries BOTH your tools and an output contract. On Anthropic's Messages API a specific shape \
245
251
  is only GUARANTEED by forcing that exact tool, and forcing ours would leave the model unable to call yours. The contract travels as one extra tool"+(c?' and the request is sent with `tool_choice: {typ\
@@ -254,33 +260,33 @@ petici\xF3n/respuesta.");let u=this.marcarCache(e,n,o,r,s);return this.opts.auto
254
260
  ephemeral"}),{body:l,contratoNativo:a}}marcarCache(e,n,o,r,s){if(e.promptCacheKey!=null,e.stablePrefixMessages==null)return 0;let i=Math.min(this.opts.maxCacheBreakpoints??At,At);if(i<=0)return 0;let a=i,
255
261
  c=s>0?n[s-1]:void 0;if(c&&(c.cache_control={type:"ephemeral"},i-=1),i>0&&r>0){let l=o[Math.min(r,o.length)-1],u=l?.content[l.content.length-1];u&&(u.cache_control={type:"ephemeral"},i-=1);}return a-i}async leer(e,n,o){
256
262
  let r=await e.json(),s=r.content??[],i=s.filter(b=>b.type==="text").map(b=>b.text??"").join(""),a=s.filter(b=>b.type==="tool_use"&&b.name!==Fe).map(b=>({...b.id?{id:b.id}:{},name:b.name??"",arguments:JSON.
257
- stringify(b.input??{})})).filter(b=>b.name!==""),c=s.find(b=>b.type==="tool_use"&&b.name===Fe),l=c?JSON.stringify(c.input??{}):i,u=r.usage??{},d=u.cache_read_input_tokens,f=u.cache_creation_input_tokens,
258
- m=(u.input_tokens??0)+(f??0)+(d??0),h=u.output_tokens??0,p=typeof u.input_tokens!="number",g=typeof u.output_tokens!="number";if(this.opts.requireUsage&&(p||g))throw new Error(`provider returned incom\
263
+ stringify(b.input??{})})).filter(b=>b.name!==""),c=s.find(b=>b.type==="tool_use"&&b.name===Fe),l=c?JSON.stringify(c.input??{}):i,u=r.usage??{},d=u.cache_read_input_tokens,m=u.cache_creation_input_tokens,
264
+ f=(u.input_tokens??0)+(m??0)+(d??0),h=u.output_tokens??0,g=typeof u.input_tokens!="number",p=typeof u.output_tokens!="number";if(this.opts.requireUsage&&(g||p))throw new Error(`provider returned incom\
259
265
  plete usage (input=${u.input_tokens??"absent"}, output=${u.output_tokens??"absent"}); cannot measure cost.`);let x=typeof u.service_tier=="string"&&u.service_tier!==""?u.service_tier:void 0;return {text:l,
260
- ...a.length>0?{toolCalls:a}:{},...r.stop_reason?{finishReason:na(r.stop_reason)}:{},...x?{servedServiceTier:x}:{},usage:{inputTokens:m,outputTokens:h,...d!=null?{cachedInputTokens:d}:{},...f!=null?{cacheWriteInputTokens:f}:
261
- {}},structuredNatively:n.schema!=null&&o,raw:r}}};function ta(t){let e=[],n=[],o=t.stablePrefixMessages??0,r=0,s=0,i=true;return t.messages.forEach((a,c)=>{if(a.role==="system"&&i){e.push({type:"text",text:a.
266
+ ...a.length>0?{toolCalls:a}:{},...r.stop_reason?{finishReason:ra(r.stop_reason)}:{},...x?{servedServiceTier:x}:{},usage:{inputTokens:f,outputTokens:h,...d!=null?{cachedInputTokens:d}:{},...m!=null?{cacheWriteInputTokens:m}:
267
+ {}},structuredNatively:n.schema!=null&&o,raw:r}}};function oa(t){let e=[],n=[],o=t.stablePrefixMessages??0,r=0,s=0,i=true;return t.messages.forEach((a,c)=>{if(a.role==="system"&&i){e.push({type:"text",text:a.
262
268
  content}),c<o&&(s=e.length);return}i=false,n.push({role:a.role==="assistant"?"assistant":"user",content:[{type:"text",text:a.content}]}),c<o&&(r=n.length);}),n.length>0&&n[0].role==="assistant"&&(n.unshift(
263
- {role:"user",content:[{type:"text",text:"(continue)"}]}),r>0&&(r+=1)),{system:e,messages:n,prefijoEnMensajes:r,prefijoEnSystem:s}}function na(t){switch(t){case "end_turn":return "stop";case "max_tokens":
264
- return "length";case "tool_use":return "tool_calls";case "refusal":return "content_filter";default:return t}}async function oa(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}var rt=class{events=[];start;now;constructor(e=()=>Date.now()){this.now=e,this.start=e();}record(e,n,o){this.events.push({stage:e,outcome:n,...o?{detail:o}:{},atMs:this.now()-this.start});}elapsed(){return this.
265
- now()-this.start}all(){return this.events}};var De=class extends Error{status;constructor(e,n){super(e),this.name="LicenseError",n&&(this.status=n);}};function Ln(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function Dt(t,e=""){if(typeof t!="number"){let n=e&&
269
+ {role:"user",content:[{type:"text",text:"(continue)"}]}),r>0&&(r+=1)),{system:e,messages:n,prefijoEnMensajes:r,prefijoEnSystem:s}}function ra(t){switch(t){case "end_turn":return "stop";case "max_tokens":
270
+ return "length";case "tool_use":return "tool_calls";case "refusal":return "content_filter";default:return t}}async function sa(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}var rt=class{events=[];start;now;constructor(e=()=>Date.now()){this.now=e,this.start=e();}record(e,n,o){this.events.push({stage:e,outcome:n,...o?{detail:o}:{},atMs:this.now()-this.start});}elapsed(){return this.
271
+ now()-this.start}all(){return this.events}};var De=class extends Error{status;constructor(e,n){super(e),this.name="LicenseError",n&&(this.status=n);}};function Mn(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function Dt(t,e=""){if(typeof t!="number"){let n=e&&
266
272
  `"${e}" `;throw new TypeError(`${n}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){let n=e&&`"${e}" `;throw new RangeError(`${n}expected integer >= 0, got ${t}`)}}function oe(t,e,n=""){
267
- let o=Ln(t),r=t?.length,s=e!==void 0;if(!o||s&&r!==e){let i=n&&`"${n}" `,a=s?` of length ${e}`:"",c=o?`length=${r}`:`type=${typeof t}`,l=i+"expected Uint8Array"+a+", got "+c;throw o?new RangeError(l):
268
- new TypeError(l)}return t}function Mn(t,e=true){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function vr(t,e){oe(t,void 0,"digestInt\
269
- o() output");let n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function st(...t){for(let e=0;e<t.length;e++)t[e].fill(0);}function Pt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}var kr=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",ra=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Lt(t){if(oe(t),kr)return t.toHex();
270
- let e="";for(let n=0;n<t.length;n++)e+=ra[t[n]];return e}var he={_0:48,_9:57,A:65,F:70,a:97,f:102};function yr(t){if(t>=he._0&&t<=he._9)return t-he._0;if(t>=he.A&&t<=he.F)return t-(he.A-10);if(t>=he.a&&
271
- t<=he.f)return t-(he.a-10)}function it(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(kr)try{return Uint8Array.fromHex(t)}catch(r){throw r instanceof SyntaxError?
272
- new RangeError(r.message):r}let e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);let o=new Uint8Array(n);for(let r=0,s=0;r<n;r++,s+=2){let i=yr(t.charCodeAt(
273
- s)),a=yr(t.charCodeAt(s+1));if(i===void 0||a===void 0){let c=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+s)}o[r]=i*16+a;}return o}function Bn(...t){let e=0;for(let o=0;o<t.length;o++){let r=t[o];oe(r),e+=r.length;}let n=new Uint8Array(e);for(let o=0,r=0;o<t.length;o++){let s=t[o];n.set(s,r),r+=s.length;}return n}function wr(t,e={}){let n=(r,s)=>t(s).update(r).digest(),o=t(void 0);return n.outputLen=o.outputLen,n.blockLen=o.blockLen,n.canXOF=o.canXOF,n.create=r=>t(r),Object.assign(n,e),Object.freeze(n)}function Sr(t=32){
273
+ let o=Mn(t),r=t?.length,s=e!==void 0;if(!o||s&&r!==e){let i=n&&`"${n}" `,a=s?` of length ${e}`:"",c=o?`length=${r}`:`type=${typeof t}`,l=i+"expected Uint8Array"+a+", got "+c;throw o?new RangeError(l):
274
+ new TypeError(l)}return t}function Bn(t,e=true){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function kr(t,e){oe(t,void 0,"digestInt\
275
+ o() output");let n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function st(...t){for(let e=0;e<t.length;e++)t[e].fill(0);}function Pt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}var wr=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",ia=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Lt(t){if(oe(t),wr)return t.toHex();
276
+ let e="";for(let n=0;n<t.length;n++)e+=ia[t[n]];return e}var he={_0:48,_9:57,A:65,F:70,a:97,f:102};function vr(t){if(t>=he._0&&t<=he._9)return t-he._0;if(t>=he.A&&t<=he.F)return t-(he.A-10);if(t>=he.a&&
277
+ t<=he.f)return t-(he.a-10)}function it(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(wr)try{return Uint8Array.fromHex(t)}catch(r){throw r instanceof SyntaxError?
278
+ new RangeError(r.message):r}let e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);let o=new Uint8Array(n);for(let r=0,s=0;r<n;r++,s+=2){let i=vr(t.charCodeAt(
279
+ s)),a=vr(t.charCodeAt(s+1));if(i===void 0||a===void 0){let c=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+s)}o[r]=i*16+a;}return o}function Nn(...t){let e=0;for(let o=0;o<t.length;o++){let r=t[o];oe(r),e+=r.length;}let n=new Uint8Array(e);for(let o=0,r=0;o<t.length;o++){let s=t[o];n.set(s,r),r+=s.length;}return n}function Sr(t,e={}){let n=(r,s)=>t(s).update(r).digest(),o=t(void 0);return n.outputLen=o.outputLen,n.blockLen=o.blockLen,n.canXOF=o.canXOF,n.create=r=>t(r),Object.assign(n,e),Object.freeze(n)}function Tr(t=32){
274
280
  Dt(t,"bytesLength");let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(
275
281
  `"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}var Er=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});var Mt=class{blockLen;outputLen;canXOF=false;padOffset;isLE;buffer;view;finished=false;length=0;pos=0;destroyed=false;constructor(e,n,o,r){this.blockLen=e,this.outputLen=n,this.padOffset=o,this.isLE=r,this.buffer=
276
- new Uint8Array(e),this.view=Pt(this.buffer);}update(e){Mn(this),oe(e);let{view:n,buffer:o,blockLen:r}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(r-this.pos,s-i);if(a===r){let c=Pt(e);for(;r<=s-i;i+=
277
- r)this.process(c,i);continue}o.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(n,0),this.pos=0);}return this.length+=e.length,this.roundClean(),this}digestInto(e){Mn(this),
278
- vr(e,this),this.finished=true;let{buffer:n,view:o,blockLen:r,isLE:s}=this,{pos:i}=this;n[i++]=128,st(this.buffer.subarray(i)),this.padOffset>r-i&&(this.process(o,0),i=0);for(let d=i;d<r;d++)n[d]=0;o.setBigUint64(
282
+ new Uint8Array(e),this.view=Pt(this.buffer);}update(e){Bn(this),oe(e);let{view:n,buffer:o,blockLen:r}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(r-this.pos,s-i);if(a===r){let c=Pt(e);for(;r<=s-i;i+=
283
+ r)this.process(c,i);continue}o.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(n,0),this.pos=0);}return this.length+=e.length,this.roundClean(),this}digestInto(e){Bn(this),
284
+ kr(e,this),this.finished=true;let{buffer:n,view:o,blockLen:r,isLE:s}=this,{pos:i}=this;n[i++]=128,st(this.buffer.subarray(i)),this.padOffset>r-i&&(this.process(o,0),i=0);for(let d=i;d<r;d++)n[d]=0;o.setBigUint64(
279
285
  r-8,BigInt(this.length*8),s),this.process(o,0);let a=Pt(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_s\
280
286
  ha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],s);}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let o=e.slice(0,n);return this.destroy(),o}_cloneInto(e){e||=new this.
281
- constructor,e.set(...this.get());let{blockLen:n,buffer:o,length:r,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=r,e.pos=a,r%n&&e.buffer.set(o),e}clone(){return this._cloneInto()}};var K=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Bt=BigInt(4294967295),Tr=BigInt(32);function sa(t,e=false){return e?{h:Number(t&Bt),l:Number(t>>Tr&Bt)}:{h:Number(t>>Tr&Bt)|0,l:Number(t&Bt)|0}}function Rr(t,e=false){let n=t.length,o=new Uint32Array(n),
282
- r=new Uint32Array(n);for(let s=0;s<n;s++){let{h:i,l:a}=sa(t[s],e);[o[s],r[s]]=[i,a];}return [o,r]}var Nn=(t,e,n)=>t>>>n,jn=(t,e,n)=>t<<32-n|e>>>n,Pe=(t,e,n)=>t>>>n|e<<32-n,Le=(t,e,n)=>t<<32-n|e>>>n,at=(t,e,n)=>t<<64-n|e>>>n-32,ct=(t,e,n)=>t>>>n-32|e<<64-n;function ce(t,e,n,o){let r=(e>>>0)+(o>>>0);return {h:t+n+(r/2**32|0)|0,l:r|0}}var Cr=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),Ir=(t,e,n,o)=>e+n+o+(t/2**32|0)|0,Or=(t,e,n,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0),_r=(t,e,n,o,r)=>e+
283
- n+o+r+(t/2**32|0)|0,Ar=(t,e,n,o,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0)+(r>>>0),Dr=(t,e,n,o,r,s)=>e+n+o+r+s+(t/2**32|0)|0;var Pr=Rr(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242",
287
+ constructor,e.set(...this.get());let{blockLen:n,buffer:o,length:r,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=r,e.pos=a,r%n&&e.buffer.set(o),e}clone(){return this._cloneInto()}};var K=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Bt=BigInt(4294967295),Rr=BigInt(32);function aa(t,e=false){return e?{h:Number(t&Bt),l:Number(t>>Rr&Bt)}:{h:Number(t>>Rr&Bt)|0,l:Number(t&Bt)|0}}function Cr(t,e=false){let n=t.length,o=new Uint32Array(n),
288
+ r=new Uint32Array(n);for(let s=0;s<n;s++){let{h:i,l:a}=aa(t[s],e);[o[s],r[s]]=[i,a];}return [o,r]}var jn=(t,e,n)=>t>>>n,$n=(t,e,n)=>t<<32-n|e>>>n,Pe=(t,e,n)=>t>>>n|e<<32-n,Le=(t,e,n)=>t<<32-n|e>>>n,at=(t,e,n)=>t<<64-n|e>>>n-32,ct=(t,e,n)=>t>>>n-32|e<<64-n;function ce(t,e,n,o){let r=(e>>>0)+(o>>>0);return {h:t+n+(r/2**32|0)|0,l:r|0}}var Ir=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),Or=(t,e,n,o)=>e+n+o+(t/2**32|0)|0,_r=(t,e,n,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0),Ar=(t,e,n,o,r)=>e+
289
+ n+o+r+(t/2**32|0)|0,Dr=(t,e,n,o,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0)+(r>>>0),Pr=(t,e,n,o,r,s)=>e+n+o+r+s+(t/2**32|0)|0;var Lr=Cr(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242",
284
290
  "0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc6\
285
291
  8b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","\
286
292
  0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3\
@@ -288,145 +294,145 @@ c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a6
288
294
  x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5d\
289
295
  efb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0x\
290
296
  eada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c1\
291
- 00d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),aa=Pr[0],ca=Pr[1],Ee=new Uint32Array(80),Te=new Uint32Array(80),$n=class extends Mt{constructor(e){
292
- super(128,e,16,false);}get(){let{Ah:e,Al:n,Bh:o,Bl:r,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:m,Gl:h,Hh:p,Hl:g}=this;return [e,n,o,r,s,i,a,c,l,u,d,f,m,h,p,g]}set(e,n,o,r,s,i,a,c,l,u,d,f,m,h,p,g){this.Ah=
293
- e|0,this.Al=n|0,this.Bh=o|0,this.Bl=r|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=m|0,this.Gl=h|0,this.Hh=p|0,this.Hl=g|0;}process(e,n){for(let y=0;y<
294
- 16;y++,n+=4)Ee[y]=e.getUint32(n),Te[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){let E=Ee[y-15]|0,C=Te[y-15]|0,O=Pe(E,C,1)^Pe(E,C,8)^Nn(E,C,7),T=Le(E,C,1)^Le(E,C,8)^jn(E,C,7),D=Ee[y-2]|0,R=Te[y-2]|0,S=Pe(
295
- D,R,19)^at(D,R,61)^Nn(D,R,6),B=Le(D,R,19)^ct(D,R,61)^jn(D,R,6),k=Or(T,B,Te[y-7],Te[y-16]),w=_r(k,O,S,Ee[y-7],Ee[y-16]);Ee[y]=w|0,Te[y]=k|0;}let{Ah:o,Al:r,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:m,Fl:h,
296
- Gh:p,Gl:g,Hh:x,Hl:b}=this;for(let y=0;y<80;y++){let E=Pe(d,f,14)^Pe(d,f,18)^at(d,f,41),C=Le(d,f,14)^Le(d,f,18)^ct(d,f,41),O=d&m^~d&p,T=f&h^~f&g,D=Ar(b,C,T,ca[y],Te[y]),R=Dr(D,x,E,O,aa[y],Ee[y]),S=D|0,
297
- B=Pe(o,r,28)^at(o,r,34)^at(o,r,39),k=Le(o,r,28)^ct(o,r,34)^ct(o,r,39),w=o&s^o&a^s&a,_=r&i^r&c^i&c;x=p|0,b=g|0,p=m|0,g=h|0,m=d|0,h=f|0,{h:d,l:f}=ce(l|0,u|0,R|0,S|0),l=a|0,u=c|0,a=s|0,c=i|0,s=o|0,i=r|0;
298
- let P=Cr(S,k,_);o=Ir(P,R,B,w),r=P|0;}(({h:o,l:r}=ce(this.Ah|0,this.Al|0,o|0,r|0))),{h:s,l:i}=ce(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=ce(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=ce(this.Dh|0,this.Dl|0,l|0,
299
- u|0),{h:d,l:f}=ce(this.Eh|0,this.El|0,d|0,f|0),{h:m,l:h}=ce(this.Fh|0,this.Fl|0,m|0,h|0),{h:p,l:g}=ce(this.Gh|0,this.Gl|0,p|0,g|0),{h:x,l:b}=ce(this.Hh|0,this.Hl|0,x|0,b|0),this.set(o,r,s,i,a,c,l,u,d,
300
- f,m,h,p,g,x,b);}roundClean(){st(Ee,Te);}destroy(){this.destroyed=true,st(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}},Fn=class extends $n{Ah=K[0]|0;Al=K[1]|0;Bh=K[2]|0;Bl=K[3]|0;Ch=K[4]|0;Cl=K[5]|
301
- 0;Dh=K[6]|0;Dl=K[7]|0;Eh=K[8]|0;El=K[9]|0;Fh=K[10]|0;Fl=K[11]|0;Gh=K[12]|0;Gl=K[13]|0;Hh=K[14]|0;Hl=K[15]|0;constructor(){super(64);}};var Nt=wr(()=>new Fn,Er(3));var z=(t,e,n)=>oe(t,e,n),Vn=Dt,Un=Lt,le=(...t)=>Bn(...t),Lr=t=>it(t),Ft=Ln,Mr=t=>Sr(t),$t=BigInt(0),zn=BigInt(1);function ze(t,e=""){if(typeof t!="boolean"){let n=e&&`"${e}" `;throw new TypeError(n+"e\
302
- xpected boolean, got type="+typeof t)}return t}function la(t){if(typeof t=="bigint"){if(!jt(t))throw new RangeError("positive bigint expected, got "+t)}else Vn(t);return t}function ge(t,e=""){if(typeof t!=
303
- "number"){let n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){let n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function Br(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?$t:BigInt("0x"+t)}function qn(t){return Br(Lt(t))}function be(t){return Br(Lt(lt(oe(t)).reverse()))}
304
- function Hn(t,e){if(Dt(e),e===0)throw new RangeError("zero length");t=la(t);let n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return it(n.padStart(e*2,"0"))}function Nr(t,e){
305
- return Hn(t,e).reverse()}function jr(t,e){if(t=z(t),e=z(e),t.length!==e.length)return false;let n=0;for(let o=0;o<t.length;o++)n|=t[o]^e[o];return n===0}function lt(t){return Uint8Array.from(z(t))}var jt=t=>typeof t=="bigint"&&$t<=t;function ua(t,e,n){return jt(t)&&jt(e)&&jt(n)&&e<=t&&t<n}function Kn(t,e,n,o){if(!ua(e,n,o))throw new RangeError(
306
- "expected valid "+t+": "+n+" <= n < "+o+", got "+e)}function Jn(t){if(t<$t)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>$t;t>>=zn,e+=1);return e}var $r=t=>(zn<<BigInt(t))-zn;function Me(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function o(s,i,a){if(!a&&i!=="function"&&!Object.hasOwn(t,s))throw new TypeError(
297
+ 00d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),la=Lr[0],ua=Lr[1],Te=new Uint32Array(80),Ee=new Uint32Array(80),Fn=class extends Mt{constructor(e){
298
+ super(128,e,16,false);}get(){let{Ah:e,Al:n,Bh:o,Bl:r,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:m,Gh:f,Gl:h,Hh:g,Hl:p}=this;return [e,n,o,r,s,i,a,c,l,u,d,m,f,h,g,p]}set(e,n,o,r,s,i,a,c,l,u,d,m,f,h,g,p){this.Ah=
299
+ e|0,this.Al=n|0,this.Bh=o|0,this.Bl=r|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=m|0,this.Gh=f|0,this.Gl=h|0,this.Hh=g|0,this.Hl=p|0;}process(e,n){for(let y=0;y<
300
+ 16;y++,n+=4)Te[y]=e.getUint32(n),Ee[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){let T=Te[y-15]|0,E=Ee[y-15]|0,R=Pe(T,E,1)^Pe(T,E,8)^jn(T,E,7),C=Le(T,E,1)^Le(T,E,8)^$n(T,E,7),D=Te[y-2]|0,I=Ee[y-2]|0,S=Pe(
301
+ D,I,19)^at(D,I,61)^jn(D,I,6),B=Le(D,I,19)^ct(D,I,61)^$n(D,I,6),k=_r(C,B,Ee[y-7],Ee[y-16]),w=Ar(k,R,S,Te[y-7],Te[y-16]);Te[y]=w|0,Ee[y]=k|0;}let{Ah:o,Al:r,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:m,Fh:f,Fl:h,
302
+ Gh:g,Gl:p,Hh:x,Hl:b}=this;for(let y=0;y<80;y++){let T=Pe(d,m,14)^Pe(d,m,18)^at(d,m,41),E=Le(d,m,14)^Le(d,m,18)^ct(d,m,41),R=d&f^~d&g,C=m&h^~m&p,D=Dr(b,E,C,ua[y],Ee[y]),I=Pr(D,x,T,R,la[y],Te[y]),S=D|0,
303
+ B=Pe(o,r,28)^at(o,r,34)^at(o,r,39),k=Le(o,r,28)^ct(o,r,34)^ct(o,r,39),w=o&s^o&a^s&a,_=r&i^r&c^i&c;x=g|0,b=p|0,g=f|0,p=h|0,f=d|0,h=m|0,{h:d,l:m}=ce(l|0,u|0,I|0,S|0),l=a|0,u=c|0,a=s|0,c=i|0,s=o|0,i=r|0;
304
+ let P=Ir(S,k,_);o=Or(P,I,B,w),r=P|0;}(({h:o,l:r}=ce(this.Ah|0,this.Al|0,o|0,r|0))),{h:s,l:i}=ce(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=ce(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=ce(this.Dh|0,this.Dl|0,l|0,
305
+ u|0),{h:d,l:m}=ce(this.Eh|0,this.El|0,d|0,m|0),{h:f,l:h}=ce(this.Fh|0,this.Fl|0,f|0,h|0),{h:g,l:p}=ce(this.Gh|0,this.Gl|0,g|0,p|0),{h:x,l:b}=ce(this.Hh|0,this.Hl|0,x|0,b|0),this.set(o,r,s,i,a,c,l,u,d,
306
+ m,f,h,g,p,x,b);}roundClean(){st(Te,Ee);}destroy(){this.destroyed=true,st(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}},zn=class extends Fn{Ah=K[0]|0;Al=K[1]|0;Bh=K[2]|0;Bl=K[3]|0;Ch=K[4]|0;Cl=K[5]|
307
+ 0;Dh=K[6]|0;Dl=K[7]|0;Eh=K[8]|0;El=K[9]|0;Fh=K[10]|0;Fl=K[11]|0;Gh=K[12]|0;Gl=K[13]|0;Hh=K[14]|0;Hl=K[15]|0;constructor(){super(64);}};var Nt=Sr(()=>new zn,Er(3));var z=(t,e,n)=>oe(t,e,n),Un=Dt,qn=Lt,le=(...t)=>Nn(...t),Mr=t=>it(t),Ft=Mn,Br=t=>Tr(t),$t=BigInt(0),Vn=BigInt(1);function ze(t,e=""){if(typeof t!="boolean"){let n=e&&`"${e}" `;throw new TypeError(n+"e\
308
+ xpected boolean, got type="+typeof t)}return t}function da(t){if(typeof t=="bigint"){if(!jt(t))throw new RangeError("positive bigint expected, got "+t)}else Un(t);return t}function ge(t,e=""){if(typeof t!=
309
+ "number"){let n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){let n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function Nr(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?$t:BigInt("0x"+t)}function Hn(t){return Nr(Lt(t))}function be(t){return Nr(Lt(lt(oe(t)).reverse()))}
310
+ function Kn(t,e){if(Dt(e),e===0)throw new RangeError("zero length");t=da(t);let n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return it(n.padStart(e*2,"0"))}function jr(t,e){
311
+ return Kn(t,e).reverse()}function $r(t,e){if(t=z(t),e=z(e),t.length!==e.length)return false;let n=0;for(let o=0;o<t.length;o++)n|=t[o]^e[o];return n===0}function lt(t){return Uint8Array.from(z(t))}var jt=t=>typeof t=="bigint"&&$t<=t;function pa(t,e,n){return jt(t)&&jt(e)&&jt(n)&&e<=t&&t<n}function Jn(t,e,n,o){if(!pa(e,n,o))throw new RangeError(
312
+ "expected valid "+t+": "+n+" <= n < "+o+", got "+e)}function Wn(t){if(t<$t)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>$t;t>>=Vn,e+=1);return e}var Fr=t=>(Vn<<BigInt(t))-Vn;function Me(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function o(s,i,a){if(!a&&i!=="function"&&!Object.hasOwn(t,s))throw new TypeError(
307
313
  `param "${s}" is invalid: expected own property`);let c=t[s];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${l}`)}let r=(s,i)=>Object.
308
- entries(s).forEach(([a,c])=>o(a,c,i));r(e,false),r(n,true);}var Wn=()=>{throw new Error("not implemented")};var J=BigInt(0),q=BigInt(1),Be=BigInt(2),Ur=BigInt(3),qr=BigInt(4),Hr=BigInt(5),da=BigInt(7),Kr=BigInt(8),pa=BigInt(9),Jr=BigInt(16);function j(t,e){if(e<=J)throw new Error("mod: expected positive mod\
309
- ulus, got "+e);let n=t%e;return n>=J?n:e+n}function re(t,e,n){if(e<J)throw new Error("pow2: expected non-negative exponent, got "+e);let o=t;for(;e-- >J;)o*=o,o%=n;return o}function Fr(t,e){if(t===J)throw new Error("invert: expected non-zero n\
314
+ entries(s).forEach(([a,c])=>o(a,c,i));r(e,false),r(n,true);}var Gn=()=>{throw new Error("not implemented")};var J=BigInt(0),q=BigInt(1),Be=BigInt(2),qr=BigInt(3),Hr=BigInt(4),Kr=BigInt(5),fa=BigInt(7),Jr=BigInt(8),ma=BigInt(9),Wr=BigInt(16);function j(t,e){if(e<=J)throw new Error("mod: expected positive mod\
315
+ ulus, got "+e);let n=t%e;return n>=J?n:e+n}function re(t,e,n){if(e<J)throw new Error("pow2: expected non-negative exponent, got "+e);let o=t;for(;e-- >J;)o*=o,o%=n;return o}function zr(t,e){if(t===J)throw new Error("invert: expected non-zero n\
310
316
  umber");if(e<=J)throw new Error("invert: expected positive modulus, got "+e);let n=j(t,e),o=e,r=J,i=q;for(;n!==J;){let l=o/n,u=o-n*l,d=r-i*l;o=n,n=u,r=i,i=d;}if(o!==q)throw new Error(
311
- "invert: does not exist");return j(r,e)}function Gn(t,e,n){let o=t;if(!o.eql(o.sqr(e),n))throw new Error("Cannot find square root")}function Wr(t,e){let n=t,o=(n.ORDER+q)/qr,r=n.pow(e,o);return Gn(n,r,
312
- e),r}function fa(t,e){let n=t,o=(n.ORDER-Hr)/Kr,r=n.mul(e,Be),s=n.pow(r,o),i=n.mul(e,s),a=n.mul(n.mul(i,Be),s),c=n.mul(i,n.sub(a,n.ONE));return Gn(n,c,e),c}function ma(t){let e=qt(t),n=Gr(t),o=n(e,e.neg(
313
- e.ONE)),r=n(e,o),s=n(e,e.neg(o)),i=(t+da)/Jr;return((a,c)=>{let l=a,u=l.pow(c,i),d=l.mul(u,o),f=l.mul(u,r),m=l.mul(u,s),h=l.eql(l.sqr(d),c),p=l.eql(l.sqr(f),c);u=l.cmov(u,d,h),d=l.cmov(m,f,p);let g=l.
314
- eql(l.sqr(d),c),x=l.cmov(u,d,g);return Gn(l,x,c),x})}function Gr(t){if(t<Ur)throw new Error("sqrt is not defined for small field");let e=t-q,n=0;for(;e%Be===J;)e/=Be,n++;let o=Be,r=qt(t);for(;zr(r,o)===
315
- 1;)if(o++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Wr;let s=r.pow(o,e),i=(e+q)/Be;return function(c,l){let u=c;if(u.is0(l))return l;if(zr(u,l)!==1)throw new Error(
316
- "Cannot find square root");let d=n,f=u.mul(u.ONE,s),m=u.pow(l,e),h=u.pow(l,i);for(;!u.eql(m,u.ONE);){if(u.is0(m))return u.ZERO;let p=1,g=u.sqr(m);for(;!u.eql(g,u.ONE);)if(p++,g=u.sqr(g),p===d)throw new Error(
317
- "Cannot find square root");let x=q<<BigInt(d-p-1),b=u.pow(f,x);d=p,f=u.sqr(b),m=u.mul(m,f),h=u.mul(h,b);}return h}}function ha(t){return t%qr===Ur?Wr:t%Kr===Hr?fa:t%Jr===pa?ma(t):Gr(t)}var xe=(t,e)=>(j(
318
- t,e)&q)===q,ga=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Yr(t){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=ga.
317
+ "invert: does not exist");return j(r,e)}function Yn(t,e,n){let o=t;if(!o.eql(o.sqr(e),n))throw new Error("Cannot find square root")}function Gr(t,e){let n=t,o=(n.ORDER+q)/Hr,r=n.pow(e,o);return Yn(n,r,
318
+ e),r}function ha(t,e){let n=t,o=(n.ORDER-Kr)/Jr,r=n.mul(e,Be),s=n.pow(r,o),i=n.mul(e,s),a=n.mul(n.mul(i,Be),s),c=n.mul(i,n.sub(a,n.ONE));return Yn(n,c,e),c}function ga(t){let e=qt(t),n=Yr(t),o=n(e,e.neg(
319
+ e.ONE)),r=n(e,o),s=n(e,e.neg(o)),i=(t+fa)/Wr;return((a,c)=>{let l=a,u=l.pow(c,i),d=l.mul(u,o),m=l.mul(u,r),f=l.mul(u,s),h=l.eql(l.sqr(d),c),g=l.eql(l.sqr(m),c);u=l.cmov(u,d,h),d=l.cmov(f,m,g);let p=l.
320
+ eql(l.sqr(d),c),x=l.cmov(u,d,p);return Yn(l,x,c),x})}function Yr(t){if(t<qr)throw new Error("sqrt is not defined for small field");let e=t-q,n=0;for(;e%Be===J;)e/=Be,n++;let o=Be,r=qt(t);for(;Vr(r,o)===
321
+ 1;)if(o++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Gr;let s=r.pow(o,e),i=(e+q)/Be;return function(c,l){let u=c;if(u.is0(l))return l;if(Vr(u,l)!==1)throw new Error(
322
+ "Cannot find square root");let d=n,m=u.mul(u.ONE,s),f=u.pow(l,e),h=u.pow(l,i);for(;!u.eql(f,u.ONE);){if(u.is0(f))return u.ZERO;let g=1,p=u.sqr(f);for(;!u.eql(p,u.ONE);)if(g++,p=u.sqr(p),g===d)throw new Error(
323
+ "Cannot find square root");let x=q<<BigInt(d-g-1),b=u.pow(m,x);d=g,m=u.sqr(b),f=u.mul(f,m),h=u.mul(h,b);}return h}}function ba(t){return t%Hr===qr?Gr:t%Jr===Kr?ha:t%Wr===ma?ga(t):Yr(t)}var xe=(t,e)=>(j(
324
+ t,e)&q)===q,xa=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Zr(t){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=xa.
319
325
  reduce((o,r)=>(o[r]="function",o),e);if(Me(t,n),ge(t.BYTES,"BYTES"),ge(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=q)throw new Error("inval\
320
- id field: expected ORDER > 1, got "+t.ORDER);return t}function ba(t,e,n){let o=t;if(n<J)throw new Error("invalid exponent, negatives unsupported");if(n===J)return o.ONE;if(n===q)return e;let r=o.ONE,s=e;
326
+ id field: expected ORDER > 1, got "+t.ORDER);return t}function ya(t,e,n){let o=t;if(n<J)throw new Error("invalid exponent, negatives unsupported");if(n===J)return o.ONE;if(n===q)return e;let r=o.ONE,s=e;
321
327
  for(;n>J;)n&q&&(r=o.mul(r,s)),s=o.sqr(s),n>>=q;return r}function Ut(t,e,n=false){let o=t,r=new Array(e.length).fill(n?o.ZERO:void 0),s=e.reduce((a,c,l)=>o.is0(c)?a:(r[l]=a,o.mul(a,c)),o.ONE),i=o.inv(s);return e.
322
- reduceRight((a,c,l)=>o.is0(c)?a:(r[l]=o.mul(a,r[l]),o.mul(a,c)),i),r}function zr(t,e){let n=t,o=(n.ORDER-q)/Be,r=n.pow(e,o),s=n.eql(r,n.ONE),i=n.eql(r,n.ZERO),a=n.eql(r,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function xa(t,e){if(e!==void 0&&Vn(e),t<=J)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);
323
- let n=Jn(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);let o=e!==void 0?e:n,r=Math.ceil(o/8);return {nBitLength:o,nByteLength:r}}var Vr=new WeakMap,
328
+ reduceRight((a,c,l)=>o.is0(c)?a:(r[l]=o.mul(a,r[l]),o.mul(a,c)),i),r}function Vr(t,e){let n=t,o=(n.ORDER-q)/Be,r=n.pow(e,o),s=n.eql(r,n.ONE),i=n.eql(r,n.ZERO),a=n.eql(r,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function va(t,e){if(e!==void 0&&Un(e),t<=J)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);
329
+ let n=Wn(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);let o=e!==void 0?e:n,r=Math.ceil(o/8);return {nBitLength:o,nByteLength:r}}var Ur=new WeakMap,
324
330
  Vt=class{ORDER;BITS;BYTES;isLE;ZERO=J;ONE=q;_lengths;_mod;constructor(e,n={}){if(e<=q)throw new Error("invalid field: expected ORDER > 1, got "+e);let o;this.isLE=false,n!=null&&typeof n=="object"&&(typeof n.
325
331
  BITS=="number"&&(o=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:true}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.
326
- freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));let{nBitLength:r,nByteLength:s}=xa(e,o);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2\
332
+ freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));let{nBitLength:r,nByteLength:s}=va(e,o);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2\
327
333
  048 bytes");this.ORDER=e,this.BITS=r,this.BYTES=s,Object.freeze(this);}create(e){return j(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got\
328
334
  "+typeof e);return J<=e&&e<this.ORDER}is0(e){return e===J}isValidNot0(e){return !this.is0(e)&&this.isValid(e)}isOdd(e){return (e&q)===q}neg(e){return j(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return j(
329
- e*e,this.ORDER)}add(e,n){return j(e+n,this.ORDER)}sub(e,n){return j(e-n,this.ORDER)}mul(e,n){return j(e*n,this.ORDER)}pow(e,n){return ba(this,e,n)}div(e,n){return j(e*Fr(n,this.ORDER),this.ORDER)}sqrN(e){
330
- return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return Fr(e,this.ORDER)}sqrt(e){let n=Vr.get(this);return n||Vr.set(this,n=ha(this.ORDER)),n(this,e)}toBytes(e){return this.
331
- isLE?Nr(e,this.BYTES):Hn(e,this.BYTES)}fromBytes(e,n=false){z(e);let{_lengths:o,BYTES:r,isLE:s,ORDER:i,_mod:a}=this;if(o){if(e.length<1||!o.includes(e.length)||e.length>r)throw new Error("Field.fromBytes\
335
+ e*e,this.ORDER)}add(e,n){return j(e+n,this.ORDER)}sub(e,n){return j(e-n,this.ORDER)}mul(e,n){return j(e*n,this.ORDER)}pow(e,n){return ya(this,e,n)}div(e,n){return j(e*zr(n,this.ORDER),this.ORDER)}sqrN(e){
336
+ return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return zr(e,this.ORDER)}sqrt(e){let n=Ur.get(this);return n||Ur.set(this,n=ba(this.ORDER)),n(this,e)}toBytes(e){return this.
337
+ isLE?jr(e,this.BYTES):Kn(e,this.BYTES)}fromBytes(e,n=false){z(e);let{_lengths:o,BYTES:r,isLE:s,ORDER:i,_mod:a}=this;if(o){if(e.length<1||!o.includes(e.length)||e.length>r)throw new Error("Field.fromBytes\
332
338
  : expected "+o+" bytes, got "+e.length);let l=new Uint8Array(r);l.set(e,s?0:l.length-e.length),e=l;}if(e.length!==r)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);let c=s?be(e):
333
- qn(e);if(a&&(c=j(c,i)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return Ut(this,e)}cmov(e,n,o){return ze(o,"condition"),o?n:e}};Object.
334
- freeze(Vt.prototype);function qt(t,e={}){return new Vt(t,e)}var Ht=BigInt(0),Qn=BigInt(1);function Zr(t,e){let n=e.negate();return t?n:e}function Jt(t,e){let n=Ut(t.Fp,e.map(o=>o.Z));return e.map((o,r)=>t.fromAffine(o.toAffine(n[r])))}function ts(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)
335
- throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Yn(t,e){ts(t,e);let n=Math.ceil(e/t)+1,o=2**(t-1),r=2**t,s=$r(t),i=BigInt(t);return {windows:n,windowSize:o,mask:s,maxNumber:r,
336
- shiftBy:i}}function Xr(t,e,n){let{windowSize:o,mask:r,maxNumber:s,shiftBy:i}=n,a=Number(t&r),c=t>>i;a>o&&(a-=s,c+=Qn);let l=e*o,u=l+Math.abs(a)-1,d=a===0,f=a<0,m=e%2!==0;return {nextN:c,offset:u,isZero:d,
337
- isNeg:f,isNegF:m,offsetF:l}}var Zn=new WeakMap,ns=new WeakMap;function Xn(t){return ns.get(t)||1}function Qr(t){if(t!==Ht)throw new Error("invalid wNAF")}var Kt=class{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=
338
- e.ZERO,this.Fn=e.Fn,this.bits=n;}_unsafeLadder(e,n,o=this.ZERO){let r=e;for(;n>Ht;)n&Qn&&(o=o.add(r)),r=r.double(),n>>=Qn;return o}precomputeWindow(e,n){let{windows:o,windowSize:r}=Yn(n,this.bits),s=[],
339
+ Hn(e);if(a&&(c=j(c,i)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return Ut(this,e)}cmov(e,n,o){return ze(o,"condition"),o?n:e}};Object.
340
+ freeze(Vt.prototype);function qt(t,e={}){return new Vt(t,e)}var Ht=BigInt(0),eo=BigInt(1);function Xr(t,e){let n=e.negate();return t?n:e}function Jt(t,e){let n=Ut(t.Fp,e.map(o=>o.Z));return e.map((o,r)=>t.fromAffine(o.toAffine(n[r])))}function ns(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)
341
+ throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Zn(t,e){ns(t,e);let n=Math.ceil(e/t)+1,o=2**(t-1),r=2**t,s=Fr(t),i=BigInt(t);return {windows:n,windowSize:o,mask:s,maxNumber:r,
342
+ shiftBy:i}}function Qr(t,e,n){let{windowSize:o,mask:r,maxNumber:s,shiftBy:i}=n,a=Number(t&r),c=t>>i;a>o&&(a-=s,c+=eo);let l=e*o,u=l+Math.abs(a)-1,d=a===0,m=a<0,f=e%2!==0;return {nextN:c,offset:u,isZero:d,
343
+ isNeg:m,isNegF:f,offsetF:l}}var Xn=new WeakMap,os=new WeakMap;function Qn(t){return os.get(t)||1}function es(t){if(t!==Ht)throw new Error("invalid wNAF")}var Kt=class{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=
344
+ e.ZERO,this.Fn=e.Fn,this.bits=n;}_unsafeLadder(e,n,o=this.ZERO){let r=e;for(;n>Ht;)n&eo&&(o=o.add(r)),r=r.double(),n>>=eo;return o}precomputeWindow(e,n){let{windows:o,windowSize:r}=Zn(n,this.bits),s=[],
339
345
  i=e,a=i;for(let c=0;c<o;c++){a=i,s.push(a);for(let l=1;l<r;l++)a=a.add(i),s.push(a);i=a.double();}return s}wNAF(e,n,o){if(!this.Fn.isValid(o))throw new Error("invalid scalar");let r=this.ZERO,s=this.BASE,
340
- i=Yn(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:u,isNeg:d,isNegF:f,offsetF:m}=Xr(o,a,i);o=c,u?s=s.add(Zr(f,n[m])):r=r.add(Zr(d,n[l]));}return Qr(o),{p:r,f:s}}wNAFUnsafe(e,n,o,r=this.
341
- ZERO){let s=Yn(e,this.bits);for(let i=0;i<s.windows&&o!==Ht;i++){let{nextN:a,offset:c,isZero:l,isNeg:u}=Xr(o,i,s);if(o=a,!l){let d=n[c];r=r.add(u?d.negate():d);}}return Qr(o),r}getPrecomputes(e,n,o){let r=Zn.
342
- get(n);return r||(r=this.precomputeWindow(n,e),e!==1&&(typeof o=="function"&&(r=o(r)),Zn.set(n,r))),r}cached(e,n,o){let r=Xn(e);return this.wNAF(r,this.getPrecomputes(r,e,o),n)}unsafe(e,n,o,r){let s=Xn(
343
- e);return s===1?this._unsafeLadder(e,n,r):this.wNAFUnsafe(s,this.getPrecomputes(s,e,o),n,r)}createCache(e,n){ts(n,this.bits),ns.set(e,n),Zn.delete(e);}hasCache(e){return Xn(e)!==1}};function es(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Yr(e),e}else return qt(t,{isLE:n})}function os(t,e,n={},o){if(o===void 0&&(o=t==="edwar\
346
+ i=Zn(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:u,isNeg:d,isNegF:m,offsetF:f}=Qr(o,a,i);o=c,u?s=s.add(Xr(m,n[f])):r=r.add(Xr(d,n[l]));}return es(o),{p:r,f:s}}wNAFUnsafe(e,n,o,r=this.
347
+ ZERO){let s=Zn(e,this.bits);for(let i=0;i<s.windows&&o!==Ht;i++){let{nextN:a,offset:c,isZero:l,isNeg:u}=Qr(o,i,s);if(o=a,!l){let d=n[c];r=r.add(u?d.negate():d);}}return es(o),r}getPrecomputes(e,n,o){let r=Xn.
348
+ get(n);return r||(r=this.precomputeWindow(n,e),e!==1&&(typeof o=="function"&&(r=o(r)),Xn.set(n,r))),r}cached(e,n,o){let r=Qn(e);return this.wNAF(r,this.getPrecomputes(r,e,o),n)}unsafe(e,n,o,r){let s=Qn(
349
+ e);return s===1?this._unsafeLadder(e,n,r):this.wNAFUnsafe(s,this.getPrecomputes(s,e,o),n,r)}createCache(e,n){ns(n,this.bits),os.set(e,n),Xn.delete(e);}hasCache(e){return Qn(e)!==1}};function ts(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Zr(e),e}else return qt(t,{isLE:n})}function rs(t,e,n={},o){if(o===void 0&&(o=t==="edwar\
344
350
  ds"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(let c of ["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>Ht))throw new Error(`CURVE.${c} must be positive bigint`)}
345
- let r=es(e.p,n.Fp,o),s=es(e.n,n.Fn,o),a=["Gx","Gy","a","d"];for(let c of a)if(!r.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.
346
- freeze(Object.assign({},e)),{CURVE:e,Fp:r,Fn:s}}function rs(t,e){return function(o){let r=t(o);return {secretKey:r,publicKey:e(r)}}}var Re=BigInt(0),H=BigInt(1),eo=BigInt(2),ya=BigInt(8);function va(t,e,n,o){let r=t.sqr(n),s=t.sqr(o),i=t.add(t.mul(e.a,r),s),a=t.add(t.ONE,t.mul(e.d,t.mul(r,s)));return t.eql(i,a)}function ss(t,e={}){
347
- let n=e,o=os("edwards",t,n,n.FpFnLE),{Fp:r,Fn:s}=o,i=o.CURVE,{h:a}=i;Me(n,{},{uvRatio:"function"});let c=eo<<BigInt(s.BYTES*8)-H,l=p=>r.create(p),u=n.uvRatio===void 0?(p,g)=>{try{return {isValid:!0,value:r.
348
- sqrt(r.div(p,g))}}catch{return {isValid:false,value:Re}}}:n.uvRatio;if(!va(r,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function d(p,g,x=false){let b=x?H:Re;return Kn("coordinate "+p,g,
349
- b,c),g}function f(p){if(!(p instanceof m))throw new Error("EdwardsPoint expected")}class m{static BASE=new m(i.Gx,i.Gy,H,l(i.Gx*i.Gy));static ZERO=new m(Re,H,H,Re);static Fp=r;static Fn=s;X;Y;Z;T;constructor(g,x,b,y){
350
- this.X=d("x",g),this.Y=d("y",x),this.Z=d("z",b,true),this.T=d("t",y),Object.freeze(this);}static CURVE(){return i}static fromAffine(g){if(g instanceof m)throw new Error("extended point not allowed");let{
351
- x,y:b}=g||{};return d("x",x),d("y",b),new m(x,b,H,l(x*b))}static fromBytes(g,x=false){let b=r.BYTES,{a:y,d:E}=i;g=lt(z(g,b,"point")),ze(x,"zip215");let C=lt(g),O=g[b-1];C[b-1]=O&-129;let T=be(C),D=x?c:r.
352
- ORDER;Kn("point.y",T,Re,D);let R=l(T*T),S=l(R-H),B=l(E*R-y),{isValid:k,value:w}=u(S,B);if(!k)throw new Error("bad point: invalid y coordinate");let _=(w&H)===H,P=(O&128)!==0;if(!x&&w===Re&&P)throw new Error(
353
- "bad point: x=0 and x_0=1");return P!==_&&(w=l(-w)),m.fromAffine({x:w,y:T})}static fromHex(g,x=false){return m.fromBytes(Lr(g),x)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(g=8,x=true){
354
- return h.createCache(this,g),x||this.multiply(eo),this}assertValidity(){let g=this,{a:x,d:b}=i;if(g.is0())throw new Error("bad point: ZERO");let{X:y,Y:E,Z:C,T:O}=g,T=l(y*y),D=l(E*E),R=l(C*C),S=l(R*R),
355
- B=l(T*x),k=l(R*l(B+D)),w=l(S+l(b*l(T*D)));if(k!==w)throw new Error("bad point: equation left != right (1)");let _=l(y*E),P=l(C*O);if(_!==P)throw new Error("bad point: equation left != right (2)")}equals(g){
356
- f(g);let{X:x,Y:b,Z:y}=this,{X:E,Y:C,Z:O}=g,T=l(x*O),D=l(E*y),R=l(b*O),S=l(C*y);return T===D&&R===S}is0(){return this.equals(m.ZERO)}negate(){return new m(l(-this.X),this.Y,this.Z,l(-this.T))}double(){
357
- let{a:g}=i,{X:x,Y:b,Z:y}=this,E=l(x*x),C=l(b*b),O=l(eo*l(y*y)),T=l(g*E),D=x+b,R=l(l(D*D)-E-C),S=T+C,B=S-O,k=T-C,w=l(R*B),_=l(S*k),P=l(R*k),N=l(B*S);return new m(w,_,N,P)}add(g){f(g);let{a:x,d:b}=i,{X:y,
358
- Y:E,Z:C,T:O}=this,{X:T,Y:D,Z:R,T:S}=g,B=l(y*T),k=l(E*D),w=l(O*b*S),_=l(C*R),P=l((y+E)*(T+D)-B-k),N=_-w,V=_+w,I=l(k-x*B),X=l(P*N),$=l(V*I),Q=l(P*I),W=l(N*V);return new m(X,$,W,Q)}subtract(g){return f(g),
359
- this.add(g.negate())}multiply(g){if(!s.isValidNot0(g))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:x,f:b}=h.cached(this,g,y=>Jt(m,y));return Jt(m,[x,b])[0]}multiplyUnsafe(g){
360
- if(!s.isValid(g))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return g===Re?m.ZERO:this.is0()||g===H?this:h.unsafe(this,g,x=>Jt(m,x))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){
361
- return h.unsafe(this,i.n).is0()}toAffine(g){let x=this,b=g,{X:y,Y:E,Z:C}=x,O=x.is0();b==null&&(b=O?ya:r.inv(C));let T=l(y*b),D=l(E*b),R=r.mul(C,b);if(O)return {x:Re,y:H};if(R!==H)throw new Error("invZ \
362
- was invalid");return {x:T,y:D}}clearCofactor(){return a===H?this:this.multiplyUnsafe(a)}toBytes(){let{x:g,y:x}=this.toAffine(),b=r.toBytes(x);return b[b.length-1]|=g&H?128:0,b}toHex(){return Un(this.toBytes())}toString(){
363
- return `<Point ${this.is0()?"ZERO":this.toHex()}>`}}let h=new Kt(m,s.BITS);return s.BITS>=8&&m.BASE.precompute(8),Object.freeze(m.prototype),Object.freeze(m),m}var Wt=class{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){
364
- this.ep=e;}static fromBytes(e){Wn();}static fromHex(e){Wn();}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity();}toAffine(e){
365
- return this.ep.toAffine(e)}toHex(){return Un(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return true}isSmallOrder(){return false}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){
351
+ let r=ts(e.p,n.Fp,o),s=ts(e.n,n.Fn,o),a=["Gx","Gy","a","d"];for(let c of a)if(!r.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.
352
+ freeze(Object.assign({},e)),{CURVE:e,Fp:r,Fn:s}}function ss(t,e){return function(o){let r=t(o);return {secretKey:r,publicKey:e(r)}}}var Re=BigInt(0),H=BigInt(1),to=BigInt(2),ka=BigInt(8);function wa(t,e,n,o){let r=t.sqr(n),s=t.sqr(o),i=t.add(t.mul(e.a,r),s),a=t.add(t.ONE,t.mul(e.d,t.mul(r,s)));return t.eql(i,a)}function is(t,e={}){
353
+ let n=e,o=rs("edwards",t,n,n.FpFnLE),{Fp:r,Fn:s}=o,i=o.CURVE,{h:a}=i;Me(n,{},{uvRatio:"function"});let c=to<<BigInt(s.BYTES*8)-H,l=g=>r.create(g),u=n.uvRatio===void 0?(g,p)=>{try{return {isValid:!0,value:r.
354
+ sqrt(r.div(g,p))}}catch{return {isValid:false,value:Re}}}:n.uvRatio;if(!wa(r,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function d(g,p,x=false){let b=x?H:Re;return Jn("coordinate "+g,p,
355
+ b,c),p}function m(g){if(!(g instanceof f))throw new Error("EdwardsPoint expected")}class f{static BASE=new f(i.Gx,i.Gy,H,l(i.Gx*i.Gy));static ZERO=new f(Re,H,H,Re);static Fp=r;static Fn=s;X;Y;Z;T;constructor(p,x,b,y){
356
+ this.X=d("x",p),this.Y=d("y",x),this.Z=d("z",b,true),this.T=d("t",y),Object.freeze(this);}static CURVE(){return i}static fromAffine(p){if(p instanceof f)throw new Error("extended point not allowed");let{
357
+ x,y:b}=p||{};return d("x",x),d("y",b),new f(x,b,H,l(x*b))}static fromBytes(p,x=false){let b=r.BYTES,{a:y,d:T}=i;p=lt(z(p,b,"point")),ze(x,"zip215");let E=lt(p),R=p[b-1];E[b-1]=R&-129;let C=be(E),D=x?c:r.
358
+ ORDER;Jn("point.y",C,Re,D);let I=l(C*C),S=l(I-H),B=l(T*I-y),{isValid:k,value:w}=u(S,B);if(!k)throw new Error("bad point: invalid y coordinate");let _=(w&H)===H,P=(R&128)!==0;if(!x&&w===Re&&P)throw new Error(
359
+ "bad point: x=0 and x_0=1");return P!==_&&(w=l(-w)),f.fromAffine({x:w,y:C})}static fromHex(p,x=false){return f.fromBytes(Mr(p),x)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(p=8,x=true){
360
+ return h.createCache(this,p),x||this.multiply(to),this}assertValidity(){let p=this,{a:x,d:b}=i;if(p.is0())throw new Error("bad point: ZERO");let{X:y,Y:T,Z:E,T:R}=p,C=l(y*y),D=l(T*T),I=l(E*E),S=l(I*I),
361
+ B=l(C*x),k=l(I*l(B+D)),w=l(S+l(b*l(C*D)));if(k!==w)throw new Error("bad point: equation left != right (1)");let _=l(y*T),P=l(E*R);if(_!==P)throw new Error("bad point: equation left != right (2)")}equals(p){
362
+ m(p);let{X:x,Y:b,Z:y}=this,{X:T,Y:E,Z:R}=p,C=l(x*R),D=l(T*y),I=l(b*R),S=l(E*y);return C===D&&I===S}is0(){return this.equals(f.ZERO)}negate(){return new f(l(-this.X),this.Y,this.Z,l(-this.T))}double(){
363
+ let{a:p}=i,{X:x,Y:b,Z:y}=this,T=l(x*x),E=l(b*b),R=l(to*l(y*y)),C=l(p*T),D=x+b,I=l(l(D*D)-T-E),S=C+E,B=S-R,k=C-E,w=l(I*B),_=l(S*k),P=l(I*k),N=l(B*S);return new f(w,_,N,P)}add(p){m(p);let{a:x,d:b}=i,{X:y,
364
+ Y:T,Z:E,T:R}=this,{X:C,Y:D,Z:I,T:S}=p,B=l(y*C),k=l(T*D),w=l(R*b*S),_=l(E*I),P=l((y+T)*(C+D)-B-k),N=_-w,V=_+w,O=l(k-x*B),X=l(P*N),$=l(V*O),Q=l(P*O),W=l(N*V);return new f(X,$,W,Q)}subtract(p){return m(p),
365
+ this.add(p.negate())}multiply(p){if(!s.isValidNot0(p))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:x,f:b}=h.cached(this,p,y=>Jt(f,y));return Jt(f,[x,b])[0]}multiplyUnsafe(p){
366
+ if(!s.isValid(p))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return p===Re?f.ZERO:this.is0()||p===H?this:h.unsafe(this,p,x=>Jt(f,x))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){
367
+ return h.unsafe(this,i.n).is0()}toAffine(p){let x=this,b=p,{X:y,Y:T,Z:E}=x,R=x.is0();b==null&&(b=R?ka:r.inv(E));let C=l(y*b),D=l(T*b),I=r.mul(E,b);if(R)return {x:Re,y:H};if(I!==H)throw new Error("invZ \
368
+ was invalid");return {x:C,y:D}}clearCofactor(){return a===H?this:this.multiplyUnsafe(a)}toBytes(){let{x:p,y:x}=this.toAffine(),b=r.toBytes(x);return b[b.length-1]|=p&H?128:0,b}toHex(){return qn(this.toBytes())}toString(){
369
+ return `<Point ${this.is0()?"ZERO":this.toHex()}>`}}let h=new Kt(f,s.BITS);return s.BITS>=8&&f.BASE.precompute(8),Object.freeze(f.prototype),Object.freeze(f),f}var Wt=class{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){
370
+ this.ep=e;}static fromBytes(e){Gn();}static fromHex(e){Gn();}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity();}toAffine(e){
371
+ return this.ep.toAffine(e)}toHex(){return qn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return true}isSmallOrder(){return false}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){
366
372
  return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.
367
- ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}};function is(t,e,n={}){if(typeof e!="function")throw new Error('"hash" function param is r\
373
+ ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}};function as(t,e,n={}){if(typeof e!="function")throw new Error('"hash" function param is r\
368
374
  equired');let o=e,r=n;Me(r,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",zip215:"boolean",mapToCurve:"function"});let{prehash:s}=r,{BASE:i,Fp:a,Fn:c}=t,l=o.
369
- outputLen,u=2*a.BYTES;if(l!==void 0&&(ge(l,"hash.outputLen"),l!==u))throw new Error(`hash.outputLen must be ${u}, got ${l}`);let d=r.randomBytes===void 0?Mr:r.randomBytes,f=r.adjustScalarBytes===void 0?
370
- k=>k:r.adjustScalarBytes,m=r.domain===void 0?(k,w,_)=>{if(ze(_,"phflag"),w.length||_)throw new Error("Contexts/pre-hash are not supported");return k}:r.domain;function h(k){return c.create(be(k))}function p(k){
371
- let w=T.secretKey;z(k,T.secretKey,"secretKey");let _=z(o(k),2*w,"hashedSecretKey"),P=f(_.slice(0,w)),N=_.slice(w,2*w),V=h(P);return {head:P,prefix:N,scalar:V}}function g(k){let{head:w,prefix:_,scalar:P}=p(
372
- k),N=i.multiply(P),V=N.toBytes();return {head:w,prefix:_,scalar:P,point:N,pointBytes:V}}function x(k){return g(k).pointBytes}function b(k=Uint8Array.of(),...w){let _=le(...w);return h(o(m(_,z(k,void 0,
373
- "context"),!!s)))}function y(k,w,_={}){k=z(k,void 0,"message"),s&&(k=s(k));let{prefix:P,scalar:N,pointBytes:V}=g(w),I=b(_.context,P,k),X=i.multiply(I).toBytes(),$=b(_.context,X,V,k),Q=c.create(I+$*N);
374
- if(!c.isValid(Q))throw new Error("sign failed: invalid s");let W=le(X,c.toBytes(Q));return z(W,T.signature,"result")}let E={zip215:r.zip215};function C(k,w,_,P=E){let{context:N}=P,V=P.zip215===void 0?
375
- !!E.zip215:P.zip215,I=T.signature;k=z(k,I,"signature"),w=z(w,void 0,"message"),_=z(_,T.publicKey,"publicKey"),V!==void 0&&ze(V,"zip215"),s&&(w=s(w));let X=I/2,$=k.subarray(0,X),Q=be(k.subarray(X,I)),W,
375
+ outputLen,u=2*a.BYTES;if(l!==void 0&&(ge(l,"hash.outputLen"),l!==u))throw new Error(`hash.outputLen must be ${u}, got ${l}`);let d=r.randomBytes===void 0?Br:r.randomBytes,m=r.adjustScalarBytes===void 0?
376
+ k=>k:r.adjustScalarBytes,f=r.domain===void 0?(k,w,_)=>{if(ze(_,"phflag"),w.length||_)throw new Error("Contexts/pre-hash are not supported");return k}:r.domain;function h(k){return c.create(be(k))}function g(k){
377
+ let w=C.secretKey;z(k,C.secretKey,"secretKey");let _=z(o(k),2*w,"hashedSecretKey"),P=m(_.slice(0,w)),N=_.slice(w,2*w),V=h(P);return {head:P,prefix:N,scalar:V}}function p(k){let{head:w,prefix:_,scalar:P}=g(
378
+ k),N=i.multiply(P),V=N.toBytes();return {head:w,prefix:_,scalar:P,point:N,pointBytes:V}}function x(k){return p(k).pointBytes}function b(k=Uint8Array.of(),...w){let _=le(...w);return h(o(f(_,z(k,void 0,
379
+ "context"),!!s)))}function y(k,w,_={}){k=z(k,void 0,"message"),s&&(k=s(k));let{prefix:P,scalar:N,pointBytes:V}=p(w),O=b(_.context,P,k),X=i.multiply(O).toBytes(),$=b(_.context,X,V,k),Q=c.create(O+$*N);
380
+ if(!c.isValid(Q))throw new Error("sign failed: invalid s");let W=le(X,c.toBytes(Q));return z(W,C.signature,"result")}let T={zip215:r.zip215};function E(k,w,_,P=T){let{context:N}=P,V=P.zip215===void 0?
381
+ !!T.zip215:P.zip215,O=C.signature;k=z(k,O,"signature"),w=z(w,void 0,"message"),_=z(_,C.publicKey,"publicKey"),V!==void 0&&ze(V,"zip215"),s&&(w=s(w));let X=O/2,$=k.subarray(0,X),Q=be(k.subarray(X,O)),W,
376
382
  ue,ve;try{W=t.fromBytes(_,V),ue=t.fromBytes($,V),ve=i.multiplyUnsafe(Q);}catch{return false}if(!V&&W.isSmallOrder())return false;let ke=b(N,$,_,w);return ue.add(W.multiplyUnsafe(ke)).subtract(ve).clearCofactor().
377
- is0()}let O=a.BYTES,T={secretKey:O,publicKey:O,signature:2*O,seed:O};function D(k){return k=k===void 0?d(T.seed):k,z(k,T.seed,"seed")}function R(k){return Ft(k)&&k.length===T.secretKey}function S(k,w){
378
- try{return !!t.fromBytes(k,w===void 0?E.zip215:w)}catch{return false}}let B={getExtendedPublicKey:g,randomSecretKey:D,isValidSecretKey:R,isValidPublicKey:S,toMontgomery(k){let{y:w}=t.fromBytes(k),_=T.publicKey,
379
- P=_===32;if(!P&&_!==57)throw new Error("only defined for 25519 and 448");let N=P?a.div(H+w,H-w):a.div(w-H,w+H);return a.toBytes(N)},toMontgomerySecret(k){let w=T.secretKey;z(k,w);let _=o(k.subarray(0,
380
- w));return f(_).subarray(0,w)}};return Object.freeze(T),Object.freeze(B),Object.freeze({keygen:rs(D,x),getPublicKey:x,sign:y,verify:C,utils:B,Point:t,lengths:T})}var Sa=BigInt(0),ye=BigInt(1),cs=BigInt(2);var Ea=BigInt(5),Ta=BigInt(8),Ve=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),so={p:Ve,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Ta,
383
+ is0()}let R=a.BYTES,C={secretKey:R,publicKey:R,signature:2*R,seed:R};function D(k){return k=k===void 0?d(C.seed):k,z(k,C.seed,"seed")}function I(k){return Ft(k)&&k.length===C.secretKey}function S(k,w){
384
+ try{return !!t.fromBytes(k,w===void 0?T.zip215:w)}catch{return false}}let B={getExtendedPublicKey:p,randomSecretKey:D,isValidSecretKey:I,isValidPublicKey:S,toMontgomery(k){let{y:w}=t.fromBytes(k),_=C.publicKey,
385
+ P=_===32;if(!P&&_!==57)throw new Error("only defined for 25519 and 448");let N=P?a.div(H+w,H-w):a.div(w-H,w+H);return a.toBytes(N)},toMontgomerySecret(k){let w=C.secretKey;z(k,w);let _=o(k.subarray(0,
386
+ w));return m(_).subarray(0,w)}};return Object.freeze(C),Object.freeze(B),Object.freeze({keygen:ss(D,x),getPublicKey:x,sign:y,verify:E,utils:B,Point:t,lengths:C})}var Ea=BigInt(0),ye=BigInt(1),ls=BigInt(2);var Ra=BigInt(5),Ca=BigInt(8),Ve=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),io={p:Ve,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Ca,
381
387
  a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6d\
382
- c5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Ra(t){let e=BigInt(10),n=BigInt(20),o=BigInt(40),r=BigInt(80),s=Ve,a=t*t%
383
- s*t%s,c=re(a,cs,s)*a%s,l=re(c,ye,s)*t%s,u=re(l,Ea,s)*l%s,d=re(u,e,s)*u%s,f=re(d,n,s)*d%s,m=re(f,o,s)*f%s,h=re(m,r,s)*m%s,p=re(h,r,s)*m%s,g=re(p,e,s)*u%s;return {pow_p_5_8:re(g,cs,s)*t%s,b2:a}}function Ca(t){
384
- return t[0]&=248,t[31]&=127,t[31]|=64,t}var no=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function io(t,e){let n=Ve,o=j(e*e*e,n),r=j(o*o*e,n),s=Ra(t*r).pow_p_5_8,
385
- i=j(t*o*s,n),a=j(e*i*i,n),c=i,l=j(i*no,n),u=a===t,d=a===j(-t,n),f=a===j(-t*no,n);return u&&(i=c),(d||f)&&(i=l),xe(i,n)&&(i=j(-i,n)),{isValid:u||d,value:i}}var Ie=ss(so,{uvRatio:io}),Ce=Ie.Fp,ds=Ie.Fn;function Ia(t){return is(Ie,Nt,Object.assign({adjustScalarBytes:Ca,zip215:true},t))}var ps=Ia({});var oo=no;BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");var _a=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt(
386
- "1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var ls=t=>io(ye,t),Pa=BigInt("0x7\
387
- fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),ro=t=>Ce.create(be(t)&Pa);var Oe=class t extends Wt{static BASE=new t(
388
- Ie.BASE);static ZERO=new t(Ie.ZERO);static Fp=Ce;static Fn=ds;constructor(e){super(e);}static fromAffine(e){return new t(Ie.fromAffine(e))}assertSame(e){if(!(e instanceof t))throw new Error("RistrettoP\
389
- oint expected")}init(e){return new t(e)}static fromBytes(e){oe(e,32);let{a:n,d:o}=so,r=Ve,s=E=>Ce.create(E),i=ro(e);if(!jr(Ce.toBytes(i),e)||xe(i,r))throw new Error("invalid ristretto255 encoding 1");
390
- let a=s(i*i),c=s(ye+n*a),l=s(ye-n*a),u=s(c*c),d=s(l*l),f=s(n*o*u-d),{isValid:m,value:h}=ls(s(f*d)),p=s(h*l),g=s(h*p*f),x=s((i+i)*p);xe(x,r)&&(x=s(-x));let b=s(c*g),y=s(x*b);if(!m||xe(y,r)||b===Sa)throw new Error(
391
- "invalid ristretto255 encoding 2");return new t(new Ie(x,b,ye,y))}static fromHex(e){return t.fromBytes(it(e))}toBytes(){let{X:e,Y:n,Z:o,T:r}=this.ep,s=Ve,i=g=>Ce.create(g),a=i(i(o+n)*i(o-n)),c=i(e*n),
392
- l=i(c*c),{value:u}=ls(i(a*l)),d=i(u*a),f=i(u*c),m=i(d*f*r),h;if(xe(r*m,s)){let g=i(n*oo),x=i(e*oo);e=g,n=x,h=i(d*_a);}else h=f;xe(e*m,s)&&(n=i(-n));let p=i((o-n)*h);return xe(p,s)&&(p=i(-p)),Ce.toBytes(
393
- p)}equals(e){this.assertSame(e);let{X:n,Y:o}=this.ep,{X:r,Y:s}=e.ep,i=l=>Ce.create(l),a=i(n*s)===i(o*r),c=i(o*s)===i(n*r);return a||c}is0(){return this.equals(t.ZERO)}};Object.freeze(Oe.BASE);Object.freeze(
394
- Oe.ZERO);Object.freeze(Oe.prototype);Object.freeze(Oe);var fs=`-----BEGIN PUBLIC KEY-----
388
+ c5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Ia(t){let e=BigInt(10),n=BigInt(20),o=BigInt(40),r=BigInt(80),s=Ve,a=t*t%
389
+ s*t%s,c=re(a,ls,s)*a%s,l=re(c,ye,s)*t%s,u=re(l,Ra,s)*l%s,d=re(u,e,s)*u%s,m=re(d,n,s)*d%s,f=re(m,o,s)*m%s,h=re(f,r,s)*f%s,g=re(h,r,s)*f%s,p=re(g,e,s)*u%s;return {pow_p_5_8:re(p,ls,s)*t%s,b2:a}}function Oa(t){
390
+ return t[0]&=248,t[31]&=127,t[31]|=64,t}var oo=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function ao(t,e){let n=Ve,o=j(e*e*e,n),r=j(o*o*e,n),s=Ia(t*r).pow_p_5_8,
391
+ i=j(t*o*s,n),a=j(e*i*i,n),c=i,l=j(i*oo,n),u=a===t,d=a===j(-t,n),m=a===j(-t*oo,n);return u&&(i=c),(d||m)&&(i=l),xe(i,n)&&(i=j(-i,n)),{isValid:u||d,value:i}}var Ie=is(io,{uvRatio:ao}),Ce=Ie.Fp,ps=Ie.Fn;function _a(t){return as(Ie,Nt,Object.assign({adjustScalarBytes:Oa,zip215:true},t))}var fs=_a({});var ro=oo;BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");var Da=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt(
392
+ "1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var us=t=>ao(ye,t),Ma=BigInt("0x7\
393
+ fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),so=t=>Ce.create(be(t)&Ma);var Oe=class t extends Wt{static BASE=new t(
394
+ Ie.BASE);static ZERO=new t(Ie.ZERO);static Fp=Ce;static Fn=ps;constructor(e){super(e);}static fromAffine(e){return new t(Ie.fromAffine(e))}assertSame(e){if(!(e instanceof t))throw new Error("RistrettoP\
395
+ oint expected")}init(e){return new t(e)}static fromBytes(e){oe(e,32);let{a:n,d:o}=io,r=Ve,s=T=>Ce.create(T),i=so(e);if(!$r(Ce.toBytes(i),e)||xe(i,r))throw new Error("invalid ristretto255 encoding 1");
396
+ let a=s(i*i),c=s(ye+n*a),l=s(ye-n*a),u=s(c*c),d=s(l*l),m=s(n*o*u-d),{isValid:f,value:h}=us(s(m*d)),g=s(h*l),p=s(h*g*m),x=s((i+i)*g);xe(x,r)&&(x=s(-x));let b=s(c*p),y=s(x*b);if(!f||xe(y,r)||b===Ea)throw new Error(
397
+ "invalid ristretto255 encoding 2");return new t(new Ie(x,b,ye,y))}static fromHex(e){return t.fromBytes(it(e))}toBytes(){let{X:e,Y:n,Z:o,T:r}=this.ep,s=Ve,i=p=>Ce.create(p),a=i(i(o+n)*i(o-n)),c=i(e*n),
398
+ l=i(c*c),{value:u}=us(i(a*l)),d=i(u*a),m=i(u*c),f=i(d*m*r),h;if(xe(r*f,s)){let p=i(n*ro),x=i(e*ro);e=p,n=x,h=i(d*Da);}else h=m;xe(e*f,s)&&(n=i(-n));let g=i((o-n)*h);return xe(g,s)&&(g=i(-g)),Ce.toBytes(
399
+ g)}equals(e){this.assertSame(e);let{X:n,Y:o}=this.ep,{X:r,Y:s}=e.ep,i=l=>Ce.create(l),a=i(n*s)===i(o*r),c=i(o*s)===i(n*r);return a||c}is0(){return this.equals(t.ZERO)}};Object.freeze(Oe.BASE);Object.freeze(
400
+ Oe.ZERO);Object.freeze(Oe.prototype);Object.freeze(Oe);var ms=`-----BEGIN PUBLIC KEY-----
395
401
  MCowBQYDK2VwAyEAWBiklf0kmDIVmM7nMiCxwiEAkwQIiqWGuRiRDJonsFY=
396
- -----END PUBLIC KEY-----`;function ms(t){let e=atob(t),n=new Uint8Array(e.length);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return n}function ao(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=e.
397
- length%4?"=".repeat(4-e.length%4):"";return ms(e+n)}function Ma(t){let e=t.replace(/-----[^-]+-----/g,"").replace(/\s+/g,""),n=ms(e);return n.subarray(n.length-32)}var Ba=new TextEncoder,hs=new TextDecoder;
398
- function Na(t){return typeof t=="object"&&t!==null&&"keys"in t}function co(t,e){let n=t.split(".");if(n.length!==3)return {ok:false,reason:"malformed token"};let o=n[0],r=n[1],s=n[2],i;try{i=JSON.parse(hs.
399
- decode(ao(o)));}catch{return {ok:false,reason:"header is not valid JSON"}}let a;if(Na(e)){let u=typeof i.kid=="string"?i.kid:e.defaultKid,d=e.keys[u];if(!d)return {ok:false,reason:`unknown key id "${u}"`};a=d;}else {
400
- if(!e)return {ok:false,reason:"no verification key"};a=e;}let c;try{if(c=Ma(a),c.length!==32)return {ok:!1,reason:"invalid public key"}}catch{return {ok:false,reason:"invalid public key"}}let l=false;try{l=ps.verify(
401
- ao(s),Ba.encode(`${o}.${r}`),c);}catch{return {ok:false,reason:"signature verification error"}}return l?{ok:true,header:i,payloadBytes:ao(r)}:{ok:false,reason:"bad signature"}}function Ue(t,e){let n=co(t,e);if(!n.
402
- ok||!n.payloadBytes)return {signatureValid:false,...n.reason?{reason:n.reason}:{}};try{return {signatureValid:!0,payload:JSON.parse(hs.decode(n.payloadBytes))}}catch{return {signatureValid:false,reason:"payloa\
403
- d is not valid JSON"}}}function lo(t,e,n){if(n?.has(t.jti))return "revoked";let o=t.expires_at+t.grace_days*86400;return e<=t.expires_at?"active":e<=o?"grace":"expired"}function Ld(t,e,n={}){let o=Ue(t,
404
- e);if(!o.signatureValid||!o.payload)return {status:"invalid",...o.reason?{reason:o.reason}:{}};let r=o.payload,s=n.nowSeconds??Math.floor(Date.now()/1e3),i=lo(r,s,n.revoked);return i==="revoked"?{status:i,
405
- payload:r,reason:"license revoked"}:{status:i,payload:r}}var gs="BVSALA-REVOC",ja=300,$a=new TextDecoder;function bs(t,e,n={}){let o=l=>({ok:false,seq:-1,asOf:0,revoked:new Set,reason:l}),r=co(t,e);if(!r.ok||!r.payloadBytes)return o(r.reason??"bad signature");
406
- if(r.header?.typ!==gs)return o(`unexpected token type "${String(r.header?.typ??"")}" (want ${gs})`);let s;try{s=JSON.parse($a.decode(r.payloadBytes));}catch{return o("payload is not valid JSON")}if(typeof s.
402
+ -----END PUBLIC KEY-----`;function hs(t){let e=atob(t),n=new Uint8Array(e.length);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return n}function co(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=e.
403
+ length%4?"=".repeat(4-e.length%4):"";return hs(e+n)}function Na(t){let e=t.replace(/-----[^-]+-----/g,"").replace(/\s+/g,""),n=hs(e);return n.subarray(n.length-32)}var ja=new TextEncoder,gs=new TextDecoder;
404
+ function $a(t){return typeof t=="object"&&t!==null&&"keys"in t}function lo(t,e){let n=t.split(".");if(n.length!==3)return {ok:false,reason:"malformed token"};let o=n[0],r=n[1],s=n[2],i;try{i=JSON.parse(gs.
405
+ decode(co(o)));}catch{return {ok:false,reason:"header is not valid JSON"}}let a;if($a(e)){let u=typeof i.kid=="string"?i.kid:e.defaultKid,d=e.keys[u];if(!d)return {ok:false,reason:`unknown key id "${u}"`};a=d;}else {
406
+ if(!e)return {ok:false,reason:"no verification key"};a=e;}let c;try{if(c=Na(a),c.length!==32)return {ok:!1,reason:"invalid public key"}}catch{return {ok:false,reason:"invalid public key"}}let l=false;try{l=fs.verify(
407
+ co(s),ja.encode(`${o}.${r}`),c);}catch{return {ok:false,reason:"signature verification error"}}return l?{ok:true,header:i,payloadBytes:co(r)}:{ok:false,reason:"bad signature"}}function Ue(t,e){let n=lo(t,e);if(!n.
408
+ ok||!n.payloadBytes)return {signatureValid:false,...n.reason?{reason:n.reason}:{}};try{return {signatureValid:!0,payload:JSON.parse(gs.decode(n.payloadBytes))}}catch{return {signatureValid:false,reason:"payloa\
409
+ d is not valid JSON"}}}function uo(t,e,n){if(n?.has(t.jti))return "revoked";let o=t.expires_at+t.grace_days*86400;return e<=t.expires_at?"active":e<=o?"grace":"expired"}function Bd(t,e,n={}){let o=Ue(t,
410
+ e);if(!o.signatureValid||!o.payload)return {status:"invalid",...o.reason?{reason:o.reason}:{}};let r=o.payload,s=n.nowSeconds??Math.floor(Date.now()/1e3),i=uo(r,s,n.revoked);return i==="revoked"?{status:i,
411
+ payload:r,reason:"license revoked"}:{status:i,payload:r}}var bs="BVSALA-REVOC",Fa=300,za=new TextDecoder;function xs(t,e,n={}){let o=l=>({ok:false,seq:-1,asOf:0,revoked:new Set,reason:l}),r=lo(t,e);if(!r.ok||!r.payloadBytes)return o(r.reason??"bad signature");
412
+ if(r.header?.typ!==bs)return o(`unexpected token type "${String(r.header?.typ??"")}" (want ${bs})`);let s;try{s=JSON.parse(za.decode(r.payloadBytes));}catch{return o("payload is not valid JSON")}if(typeof s.
407
413
  seq!="number"||typeof s.asOf!="number"||!Array.isArray(s.revoked))return o("malformed revocation payload");let i=n.minSeq??0;if(s.seq<i)return o(`stale/rolled-back list (seq ${s.seq} < ${i})`);let a=n.
408
- nowSeconds??Math.floor(Date.now()/1e3),c=n.maxSkewSeconds??ja;return s.asOf>a+c?o(`asOf too far in the future (${s.asOf} > ${a+c})`):{ok:true,seq:s.seq,asOf:s.asOf,revoked:new Set(s.revoked)}}var qe=class{_seq=-1;_asOf=0;_lastContactAt=0;set=new Set;get seq(){
414
+ nowSeconds??Math.floor(Date.now()/1e3),c=n.maxSkewSeconds??Fa;return s.asOf>a+c?o(`asOf too far in the future (${s.asOf} > ${a+c})`):{ok:true,seq:s.seq,asOf:s.asOf,revoked:new Set(s.revoked)}}var qe=class{_seq=-1;_asOf=0;_lastContactAt=0;set=new Set;get seq(){
409
415
  return this._seq}get asOf(){return this._asOf}get lastContactAt(){return this._lastContactAt}markContact(e){e>this._lastContactAt&&(this._lastContactAt=e);}has(e){return this.set.has(e)}snapshot(){return this.
410
416
  set}apply(e){if(e.seq<this._seq)return false;let n=this.set.size;for(let s of e.revoked)this.set.add(s);let o=this.set.size>n,r=e.seq>this._seq;return e.seq>this._seq&&(this._seq=e.seq),e.asOf>this._asOf&&
411
- (this._asOf=e.asOf),o||r}};function Gt(t,e,n){let o=()=>Math.floor((n.now?n.now():Date.now())/1e3),r=n.startedAt??o(),s=Ue(t,e),i=s.signatureValid?s.payload:void 0,a=new Set(i?.features??[]),c=()=>{if(!i)return "invalid";let u=lo(
412
- i,o(),n.revocation.snapshot());if(n.maxStalenessSeconds!=null&&(u==="active"||u==="grace")){let d=i.expires_at+i.grace_days*86400,f=Math.min(r,d),m=Math.max(n.revocation.lastContactAt,f);if(o()-m>n.maxStalenessSeconds)
413
- return "stale"}return u},l=()=>{let u=c();return u==="active"||u==="grace"};return {isEntitled:u=>l()&&a.has(u),isActive:()=>l(),status:c,refreshAfter:()=>{if(i)return Math.min(i.expires_at,o()+86400)}}}function xs(t,e,n){return Gt(t,e,{revocation:new qe,...n?{now:n}:{}})}var He={pollIntervalSeconds:900,floorSeconds:300,maxIntervalSeconds:3600,jitterRatio:.1,maxSkewSeconds:300,requestTimeoutMs:3e4},ys=3,Fa=12;function za(t){let e=t.random??Math.random,n;if(t.consecutiveFailures>
417
+ (this._asOf=e.asOf),o||r}};function Gt(t,e,n){let o=()=>Math.floor((n.now?n.now():Date.now())/1e3),r=n.startedAt??o(),s=Ue(t,e),i=s.signatureValid?s.payload:void 0,a=new Set(i?.features??[]),c=()=>{if(!i)return "invalid";let u=uo(
418
+ i,o(),n.revocation.snapshot());if(n.maxStalenessSeconds!=null&&(u==="active"||u==="grace")){let d=i.expires_at+i.grace_days*86400,m=Math.min(r,d),f=Math.max(n.revocation.lastContactAt,m);if(o()-f>n.maxStalenessSeconds)
419
+ return "stale"}return u},l=()=>{let u=c();return u==="active"||u==="grace"};return {isEntitled:u=>l()&&a.has(u),isActive:()=>l(),status:c,refreshAfter:()=>{if(i)return Math.min(i.expires_at,o()+86400)}}}function ys(t,e,n){return Gt(t,e,{revocation:new qe,...n?{now:n}:{}})}var He={pollIntervalSeconds:900,floorSeconds:300,maxIntervalSeconds:3600,jitterRatio:.1,maxSkewSeconds:300,requestTimeoutMs:3e4},vs=3,Va=12;function Ua(t){let e=t.random??Math.random,n;if(t.consecutiveFailures>
414
420
  0){let r=Math.pow(2,Math.min(t.consecutiveFailures,4));n=Math.min(t.maxIntervalSeconds,t.floorSeconds*r);}else {let r=t.refreshAfter!=null?t.refreshAfter-t.nowSeconds:t.pollIntervalSeconds,s=r<0?t.pollIntervalSeconds:
415
- r;n=Math.min(t.pollIntervalSeconds,Math.max(t.floorSeconds,s));}let o=1+(e()*2-1)*t.jitterRatio;return Math.max(t.floorSeconds,n*o)}var Va=10,Yt=class{constructor(e){this.opts=e;}opts;timer=null;controller=null;consecutiveFailures=0;stopped=false;started=false;warnedNoFetch=false;lastEtag=null;consecutive304=0;now(){
421
+ r;n=Math.min(t.pollIntervalSeconds,Math.max(t.floorSeconds,s));}let o=1+(e()*2-1)*t.jitterRatio;return Math.max(t.floorSeconds,n*o)}var qa=10,Yt=class{constructor(e){this.opts=e;}opts;timer=null;controller=null;consecutiveFailures=0;stopped=false;started=false;warnedNoFetch=false;lastEtag=null;consecutive304=0;now(){
416
422
  return this.opts.nowSeconds?this.opts.nowSeconds():Math.floor(Date.now()/1e3)}resolveFetch(){return this.opts.fetchImpl?this.opts.fetchImpl:typeof fetch<"u"?fetch:void 0}async pollOnce(){let e=this.resolveFetch();
417
423
  if(!e){this.warnedNoFetch||(this.warnedNoFetch=true,console.warn("[bv-sala] no global fetch available; revocation call-home disabled (offline). License expiry is still enforced from the token.")),this.opts.
418
424
  onEvent?.({type:"no-fetch"});return}let n=new AbortController;this.controller=n;let o=this.opts.requestTimeoutMs??He.requestTimeoutMs,r=setTimeout(()=>n.abort(),o);r.unref?.();let s={accept:"applicati\
419
425
  on/json"};this.lastEtag&&(s["if-none-match"]=this.lastEtag);try{let i=await e(this.opts.url,{signal:n.signal,headers:s});if(i.status===304){this.consecutiveFailures=0,this.opts.snapshot.markContact(this.
420
- now()),this.opts.onEvent?.({type:"unchanged",seq:this.opts.snapshot.seq}),this.consecutive304+=1,this.consecutive304>=Va&&(this.consecutive304=0,this.lastEtag=null);return}if(this.consecutive304=0,!i.
421
- ok)throw new Error(`revocations HTTP ${i.status}`);let a=i.headers.get("etag"),c=await i.json();if(!c.list)throw new Error("response missing `list`");this.consecutiveFailures=0;let l=bs(c.list,this.opts.
426
+ now()),this.opts.onEvent?.({type:"unchanged",seq:this.opts.snapshot.seq}),this.consecutive304+=1,this.consecutive304>=qa&&(this.consecutive304=0,this.lastEtag=null);return}if(this.consecutive304=0,!i.
427
+ ok)throw new Error(`revocations HTTP ${i.status}`);let a=i.headers.get("etag"),c=await i.json();if(!c.list)throw new Error("response missing `list`");this.consecutiveFailures=0;let l=xs(c.list,this.opts.
422
428
  publicKeyPem,{minSeq:this.opts.snapshot.seq,nowSeconds:this.now(),maxSkewSeconds:this.opts.maxSkewSeconds??He.maxSkewSeconds});if(!l.ok){let d=l.reason??"rejected";this.opts.onEvent?.({type:"rejected",
423
429
  reason:d}),this.avisar(`rechazada:${d}`,`[bv-sala] la lista de revocaciones NO verifica (${d}). Se mantiene la \xFAltima buena conocida, as\xED que las revocaciones YA conocidas se siguen aplicando, pero la\
424
430
  s nuevas no llegan. Revise ${this.opts.url}.`);return}a&&(this.lastEtag=a),this.opts.snapshot.markContact(this.now());let u=this.opts.snapshot.apply(l);this.opts.onEvent?.(u?{type:"applied",seq:l.seq,
425
431
  size:this.opts.snapshot.snapshot().size}:{type:"unchanged",seq:l.seq});}catch(i){this.consecutiveFailures++,this.opts.onEvent?.({type:"error",error:i}),this.avisarFalloDeRed(i);}finally{clearTimeout(r),
426
432
  this.controller=null;}}callado(){return !!(this.opts.silenceWarnings??this.opts.silenciarAvisos)}avisar(e,n){this.callado()||G(`poller:${this.opts.url}:${e}`,n);}avisarFalloDeRed(e){if(this.callado())return;
427
- let n=this.consecutiveFailures;if(n<ys||(n-ys)%Fa!==0)return;let o=e instanceof Error?e.message:String(e);console.warn(`[bv-sala] no se ha podido contactar con el servidor de revocaciones ${n} veces s\
433
+ let n=this.consecutiveFailures;if(n<vs||(n-vs)%Va!==0)return;let o=e instanceof Error?e.message:String(e);console.warn(`[bv-sala] no se ha podido contactar con el servidor de revocaciones ${n} veces s\
428
434
  eguidas (${o}). La licencia SIGUE funcionando y las revocaciones ya conocidas se siguen aplicando, pero las NUEVAS no est\xE1n llegando. Compruebe la salida hacia ${this.opts.url}.`);}start(){this.started||
429
- this.stopped||(this.started=true,this.pollOnce().finally(()=>this.schedule()));}schedule(){if(this.stopped)return;let e=za({refreshAfter:this.opts.getRefreshAfter?.(),nowSeconds:this.now(),consecutiveFailures:this.
435
+ this.stopped||(this.started=true,this.pollOnce().finally(()=>this.schedule()));}schedule(){if(this.stopped)return;let e=Ua({refreshAfter:this.opts.getRefreshAfter?.(),nowSeconds:this.now(),consecutiveFailures:this.
430
436
  consecutiveFailures,floorSeconds:this.opts.floorSeconds??He.floorSeconds,pollIntervalSeconds:this.opts.pollIntervalSeconds??He.pollIntervalSeconds,maxIntervalSeconds:this.opts.maxIntervalSeconds??He.maxIntervalSeconds,
431
437
  jitterRatio:this.opts.jitterRatio??He.jitterRatio,...this.opts.random?{random:this.opts.random}:{}});this.timer=setTimeout(()=>{this.pollOnce().finally(()=>this.schedule());},e*1e3),this.timer.unref?.();}stop(){
432
438
  this.stopped=true,this.timer&&(clearTimeout(this.timer),this.timer=null),this.controller?.abort();}};var dt=class{options;now;flushIntervalMs;maxBatch;maxBuffer;buffer=[];seatId;ci;timer;inflight=null;fallosSeguidos=0;constructor(e){this.options=e,this.now=e.now??(()=>Date.now()),this.flushIntervalMs=
@@ -436,7 +442,7 @@ flushIntervalMs),this.timer.unref?.());}stop(){this.timer&&(clearInterval(this.t
436
442
  Math.ceil(this.maxBuffer/this.maxBatch)+4,o=0;for(let r=0;r<n&&this.buffer.length>0;r++){let s=this.buffer.length;if(await this.flush(),o=this.buffer.length>=s?o+1:0,o>=2)break}}async flush(){if(this.
437
443
  inflight)return this.inflight;if(this.buffer.length!==0){this.inflight=this.hacerFlush();try{await this.inflight;}finally{this.inflight=null;}}}async hacerFlush(){let e=this.options.fetchImpl??globalThis.
438
444
  fetch;if(!e)return;let n=this.buffer.splice(0,this.maxBatch);try{let o=n.map(s=>this.toWire(s)),r=await e(this.options.url,{method:"POST",headers:{"content-type":"application/json",authorization:`Bear\
439
- er ${this.options.serviceAccountKey}`,[Bo]:`${this.options.surface??"sdk"}/${fn}`},body:JSON.stringify(o)});r.ok?this.fallosSeguidos=0:r.status>=500?(this.fallosSeguidos++,this.requeue(n),this.avisarDeFallo(
445
+ er ${this.options.serviceAccountKey}`,[No]:`${this.options.surface??"sdk"}/${fn}`},body:JSON.stringify(o)});r.ok?this.fallosSeguidos=0:r.status>=500?(this.fallosSeguidos++,this.requeue(n),this.avisarDeFallo(
440
446
  `el servidor respondi\xF3 ${r.status}`)):r.status===401||r.status===403?(G(`metering-auth-${r.status}`,`[bv-sala] el env\xEDo de uso est\xE1 siendo rechazado con HTTP ${r.status} en ${this.options.url}\
441
447
  . Revisa 'serviceAccountKey' (\xBFrotada? \xBFrevocada? \xBFde otra organizaci\xF3n?). Mientras no funcione NO se reporta uso: el panel dir\xE1 que no ve tr\xE1fico y los asientos facturables saldr\xE1n a cero.`),
442
448
  this.options.onAuthError?.(r.status)):(this.fallosSeguidos++,this.avisarDeFallo(r.status===404||r.status===405?`HTTP ${r.status}: la URL de env\xEDo parece equivocada`:`el servidor rechaz\xF3 el lote con\
@@ -448,169 +454,169 @@ this.buffer=[...e,...this.buffer],this.buffer.length>this.maxBuffer&&(this.buffe
448
454
  eliminatedInputTokens:n.tokens.eliminatedInput,compressedInputTokens:n.tokens.compressedInput,baselineOutputTokens:n.tokens.baselineOutput,actualOutputTokens:n.tokens.actualOutput,providerCachedInputTokens:n.
449
455
  tokens.providerCachedInput??0,cacheResult:n.cache.result,...n.cost.eliminatedInputFloorCost!==void 0&&Number.isFinite(n.cost.eliminatedInputFloorCost)&&n.cost.eliminatedInputFloorCost>0&&n.tokens.eliminatedInput>
450
456
  0?{eliminatedInputFloorCost:n.cost.eliminatedInputFloorCost}:{},baselineCost:n.cost.baselineEstimate,actualCost:n.cost.actual,netSavings:n.cost.netSavings,...n.cost.basis?{basis:n.cost.basis}:{},...n.
451
- attribution?.sessionId?{sessionId:n.attribution.sessionId}:{},...n.attribution?.agentId?{agentId:n.attribution.agentId}:{}}}};function Zt(){return globalThis.process}function Ua(t){if(/^[0-9a-f]{12}$/.test(t)||/^\d{1,3}(\.\d{1,3}){3}$/.test(t)||/^ip-\d{1,3}(-\d{1,3}){3}$/i.test(t))return true;let e="[bcdfghjklmnpqrstvwxz2456789\
452
- ]";return new RegExp(`-${e}{8,10}-${e}{5}$`).test(t)}function qa(t){return !!(t.AWS_LAMBDA_FUNCTION_NAME??t.LAMBDA_TASK_ROOT??t.VERCEL??t.VERCEL_ENV??t.K_SERVICE??t.FUNCTION_TARGET??t.FUNCTIONS_WORKER_RUNTIME??
453
- t.NETLIFY)}async function Ha(){if(Zt()?.execPath)try{let e=await import(["node","os"].join(":")),n=typeof e.hostname=="function"?e.hostname():"";return n.length>0?n:void 0}catch{return}}async function Ka(t,e=Ha){
454
- if(t.KUBERNETES_SERVICE_HOST||qa(t))return;let n=t.HOSTNAME??t.COMPUTERNAME??await e();if(!(!n||Ua(n)))return n}async function Ja(){let t=Zt();if(!t||!t.env)return;let e=t.env,n=await Ka(e),o=[t.platform,
455
- t.arch,t.execPath,n,e.USER??e.USERNAME??e.LOGNAME,e.HOME??e.USERPROFILE].filter(r=>typeof r=="string"&&r.length>0);return o.length?o.join("|"):void 0}var Wa=["CI","CONTINUOUS_INTEGRATION","GITHUB_ACTI\
456
- ONS","GITLAB_CI","CIRCLECI","TRAVIS","JENKINS_URL","BUILDKITE","TF_BUILD","TEAMCITY_VERSION","BITBUCKET_BUILD_NUMBER","CODEBUILD_BUILD_ID","HEROKU_TEST_RUN_ID","DRONE"];function uo(){let t=Zt()?.env;if(!t)
457
- return false;for(let e of Wa){let n=t[e];if(n&&n!=="false"&&n!=="0")return true}return false}async function Ga(t,e){let n=globalThis.crypto,o=new TextEncoder;if(n?.subtle)try{let i=await n.subtle.importKey("raw",
457
+ attribution?.sessionId?{sessionId:n.attribution.sessionId}:{},...n.attribution?.agentId?{agentId:n.attribution.agentId}:{}}}};function Zt(){return globalThis.process}function Ha(t){if(/^[0-9a-f]{12}$/.test(t)||/^\d{1,3}(\.\d{1,3}){3}$/.test(t)||/^ip-\d{1,3}(-\d{1,3}){3}$/i.test(t))return true;let e="[bcdfghjklmnpqrstvwxz2456789\
458
+ ]";return new RegExp(`-${e}{8,10}-${e}{5}$`).test(t)}function Ka(t){return !!(t.AWS_LAMBDA_FUNCTION_NAME??t.LAMBDA_TASK_ROOT??t.VERCEL??t.VERCEL_ENV??t.K_SERVICE??t.FUNCTION_TARGET??t.FUNCTIONS_WORKER_RUNTIME??
459
+ t.NETLIFY)}async function Ja(){if(Zt()?.execPath)try{let e=await import(["node","os"].join(":")),n=typeof e.hostname=="function"?e.hostname():"";return n.length>0?n:void 0}catch{return}}async function Wa(t,e=Ja){
460
+ if(t.KUBERNETES_SERVICE_HOST||Ka(t))return;let n=t.HOSTNAME??t.COMPUTERNAME??await e();if(!(!n||Ha(n)))return n}async function Ga(){let t=Zt();if(!t||!t.env)return;let e=t.env,n=await Wa(e),o=[t.platform,
461
+ t.arch,t.execPath,n,e.USER??e.USERNAME??e.LOGNAME,e.HOME??e.USERPROFILE].filter(r=>typeof r=="string"&&r.length>0);return o.length?o.join("|"):void 0}var Ya=["CI","CONTINUOUS_INTEGRATION","GITHUB_ACTI\
462
+ ONS","GITLAB_CI","CIRCLECI","TRAVIS","JENKINS_URL","BUILDKITE","TF_BUILD","TEAMCITY_VERSION","BITBUCKET_BUILD_NUMBER","CODEBUILD_BUILD_ID","HEROKU_TEST_RUN_ID","DRONE"];function po(){let t=Zt()?.env;if(!t)
463
+ return false;for(let e of Ya){let n=t[e];if(n&&n!=="false"&&n!=="0")return true}return false}async function Za(t,e){let n=globalThis.crypto,o=new TextEncoder;if(n?.subtle)try{let i=await n.subtle.importKey("raw",
458
464
  o.encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),a=await n.subtle.sign("HMAC",i,o.encode(e));return [...new Uint8Array(a)].map(c=>c.toString(16).padStart(2,"0")).join("")}catch{}let r=2166136261,s=`${t}\
459
- |${e}`;for(let i=0;i<s.length;i++)r^=s.charCodeAt(i),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}async function po(t){let n=Zt()?.env?.BVSALA_SEAT_ID;if(n&&Ya.test(n))return n;let o=await Ja();
460
- if(!o)return;let r=await Ga(t,o);if(r)return `m-${r.slice(0,32)}`}var Ya=/^[A-Za-z0-9._:/-]{1,128}$/;var vs={inputPer1k:5e-4,outputPer1k:.0015,cachedInputPer1k:5e-5};function ks(t){return {exactCache:t.exactCache??new vt,semanticCache:t.semanticCache,singleflight:t.singleflight??new kt,resolvers:t.resolvers??Jo(),router:t.router??new wt,toolSelector:t.toolSelector??
461
- new St,formatSelector:t.formatSelector??new Ct({tokenizer:t.tokenizer}),schemaRegistry:t.schemaRegistry??new It,constraintBackends:t.constraintBackends??[]}}var Za=36e5,Xa=7*86400,Qa=3e4,Xt=class{opts;pollIntervalMs;refreshLeadSeconds;timer=null;enVuelo=false;parado=false;controller=null;avisadoDeCredencial=false;currentExpiresAt;currentOrg;constructor(e){this.opts=
462
- e,this.pollIntervalMs=e.pollIntervalMs??Za,this.refreshLeadSeconds=e.refreshLeadSeconds??Xa;let n=Ue(e.initialToken,e.publicKey);this.currentExpiresAt=n.signatureValid&&n.payload?n.payload.expires_at:
465
+ |${e}`;for(let i=0;i<s.length;i++)r^=s.charCodeAt(i),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}async function fo(t){let n=Zt()?.env?.BVSALA_SEAT_ID;if(n&&Xa.test(n))return n;let o=await Ga();
466
+ if(!o)return;let r=await Za(t,o);if(r)return `m-${r.slice(0,32)}`}var Xa=/^[A-Za-z0-9._:/-]{1,128}$/;var ks={inputPer1k:5e-4,outputPer1k:.0015,cachedInputPer1k:5e-5};function ws(t){return {exactCache:t.exactCache??new vt,semanticCache:t.semanticCache,singleflight:t.singleflight??new kt,resolvers:t.resolvers??Wo(),router:t.router??new wt,toolSelector:t.toolSelector??
467
+ new St,formatSelector:t.formatSelector??new Ct({tokenizer:t.tokenizer}),schemaRegistry:t.schemaRegistry??new It,constraintBackends:t.constraintBackends??[]}}var Qa=36e5,ec=7*86400,tc=3e4,Xt=class{opts;pollIntervalMs;refreshLeadSeconds;timer=null;enVuelo=false;parado=false;controller=null;avisadoDeCredencial=false;currentExpiresAt;currentOrg;constructor(e){this.opts=
468
+ e,this.pollIntervalMs=e.pollIntervalMs??Qa,this.refreshLeadSeconds=e.refreshLeadSeconds??ec;let n=Ue(e.initialToken,e.publicKey);this.currentExpiresAt=n.signatureValid&&n.payload?n.payload.expires_at:
463
469
  0,this.currentOrg=n.signatureValid?n.payload?.org_id:void 0;}start(){this.timer||(this.checkNow(),this.timer=setInterval(()=>{this.checkNow();},this.pollIntervalMs),this.timer.unref?.());}stop(){this.parado=
464
470
  true,this.timer&&clearInterval(this.timer),this.timer=null,this.controller?.abort(),this.controller=null;}nowSeconds(){return Math.floor((this.opts.now?this.opts.now():Date.now())/1e3)}async checkNow(){if(this.
465
471
  enVuelo||this.parado||this.currentExpiresAt-this.nowSeconds()>this.refreshLeadSeconds)return false;this.enVuelo=true;let e=new AbortController;this.controller=e;let n=setTimeout(()=>e.abort(),this.opts.requestTimeoutMs??
466
- Qa);n.unref?.();try{let r=await(this.opts.fetchImpl??globalThis.fetch.bind(globalThis))(this.opts.url,{signal:e.signal,headers:{authorization:`Bearer ${this.opts.serviceAccountKey}`,accept:"applicatio\
472
+ tc);n.unref?.();try{let r=await(this.opts.fetchImpl??globalThis.fetch.bind(globalThis))(this.opts.url,{signal:e.signal,headers:{authorization:`Bearer ${this.opts.serviceAccountKey}`,accept:"applicatio\
467
473
  n/json"}});if(!r.ok)return (r.status===401||r.status===403||r.status===404)&&!this.avisadoDeCredencial&&(this.avisadoDeCredencial=!0,console.warn(`[bv-sala] la recogida autom\xE1tica de la licencia renova\
468
474
  da falla con HTTP ${r.status} en ${this.opts.url}. Revisa 'serviceAccountKey' (\xBFrotada? \xBFde otra organizaci\xF3n?) y 'licenseServerUrl': mientras no funcione, el token NO se renovar\xE1 solo y el SDK dejar\xE1\
469
475
  de operar al terminar el periodo de gracia.`)),!1;let s=await r.json();if(typeof s.token!="string")return !1;let i=Ue(s.token,this.opts.publicKey);return !i.signatureValid||!i.payload||i.payload.expires_at<=
470
476
  this.currentExpiresAt||this.currentOrg&&i.payload.org_id!==this.currentOrg||this.opts.revocados?.snapshot().has(i.payload.jti)||this.parado?!1:(this.currentExpiresAt=i.payload.expires_at,this.currentOrg=
471
- i.payload.org_id,this.opts.onNewToken(s.token),!0)}catch{return false}finally{clearTimeout(n),this.controller===e&&(this.controller=null),this.enVuelo=false;}}};var fo={minimumCacheTokens:1024,cacheReadMultiplier:.5,cacheWriteMultiplier:1},ws={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1.25},ec=[["claude-fable-5-1",512],["claude-mytho\
477
+ i.payload.org_id,this.opts.onNewToken(s.token),!0)}catch{return false}finally{clearTimeout(n),this.controller===e&&(this.controller=null),this.enVuelo=false;}}};var mo={minimumCacheTokens:1024,cacheReadMultiplier:.5,cacheWriteMultiplier:1},Ss={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1.25},nc=[["claude-fable-5-1",512],["claude-mytho\
472
478
  s-5-1",512],["claude-fable-5",512],["claude-mythos-5",512],["claude-opus-5",512],["claude-opus-4-7",2048],["claude-opus-4-6",4096],["claude-opus-4-5",4096],["claude-haiku-4-5",4096],["claude-3-5-haiku",
473
- 2048]];function mo(t){for(let[e,n]of ec)if(t===e||t.startsWith(`${e}-`))return {...ws,minimumCacheTokens:n};return ws}var ho={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1};var Ss={minimumCacheTokens:1024,cacheReadMultiplier:1,cacheWriteMultiplier:1};function Qt(t,e,n,o){let r=o.minimumCacheTokens;if(r==null||t<r)return t;let s=Math.min(e,t),i=t-s,a=Math.min(1,Math.max(0,
474
- n)),c=a*s*o.cacheReadMultiplier+(1-a)*s*o.cacheWriteMultiplier;return i+c}function go(t){let e=Qt(t.originalTokens,t.stablePrefixTokens,t.prefixHitRate,t.tier),n=Qt(t.compressedTokens,0,0,t.tier)+(t.compressorCostTokens??
479
+ 2048]];function ho(t){for(let[e,n]of nc)if(t===e||t.startsWith(`${e}-`))return {...Ss,minimumCacheTokens:n};return Ss}var go={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1};var Ts={minimumCacheTokens:1024,cacheReadMultiplier:1,cacheWriteMultiplier:1};function Qt(t,e,n,o){let r=o.minimumCacheTokens;if(r==null||t<r)return t;let s=Math.min(e,t),i=t-s,a=Math.min(1,Math.max(0,
480
+ n)),c=a*s*o.cacheReadMultiplier+(1-a)*s*o.cacheWriteMultiplier;return i+c}function bo(t){let e=Qt(t.originalTokens,t.stablePrefixTokens,t.prefixHitRate,t.tier),n=Qt(t.compressedTokens,0,0,t.tier)+(t.compressorCostTokens??
475
481
  0),o=e-n,r=t.tier.minimumCacheTokens,i=r!=null&&t.originalTokens>=r&&t.compressedTokens<r,a;if(o<=0){let c=e<t.originalTokens;a=i?`compressing drops the prompt out of the cacheable tier (${t.compressedTokens}\
476
482
  < ${r}) and costs more than it saves`:c?`not compressing is cheaper: the provider's prefix cache already discounts this prompt (${e.toFixed(0)} vs ${n.toFixed(0)} equivalent tokens, at a ${(t.prefixHitRate*
477
483
  100).toFixed(0)}% hit rate)`:"the saving does not cover the compressor's cost";}else i?a=`pays off even after losing the prefix cache (${(t.prefixHitRate*100).toFixed(0)}% hit rate)`:a="pays off and do\
478
- es not touch the cache tier";return {comprimir:o>0,costeComprimido:n,costeSinComprimir:e,ganancia:o,razon:a}}function Es(t){let e=r=>go({...t,prefixHitRate:r}).ganancia;if(e(0)<=0||e(1)>0)return null;let n=0,
479
- o=1;for(let r=0;r<40;r++){let s=(n+o)/2;e(s)>0?n=s:o=s;}return (n+o)/2}function tc(t){let e=Es({originalTokens:t.totalTokens,compressedTokens:t.totalTokens,stablePrefixTokens:t.stablePrefixTokens,tier:t.tier});return e??(Qt(t.totalTokens,t.stablePrefixTokens,0,t.tier)<=t.
484
+ es not touch the cache tier";return {comprimir:o>0,costeComprimido:n,costeSinComprimir:e,ganancia:o,razon:a}}function Es(t){let e=r=>bo({...t,prefixHitRate:r}).ganancia;if(e(0)<=0||e(1)>0)return null;let n=0,
485
+ o=1;for(let r=0;r<40;r++){let s=(n+o)/2;e(s)>0?n=s:o=s;}return (n+o)/2}function oc(t){let e=Es({originalTokens:t.totalTokens,compressedTokens:t.totalTokens,stablePrefixTokens:t.stablePrefixTokens,tier:t.tier});return e??(Qt(t.totalTokens,t.stablePrefixTokens,0,t.tier)<=t.
480
486
  totalTokens?null:1)}var en=class{exploracion;estados=new Map;constructor(e={}){this.exploracion=Math.max(1,e.exploracion??8);}costeDeExploracion(e,n){return this.exploracion*Math.max(0,n.cacheWriteMultiplier-
481
- 1)*e}estado(e){return this.estados.get(e)}decidir(e,n){let o=tc(n),r=this.estados.get(e),s=nc(r);return n.stablePrefixTokens<=0?{marcar:false,razon:"no stable prefix to cache",umbral:o,observada:s}:o==null?
487
+ 1)*e}estado(e){return this.estados.get(e)}decidir(e,n){let o=oc(n),r=this.estados.get(e),s=rc(r);return n.stablePrefixTokens<=0?{marcar:false,razon:"no stable prefix to cache",umbral:o,observada:s}:o==null?
482
488
  {marcar:true,razon:"marking cannot lose money at this tier (no write premium)",umbral:o,observada:s}:r?.apagada?{marcar:false,razon:`prefix-cache marking OFF: measured hit rate ${Ke(s)} did not reach the ${Ke(
483
489
  o)} break-even, so marking was costing money`,umbral:o,observada:s}:r==null||r.marcadas<this.exploracion?{marcar:true,razon:`exploring the prefix cache (${r?.marcadas??0}/${this.exploracion}); hit rate \
484
490
  is only observable on requests that were marked`,umbral:o,observada:s}:s!=null&&s>o?{marcar:true,razon:`measured hit rate ${Ke(s)} beats the ${Ke(o)} break-even`,umbral:o,observada:s}:(r.apagada=true,{marcar:false,
485
491
  razon:`prefix-cache marking OFF: measured hit rate ${Ke(s)} did not reach the ${Ke(o)} break-even, so marking was costing money`,umbral:o,observada:s})}registrar(e,n){let o=this.estados.get(e)??{marcadas:0,
486
- tokensLeidos:0,tokensEscritos:0,apagada:false};o.marcadas+=1,o.tokensLeidos+=Math.max(0,n.cachedInputTokens??0),o.tokensEscritos+=Math.max(0,n.cacheWriteInputTokens??0),this.estados.set(e,o);}};function nc(t){
487
- if(!t)return null;let e=t.tokensLeidos+t.tokensEscritos;return e<=0?t.marcadas>0?0:null:t.tokensLeidos/e}function Ke(t){return t==null?"n/a":`${(t*100).toFixed(1)}%`}var Ts=.5;function oc(t,e){return e.inputPer1k<=0||e.outputPer1k<=0?null:Math.max(t.inputPer1k/e.inputPer1k,t.outputPer1k/e.outputPer1k)}function rc(t){return 1-t}function sc(t,e=Ts){return e-t}function Rs(t,e,n=Ts){
488
- if(!t||!e)return null;let o=oc(t,e);if(o==null||!Number.isFinite(o))return null;let r=rc(o),s=sc(o,n),i=s>0,a=c=>`${(c*100).toFixed(1)}%`;return {r:o,equilibrio:r,escaladoMaximo:s,viable:i,razon:i?`the\
492
+ tokensLeidos:0,tokensEscritos:0,apagada:false};o.marcadas+=1,o.tokensLeidos+=Math.max(0,n.cachedInputTokens??0),o.tokensEscritos+=Math.max(0,n.cacheWriteInputTokens??0),this.estados.set(e,o);}};function rc(t){
493
+ if(!t)return null;let e=t.tokensLeidos+t.tokensEscritos;return e<=0?t.marcadas>0?0:null:t.tokensLeidos/e}function Ke(t){return t==null?"n/a":`${(t*100).toFixed(1)}%`}var Rs=.5;function sc(t,e){return e.inputPer1k<=0||e.outputPer1k<=0?null:Math.max(t.inputPer1k/e.inputPer1k,t.outputPer1k/e.outputPer1k)}function ic(t){return 1-t}function ac(t,e=Rs){return e-t}function Cs(t,e,n=Rs){
494
+ if(!t||!e)return null;let o=sc(t,e);if(o==null||!Number.isFinite(o))return null;let r=ic(o),s=ac(o,n),i=s>0,a=c=>`${(c*100).toFixed(1)}%`;return {r:o,equilibrio:r,escaladoMaximo:s,viable:i,razon:i?`the\
489
495
  cheap model costs ${a(o)} of the strong one, so routing pays off while escalations stay under ${a(s)} (it stops saving money at ${a(r)})`:`the cheap model costs ${a(o)} of the strong one: even with z\
490
- ero escalations it cannot reach the ${a(n)} target, so this pair is not worth the quality risk`}}var bo={"gpt-4":"gpt-4o","gpt-4-turbo":"gpt-4o-mini","gpt-4o":"gpt-4o-mini","gpt-4.1":"gpt-4.1-mini","c\
491
- laude-opus-4":"claude-haiku-4-5","claude-sonnet-4":"claude-haiku-4-5","claude-3-opus":"claude-3-haiku","claude-3-5-sonnet":"claude-3-5-haiku"};function ic(t){return Object.keys(t).sort((e,n)=>n.length-
492
- e.length||e.localeCompare(n))}function Cs(t,e=bo){if(!t)return null;let n=t.lastIndexOf("/"),o=n>=0?t.slice(0,n+1):"",r=n>=0?t.slice(n+1):t,s=e[t]??e[r]??ac(r,e);return !s||s===r?null:o+s}function ac(t,e){
493
- for(let n of ic(e))if(t.startsWith(n)&&t.charAt(n.length)==="-"&&/^\d{4}/.test(t.slice(n.length+1)))return e[n]}var tn=class{exploracion;estados=new Map;constructor(e={}){this.exploracion=Math.max(1,e.exploracion??20);}costeDeExploracion(e){return this.exploracion*Math.max(0,e)}estado(e){return this.estados.get(
494
- e)}decidir(e,n){let o=this.estados.get(e),r=cc(o),s=o?.enrutadas??0,i=a=>a==null?"n/a":`${(a*100).toFixed(1)}%`;return o?.apagada?{enrutar:false,razon:`model cascade OFF for this workload: measured escal\
496
+ ero escalations it cannot reach the ${a(n)} target, so this pair is not worth the quality risk`}}var xo={"gpt-4":"gpt-4o","gpt-4-turbo":"gpt-4o-mini","gpt-4o":"gpt-4o-mini","gpt-4.1":"gpt-4.1-mini","c\
497
+ laude-opus-4":"claude-haiku-4-5","claude-sonnet-4":"claude-haiku-4-5","claude-3-opus":"claude-3-haiku","claude-3-5-sonnet":"claude-3-5-haiku"};function cc(t){return Object.keys(t).sort((e,n)=>n.length-
498
+ e.length||e.localeCompare(n))}function Is(t,e=xo){if(!t)return null;let n=t.lastIndexOf("/"),o=n>=0?t.slice(0,n+1):"",r=n>=0?t.slice(n+1):t,s=e[t]??e[r]??lc(r,e);return !s||s===r?null:o+s}function lc(t,e){
499
+ for(let n of cc(e))if(t.startsWith(n)&&t.charAt(n.length)==="-"&&/^\d{4}/.test(t.slice(n.length+1)))return e[n]}var tn=class{exploracion;estados=new Map;constructor(e={}){this.exploracion=Math.max(1,e.exploracion??20);}costeDeExploracion(e){return this.exploracion*Math.max(0,e)}estado(e){return this.estados.get(
500
+ e)}decidir(e,n){let o=this.estados.get(e),r=uc(o),s=o?.enrutadas??0,i=a=>a==null?"n/a":`${(a*100).toFixed(1)}%`;return o?.apagada?{enrutar:false,razon:`model cascade OFF for this workload: measured escal\
495
501
  ation rate ${i(r)} is at or above the ${i(n.equilibrio)} break-even, so routing was costing money`,observada:r,muestras:s}:s<this.exploracion?{enrutar:true,razon:`measuring this workload (${s}/${this.exploracion}\
496
502
  ); the escalation rate is only observable on requests that were actually routed`,observada:r,muestras:s}:r!=null&&r<n.equilibrio?{enrutar:true,razon:`measured escalation rate ${i(r)} stays under the ${i(
497
503
  n.equilibrio)} break-even (this is a MONEY check, not a quality one)`,observada:r,muestras:s}:(o&&(o.apagada=true),{enrutar:false,razon:`model cascade OFF for this workload: measured escalation rate ${i(r)}\
498
504
  is at or above the ${i(n.equilibrio)} break-even, so routing was costing money`,observada:r,muestras:s})}registrar(e,n){let o=this.estados.get(e)??{enrutadas:0,escaladas:0,apagada:false};o.enrutadas+=1,
499
- n&&(o.escaladas+=1),this.estados.set(e,o);}};function cc(t){return !t||t.enrutadas<=0?null:t.escaladas/t.enrutadas}var lc=["enum","pattern","maximum","minimum","maxLength","minLength","maxItems","minItems"];function uc(t){return t?xo(t)?"value-constrained":"structural":"none"}function xo(t,e=0){if(e>12)return false;let n=t;
500
- for(let o of lc)if(n[o]!==void 0)return true;if(t.properties){for(let o of Object.values(t.properties))if(xo(o,e+1))return true}return !!(t.items&&xo(t.items,e+1))}function Is(t){let e=uc(t.schema),n=(t.tools??
505
+ n&&(o.escaladas+=1),this.estados.set(e,o);}};function uc(t){return !t||t.enrutadas<=0?null:t.escaladas/t.enrutadas}var dc=["enum","pattern","maximum","minimum","maxLength","minLength","maxItems","minItems"];function pc(t){return t?yo(t)?"value-constrained":"structural":"none"}function yo(t,e=0){if(e>12)return false;let n=t;
506
+ for(let o of dc)if(n[o]!==void 0)return true;if(t.properties){for(let o of Object.values(t.properties))if(yo(o,e+1))return true}return !!(t.items&&yo(t.items,e+1))}function Os(t){let e=pc(t.schema),n=(t.tools??
501
507
  []).filter(o=>o.risk==="write"||o.risk==="destructive");return n.length>0?{elegible:false,fuerza:e,razon:`the request carries ${n.length} write/destructive tool(s); a cheaper model's choice of ACTION can\
502
508
  not be checked by an output contract, so the cascade never applies here`}:e==="none"?{elegible:false,fuerza:e,razon:"no output contract: the deterministic verifier would accept anything, which would repo\
503
509
  rt a perfect escalation rate over answers nobody checked. Declare `response.schema` to route"}:{elegible:true,fuerza:e,razon:e==="value-constrained"?"output contract carries value constraints, so wrong \
504
- content has somewhere to fall":"output contract checks shape only: a well-formed answer with wrong content passes"}}function yo(t){let e=[];if(e.push("non-empty"),t.texto.trim()==="")return {acepta:false,
510
+ content has somewhere to fall":"output contract checks shape only: a well-formed answer with wrong content passes"}}function vo(t){let e=[];if(e.push("non-empty"),t.texto.trim()==="")return {acepta:false,
505
511
  motivo:"the cheap model returned an empty answer",comprobaciones:e};if(e.push("final-answer"),t.pidioHerramientas)return {acepta:false,motivo:"the cheap model asked to run tools: that is an action, not a \
506
512
  final answer, and the output contract cannot check it",comprobaciones:e};if(e.push("not-truncated"),t.finishReason==="length")return {acepta:false,motivo:"the cheap model's answer was cut off by maxOutput\
507
513
  Tokens",comprobaciones:e};if(e.push("output-contract"),!t.schema)return {acepta:false,motivo:"no output contract to verify against",comprobaciones:e};let n;try{n=JSON.parse(t.texto);}catch{return {acepta:false,
508
514
  motivo:"the cheap model's answer is not valid JSON",comprobaciones:e}}let o=ae(n,t.schema);return o.valid?{acepta:true,motivo:"the cheap model's answer satisfies the output contract",comprobaciones:e}:{
509
- acepta:false,motivo:`the cheap model's answer does not satisfy the output contract (${o.errors.slice(0,3).map(s=>`${s.path}: ${s.message}`).join("; ")})`,comprobaciones:e}}function Os(t,e){let n,o;try{n=
515
+ acepta:false,motivo:`the cheap model's answer does not satisfy the output contract (${o.errors.slice(0,3).map(s=>`${s.path}: ${s.message}`).join("; ")})`,comprobaciones:e}}function _s(t,e){let n,o;try{n=
510
516
  JSON.parse(t),o=JSON.parse(e);}catch{return {divergen:false,motivo:"not comparable (at least one answer is not JSON)"}}let r=nn(n),s=nn(o);return r.length===0&&s.length===0?{divergen:false,motivo:"no comparab\
511
- le facts (free prose only)"}:pc(r,s)?{divergen:false,motivo:"the hard values agree"}:{divergen:true,motivo:"both answers satisfy the contract but disagree on at least one hard value; this is the signature \
512
- of a false valid \u2014 it is a reason to look, never a verdict"}}var dc=40;function nn(t,e=0,n=[]){if(e>12)return n;if(typeof t=="number"&&Number.isFinite(t))n.push(`n:${t}`);else if(typeof t=="boole\
513
- an")n.push(`b:${t}`);else if(typeof t=="string"){let o=t.trim();o.length>0&&o.length<=dc&&n.push(`s:${o.toLowerCase()}`);}else if(Array.isArray(t))for(let o of t)nn(o,e+1,n);else if(t&&typeof t=="objec\
514
- t")for(let o of Object.keys(t).sort())nn(t[o],e+1,n);return n.sort()}function pc(t,e){if(t.length!==e.length)return false;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return false;return true}var _s="the layer measures both worlds against the same provider so that no baseline can be fabricated, keeps one ledger per lever, and refuses to publish a saving whose answer got worse along the way\
515
- , because a number nobody can check is not a number at all but a promise, and this product exists to stop making those. ";function fc(t){if(t<=0)return "";let e=_s;for(;e.length<t;)e+=_s;return e.slice(
516
- 0,t)}function mc(t){let e=t[0],n=-1;for(let o of t){let r=JSON.stringify(o)?.length??0;r>n&&(n=r,e=o);}return e}function vo(t){if(t.enum&&t.enum.length>0)return {valor:mc(t.enum)};switch(t.type??(t.properties?
517
- "object":t.items?"array":void 0)){case "string":return t.maxLength!=null?{valor:fc(t.maxLength)}:void 0;case "boolean":return {valor:false};case "null":return {valor:null};case "integer":return t.maximum!=null?
518
- {valor:Math.trunc(t.maximum)}:void 0;case "number":return;case "array":{if(t.maxItems==null||!t.items)return;let n=vo(t.items);return n?{valor:Array.from({length:t.maxItems},()=>n.valor)}:void 0}case "ob\
519
- ject":{if(t.additionalProperties!==false||!t.properties)return;let n={};for(let[o,r]of Object.entries(t.properties)){let s=vo(r);if(!s)return;n[o]=s.valor;}return {valor:n}}default:return}}function hc(t){let e=vo(
520
- t);return e?JSON.stringify(e.valor):null}function As(t,e){let n=hc(t);return n===null?null:e(n)}var on=16,Ds=64,gc=8,bc="measured live on the same triage contract, 8 paired reps each: gpt-4o-mini wrote 16 tokens MORE (-8.2% net) and gpt-4o wrote 3 tokens FEWER (+8.0% net)";function Ps(t,e,n,o={}){
521
- let r=o.minimumSavingsTokens??gc,s;try{if(So(t,0))return {applied:!1,reason:"schema has a pattern; no witness can be synthesised to prove the round trip"};s=To(t,0);}catch(S){return {applied:false,reason:S instanceof
517
+ le facts (free prose only)"}:mc(r,s)?{divergen:false,motivo:"the hard values agree"}:{divergen:true,motivo:"both answers satisfy the contract but disagree on at least one hard value; this is the signature \
518
+ of a false valid \u2014 it is a reason to look, never a verdict"}}var fc=40;function nn(t,e=0,n=[]){if(e>12)return n;if(typeof t=="number"&&Number.isFinite(t))n.push(`n:${t}`);else if(typeof t=="boole\
519
+ an")n.push(`b:${t}`);else if(typeof t=="string"){let o=t.trim();o.length>0&&o.length<=fc&&n.push(`s:${o.toLowerCase()}`);}else if(Array.isArray(t))for(let o of t)nn(o,e+1,n);else if(t&&typeof t=="objec\
520
+ t")for(let o of Object.keys(t).sort())nn(t[o],e+1,n);return n.sort()}function mc(t,e){if(t.length!==e.length)return false;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return false;return true}var As="the layer measures both worlds against the same provider so that no baseline can be fabricated, keeps one ledger per lever, and refuses to publish a saving whose answer got worse along the way\
521
+ , because a number nobody can check is not a number at all but a promise, and this product exists to stop making those. ";function hc(t){if(t<=0)return "";let e=As;for(;e.length<t;)e+=As;return e.slice(
522
+ 0,t)}function gc(t){let e=t[0],n=-1;for(let o of t){let r=JSON.stringify(o)?.length??0;r>n&&(n=r,e=o);}return e}function ko(t){if(t.enum&&t.enum.length>0)return {valor:gc(t.enum)};switch(t.type??(t.properties?
523
+ "object":t.items?"array":void 0)){case "string":return t.maxLength!=null?{valor:hc(t.maxLength)}:void 0;case "boolean":return {valor:false};case "null":return {valor:null};case "integer":return t.maximum!=null?
524
+ {valor:Math.trunc(t.maximum)}:void 0;case "number":return;case "array":{if(t.maxItems==null||!t.items)return;let n=ko(t.items);return n?{valor:Array.from({length:t.maxItems},()=>n.valor)}:void 0}case "ob\
525
+ ject":{if(t.additionalProperties!==false||!t.properties)return;let n={};for(let[o,r]of Object.entries(t.properties)){let s=ko(r);if(!s)return;n[o]=s.valor;}return {valor:n}}default:return}}function bc(t){let e=ko(
526
+ t);return e?JSON.stringify(e.valor):null}function Ds(t,e){let n=bc(t);return n===null?null:e(n)}var on=16,Ps=64,xc=8,yc="measured live on the same triage contract, 8 paired reps each: gpt-4o-mini wrote 16 tokens MORE (-8.2% net) and gpt-4o wrote 3 tokens FEWER (+8.0% net)";function Ls(t,e,n,o={}){
527
+ let r=o.minimumSavingsTokens??xc,s;try{if(To(t,0))return {applied:!1,reason:"schema has a pattern; no witness can be synthesised to prove the round trip"};s=Ro(t,0);}catch(S){return {applied:false,reason:S instanceof
522
528
  RangeError?"schema too deep or cyclic":"schema could not be compacted"}}if(s.renamed===0&&s.coded===0)return {applied:false,reason:"nothing to compact (no renameable keys, no codeable enums)"};let i=s.node;
523
- if(!i)return {applied:false,reason:"nothing to compact"};let a=S=>Je(S,i,true),c=S=>Je(S,i,false),l=Sc(t),u=xc(t,s.compact,i,l);if(!u.ok)return {applied:false,reason:u.reason};let d=e(JSON.stringify(t)),f=e(JSON.stringify(
524
- s.compact)),m=d-f,h=Number.POSITIVE_INFINITY;for(let S of l){let B=e(JSON.stringify(S))-e(JSON.stringify(a(S)));B<h&&(h=B);}Number.isFinite(h)||(h=0);let p=S=>S/1e3*n.inputPer1k,g=S=>S/1e3*n.outputPer1k,
525
- x=p(r),b=n.outputPer1k>0?(r-m)*n.inputPer1k/n.outputPer1k:Number.NEGATIVE_INFINITY,y=Number.isFinite(b)?b.toFixed(1):"any",E=n.inputPer1k>0?`${(n.outputPer1k/n.inputPer1k).toFixed(1)}x`:"more than",C=o.
526
- evidencia;if(C==null)return {applied:false,reason:`no measured output delta for this model, so the codebook is not applied. Short field names change how much the model WRITES, and that is a property of th\
527
- e model, not of the schema: ${bc}. Here the compact contract saves ${m} input tokens and output is billed ${E} input, so it only pays while the output delta stays above ${y} tokens. Measure yours (ben\
528
- chmarks/ab-live.ts) and pass it in`};let O=C.deltaTokens;if(O<0)return {applied:false,reason:`the measured output delta is ${O} tokens: this model writes MORE from a compact contract (${C.procedencia}). T\
529
- he input win is capped by the size of the schema while the output loss grows with the answer and is billed ${E} input, so no schema is big enough to buy it back`};let T=p(m)+g(O),D=n.inputPer1k>0?T*1e3/
530
- n.inputPer1k:m,R=`+${O} tokens (${O>0?"the model wrote LESS":"no measured change"}), ${C.procedencia}`;return T<x?{applied:false,reason:`net saving $${T.toFixed(9)}/request is below the floor of ${r} inp\
531
- ut tokens ($${x.toFixed(9)}): the compact contract saves ${m} input tokens and the measured output delta is ${R}; break-even at ${y}`}:{applied:true,reason:`net saving $${T.toFixed(9)}/request (${D.toFixed(
532
- 1)} input tokens equivalent): the compact contract saves ${m} input tokens and the measured output delta is ${R}; break-even at ${y}`,plan:{compactSchema:s.compact,expand:c,compact:a,renamedKeys:s.renamed,
533
- codedEnumValues:s.coded,schemaTokensOriginal:d,schemaTokensCompact:f,modelledShapeSavingTokens:h,measuredOutputDeltaTokens:O,outputDeltaProvenance:C.procedencia,breakEvenOutputDeltaTokens:b,netSavingUsd:T}}}
534
- function xc(t,e,n,o){for(let r of o){if(!ae(r,t).valid)return {ok:false,reason:"synthesised witness does not satisfy the caller's own schema; nothing can be proven"};let s=Je(r,n,true);if(!ae(s,e).valid)return {
535
- ok:false,reason:"compact witness does not validate against the compact schema"};if(!Eo(Je(s,n,false),r))return {ok:false,reason:"round trip is not the identity"}}return {ok:true}}function Ls(t){return t.type==="ob\
536
- ject"||t.type==null&&t.properties!=null}function Ms(t){return t.type==="array"||t.type==null&&t.items!=null}function yc(t){let e=t.enum;return !e||e.length===0||e.length>Ds||!e.every(n=>typeof n=="stri\
537
- ng")?null:e}function To(t,e){if(e>on)throw new RangeError("schema too deep");let n=yc(t);if(n){if(t.minLength!=null)return {compact:t,renamed:0,coded:0};let o=Bs(n,true);if(!o)return {compact:t,renamed:0,
529
+ if(!i)return {applied:false,reason:"nothing to compact"};let a=S=>Je(S,i,true),c=S=>Je(S,i,false),l=Ec(t),u=vc(t,s.compact,i,l);if(!u.ok)return {applied:false,reason:u.reason};let d=e(JSON.stringify(t)),m=e(JSON.stringify(
530
+ s.compact)),f=d-m,h=Number.POSITIVE_INFINITY;for(let S of l){let B=e(JSON.stringify(S))-e(JSON.stringify(a(S)));B<h&&(h=B);}Number.isFinite(h)||(h=0);let g=S=>S/1e3*n.inputPer1k,p=S=>S/1e3*n.outputPer1k,
531
+ x=g(r),b=n.outputPer1k>0?(r-f)*n.inputPer1k/n.outputPer1k:Number.NEGATIVE_INFINITY,y=Number.isFinite(b)?b.toFixed(1):"any",T=n.inputPer1k>0?`${(n.outputPer1k/n.inputPer1k).toFixed(1)}x`:"more than",E=o.
532
+ evidencia;if(E==null)return {applied:false,reason:`no measured output delta for this model, so the codebook is not applied. Short field names change how much the model WRITES, and that is a property of th\
533
+ e model, not of the schema: ${yc}. Here the compact contract saves ${f} input tokens and output is billed ${T} input, so it only pays while the output delta stays above ${y} tokens. Measure yours (ben\
534
+ chmarks/ab-live.ts) and pass it in`};let R=E.deltaTokens;if(R<0)return {applied:false,reason:`the measured output delta is ${R} tokens: this model writes MORE from a compact contract (${E.procedencia}). T\
535
+ he input win is capped by the size of the schema while the output loss grows with the answer and is billed ${T} input, so no schema is big enough to buy it back`};let C=g(f)+p(R),D=n.inputPer1k>0?C*1e3/
536
+ n.inputPer1k:f,I=`+${R} tokens (${R>0?"the model wrote LESS":"no measured change"}), ${E.procedencia}`;return C<x?{applied:false,reason:`net saving $${C.toFixed(9)}/request is below the floor of ${r} inp\
537
+ ut tokens ($${x.toFixed(9)}): the compact contract saves ${f} input tokens and the measured output delta is ${I}; break-even at ${y}`}:{applied:true,reason:`net saving $${C.toFixed(9)}/request (${D.toFixed(
538
+ 1)} input tokens equivalent): the compact contract saves ${f} input tokens and the measured output delta is ${I}; break-even at ${y}`,plan:{compactSchema:s.compact,expand:c,compact:a,renamedKeys:s.renamed,
539
+ codedEnumValues:s.coded,schemaTokensOriginal:d,schemaTokensCompact:m,modelledShapeSavingTokens:h,measuredOutputDeltaTokens:R,outputDeltaProvenance:E.procedencia,breakEvenOutputDeltaTokens:b,netSavingUsd:C}}}
540
+ function vc(t,e,n,o){for(let r of o){if(!ae(r,t).valid)return {ok:false,reason:"synthesised witness does not satisfy the caller's own schema; nothing can be proven"};let s=Je(r,n,true);if(!ae(s,e).valid)return {
541
+ ok:false,reason:"compact witness does not validate against the compact schema"};if(!Eo(Je(s,n,false),r))return {ok:false,reason:"round trip is not the identity"}}return {ok:true}}function Ms(t){return t.type==="ob\
542
+ ject"||t.type==null&&t.properties!=null}function Bs(t){return t.type==="array"||t.type==null&&t.items!=null}function kc(t){let e=t.enum;return !e||e.length===0||e.length>Ps||!e.every(n=>typeof n=="stri\
543
+ ng")?null:e}function Ro(t,e){if(e>on)throw new RangeError("schema too deep");let n=kc(t);if(n){if(t.minLength!=null)return {compact:t,renamed:0,coded:0};let o=Ns(n,true);if(!o)return {compact:t,renamed:0,
538
544
  coded:0};let r=[...o].filter(([i,a])=>i!==a).length;if(r===0)return {compact:t,renamed:0,coded:0};let s=new Map;for(let[i,a]of o)s.set(a,i);return {compact:{...t,enum:n.map(i=>o.get(i))},node:{enumFwd:o,
539
- enumBack:s},renamed:0,coded:r}}return Ls(t)?vc(t,e):Ms(t)?kc(t,e):{compact:t,renamed:0,coded:0}}function vc(t,e){let n=Object.entries(t.properties??{});if(n.length===0)return {compact:t,renamed:0,coded:0};
540
- let o=0,r=0,s=new Map,i=new Map;for(let[f,m]of n){let h=To(m,e+1);i.set(f,h.compact),h.node&&s.set(f,h.node),o+=h.renamed,r+=h.coded;}let a=null;t.additionalProperties===false&&(a=Bs(n.map(([f])=>f),false));
541
- let c={};for(let[f]of n)c[a?.get(f)??f]=i.get(f);let l={...t,properties:c};t.required&&(l.required=t.required.map(f=>a?.get(f)??f));let u={};if(a){let f=new Map;for(let[h,p]of a)f.set(p,h);let m=false;for(let[
542
- h,p]of a)h!==p&&(m=true);if(m){u.keysFwd=a,u.keysBack=f;for(let[h,p]of a)h!==p&&(o+=1);}}s.size>0&&(u.props=s);let d=!u.keysFwd&&!u.props;return {compact:l,...d?{}:{node:u},renamed:o,coded:r}}function kc(t,e){
543
- if(!t.items)return {compact:t,renamed:0,coded:0};let n=To(t.items,e+1);return {compact:{...t,items:n.compact},...n.node?{node:{items:n.node}}:{},renamed:n.renamed,coded:n.coded}}function Bs(t,e){let n=[
545
+ enumBack:s},renamed:0,coded:r}}return Ms(t)?wc(t,e):Bs(t)?Sc(t,e):{compact:t,renamed:0,coded:0}}function wc(t,e){let n=Object.entries(t.properties??{});if(n.length===0)return {compact:t,renamed:0,coded:0};
546
+ let o=0,r=0,s=new Map,i=new Map;for(let[m,f]of n){let h=Ro(f,e+1);i.set(m,h.compact),h.node&&s.set(m,h.node),o+=h.renamed,r+=h.coded;}let a=null;t.additionalProperties===false&&(a=Ns(n.map(([m])=>m),false));
547
+ let c={};for(let[m]of n)c[a?.get(m)??m]=i.get(m);let l={...t,properties:c};t.required&&(l.required=t.required.map(m=>a?.get(m)??m));let u={};if(a){let m=new Map;for(let[h,g]of a)m.set(g,h);let f=false;for(let[
548
+ h,g]of a)h!==g&&(f=true);if(f){u.keysFwd=a,u.keysBack=m;for(let[h,g]of a)h!==g&&(o+=1);}}s.size>0&&(u.props=s);let d=!u.keysFwd&&!u.props;return {compact:l,...d?{}:{node:u},renamed:o,coded:r}}function Sc(t,e){
549
+ if(!t.items)return {compact:t,renamed:0,coded:0};let n=Ro(t.items,e+1);return {compact:{...t,items:n.compact},...n.node?{node:{items:n.node}}:{},renamed:n.renamed,coded:n.coded}}function Ns(t,e){let n=[
544
550
  ...t].sort(),o=new Set,r=new Map;n.forEach((i,a)=>{let c=e?i.toUpperCase():i,l=i;for(let u=1;u<i.length;u++){let d=c.slice(0,u);if(!o.has(d)){l=d;break}}if(l===i){let u=a.toString(36);u.length<i.length&&
545
551
  !o.has(u)&&(l=u);}o.add(l),r.set(i,l);});let s=new Set(t);for(let[i,a]of r)if(a!==i&&s.has(a))return null;return r}function Je(t,e,n){let o=n?e.enumFwd:e.enumBack;if(o&&typeof t=="string")return o.get(t)??
546
- t;if(e.items&&Array.isArray(t))return t.map(s=>Je(s,e.items,n));let r=n?e.keysFwd:e.keysBack;if((r||e.props)&&wc(t)){let s={};for(let[i,a]of Object.entries(t)){let c=r?.get(i)??i,l=n?i:c,u=e.props?.get(
547
- l);s[c]=u?Je(a,u,n):a;}return s}return t}function wc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Sc(t){let e=Math.min(Ds,Math.max(1,ko(t,0))),n=[];for(let o=0;o<e;o++)n.push(wo(t,
548
- o,0));return n}function ko(t,e){if(e>on)return 0;let n=t.enum?.length??0;for(let o of Object.values(t.properties??{}))n=Math.max(n,ko(o,e+1));return t.items&&(n=Math.max(n,ko(t.items,e+1))),n}function wo(t,e,n){
549
- if(n>on)return null;if(t.enum&&t.enum.length>0)return t.enum[Math.min(e,t.enum.length-1)];if(Ls(t)){let o={};for(let[r,s]of Object.entries(t.properties??{}))o[r]=wo(s,e,n+1);return o}if(Ms(t)){if(t.maxItems===
550
- 0)return [];let o=Math.max(1,t.minItems??1),r=t.maxItems!=null?Math.min(o,t.maxItems):o,s=t.items;return Array.from({length:r},()=>s?wo(s,e,n+1):null)}switch(t.type){case "string":{if(t.maxLength===0)return "";
552
+ t;if(e.items&&Array.isArray(t))return t.map(s=>Je(s,e.items,n));let r=n?e.keysFwd:e.keysBack;if((r||e.props)&&Tc(t)){let s={};for(let[i,a]of Object.entries(t)){let c=r?.get(i)??i,l=n?i:c,u=e.props?.get(
553
+ l);s[c]=u?Je(a,u,n):a;}return s}return t}function Tc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ec(t){let e=Math.min(Ps,Math.max(1,wo(t,0))),n=[];for(let o=0;o<e;o++)n.push(So(t,
554
+ o,0));return n}function wo(t,e){if(e>on)return 0;let n=t.enum?.length??0;for(let o of Object.values(t.properties??{}))n=Math.max(n,wo(o,e+1));return t.items&&(n=Math.max(n,wo(t.items,e+1))),n}function So(t,e,n){
555
+ if(n>on)return null;if(t.enum&&t.enum.length>0)return t.enum[Math.min(e,t.enum.length-1)];if(Ms(t)){let o={};for(let[r,s]of Object.entries(t.properties??{}))o[r]=So(s,e,n+1);return o}if(Bs(t)){if(t.maxItems===
556
+ 0)return [];let o=Math.max(1,t.minItems??1),r=t.maxItems!=null?Math.min(o,t.maxItems):o,s=t.items;return Array.from({length:r},()=>s?So(s,e,n+1):null)}switch(t.type){case "string":{if(t.maxLength===0)return "";
551
557
  let o=Math.max(1,t.minLength??1),r=t.maxLength!=null?Math.min(o,t.maxLength):o;return "x".repeat(r)}case "number":case "integer":{let o=t.minimum??1;return t.maximum!=null&&o>t.maximum&&(o=t.maximum),t.type===
552
- "integer"?Math.round(o):o}case "boolean":return true;case "null":return null;default:return null}}function So(t,e){if(e>on)throw new RangeError("schema too deep");if(t.pattern!=null)return true;for(let n of Object.
553
- values(t.properties??{}))if(So(n,e+1))return true;return !!(t.items&&So(t.items,e+1))}function Eo(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.
558
+ "integer"?Math.round(o):o}case "boolean":return true;case "null":return null;default:return null}}function To(t,e){if(e>on)throw new RangeError("schema too deep");if(t.pattern!=null)return true;for(let n of Object.
559
+ values(t.properties??{}))if(To(n,e+1))return true;return !!(t.items&&To(t.items,e+1))}function Eo(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.
554
560
  isArray(t),o=Array.isArray(e);if(n||o){if(!n||!o||t.length!==e.length)return false;for(let i=0;i<t.length;i++)if(!Eo(t[i],e[i]))return false;return true}let r=Object.keys(t),s=Object.keys(e);if(r.length!==s.length)
555
- return false;for(let i of r)if(!Object.prototype.hasOwnProperty.call(e,i)||!Eo(t[i],e[i]))return false;return true}var Ec="2026-08-14",Ns={"gpt-4o-mini":{deltaTokens:-16,salidaDelBrazoA:72,contrato:"triage (6 fields, long enums)",pares:8},"gpt-4o":{deltaTokens:3,salidaDelBrazoA:75,contrato:"triage (6 fields, long \
556
- enums)",pares:8}},Tc=pn(Ns);function Rc(t){return dn(Ns,Tc,t)}var rn=class t{deltas=new Map;static clave(e,n){return `${e}\0${n}`}recordar(e,n,o){this.deltas.set(t.clave(e,n),o);}resolver(e,n,o){if(o!=null&&
561
+ return false;for(let i of r)if(!Object.prototype.hasOwnProperty.call(e,i)||!Eo(t[i],e[i]))return false;return true}var Rc="2026-08-14",js={"gpt-4o-mini":{deltaTokens:-16,salidaDelBrazoA:72,contrato:"triage (6 fields, long enums)",pares:8},"gpt-4o":{deltaTokens:3,salidaDelBrazoA:75,contrato:"triage (6 fields, long \
562
+ enums)",pares:8}},Cc=pn(js);function Ic(t){return dn(js,Cc,t)}var rn=class t{deltas=new Map;static clave(e,n){return `${e}\0${n}`}recordar(e,n,o){this.deltas.set(t.clave(e,n),o);}resolver(e,n,o){if(o!=null&&
557
563
  Number.isFinite(o))return this.recordar(e,n,o),{deltaTokens:o,origen:"caller",procedencia:`measured by the caller for this contract on ${e}`};let r=this.deltas.get(t.clave(e,n));if(r!=null)return {deltaTokens:r,
558
- origen:"remembered",procedencia:`measured by the caller on an earlier request for this contract on ${e}`};let s=Rc(e);return s?{deltaTokens:s.deltaTokens,origen:"catalogue",procedencia:`measured by Bi\
559
- Velio on ${e} (${Ec}, ${s.pares} paired reps, ${s.contrato}, ${s.salidaDelBrazoA}-token answers) \u2014 NOT measured on YOUR contract`}:null}};var Co="[BiVelio Savings: resultado de herramienta antiguo recortado para bajar el coste; los resultados recientes viajan enteros.]",Cc=new TextEncoder;function Ic(t){return Cc.encode(t).length}function Oc(t,e){if(!t)return null;let n=(e??"").trim();if(n===""||n==="{}"||n==="[]")return null;let o;try{let r=JSON.parse(n);if(r&&typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).length===0)return null;
560
- o=Ro(r);}catch{o=n;}return `${t} ${o}`}function Ro(t){return t===null||typeof t!="object"?JSON.stringify(t)??"null":Array.isArray(t)?`[${t.map(Ro).join(",")}]`:`{${Object.keys(t).sort().map(n=>`${JSON.stringify(
561
- n)}:${Ro(t[n])}`).join(",")}}`}function js(t){let e=new Map,n=new Map;for(let l of t)if(l.role==="assistant"&&l.toolCalls)for(let u of l.toolCalls)u.id&&(e.set(u.id,u.arguments),n.set(u.id,u.name));let o=[],
562
- r=new Map;for(let l=0;l<t.length;l++){let u=t[l];if(u.role!=="tool")continue;o.push(l);let d=(u.toolCallId?n.get(u.toolCallId):void 0)??u.name,f=u.toolCallId?e.get(u.toolCallId):void 0,m=Oc(d,f);m!==null&&
563
- r.set(l,m);}let s=o.length?o[o.length-1]:-1,i=new Map;for(let l of o){let u=r.get(l);if(u===void 0)continue;let d=i.get(u);(d===void 0||l>d)&&i.set(u,l);}let a=[],c=0;for(let l of o){if(l===s)continue;let u=r.
564
- get(l);if(u===void 0||i.get(u)===l)continue;let d=Ic(t[l].content);d<1024||(a.push(l),c+=d);}return {indices:a,bytesOriginales:c}}function $s(t,e){if(e.length===0)return t;let n=new Set(e);return t.map(
565
- (o,r)=>n.has(r)?{...o,content:Co}:o)}function Io(t,e){if(e?.cacheTier)return e.cacheTier;let n=t.toLowerCase(),o=n.indexOf("/"),r=o>0?n.slice(0,o):"",s=o>=0?n.slice(o+1):n;return r==="openai"||r==="azure-openai"?fo:r==="anthropic"?mo(s):
566
- r==="google"||r==="google-vertex"?ho:/^(gpt-|o[1-9](-|$)|chatgpt)/.test(s)?fo:s.startsWith("claude")?mo(s):s.startsWith("gemini")?ho:Ss}function Fs(t){let e=t.prefix!=null,n=go({originalTokens:t.originalTokens,
564
+ origen:"remembered",procedencia:`measured by the caller on an earlier request for this contract on ${e}`};let s=Ic(e);return s?{deltaTokens:s.deltaTokens,origen:"catalogue",procedencia:`measured by Bi\
565
+ Velio on ${e} (${Rc}, ${s.pares} paired reps, ${s.contrato}, ${s.salidaDelBrazoA}-token answers) \u2014 NOT measured on YOUR contract`}:null}};var Io="[BiVelio Savings: resultado de herramienta antiguo recortado para bajar el coste; los resultados recientes viajan enteros.]",Oc=new TextEncoder;function _c(t){return Oc.encode(t).length}function Ac(t,e){if(!t)return null;let n=(e??"").trim();if(n===""||n==="{}"||n==="[]")return null;let o;try{let r=JSON.parse(n);if(r&&typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).length===0)return null;
566
+ o=Co(r);}catch{o=n;}return `${t} ${o}`}function Co(t){return t===null||typeof t!="object"?JSON.stringify(t)??"null":Array.isArray(t)?`[${t.map(Co).join(",")}]`:`{${Object.keys(t).sort().map(n=>`${JSON.stringify(
567
+ n)}:${Co(t[n])}`).join(",")}}`}function $s(t){let e=new Map,n=new Map;for(let l of t)if(l.role==="assistant"&&l.toolCalls)for(let u of l.toolCalls)u.id&&(e.set(u.id,u.arguments),n.set(u.id,u.name));let o=[],
568
+ r=new Map;for(let l=0;l<t.length;l++){let u=t[l];if(u.role!=="tool")continue;o.push(l);let d=(u.toolCallId?n.get(u.toolCallId):void 0)??u.name,m=u.toolCallId?e.get(u.toolCallId):void 0,f=Ac(d,m);f!==null&&
569
+ r.set(l,f);}let s=o.length?o[o.length-1]:-1,i=new Map;for(let l of o){let u=r.get(l);if(u===void 0)continue;let d=i.get(u);(d===void 0||l>d)&&i.set(u,l);}let a=[],c=0;for(let l of o){if(l===s)continue;let u=r.
570
+ get(l);if(u===void 0||i.get(u)===l)continue;let d=_c(t[l].content);d<1024||(a.push(l),c+=d);}return {indices:a,bytesOriginales:c}}function Fs(t,e){if(e.length===0)return t;let n=new Set(e);return t.map(
571
+ (o,r)=>n.has(r)?{...o,content:Io}:o)}function Oo(t,e){if(e?.cacheTier)return e.cacheTier;let n=t.toLowerCase(),o=n.indexOf("/"),r=o>0?n.slice(0,o):"",s=o>=0?n.slice(o+1):n;return r==="openai"||r==="azure-openai"?mo:r==="anthropic"?ho(s):
572
+ r==="google"||r==="google-vertex"?go:/^(gpt-|o[1-9](-|$)|chatgpt)/.test(s)?mo:s.startsWith("claude")?ho(s):s.startsWith("gemini")?go:Ts}function zs(t){let e=t.prefix!=null,n=bo({originalTokens:t.originalTokens,
567
573
  compressedTokens:t.compressedTokens,stablePrefixTokens:t.prefix?.stableTokens??0,prefixHitRate:t.prefix?.hitRate??0,tier:t.tier,...t.compressorCostTokens!=null?{compressorCostTokens:t.compressorCostTokens}:
568
574
  {}});if(e)return n;let o=t.tier.minimumCacheTokens;return o!=null&&t.originalTokens>=o&&t.compressedTokens<o?{...n,comprimir:false,razon:`compressing would drop the prompt out of the cacheable tier (${t.
569
- compressedTokens} < ${o}) and nobody has measured the prefix hit rate, so it cannot be claimed to pay for itself. Declare it in \`compressionEconomics.prefix\` to unlock the full decision`}:n}function Vs(t){let e=u=>u/1e3*t.precio.inputPer1k,n=u=>u/1e3*t.precio.outputPer1k,o=e(t.promptTokens+t.descriptoresLigeros)+n(t.salidaDelSondeo),r=e(t.promptTokens+t.esquemasCompletos)+n(t.salidaFinal),
575
+ compressedTokens} < ${o}) and nobody has measured the prefix hit rate, so it cannot be claimed to pay for itself. Declare it in \`compressionEconomics.prefix\` to unlock the full decision`}:n}function Us(t){let e=u=>u/1e3*t.precio.inputPer1k,n=u=>u/1e3*t.precio.outputPer1k,o=e(t.promptTokens+t.descriptoresLigeros)+n(t.salidaDelSondeo),r=e(t.promptTokens+t.esquemasCompletos)+n(t.salidaFinal),
570
576
  s=o+e(t.promptTokens+t.esquemasDeLaSegunda)+n(t.salidaFinal),i=r-s,a=o,c=i>0&&i>=a,l;return i<=0?l=`descubrir cuesta m\xE1s de lo que ahorra: el prompt (${t.promptTokens} tokens) se paga dos veces y l\
571
577
  os esquemas que se evitan (${t.esquemasCompletos-t.esquemasDeLaSegunda}) no lo cubren`:c?l=`se evitan ${t.esquemasCompletos-t.esquemasDeLaSegunda} tokens de esquema en el peor caso, bastante para paga\
572
578
  r el prompt repetido y el sondeo`:l="la ganancia no cubre el coste de degradar: si el sondeo no elige, la petici\xF3n sale igual con todos los esquemas y el sondeo es coste puro",{aplicar:c,costeDeUnaLlamada:r,
573
- costeDeDosLlamadas:s,ganancia:i,perdidaSiDegrada:a,razon:l}}function Us(t){let n=(t.description??t.intents.join("; ")).trim().split(/\r?\n/,1)[0]??"",o=n.length>zs?n.slice(0,zs-1).trimEnd()+"\u2026":n;
574
- return {id:t.id,intents:t.intents,risk:t.risk,...o?{description:o}:{}}}var zs=200;function qs(t,e,n){let o=new Map(e.map(c=>[c.id,c])),r=[],s=[],i=new Set;for(let c of t){let l=o.get(c);if(!l){s.push(c);
575
- continue}r.includes(l.id)||(r.push(l.id),l.risk==="read"&&i.size<Math.max(0,n)&&i.add(l.id));}return {tools:e.filter(c=>c.risk!=="read"||i.has(c.id)),reconocidos:r,ignorados:s}}function Hs(t,e){let n=0,
576
- o=[];for(let r of t)r.risk==="read"?o.push(r.tokens):n+=r.tokens;o.sort((r,s)=>s-r);for(let r of o.slice(0,Math.max(0,e)))n+=r;return n}var Oo=true,Gs=new WeakSet;function _c(t){typeof t=="object"&&t!==null&&Gs.add(t);}function Ac(t){return typeof t=="object"&&t!==null&&Gs.has(t)}function Ws(t){switch(t){case "none":return Dc();case "inval\
579
+ costeDeDosLlamadas:s,ganancia:i,perdidaSiDegrada:a,razon:l}}function qs(t){let n=(t.description??(Array.isArray(t.intents)?t.intents.join("; "):"")).trim().split(/\r?\n/,1)[0]??"",o=n.length>Vs?n.slice(
580
+ 0,Vs-1).trimEnd()+"\u2026":n;return {id:t.id,intents:t.intents,risk:t.risk,...o?{description:o}:{}}}var Vs=200;function Hs(t,e,n){let o=new Map(e.map(c=>[c.id,c])),r=[],s=[],i=new Set;for(let c of t){let l=o.
581
+ get(c);if(!l){s.push(c);continue}r.includes(l.id)||(r.push(l.id),l.risk==="read"&&i.size<Math.max(0,n)&&i.add(l.id));}return {tools:e.filter(c=>c.risk!=="read"||i.has(c.id)),reconocidos:r,ignorados:s}}function Ks(t,e){
582
+ let n=0,o=[];for(let r of t)r.risk==="read"?o.push(r.tokens):n+=r.tokens;o.sort((r,s)=>s-r);for(let r of o.slice(0,Math.max(0,e)))n+=r;return n}var _o=true,Ys=new WeakSet;function Dc(t){typeof t=="object"&&t!==null&&Ys.add(t);}function Pc(t){return typeof t=="object"&&t!==null&&Ys.has(t)}function Gs(t){switch(t){case "none":return Lc();case "inval\
577
583
  id":return "BiVelio license key is not valid (it does not verify). Check you pasted the WHOLE key, and that it is the license key from your dashboard \u2014 not the `bvk_` service-account key, which goes in\
578
584
  `serviceAccountKey`. Keys: https://savings.bivelio.com/dashboard/install (license status: invalid)";case "revoked":return "BiVelio license has been revoked. If this is unexpected, check your billing st\
579
585
  atus at https://savings.bivelio.com/dashboard/account or write to support@bivelio.com (license status: revoked)";case "stale":return "BiVelio could not confirm your license with the control plane in tim\
580
586
  e \u2014 this is a connectivity problem, not a billing one: your license is still valid. Allow outbound HTTPS to your `licenseServerUrl` (https://savings.bivelio.com by default) and retry. (license status:\
581
587
  stale)";case "expired":case "grace":return `BiVelio license is not active. Renew your subscription at https://savings.bivelio.com/dashboard/account (license status: ${t})`;default:return `BiVelio license\
582
- is not active. See https://savings.bivelio.com/dashboard/account${t?` (license status: ${t})`:""}`}}function Dc(){return "BiVelio license required: none was configured. Pass { licenseKey } \u2014 the signe\
588
+ is not active. See https://savings.bivelio.com/dashboard/account${t?` (license status: ${t})`:""}`}}function Lc(){return "BiVelio license required: none was configured. Pass { licenseKey } \u2014 the signe\
583
589
  d token from your subscription, verified offline. This published package has no unlicensed mode. Copy your key and a ready-to-paste snippet at https://savings.bivelio.com/dashboard/install (license st\
584
- atus: none)"}function Pc(){return "licenseGate must implement isActive(): a gate that cannot prove the license is live is refused. In this published package an injected gate is not a licensing path at \
590
+ atus: none)"}function Mc(){return "licenseGate must implement isActive(): a gate that cannot prove the license is live is refused. In this published package an injected gate is not a licensing path at \
585
591
  all \u2014 pass { licenseKey } instead, from https://savings.bivelio.com/dashboard/install (license status: invalid)"}var sn=class{deps;config;now;generateId;contratosQueIncumplen;verjaDeCache=new en;verjaDeCascada;memoriaDelCodebook=new rn;constructor(e){
586
- this.config=e,this.deps=ks(e),this.now=e.now??(()=>Date.now()),this.generateId=e.generateId??(()=>mn()),this.contratosQueIncumplen=e.constraintMemory??new Set,this.verjaDeCascada=new tn(e.modelCascade?.
592
+ this.config=e,this.deps=ws(e),this.now=e.now??(()=>Date.now()),this.generateId=e.generateId??(()=>mn()),this.contratosQueIncumplen=e.constraintMemory??new Set,this.verjaDeCascada=new tn(e.modelCascade?.
587
593
  exploration!=null?{exploracion:e.modelCascade.exploration}:{});}async generate(e){this.assertLicensed();let n={llamadas:0,falloDelProveedor:false};try{return await this.generateOptimized(e,n)}catch(o){if(o instanceof
588
- De||this.config.failOpen===false||n.falloDelProveedor||n.llamadas>0||Ac(o))throw o;return await this.failOpenDirect(e,o)}}async llamarProveedor(e,n){n.llamadas+=1;try{return await this.config.provider.generate(
589
- e)}catch(o){throw n.falloDelProveedor=true,o}}decidirMarcadoDeCache(e,n,o,r,s,i,a){let c={marcar:false,huella:"",mensajesDePrefijo:0,cacheWriteMultiplier:1},l=zc(n,this.config.compressionEconomics);if(!l)return a.
594
+ De||this.config.failOpen===false||n.falloDelProveedor||n.llamadas>0||Pc(o))throw o;return await this.failOpenDirect(e,o)}}async llamarProveedor(e,n){n.llamadas+=1;try{return await this.config.provider.generate(
595
+ e)}catch(o){throw n.falloDelProveedor=true,o}}decidirMarcadoDeCache(e,n,o,r,s,i,a){let c={marcar:false,huella:"",mensajesDePrefijo:0,cacheWriteMultiplier:1},l=Uc(n,this.config.compressionEconomics);if(!l)return a.
590
596
  record("prefix-cache","skipped",{reason:`no cache read discount for model "${n}" (unrecognised provider, or a declared tier that does not discount reads): not claiming a cacheable prefix`}),c;if(!r.setIsStable)
591
597
  return a.record("prefix-cache","skipped",{reason:"the tool SET is selected per request; tools render first, so the prefix cannot hit. Pruning wins here (it is a measured saving); pass the tools you wa\
592
598
  nt fixed."}),c;if(s)return a.record("prefix-cache","skipped",{reason:"savings.toolDiscovery is on: which schemas travel is decided by a non-deterministic probe, so the tool block \u2014 which renders first\
593
599
  \u2014 varies across requests that would share a prefix fingerprint. Marking would pay the 1.25x write premium for a prefix that cannot hit. Turn tool discovery off to reclaim the prefix cache."}),c;
594
- if(i<=0)return c;let u=o.slice(0,i),d=this.tokensFor(this.assemblePromptText(u,r.tools),e),f=this.tokensFor(this.assemblePromptText(o,r.tools),e),m=ie(Se({model:n,tools:(r.tools??[]).map(p=>p.id),prefijo:u.
595
- map(p=>`${p.role}:${p.content}`)})),h=this.verjaDeCache.decidir(m,{totalTokens:f,stablePrefixTokens:d,tier:l});return a.record("prefix-cache",h.marcar?"marked":"skipped",{reason:h.razon,stablePrefixTokens:d,
596
- breakEvenHitRate:h.umbral,observedHitRate:h.observada}),h.marcar?{marcar:true,huella:m,mensajesDePrefijo:i,cacheWriteMultiplier:l.cacheWriteMultiplier}:c}decidirCascada(e,n,o,r){let s=o.modelCascade??"o\
600
+ if(i<=0)return c;let u=o.slice(0,i),d=this.tokensFor(this.assemblePromptText(u,r.tools),e),m=this.tokensFor(this.assemblePromptText(o,r.tools),e),f=ie(Se({model:n,tools:(r.tools??[]).map(g=>g.id),prefijo:u.
601
+ map(g=>`${g.role}:${g.content}`)})),h=this.verjaDeCache.decidir(f,{totalTokens:m,stablePrefixTokens:d,tier:l});return a.record("prefix-cache",h.marcar?"marked":"skipped",{reason:h.razon,stablePrefixTokens:d,
602
+ breakEvenHitRate:h.umbral,observedHitRate:h.observada}),h.marcar?{marcar:true,huella:f,mensajesDePrefijo:i,cacheWriteMultiplier:l.cacheWriteMultiplier}:c}decidirCascada(e,n,o,r){let s=o.modelCascade??"o\
597
603
  ff",i={modo:"off",modeloPedido:e.model,modeloServido:e.model,candidato:null,enruta:false,elegible:false,razon:"the model cascade is off",fuerza:"none",bucket:"",economia:null,observada:null,muestras:0,precioBarato:null,
598
- tasaDeMuestreo:0};if(s==="off")return i;let a=Is({schema:e.response?.schema,tools:e.tools}),c=Cs(e.model,this.config.modelCascade?.pairs??bo),l=this.precioConocido(e.model),u=c?this.precioConocido(c):
599
- void 0,d=Rs(u,l),f=ie(Se({tenant:n.tenantId,scope:n.authorizationScope,contract:n.contractId,schema:n.schemaVersion,fuerte:e.model,barato:c,tools:n.toolsetHash})),m=this.verjaDeCascada.estado(f),h={modo:s,
600
- modeloPedido:e.model,modeloServido:e.model,candidato:c,enruta:false,elegible:false,razon:a.razon,fuerza:a.fuerza,bucket:f,economia:d,observada:m&&m.enrutadas>0?m.escaladas/m.enrutadas:null,muestras:m?.enrutadas??
601
- 0,precioBarato:u??null,tasaDeMuestreo:0},p=b=>(r.record("model-cascade",s==="on"?"not routed":"not eligible",{reason:b}),{...h,razon:b});if(!a.elegible)return p(a.razon);if(!c)return p(`no cheaper mod\
602
- el is paired with "${e.model}"; declare one in createSavingsLayer({ modelCascade: { pairs } }) if your provider has one`);if(!d){let b=[...this.precioConocido(e.model)?[]:[e.model],...u?[]:[c]];return p(
604
+ tasaDeMuestreo:0};if(s==="off")return i;let a=Os({schema:e.response?.schema,tools:e.tools}),c=Is(e.model,this.config.modelCascade?.pairs??xo),l=this.precioConocido(e.model),u=c?this.precioConocido(c):
605
+ void 0,d=Cs(u,l),m=ie(Se({tenant:n.tenantId,scope:n.authorizationScope,contract:n.contractId,schema:n.schemaVersion,fuerte:e.model,barato:c,tools:n.toolsetHash})),f=this.verjaDeCascada.estado(m),h={modo:s,
606
+ modeloPedido:e.model,modeloServido:e.model,candidato:c,enruta:false,elegible:false,razon:a.razon,fuerza:a.fuerza,bucket:m,economia:d,observada:f&&f.enrutadas>0?f.escaladas/f.enrutadas:null,muestras:f?.enrutadas??
607
+ 0,precioBarato:u??null,tasaDeMuestreo:0},g=b=>(r.record("model-cascade",s==="on"?"not routed":"not eligible",{reason:b}),{...h,razon:b});if(!a.elegible)return g(a.razon);if(!c)return g(`no cheaper mod\
608
+ el is paired with "${e.model}"; declare one in createSavingsLayer({ modelCascade: { pairs } }) if your provider has one`);if(!d){let b=[...this.precioConocido(e.model)?[]:[e.model],...u?[]:[c]];return g(
603
609
  `no known price for ${b.map(y=>`"${y}"`).join(" or ")||"this pair"}, so the arithmetic that decides whether routing pays cannot be run. The illustrative default price is deliberately NOT used here: it\
604
- would approve a pair nobody has priced. Pass \`costModels\` for both models to enable the cascade for them`)}if(!d.viable)return p(d.razon);let g=Math.min(1,Math.max(0,this.config.modelCascade?.shadowSampleRate??
605
- 0));if(s==="shadow")return r.record("model-cascade","shadow",{candidateModel:c,costRatio:d.r,breakEvenEscalationRate:d.equilibrio,verifier:a.fuerza,workload:f,note:"measuring only: the request goes to\
606
- the model you asked for. The escalation rate is not a quality score \u2014 a well-formed answer with wrong content passes the verifier."}),{...h,elegible:true,razon:a.razon,tasaDeMuestreo:g};let x=this.
607
- verjaDeCascada.decidir(f,d);return x.enrutar?(this.avisar(`cascada:${e.model}->${c}`,`[bv-sala] model cascade ON: requests for "${e.model}" may be answered by "${c}" when a deterministic gate accepts \
610
+ would approve a pair nobody has priced. Pass \`costModels\` for both models to enable the cascade for them`)}if(!d.viable)return g(d.razon);let p=Math.min(1,Math.max(0,this.config.modelCascade?.shadowSampleRate??
611
+ 0));if(s==="shadow")return r.record("model-cascade","shadow",{candidateModel:c,costRatio:d.r,breakEvenEscalationRate:d.equilibrio,verifier:a.fuerza,workload:m,note:"measuring only: the request goes to\
612
+ the model you asked for. The escalation rate is not a quality score \u2014 a well-formed answer with wrong content passes the verifier."}),{...h,elegible:true,razon:a.razon,tasaDeMuestreo:p};let x=this.
613
+ verjaDeCascada.decidir(m,d);return x.enrutar?(this.avisar(`cascada:${e.model}->${c}`,`[bv-sala] model cascade ON: requests for "${e.model}" may be answered by "${c}" when a deterministic gate accepts \
608
614
  the answer. The gate checks the SHAPE of the answer against your output contract, never its meaning, so a well-formed answer with wrong content is served and counted as a success. report.model always \
609
615
  names the model that answered, and report.qualityStatus reads "bounded_degradation".`),r.record("model-cascade","routed",{candidateModel:c,costRatio:d.r,breakEvenEscalationRate:d.equilibrio,observedEscalationRate:x.
610
- observada,verifier:a.fuerza,workload:f,reason:x.razon}),{...h,modeloServido:c,enruta:true,elegible:true,razon:x.razon,observada:x.observada,muestras:x.muestras,tasaDeMuestreo:0}):(r.record("model-cascade",
616
+ observada,verifier:a.fuerza,workload:m,reason:x.razon}),{...h,modeloServido:c,enruta:true,elegible:true,razon:x.razon,observada:x.observada,muestras:x.muestras,tasaDeMuestreo:0}):(r.record("model-cascade",
611
617
  "off (gate)",{reason:x.razon,observedEscalationRate:x.observada,breakEvenEscalationRate:d.equilibrio}),{...h,elegible:true,razon:x.razon,observada:x.observada,muestras:x.muestras})}devOpen(){return false}assertLicensed(){
612
- if(this.devOpen())return;let e=this.config.licenseGate;if(e&&typeof e.isActive=="function"){if(e.isActive())return;let n=typeof e.status=="function"?e.status():void 0;throw new De(Ws(n),n)}throw e?new De(
613
- Pc(),"invalid"):new De(Ws("none"),"none")}avisar(e,n){this.config.silenceWarnings||G(e,n);}avisarDeTruncado(e,n,o,r,s){let i=e.response?.maxOutputTokens,a=ht(e)||"(sin contractId)",c=s?" La capa lo ha \
618
+ if(this.devOpen())return;let e=this.config.licenseGate;if(e&&typeof e.isActive=="function"){if(e.isActive())return;let n=typeof e.status=="function"?e.status():void 0;throw new De(Gs(n),n)}throw e?new De(
619
+ Mc(),"invalid"):new De(Gs("none"),"none")}avisar(e,n){this.config.silenceWarnings||G(e,n);}avisarDeTruncado(e,n,o,r,s){let i=e.response?.maxOutputTokens,a=ht(e)||"(sin contractId)",c=s?" La capa lo ha \
614
620
  APUNTADO: las siguientes peticiones de este contrato llevar\xE1n sus l\xEDmites de valor escritos en el prompt, que es lo \xFAnico que puede corregirlo sin tocarte el tope. Si aun as\xED se corta, es que la tarea\
615
621
  no cabe en el contrato: ensancha el esquema y sube el tope con \xE9l.":"",l=r===null?" El esquema no acota la respuesta (falta `maxLength`/`maxItems`), as\xED que no hay forma de saber de antemano cu\xE1nt\
616
622
  o necesita: ac\xF3talo y el tope deja de ser una apuesta.":i==null?` El contrato autoriza ~${r} tokens y esta petici\xF3n no declara tope, as\xED que quien cort\xF3 fue un tope del PROVEEDOR (la API de Anthrop\
@@ -629,70 +635,71 @@ n embebedor, que es coste y proveedor suyos: ench\xFAfela con `createSavingsLaye
629
635
  llamadas:0,falloDelProveedor:false}){this.assertLicensed();let o=new rt(this.now),r=new je,s=kn(e),i=Sn(s),a=e.savings??{};this.avisarDePalancasSinConfigurar(a);let c=this.decidirCascada(e,s,a,o),l=this.
630
636
  costModelFor(c.modeloServido);o.record("canonicalize","done",{tenant:s.tenantId,contract:s.contractId}),o.record("policy",i.reasons.join("; ")||"no restrictions",{allowExactCache:i.allowExactCache,allowSemanticCache:i.
631
637
  allowSemanticCache});let u=this.tokensFor(this.assembleBaselinePrompt(e),e),d=e.response?.maxOutputTokens??256;if(r.baselineInput=u,r.baselineOutput=d,r.baselineTools=e.tools?.length??0,a.deterministicResolvers!==
632
- false){let p=this.deps.resolvers.try(s);if(p)return r.avoidCall(u,this.tokensFor(p.text,e)),o.record("resolver",p.resolver,{avoided:true}),this.finish(e,s,{text:p.text,data:p.data,storedAtMs:this.now()},"d\
633
- eterministic",r,l,o,ft(),mt(),void 0,void 0,void 0,void 0,void 0,this.informeDeCascada(c,{servedModel:e.model}))}let f=wn(s,{servedModel:c.modeloServido});if(i.allowExactCache&&a.exactCache!==false){let p=await this.
634
- deps.exactCache.get(f);if(p)return r.avoidCall(u,this.tokensFor(p.text,e)),o.record("exact-cache","hit",{ageMs:this.now()-p.storedAtMs}),this.finish(e,s,p,"exact",r,l,o,ft(),mt(),this.now()-p.storedAtMs,
635
- void 0,void 0,void 0,void 0,this.informeDeCascada(c));o.record("exact-cache","miss");}let m=Vo(s,{servedModel:c.modeloServido,deferrable:a.deferrable===true,toolDiscovery:a.toolDiscovery===true,...e.response?.
636
- maxOutputTokens!=null?{maxOutputTokens:e.response.maxOutputTokens}:{}}),h=async()=>{try{return await this.expensivePath(n,e,s,i,a,r,l,o,f,u,c)}catch(p){throw (n.falloDelProveedor||n.llamadas>0)&&_c(p),
637
- p}};if(i.allowSingleflight&&a.singleflight!==false){let{value:p,coalesced:g}=await this.deps.singleflight.run(m,h);return g?(o.record("singleflight","coalesced",{key:m}),this.asCoalescedFollower(p,u,this.
638
- tokensFor(p.text??"",e),l,e)):p}return h()}async expensivePath(e,n,o,r,s,i,a,c,l,u,d){let f=this.entitled("semantic_cache");if(r.allowSemanticCache&&s.semanticCache&&this.deps.semanticCache&&!f&&c.record(
639
- "semantic-cache","degraded: feature not licensed (free tier)"),r.allowSemanticCache&&s.semanticCache&&this.deps.semanticCache&&f){let v=await this.deps.semanticCache.find(o);if(v)return i.avoidCall(u,
638
+ false){let g=this.deps.resolvers.try(s);if(g)return r.avoidCall(u,this.tokensFor(g.text,e)),o.record("resolver",g.resolver,{avoided:true}),this.finish(e,s,{text:g.text,data:g.data,storedAtMs:this.now()},"d\
639
+ eterministic",r,l,o,ft(),mt(),void 0,void 0,void 0,void 0,void 0,this.informeDeCascada(c,{servedModel:e.model}))}let m=wn(s,{servedModel:c.modeloServido});if(i.allowExactCache&&a.exactCache!==false){let g=await this.
640
+ deps.exactCache.get(m);if(g)return r.avoidCall(u,this.tokensFor(g.text,e)),o.record("exact-cache","hit",{ageMs:this.now()-g.storedAtMs}),this.finish(e,s,g,"exact",r,l,o,ft(),mt(),this.now()-g.storedAtMs,
641
+ void 0,void 0,void 0,void 0,this.informeDeCascada(c));o.record("exact-cache","miss");}let f=Uo(s,{servedModel:c.modeloServido,deferrable:a.deferrable===true,toolDiscovery:a.toolDiscovery===true,...e.response?.
642
+ maxOutputTokens!=null?{maxOutputTokens:e.response.maxOutputTokens}:{}}),h=async()=>{try{return await this.expensivePath(n,e,s,i,a,r,l,o,m,u,c)}catch(g){throw (n.falloDelProveedor||n.llamadas>0)&&Dc(g),
643
+ g}};if(i.allowSingleflight&&a.singleflight!==false){let{value:g,coalesced:p}=await this.deps.singleflight.run(f,h);return p?(o.record("singleflight","coalesced",{key:f}),this.asCoalescedFollower(g,u,this.
644
+ tokensFor(g.text??"",e),l,e)):g}return h()}async expensivePath(e,n,o,r,s,i,a,c,l,u,d){let m=this.entitled("semantic_cache");if(r.allowSemanticCache&&s.semanticCache&&this.deps.semanticCache&&!m&&c.record(
645
+ "semantic-cache","degraded: feature not licensed (free tier)"),r.allowSemanticCache&&s.semanticCache&&this.deps.semanticCache&&m){let v=await this.deps.semanticCache.find(o);if(v)return i.avoidCall(u,
640
646
  this.tokensFor(v.record.answer.text,n)),c.record("semantic-cache","hit",{confidence:v.confidence,similarity:v.similarity}),this.finish(n,o,v.record.answer,"semantic",i,a,c,ft(),mt(),v.ageMs,v.confidence,
641
- void 0,void 0,void 0,this.informeDeCascada(d,{servedModel:n.model}));c.record("semantic-cache","miss");}let m=s.router===false,h=m?ft():this.deps.router.classify(o);c.record("router",h.executionClass,{confidence:h.
642
- confidence,reason:h.reason});let p=m?this.deps.toolSelector.passthrough(n.tools):this.deps.toolSelector.select(o.normalizedText,n.tools,h.executionClass);if(i.actualTools=p.tools.length,p.droppedIds.length){
643
- let v=new Set(p.droppedIds),A=(n.tools??[]).filter(M=>v.has(M.id)).reduce((M,U)=>M+this.tokensFor(_o(U),n),0);i.eliminate(A),c.record("tool-selector",p.reason,{dropped:p.droppedIds,eliminatedTokens:A});}
644
- i.baselineRetrieval=h.rounds;let g=await Go({execution:h.executionClass,query:o.normalizedText,maxRounds:n.retrieval?.maxRounds??h.rounds,maxDocuments:n.retrieval?.maxDocuments??5},{...this.config.retriever?
645
- {retriever:this.config.retriever}:{},...this.config.reranker?{reranker:this.config.reranker}:{}});i.actualRetrieval=g.rounds,g.retrievedCount>0&&c.record("retrieval",`kept ${g.keptCount}/${g.retrievedCount}`,
646
- {rounds:g.rounds});let x=mt(),b=[...n.messages],y=Do(n.messages),E=false,C=g.docs.length>0?{role:"system",content:`Retrieved context \u2014 answer using only this evidence and cite sources by [id]:
647
+ void 0,void 0,void 0,this.informeDeCascada(d,{servedModel:n.model}));c.record("semantic-cache","miss");}let f=s.router===false,h=f?ft():this.deps.router.classify(o);c.record("router",h.executionClass,{confidence:h.
648
+ confidence,reason:h.reason});let g=f?this.deps.toolSelector.passthrough(n.tools):this.deps.toolSelector.select(o.normalizedText,n.tools,h.executionClass,o.toolsetHash);if(i.actualTools=g.tools.length,
649
+ g.droppedIds.length){let v=new Set(g.droppedIds),A=(n.tools??[]).filter(M=>v.has(M.id)).reduce((M,U)=>M+this.tokensFor(Ao(U),n),0);i.eliminate(A),c.record("tool-selector",g.reason,{dropped:g.droppedIds,
650
+ eliminatedTokens:A});}i.baselineRetrieval=h.rounds;let p=await Yo({execution:h.executionClass,query:o.normalizedText,maxRounds:n.retrieval?.maxRounds??h.rounds,maxDocuments:n.retrieval?.maxDocuments??5},
651
+ {...this.config.retriever?{retriever:this.config.retriever}:{},...this.config.reranker?{reranker:this.config.reranker}:{}});i.actualRetrieval=p.rounds,p.retrievedCount>0&&c.record("retrieval",`kept ${p.
652
+ keptCount}/${p.retrievedCount}`,{rounds:p.rounds});let x=mt(),b=[...n.messages],y=Po(n.messages),T=false,E=p.docs.length>0?{role:"system",content:`Retrieved context \u2014 answer using only this evidence and \
653
+ cite sources by [id]:
647
654
 
648
- `+g.docs.map((v,A)=>`[${v.source??v.id??`doc${A+1}`}]
655
+ `+p.docs.map((v,A)=>`[${v.source??v.id??`doc${A+1}`}]
649
656
  ${v.text}`).join(`
650
657
 
651
- `)}:null,O=ht(n),T=n.response?.maxOutputTokens!=null?Math.floor(n.response.maxOutputTokens*3.2):null,D=this.contratosQueIncumplen.has(O)?Ao(n.response?.schema,"",T):"";if(D&&gt(b,{role:"system",content:`\
658
+ `)}:null,R=ht(n),C=n.response?.maxOutputTokens!=null?Math.floor(n.response.maxOutputTokens*3.2):null,D=this.contratosQueIncumplen.has(R)?Do(n.response?.schema,"",C):"";if(D&&gt(b,{role:"system",content:`\
652
659
  JSON limits (not API-enforced): ${D}`}),n.structuredData!==void 0){let v=JSON.stringify(n.structuredData),A=this.tokensFor(v,n);if(s.serialization!==false){x=this.deps.formatSelector.choose(n.structuredData,
653
660
  {model:n.model,...n.tokenizer?{tokenizer:n.tokenizer}:{}});let M=this.tokensFor(x.encoded+x.instruction,n);i.compress(A,M),gt(b,{role:"system",content:(x.instruction?x.instruction+`
654
661
  `:"")+x.encoded}),c.record("serialization",x.chosen,{reason:x.reason,jsonTokens:A,chosenTokens:M});}else gt(b,{role:"system",content:v}),c.record("serialization","json-compact",{reason:"format selector\
655
- disabled; sent compact JSON"});}if(C&&gt(b,C),(s.compression===true||s.compression==="auto")&&r.allowCompression&&this.config.compressor&&this.entitled("long_context_compression")){let v=this.config.compressionEconomics??
656
- {},A=Io(n.model,v),M={compressorCostTokens:v.compressorCostTokens??0,...v.minimumContextTokens!=null?{minimumContextTokens:v.minimumContextTokens}:{},...v.minimumNetTokens!=null?{minimumNetTokens:v.minimumNetTokens}:
657
- {}},U=0,L=0;for(let F of b)F.role==="system"?U+=1:L+=this.tokensFor(F.content,n);let ee=this.tokensFor(this.assemblePromptText(b,p.tools),n),te=Dn({...M,contextTokens:L,projectedEliminable:L}),ne=0,de=0,
662
+ disabled; sent compact JSON"});}if(E&&gt(b,E),(s.compression===true||s.compression==="auto")&&r.allowCompression&&this.config.compressor&&this.entitled("long_context_compression")){let v=this.config.compressionEconomics??
663
+ {},A=Oo(n.model,v),M={compressorCostTokens:v.compressorCostTokens??0,...v.minimumContextTokens!=null?{minimumContextTokens:v.minimumContextTokens}:{},...v.minimumNetTokens!=null?{minimumNetTokens:v.minimumNetTokens}:
664
+ {}},U=0,L=0;for(let F of b)F.role==="system"?U+=1:L+=this.tokensFor(F.content,n);let ee=this.tokensFor(this.assemblePromptText(b,g.tools),n),te=Pn({...M,contextTokens:L,projectedEliminable:L}),ne=0,de=0,
658
665
  Ze=false,pe=te.reason;if(te.compress){let F=[];for(let fe of b){if(fe.role==="system"){F.push(fe);continue}let Xe=this.tokensFor(fe.content,n),Qe=await this.config.compressor.compress({text:fe.content}),
659
- Lo=!Qe.skipped&&Qe.fidelityPassed&&ir(fe.content,Qe.compressed),Mo=Lo?this.tokensFor(Qe.compressed,n):Xe;Lo&&Mo<Xe?(F.push({...fe,content:Qe.compressed}),ne+=Xe,de+=Mo):F.push(fe);}let Po=this.tokensFor(
660
- this.assemblePromptText(F,p.tools),n),Z=Dn({...M,contextTokens:L,projectedEliminable:ne-de}),un=Fs({originalTokens:ee,compressedTokens:Po,tier:A,...v.prefix?{prefix:v.prefix}:{},compressorCostTokens:M.
661
- compressorCostTokens});de>=ne?pe="no fidelity-passed net reduction":Z.compress?un.comprimir?(Ze=true,pe=un.razon,E=F.slice(0,y).some((fe,Xe)=>fe.content!==b[Xe]?.content),b=F,i.compress(ne,de)):pe=un.razon:
666
+ Mo=!Qe.skipped&&Qe.fidelityPassed&&ar(fe.content,Qe.compressed),Bo=Mo?this.tokensFor(Qe.compressed,n):Xe;Mo&&Bo<Xe?(F.push({...fe,content:Qe.compressed}),ne+=Xe,de+=Bo):F.push(fe);}let Lo=this.tokensFor(
667
+ this.assemblePromptText(F,g.tools),n),Z=Pn({...M,contextTokens:L,projectedEliminable:ne-de}),un=zs({originalTokens:ee,compressedTokens:Lo,tier:A,...v.prefix?{prefix:v.prefix}:{},compressorCostTokens:M.
668
+ compressorCostTokens});de>=ne?pe="no fidelity-passed net reduction":Z.compress?un.comprimir?(Ze=true,pe=un.razon,T=F.slice(0,y).some((fe,Xe)=>fe.content!==b[Xe]?.content),b=F,i.compress(ne,de)):pe=un.razon:
662
669
  pe=Z.reason;}Ze||(ne=0,de=0),c.record("compression",Ze?"applied":"skipped",{reason:pe,before:ne,after:de,contextTokens:L,promptTokens:ee,cacheTierMinimum:A.minimumCacheTokens,protectedSystemMessages:U,
663
- prefixRewritten:E}),i.compressionReport={originalTokens:ne,compressedTokens:de,protectedSpans:U,fidelityPassed:true};}if(s.elision!==false&&r.allowElision&&this.entitled("tool_result_elision")){let v=js(b);
664
- if(v.indices.length>0){let A=this.tokensFor(Co,n),M=0;for(let U of v.indices){let L=this.tokensFor(b[U].content,n);M+=Math.max(0,L-A);}(v.indices.some(U=>U<y)&&(E=true),b=$s(b,v.indices),i.eliminate(
665
- M),i.elididoLocal+=M),c.record("elision","applied",{elided:v.indices.length,eliminatedTokens:M,grossBytes:v.bytesOriginales,live:Oo});}else c.record("elision","skipped",{reason:"no old/larg\
666
- e tool_result over the age\xD7size threshold"});}let R=n.response?.schema,S=R&&s.outputCodebook===true?Ps(R,v=>this.tokensFor(v,n),a,{evidencia:this.memoriaDelCodebook.resolver(d.modeloServido,ht(n),s.outputCodebookMeasuredOutputDeltaTokens)}):
670
+ prefixRewritten:T}),i.compressionReport={originalTokens:ne,compressedTokens:de,protectedSpans:U,fidelityPassed:true};}if(s.elision!==false&&r.allowElision&&this.entitled("tool_result_elision")){let v=$s(b);
671
+ if(v.indices.length>0){let A=this.tokensFor(Io,n),M=0;for(let U of v.indices){let L=this.tokensFor(b[U].content,n);M+=Math.max(0,L-A);}(v.indices.some(U=>U<y)&&(T=true),b=Fs(b,v.indices),i.eliminate(
672
+ M),i.elididoLocal+=M),c.record("elision","applied",{elided:v.indices.length,eliminatedTokens:M,grossBytes:v.bytesOriginales,live:_o});}else c.record("elision","skipped",{reason:"no old/larg\
673
+ e tool_result over the age\xD7size threshold"});}let I=n.response?.schema,S=I&&s.outputCodebook===true?Ls(I,v=>this.tokensFor(v,n),a,{evidencia:this.memoriaDelCodebook.resolver(d.modeloServido,ht(n),s.outputCodebookMeasuredOutputDeltaTokens)}):
667
674
  null;S&&c.record("output-codebook",S.applied?"applied":"skipped",{reason:S.reason,...S.applied?{renamedKeys:S.plan.renamedKeys,codedEnumValues:S.plan.codedEnumValues,schemaTokensOriginal:S.plan.schemaTokensOriginal,
668
675
  schemaTokensCompact:S.plan.schemaTokensCompact,modelledShapeSavingTokens:S.plan.modelledShapeSavingTokens,measuredOutputDeltaTokens:S.plan.measuredOutputDeltaTokens,outputDeltaProvenance:S.plan.outputDeltaProvenance,
669
- breakEvenOutputDeltaTokens:S.plan.breakEvenOutputDeltaTokens,netSavingUsd:S.plan.netSavingUsd,pricedForModel:d.modeloServido}:{}});let B=S?.applied?S.plan.compactSchema:R,k=B?sr(d.modeloServido,B,this.
670
- deps.constraintBackends):{backend:"none",reason:"no output contract"};c.record("constraints",k.backend,{reason:k.reason});let w=this.decidirMarcadoDeCache(n,d.modeloServido,b,p,s.toolDiscovery===true,E?
671
- Do(b,true):y,c),_=this.now(),P=await this.descubrirHerramientas(e,n,s,p.tools,b,i,a,c),N=P.tools;i.actualTools=N.length;let V={messages:b,...N.length?{tools:N}:{},...B?{schema:B}:{},...n.response?.maxOutputTokens!=
676
+ breakEvenOutputDeltaTokens:S.plan.breakEvenOutputDeltaTokens,netSavingUsd:S.plan.netSavingUsd,pricedForModel:d.modeloServido}:{}});let B=S?.applied?S.plan.compactSchema:I,k=B?ir(d.modeloServido,B,this.
677
+ deps.constraintBackends):{backend:"none",reason:"no output contract"};c.record("constraints",k.backend,{reason:k.reason});let w=this.decidirMarcadoDeCache(n,d.modeloServido,b,g,s.toolDiscovery===true,T?
678
+ Po(b,true):y,c),_=this.now(),P=await this.descubrirHerramientas(e,n,s,g.tools,b,i,a,c),N=P.tools;i.actualTools=N.length;let V={messages:b,...N.length?{tools:N}:{},...B?{schema:B}:{},...n.response?.maxOutputTokens!=
672
679
  null?{maxOutputTokens:n.response.maxOutputTokens}:{},...n.temperature!=null?{temperature:n.temperature}:{},...n.seed!=null?{seed:n.seed}:{},...s.deferrable?{deferrable:true}:{},constraintBackend:k.backend},
673
- I=await this.llamarProveedor({model:d.modeloServido,...V,...w.marcar?{stablePrefixMessages:w.mensajesDePrefijo,promptCacheKey:w.huella}:{}},e);i.actualLlm+=1;let X=v=>{if(!S?.applied)return v;let A=We(
674
- v);return A.ok?JSON.stringify(S.plan.expand(A.value)):v},$=X(I.text),Q=I.usage,W=false;if(d.enruta){let v=yo({texto:$,schema:R,finishReason:I.finishReason,pidioHerramientas:(I.toolCalls?.length??0)>0});this.
680
+ O=await this.llamarProveedor({model:d.modeloServido,...V,...w.marcar?{stablePrefixMessages:w.mensajesDePrefijo,promptCacheKey:w.huella}:{}},e);i.actualLlm+=1;let X=v=>{if(!S?.applied)return v;let A=We(
681
+ v);return A.ok?JSON.stringify(S.plan.expand(A.value)):v},$=X(O.text),Q=O.usage,W=false;if(d.enruta){let v=vo({texto:$,schema:I,finishReason:O.finishReason,pidioHerramientas:(O.toolCalls?.length??0)>0});this.
675
682
  verjaDeCascada.registrar(d.bucket,!v.acepta),c.record("model-cascade",v.acepta?"accepted":"escalating",{servedModel:d.modeloServido,reason:v.motivo,checks:v.comprobaciones}),v.acepta||(W=true,i.cascadeAttempt(
676
- I.usage,d.precioBarato??a),i.actualLlm+=1,I=await this.llamarProveedor({model:n.model,...V},e),$=X(I.text));}let ue=W?n.model:d.modeloServido,ve=W?this.costModelFor(n.model):a;i.actualInput+=I.usage.inputTokens,
677
- i.actualOutput+=I.usage.outputTokens,S?.applied&&c.record("output-codebook",We(I.text).ok?"expanded":"not-expanded (response was not JSON)",We(I.text).ok?{localOutputTokensCompact:this.tokensFor(I.text,
678
- n),localOutputTokensExpanded:this.tokensFor($,n),creditedLedger:"none",note:"local count of the served answer in both shapes; not credited to any ledger"}:{}),R&&k.backend==="provider-native"&&I.structuredNatively===
683
+ O.usage,d.precioBarato??a),i.actualLlm+=1,O=await this.llamarProveedor({model:n.model,...V},e),$=X(O.text));}let ue=W?n.model:d.modeloServido,ve=W?this.costModelFor(n.model):a;i.actualInput+=O.usage.inputTokens,
684
+ i.actualOutput+=O.usage.outputTokens,S?.applied&&c.record("output-codebook",We(O.text).ok?"expanded":"not-expanded (response was not JSON)",We(O.text).ok?{localOutputTokensCompact:this.tokensFor(O.text,
685
+ n),localOutputTokensExpanded:this.tokensFor($,n),creditedLedger:"none",note:"local count of the served answer in both shapes; not credited to any ledger"}:{}),I&&k.backend==="provider-native"&&O.structuredNatively===
679
686
  false&&(k={backend:"none",reason:"provider did not enforce the contract natively; the schema travelled in the prompt and the layer is the only validator"},c.record("constraints","none",{downgradedFrom:"p\
680
687
  rovider-native",reason:k.reason})),i.sentInputLocal=this.tokensFor(this.assemblePromptText(b,N),n),i.removedInputLocal=Math.max(0,u-i.sentInputLocal-i.elididoLocal),i.sentInputLocal+=P.tokensLocalesDelSondeo,
681
- i.estimatorExact=this.estimatorEsExacto(n),I.usage.cachedInputTokens&&i.providerCached(I.usage.cachedInputTokens),w.marcar&&(i.cacheWritePremium(Q.cacheWriteInputTokens??0,w.cacheWriteMultiplier,d.precioBarato??
688
+ i.estimatorExact=this.estimatorEsExacto(n),O.usage.cachedInputTokens&&i.providerCached(O.usage.cachedInputTokens),w.marcar&&(i.cacheWritePremium(Q.cacheWriteInputTokens??0,w.cacheWriteMultiplier,d.precioBarato??
682
689
  a),this.verjaDeCache.registrar(w.huella,Q),c.record("prefix-cache","measured",{cacheRead:Q.cachedInputTokens??0,cacheWritePremiumTokens:Q.cacheWriteInputTokens??0}));let ke=null;if(d.modo==="shadow"&&
683
- d.elegible&&d.candidato&&d.precioBarato&&$c(l,d.tasaDeMuestreo))try{let v=await this.llamarProveedor({model:d.candidato,...V},e);i.actualLlm+=1;let A=i.extraCostUsd;i.cascadeAttempt(v.usage,d.precioBarato);
684
- let M=X(v.text),U=yo({texto:M,schema:R,finishReason:v.finishReason,pidioHerramientas:(v.toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!U.acepta);let L=U.acepta?Os(M,$):null;ke={coste:i.
690
+ d.elegible&&d.candidato&&d.precioBarato&&zc(l,d.tasaDeMuestreo))try{let v=await this.llamarProveedor({model:d.candidato,...V},e);i.actualLlm+=1;let A=i.extraCostUsd;i.cascadeAttempt(v.usage,d.precioBarato);
691
+ let M=X(v.text),U=vo({texto:M,schema:I,finishReason:v.finishReason,pidioHerramientas:(v.toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!U.acepta);let L=U.acepta?_s(M,$):null;ke={coste:i.
685
692
  extraCostUsd-A,divergio:L?L.divergen:null},c.record("model-cascade",U.acepta?"sample accepted":"sample escalated",{candidateModel:d.candidato,reason:U.motivo,sampleCost:ke.coste,...L?{diverged:L.divergen,
686
693
  divergence:L.motivo}:{},note:"measurement only: this answer was NEVER served. The escalation rate it feeds is a money figure, not a quality one"});}catch(v){c.record("model-cascade","sample failed (mea\
687
- surement only; the answer is unaffected)",{error:v instanceof Error?v.message:String(v)});}let Ge=$,_e=true,Ye=(I.toolCalls?.length??0)>0;if(Ye&&(_e=null,R&&c.record("validation","n/a: model requested to\
688
- ol calls (the output contract applies to the final answer)")),R&&!Ye){let v=We($),A=v.ok?ae(v.value,R):{valid:false,errors:[{path:"$",message:"not valid JSON"}]};v.ok&&v.rescatado!=null&&A.valid&&($=v.rescatado,
689
- c.record("validation","rescued-locally",{reason:"the model wrapped valid JSON in prose or a markdown fence; it was extracted locally instead of paying a repair call"})),!A.valid&&Fc(A.errors)&&this.contratosQueIncumplen.
690
- add(ht(n));let M=I.finishReason==="length",U=!A.valid&&A.errors.some(L=>/not a valid regular expression/.test(L.message));if(!A.valid&&U)c.record("validation","repair-skipped",{reason:"schema defect (\
694
+ surement only; the answer is unaffected)",{error:v instanceof Error?v.message:String(v)});}let Ge=$,_e=true,Ye=(O.toolCalls?.length??0)>0;if(Ye&&(_e=null,I&&c.record("validation","n/a: model requested to\
695
+ ol calls (the output contract applies to the final answer)")),I&&!Ye){let v=We($),A=v.ok?ae(v.value,I):{valid:false,errors:[{path:"$",message:"not valid JSON"}]};v.ok&&v.rescatado!=null&&A.valid&&($=v.rescatado,
696
+ c.record("validation","rescued-locally",{reason:"the model wrapped valid JSON in prose or a markdown fence; it was extracted locally instead of paying a repair call"})),!A.valid&&Vc(A.errors)&&this.contratosQueIncumplen.
697
+ add(ht(n));let M=O.finishReason==="length",U=!A.valid&&A.errors.some(L=>/not a valid regular expression/.test(L.message));if(!A.valid&&U)c.record("validation","repair-skipped",{reason:"schema defect (\
691
698
  uncompilable pattern); no output can satisfy it, a retry is a wasted call",errors:A.errors}),this.avisar("esquema-roto","[bvsala] El contrato de respuesta tiene un `pattern` que no es un regex valido,\
692
- asi que ninguna respuesta puede cumplirlo. NO se reintenta (seria una llamada pagada para el mismo fallo). Corrige el `pattern` del esquema.");else if(!A.valid&&M){let L=As(R,ne=>this.tokensFor(ne,n)),
699
+ asi que ninguna respuesta puede cumplirlo. NO se reintenta (seria una llamada pagada para el mismo fallo). Corrige el `pattern` del esquema.");else if(!A.valid&&M){let L=Ds(I,ne=>this.tokensFor(ne,n)),
693
700
  ee=n.response?.maxOutputTokens??null,te=L!==null&&ee!=null&&L<=ee;te&&this.contratosQueIncumplen.add(ht(n)),c.record("validation","repair-skipped",{reason:"output truncated by maxOutputTokens; a retry\
694
- with the same cap would truncate again",maxOutputTokens:n.response?.maxOutputTokens??null,outputTokens:I.usage.outputTokens,model:ue,...L!==null?{schemaAllowsTokens:L}:{},learnedValueLimits:te}),this.
695
- avisarDeTruncado(n,ue,I.usage.outputTokens,L,te);}else if(!A.valid&&k.backend==="none"){let L=A.errors.slice(0,5).map(Z=>`- ${Z.path}: ${Z.message}`).join(`
701
+ with the same cap would truncate again",maxOutputTokens:n.response?.maxOutputTokens??null,outputTokens:O.usage.outputTokens,model:ue,...L!==null?{schemaAllowsTokens:L}:{},learnedValueLimits:te}),this.
702
+ avisarDeTruncado(n,ue,O.usage.outputTokens,L,te);}else if(!A.valid&&k.backend==="none"){let L=A.errors.slice(0,5).map(Z=>`- ${Z.path}: ${Z.message}`).join(`
696
703
  `),ee=[{role:"user",content:`Your previous reply did not satisfy the required JSON contract.
697
704
 
698
705
  Previous reply:
@@ -702,97 +709,97 @@ Problems found:
702
709
  ${L}
703
710
 
704
711
  Return ONLY the corrected JSON object. Keep the same content; fix only what is listed.`}],te=this.tokensFor(this.assemblePromptText(ee),n),ne=i.sentInputLocal>0?i.actualInput/i.sentInputLocal:1,de=Math.
705
- round(ne*te),Ze=Math.min(I.usage.outputTokens,n.response?.maxOutputTokens??Number.POSITIVE_INFINITY),pe=de/1e3*ve.inputPer1k+Ze/1e3*ve.outputPer1k,F=this.config.skipRepairAboveBaseline?i.estimateCost(
712
+ round(ne*te),Ze=Math.min(O.usage.outputTokens,n.response?.maxOutputTokens??Number.POSITIVE_INFINITY),pe=de/1e3*ve.inputPer1k+Ze/1e3*ve.outputPer1k,F=this.config.skipRepairAboveBaseline?i.estimateCost(
706
713
  ve):void 0;if(F!=null&&F.baselineEstimate>0&&F.actual+pe>F.baselineEstimate&&F!=null)c.record("validation","repair-skipped",{reason:"repairing would cost more than not using the layer at all; the inva\
707
714
  lid answer is served as-is and reported as invalid",errors:A.errors,baselineUsd:F.baselineEstimate,actualUsd:F.actual,repairEstimateUsd:pe}),this.avisar("reparacion-mas-cara-que-el-baseline",`[bvsala]\
708
715
  The answer did not satisfy the output contract, and repairing it would have cost MORE than sending this request without the layer at all (baseline ~$${F.baselineEstimate}, already spent ~$${F.actual}\
709
716
  , repair ~$${pe.toFixed(6)}). The repair was skipped and the invalid answer is returned with \`constraints.structurallyValid: false\` \u2014 check it before using it. This combination is usually a request ca\
710
- rrying both tools and an output contract; see the adapter warning for the cheaper shapes.`);else {i.retries=1,c.record("validation","repair-attempt",{errors:A.errors}),I=await this.llamarProveedor({model:ue,
711
- messages:ee,schema:R,...n.response?.maxOutputTokens!=null?{maxOutputTokens:n.response.maxOutputTokens}:{}},e),i.actualLlm+=1,i.actualInput+=I.usage.inputTokens,i.actualOutput+=I.usage.outputTokens,i.repairOutput+=
712
- I.usage.outputTokens,i.repairInput+=I.usage.inputTokens,i.sentInputLocal+=te,$=I.text;let Z=We($);A=Z.ok?ae(Z.value,R):{valid:false,errors:[{path:"$",message:"not valid JSON"}]},Z.ok&&(Ge=Z.value,Z.rescatado!=
713
- null&&A.valid&&($=Z.rescatado));}}else v.ok&&(Ge=v.value);_e=A.valid,c.record("validation",_e?"valid":"invalid");}let Ys=this.now()-_,Zs=Bc(Ge),cn={text:$,data:Ge,rendered:Zs,storedAtMs:this.now()},we=this.
714
- informeDeDiferido(s,I,ve);we&&c.record("deferred-tier",we.credited?"credited":"not-credited",{...we.requestedTier?{requestedTier:we.requestedTier}:{},...we.servedTier?{servedTier:we.servedTier}:{},creditedLedger:"\
715
- none",reason:we.reason});try{let v=P.aplicado,A=I.finishReason==="length",M=_e!==!1&&!Ye&&!v&&!A;M||c.record("cache-write",Ye?"skipped: tool-call turn (an action request must not be replayed from cach\
717
+ rrying both tools and an output contract; see the adapter warning for the cheaper shapes.`);else {i.retries=1,c.record("validation","repair-attempt",{errors:A.errors}),O=await this.llamarProveedor({model:ue,
718
+ messages:ee,schema:I,...n.response?.maxOutputTokens!=null?{maxOutputTokens:n.response.maxOutputTokens}:{}},e),i.actualLlm+=1,i.actualInput+=O.usage.inputTokens,i.actualOutput+=O.usage.outputTokens,i.repairOutput+=
719
+ O.usage.outputTokens,i.repairInput+=O.usage.inputTokens,i.sentInputLocal+=te,$=O.text;let Z=We($);A=Z.ok?ae(Z.value,I):{valid:false,errors:[{path:"$",message:"not valid JSON"}]},Z.ok&&(Ge=Z.value,Z.rescatado!=
720
+ null&&A.valid&&($=Z.rescatado));}}else v.ok&&(Ge=v.value);_e=A.valid,c.record("validation",_e?"valid":"invalid");}let Zs=this.now()-_,Xs=jc(Ge),cn={text:$,data:Ge,rendered:Xs,storedAtMs:this.now()},we=this.
721
+ informeDeDiferido(s,O,ve);we&&c.record("deferred-tier",we.credited?"credited":"not-credited",{...we.requestedTier?{requestedTier:we.requestedTier}:{},...we.servedTier?{servedTier:we.servedTier}:{},creditedLedger:"\
722
+ none",reason:we.reason});try{let v=P.aplicado,A=O.finishReason==="length",M=_e!==!1&&!Ye&&!v&&!A;M||c.record("cache-write",Ye?"skipped: tool-call turn (an action request must not be replayed from cach\
716
723
  e)":_e===!1?"skipped: response fails its output contract":A?'skipped: answer cut off by the output cap (finish_reason "length"); replaying half an answer would bill it as a 100% avoided call':"skipped\
717
724
  : answered with a reduced tool view (tool discovery), so it must not be replayed");let U=W?wn(o,{servedModel:ue}):l;if(M&&r.allowExactCache&&s.exactCache!==!1){let ee=this.config.exactCacheTtlMs??864e5,
718
725
  te=r.maxCacheAgeMs==null?ee:Math.min(ee,r.maxCacheAgeMs);await this.deps.exactCache.set(U,cn,te);}let L=ue!==n.model;M&&!L&&r.allowSemanticCache&&s.semanticCache&&this.deps.semanticCache?await this.deps.
719
726
  semanticCache.store(o,cn):M&&L&&s.semanticCache&&c.record("cache-write","semantic write skipped: a cheaper model answered, and this cache keys on the model the caller asked for");}catch(v){c.record("ca\
720
- che-write","failed (non-fatal; answer already served)",{error:v instanceof Error?v.message:String(v)});}let ln=this.finish(n,o,cn,"miss",i,ve,c,h,x,void 0,void 0,_e,k.backend,Ys,this.informeDeCascada(d,
721
- {servedModel:ue,...d.enruta?{escalated:W}:{},...d.elegible&&d.precioBarato?{estimatedSwapSaving:jc(i,W,d.precioBarato,this.costModelFor(n.model))}:{},...ke?{sampled:true,sampleCost:an(ke.coste),...ke.divergio!==
722
- null?{divergedOnSample:ke.divergio}:{}}:{},...i.cascadeInput>0||i.cascadeOutput>0?{cascadeInputTokens:i.cascadeInput,cascadeOutputTokens:i.cascadeOutput}:{}}),we);return Ye&&(ln.toolCalls=I.toolCalls),
723
- I.finishReason!==void 0&&(ln.finishReason=I.finishReason),ln}async descubrirHerramientas(e,n,o,r,s,i,a,c){let l={tools:r,tokensLocalesDelSondeo:0,aplicado:false};if(o.toolDiscovery!==true)return l;if(r.length<
724
- 2)return c.record("tool-discovery","skipped (nothing to discover)",{candidates:r.length}),l;let u=g=>this.tokensFor(_o(g),n),d=r.map(Us),f=Vs({promptTokens:this.tokensFor(this.assemblePromptText(s),n),
725
- esquemasCompletos:r.reduce((g,x)=>g+u(x),0),descriptoresLigeros:d.reduce((g,x)=>g+u(x),0),esquemasDeLaSegunda:Hs(r.map(g=>({risk:g.risk,tokens:u(g)})),3),salidaFinal:n.response?.maxOutputTokens??256,salidaDelSondeo:96,
726
- precio:a});if(!f.aplicar)return c.record("tool-discovery","skipped (not worth a second call)",{reason:f.razon,oneCall:f.costeDeUnaLlamada,twoCalls:f.costeDeDosLlamadas}),l;let m,h=this.tokensFor(this.
727
- assemblePromptText(s,d),n);try{m=await this.llamarProveedor({model:n.model,messages:s,tools:d,maxOutputTokens:96,...n.temperature!=null?{temperature:n.temperature}:{},...n.seed!=null?{seed:n.seed}:{}},
728
- e);}catch(g){return c.record("tool-discovery","failed (falling back to a single call with every schema)",{error:g instanceof Error?g.message:String(g)}),l}i.actualLlm+=1,i.actualInput+=m.usage.inputTokens,
729
- i.actualOutput+=m.usage.outputTokens,i.discoveryInput+=m.usage.inputTokens,i.discoveryOutput+=m.usage.outputTokens;let p=qs((m.toolCalls??[]).map(g=>g.name),r,3);return p.reconocidos.length===0?(c.record(
730
- "tool-discovery","degraded: probe named no known tool",{finishReason:m.finishReason??null,...p.ignorados.length?{unknownNames:p.ignorados}:{}}),{tools:r,tokensLocalesDelSondeo:h,aplicado:false}):(c.record(
731
- "tool-discovery","applied (two provider calls)",{chosen:p.reconocidos,sent:p.tools.map(g=>g.id),candidates:r.length,...p.ignorados.length?{unknownNames:p.ignorados}:{}}),{tools:p.tools,tokensLocalesDelSondeo:h,
727
+ che-write","failed (non-fatal; answer already served)",{error:v instanceof Error?v.message:String(v)});}let ln=this.finish(n,o,cn,"miss",i,ve,c,h,x,void 0,void 0,_e,k.backend,Zs,this.informeDeCascada(d,
728
+ {servedModel:ue,...d.enruta?{escalated:W}:{},...d.elegible&&d.precioBarato?{estimatedSwapSaving:Fc(i,W,d.precioBarato,this.costModelFor(n.model))}:{},...ke?{sampled:true,sampleCost:an(ke.coste),...ke.divergio!==
729
+ null?{divergedOnSample:ke.divergio}:{}}:{},...i.cascadeInput>0||i.cascadeOutput>0?{cascadeInputTokens:i.cascadeInput,cascadeOutputTokens:i.cascadeOutput}:{}}),we);return Ye&&(ln.toolCalls=O.toolCalls),
730
+ O.finishReason!==void 0&&(ln.finishReason=O.finishReason),ln}async descubrirHerramientas(e,n,o,r,s,i,a,c){let l={tools:r,tokensLocalesDelSondeo:0,aplicado:false};if(o.toolDiscovery!==true)return l;if(r.length<
731
+ 2)return c.record("tool-discovery","skipped (nothing to discover)",{candidates:r.length}),l;let u=p=>this.tokensFor(Ao(p),n),d=r.map(qs),m=Us({promptTokens:this.tokensFor(this.assemblePromptText(s),n),
732
+ esquemasCompletos:r.reduce((p,x)=>p+u(x),0),descriptoresLigeros:d.reduce((p,x)=>p+u(x),0),esquemasDeLaSegunda:Ks(r.map(p=>({risk:p.risk,tokens:u(p)})),3),salidaFinal:n.response?.maxOutputTokens??256,salidaDelSondeo:96,
733
+ precio:a});if(!m.aplicar)return c.record("tool-discovery","skipped (not worth a second call)",{reason:m.razon,oneCall:m.costeDeUnaLlamada,twoCalls:m.costeDeDosLlamadas}),l;let f,h=this.tokensFor(this.
734
+ assemblePromptText(s,d),n);try{f=await this.llamarProveedor({model:n.model,messages:s,tools:d,maxOutputTokens:96,...n.temperature!=null?{temperature:n.temperature}:{},...n.seed!=null?{seed:n.seed}:{}},
735
+ e);}catch(p){return c.record("tool-discovery","failed (falling back to a single call with every schema)",{error:p instanceof Error?p.message:String(p)}),l}i.actualLlm+=1,i.actualInput+=f.usage.inputTokens,
736
+ i.actualOutput+=f.usage.outputTokens,i.discoveryInput+=f.usage.inputTokens,i.discoveryOutput+=f.usage.outputTokens;let g=Hs((f.toolCalls??[]).map(p=>p.name),r,3);return g.reconocidos.length===0?(c.record(
737
+ "tool-discovery","degraded: probe named no known tool",{finishReason:f.finishReason??null,...g.ignorados.length?{unknownNames:g.ignorados}:{}}),{tools:r,tokensLocalesDelSondeo:h,aplicado:false}):(c.record(
738
+ "tool-discovery","applied (two provider calls)",{chosen:g.reconocidos,sent:g.tools.map(p=>p.id),candidates:r.length,...g.ignorados.length?{unknownNames:g.ignorados}:{}}),{tools:g.tools,tokensLocalesDelSondeo:h,
732
739
  aplicado:true})}informeDeCascada(e,n={}){if(e.modo!=="off")return {mode:e.modo,servedModel:n.servedModel??e.modeloServido,eligible:e.elegible,reason:e.razon,verifier:e.fuerza,creditedLedger:"none",...e.candidato?
733
740
  {candidateModel:e.candidato}:{},...e.economia?{costRatio:pt(e.economia.r),breakEvenEscalationRate:pt(e.economia.equilibrio),targetEscalationRate:pt(e.economia.escaladoMaximo)}:{},...e.bucket?{workload:e.
734
741
  bucket}:{},...e.observada!=null?{escalationRate:pt(e.observada),escalationSamples:e.muestras}:{},...n,requestedModel:e.modeloPedido}}informeDeDiferido(e,n,o){if(e.deferrable!==true)return;let r=n.requestedServiceTier,
735
- s=ur(n.servedServiceTier),i={...r?{requestedTier:r}:{},...s?{servedTier:s.servido}:{},credited:false,creditedLedger:"none",latency:fr(r),reason:""};if(!r)return {...i,reason:pr};if(!s)return {...i,reason:`\
742
+ s=dr(n.servedServiceTier),i={...r?{requestedTier:r}:{},...s?{servedTier:s.servido}:{},credited:false,creditedLedger:"none",latency:mr(r),reason:""};if(!r)return {...i,reason:fr};if(!s)return {...i,reason:`\
736
743
  asked the provider for the "${r}" tier, and it reported none back: the rate this request was billed at cannot be known, so nothing is credited`};if(s.factor==null)return {...i,reason:`asked for "${r}" \
737
744
  and the provider reports serving "${s.servido}", a tier this layer has no published rate for: nothing is credited`};if(!s.conDescuento)return {...i,reason:`asked for "${r}" and the provider reports ser\
738
745
  ving "${s.servido}", which bills at the standard rate: this request was billed as if it had never been deferred`};let a=n.usage,c=Math.min(Math.max(0,a.cachedInputTokens??0),Math.max(0,a.inputTokens)),
739
- l=o.cachedInputPer1k??o.inputPer1k,u=(Math.max(0,a.inputTokens)-c)/1e3*o.inputPer1k+c/1e3*l+Math.max(0,a.outputTokens)/1e3*o.outputPer1k,d=dr(s,u);return {...i,credited:true,discountRate:pt(s.factor),...d!=
746
+ l=o.cachedInputPer1k??o.inputPer1k,u=(Math.max(0,a.inputTokens)-c)/1e3*o.inputPer1k+c/1e3*l+Math.max(0,a.outputTokens)/1e3*o.outputPer1k,d=pr(s,u);return {...i,credited:true,discountRate:pt(s.factor),...d!=
740
747
  null?{estimatedTierSaving:an(d)}:{},reason:`the provider reports serving the "${s.servido}" tier, which bills at ${(s.factor*100).toFixed(0)}% of the standard rate; the discount stacks with provider p\
741
748
  refix caching rather than replacing it`}}diferidoSinLlamada(e){if(e.savings?.deferrable===true)return {credited:false,creditedLedger:"none",latency:"not applicable: no provider call was made for this reques\
742
- t.",reason:"no provider call was made, so no processing tier was served and none is credited; the call was avoided outright, which is worth more than any tier discount on it"}}finish(e,n,o,r,s,i,a,c,l,u,d,f,m="\
743
- none",h=0,p,g){let x=e.response?.schema,b=f===null?null:f??(x?ae(o.data,x).valid:true),y=this.buildReport(e,n,r,s,i,a,c,l,u,d,b,m,h,p,g??this.diferidoSinLlamada(e));return {requestId:y.requestId,data:o.data,
744
- text:o.text,...o.rendered!==void 0?{rendered:o.rendered}:{},report:y}}buildReport(e,n,o,r,s,i,a,c,l,u,d,f,m,h,p){let g=r.estimateCost(s),x=i.elapsed(),b=h!=null&&h.servedModel!==h.requestedModel;return {
749
+ t.",reason:"no provider call was made, so no processing tier was served and none is credited; the call was avoided outright, which is worth more than any tier discount on it"}}finish(e,n,o,r,s,i,a,c,l,u,d,m,f="\
750
+ none",h=0,g,p){let x=e.response?.schema,b=m===null?null:m??(x?ae(o.data,x).valid:true),y=this.buildReport(e,n,r,s,i,a,c,l,u,d,b,f,h,g,p??this.diferidoSinLlamada(e));return {requestId:y.requestId,data:o.data,
751
+ text:o.text,...o.rendered!==void 0?{rendered:o.rendered}:{},report:y}}buildReport(e,n,o,r,s,i,a,c,l,u,d,m,f,h,g){let p=r.estimateCost(s),x=i.elapsed(),b=h!=null&&h.servedModel!==h.requestedModel;return {
745
752
  requestId:this.generateId(),model:h?.servedModel??e.model,calls:{baselineLlm:r.baselineLlm,actualLlm:r.actualLlm,avoidedLlm:r.avoidedLlm,baselineRetrieval:r.baselineRetrieval,actualRetrieval:r.actualRetrieval,
746
753
  baselineTools:r.baselineTools,actualTools:r.actualTools,retries:r.retries},tokens:{baselineInput:r.baselineInput,actualInput:r.actualInput,eliminatedInput:r.eliminatedInput,compressedInput:r.compressedInput,
747
754
  baselineOutput:r.publishedBaselineOutput,actualOutput:r.actualOutput,eliminatedOutput:r.eliminatedOutput,...r.providerCachedInput?{providerCachedInput:r.providerCachedInput}:{}},cache:{result:o,...u!==
748
755
  void 0?{confidence:u}:{},...l!==void 0?{ageMs:l}:{}},routing:{executionClass:a.executionClass,confidence:a.confidence,rounds:r.actualRetrieval,reason:a.reason},serialization:{chosen:c.chosen,candidateTokens:c.
749
- candidateTokens,instructionOverheadTokens:c.instructionOverheadTokens},...r.compressionReport?{compression:r.compressionReport}:{},constraints:{backend:f,schemaVersion:n.schemaVersion,...d===null?{}:{
750
- structurallyValid:d}},qualityStatus:Nc(o,d,b),...h?{modelCascade:h}:{},...p?{deferred:p}:{},quality:{...o!=="miss"?{freshnessPassed:!Sn(n).requiresFreshData}:{}},cost:g,latencyMs:{total:x,preprocessing:Math.
751
- max(0,x-m),provider:m},traces:i.all()}}async failOpenDirect(e,n){let o=new rt(this.now);o.record("fail-open","internal optimizer error \u2014 bypassed to a direct provider call",{error:n instanceof Error?
756
+ candidateTokens,instructionOverheadTokens:c.instructionOverheadTokens},...r.compressionReport?{compression:r.compressionReport}:{},constraints:{backend:m,schemaVersion:n.schemaVersion,...d===null?{}:{
757
+ structurallyValid:d}},qualityStatus:$c(o,d,b),...h?{modelCascade:h}:{},...g?{deferred:g}:{},quality:{...o!=="miss"?{freshnessPassed:!Sn(n).requiresFreshData}:{}},cost:p,latencyMs:{total:x,preprocessing:Math.
758
+ max(0,x-f),provider:f},traces:i.all()}}async failOpenDirect(e,n){let o=new rt(this.now);o.record("fail-open","internal optimizer error \u2014 bypassed to a direct provider call",{error:n instanceof Error?
752
759
  n.message:String(n)});let r=new je,s=this.costModelFor(e.model),i;try{i=kn(e);}catch{i={schemaVersion:e.response?.version??e.response?.contractId??"none"};}let a=e.response?.schema,c=[...e.messages];e.structuredData!==
753
760
  void 0&&gt(c,{role:"system",content:JSON.stringify(e.structuredData)});let l=this.now(),u=await this.config.provider.generate({model:e.model,messages:c,...e.tools?.length?{tools:e.tools}:{},...a?{schema:a}:
754
761
  {},...e.response?.maxOutputTokens!=null?{maxOutputTokens:e.response.maxOutputTokens}:{},...e.temperature!=null?{temperature:e.temperature}:{},...e.seed!=null?{seed:e.seed}:{}}),d=this.now()-l;r.baselineLlm=
755
762
  1,r.actualLlm=1,r.actualInput=u.usage.inputTokens,r.actualOutput=u.usage.outputTokens,r.baselineInput=u.usage.inputTokens,r.baselineOutput=u.usage.outputTokens,u.usage.cachedInputTokens&&r.providerCached(
756
- u.usage.cachedInputTokens);let f=u.text,m=true,h=(u.toolCalls?.length??0)>0;if(h&&(m=null),a&&!h){let g=We(u.text);m=g.ok?ae(g.value,a).valid:false,g.ok&&(f=g.value);}let p=this.buildReport(e,i,"miss",r,s,o,
757
- ft(),mt(),void 0,void 0,m,"none",d,void 0,e.savings?.deferrable===true?{credited:false,creditedLedger:"none",latency:"unchanged: the fail-open path asks for no processing tier, so this request was schedule\
763
+ u.usage.cachedInputTokens);let m=u.text,f=true,h=(u.toolCalls?.length??0)>0;if(h&&(f=null),a&&!h){let p=We(u.text);f=p.ok?ae(p.value,a).valid:false,p.ok&&(m=p.value);}let g=this.buildReport(e,i,"miss",r,s,o,
764
+ ft(),mt(),void 0,void 0,f,"none",d,void 0,e.savings?.deferrable===true?{credited:false,creditedLedger:"none",latency:"unchanged: the fail-open path asks for no processing tier, so this request was schedule\
758
765
  d exactly as an ordinary one.",reason:"the optimizer failed and this request went out on the direct fail-open path, which asks for no cheaper tier: that tier can be refused for lack of capacity, and t\
759
- rading availability for a discount on a last-resort call is the wrong trade"}:void 0);return {requestId:p.requestId,data:f,text:u.text,...h?{toolCalls:u.toolCalls}:{},...u.finishReason!==void 0?{finishReason:u.
760
- finishReason}:{},report:p}}asCoalescedFollower(e,n,o,r,s){let i=new je;i.avoidCall(n,o);let a=i.estimateCost(r),c=this.generateId(),l=this.diferidoSinLlamada(s),u=l?{deferred:l}:{},{deferred:d,...f}=e.
761
- report;return {...e,requestId:c,report:{...f,requestId:c,calls:{...e.report.calls,actualLlm:0,avoidedLlm:1},tokens:{baselineInput:i.baselineInput,actualInput:i.actualInput,eliminatedInput:i.eliminatedInput,
766
+ rading availability for a discount on a last-resort call is the wrong trade"}:void 0);return {requestId:g.requestId,data:m,text:u.text,...h?{toolCalls:u.toolCalls}:{},...u.finishReason!==void 0?{finishReason:u.
767
+ finishReason}:{},report:g}}asCoalescedFollower(e,n,o,r,s){let i=new je;i.avoidCall(n,o);let a=i.estimateCost(r),c=this.generateId(),l=this.diferidoSinLlamada(s),u=l?{deferred:l}:{},{deferred:d,...m}=e.
768
+ report;return {...e,requestId:c,report:{...m,requestId:c,calls:{...e.report.calls,actualLlm:0,avoidedLlm:1},tokens:{baselineInput:i.baselineInput,actualInput:i.actualInput,eliminatedInput:i.eliminatedInput,
762
769
  compressedInput:i.compressedInput,baselineOutput:i.publishedBaselineOutput,actualOutput:i.actualOutput,eliminatedOutput:i.eliminatedOutput,...i.providerCachedInput?{providerCachedInput:i.providerCachedInput}:
763
770
  {}},cache:{result:"singleflight"},...u,cost:a}}}assembleBaselinePrompt(e){return this.assemblePromptText(e.messages,e.tools,e.structuredData)}assemblePromptText(e,n,o){let r=e.map(s=>s.content);o!==void 0&&
764
- r.push(JSON.stringify(o));for(let s of n??[])r.push(_o(s));return r.join(`
771
+ r.push(JSON.stringify(o));for(let s of n??[])r.push(Ao(s));return r.join(`
765
772
  `)}tokensFor(e,n){return this.config.tokenizer.count(e,{...n.tokenizer?{tokenizer:n.tokenizer}:{},model:n.model})}estimatorEsExacto(e){let n=this.config.tokenizer;if(typeof n.resolve!="function")return false;
766
773
  try{return n.resolve({...e.tokenizer?{tokenizer:e.tokenizer}:{},model:e.model}).exact===!0}catch{return false}}entitled(e){return this.devOpen()?true:!!this.config.licenseGate&&this.config.licenseGate.isEntitled(
767
774
  e)}precioConocido(e){let n=this.config.costModels;if(n){let o=n[e];if(o)return o;let r=e.indexOf("/");if(r>=0){let s=n[e.slice(r+1)];if(s)return s}}return xt(e)}costModelFor(e){let n=this.precioConocido(
768
775
  e);return n||(this.config.defaultCostModel?this.config.defaultCostModel:(this.avisar(`precio-ilustrativo:${e}`,`[bv-sala] no cost model configured for "${e}"; falling back to the ILLUSTRATIVE default \
769
- price. Dollar figures will not match your bill. Pass { costModels: { "${e}": { inputPer1k, outputPer1k } } }.`),vs))}};function We(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}for(let e of Lc(t))try{
770
- return {ok:!0,value:JSON.parse(e),rescatado:e}}catch{continue}return {ok:false}}function Lc(t){let e=[],n=/```[ \t]*[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g;for(let o of t.matchAll(n)){let r=o[1]?.trim();r&&
771
- e.push(r);}for(let o of ["{","["]){let r=t.indexOf(o);if(r===-1)continue;let s=Mc(t,r);s&&e.push(s);}return e}function Mc(t,e){let n=t[e],o=n==="{"?"}":"]",r=0,s=false,i=false;for(let a=e;a<t.length;a+=1){let c=t[a];
772
- if(s){i?i=false:c==="\\"?i=true:c==='"'&&(s=false);continue}if(c==='"'){s=true;continue}if(c===n)r+=1;else if(c===o&&(r-=1,r===0))return t.slice(e,a+1)}}function Bc(t){return typeof t=="string"?t:JSON.stringify(
773
- t,null,2)}function Nc(t,e,n=false){if(e===false)return "rejected";if(n)return "bounded_degradation";switch(t){case "deterministic":case "exact":return "exact";case "semantic":return "task_equivalent";default:return "\
774
- not_verified"}}function pt(t){return Math.round(t*1e6)/1e6}function an(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}function jc(t,e,n,o){if(e)return an(-t.extraCostUsd);let r=s=>t.actualInput/1e3*
775
- s.inputPer1k+t.actualOutput/1e3*s.outputPer1k;return an(r(o)-r(n))}function $c(t,e){if(!(e>0))return false;if(e>=1)return true;let n=ie(`${t}:cascade-sample`);return Number.parseInt(n.slice(0,13),16)/2**52<e}
776
+ price. Dollar figures will not match your bill. Pass { costModels: { "${e}": { inputPer1k, outputPer1k } } }.`),ks))}};function We(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}for(let e of Bc(t))try{
777
+ return {ok:!0,value:JSON.parse(e),rescatado:e}}catch{continue}return {ok:false}}function Bc(t){let e=[],n=/```[ \t]*[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g;for(let o of t.matchAll(n)){let r=o[1]?.trim();r&&
778
+ e.push(r);}for(let o of ["{","["]){let r=t.indexOf(o);if(r===-1)continue;let s=Nc(t,r);s&&e.push(s);}return e}function Nc(t,e){let n=t[e],o=n==="{"?"}":"]",r=0,s=false,i=false;for(let a=e;a<t.length;a+=1){let c=t[a];
779
+ if(s){i?i=false:c==="\\"?i=true:c==='"'&&(s=false);continue}if(c==='"'){s=true;continue}if(c===n)r+=1;else if(c===o&&(r-=1,r===0))return t.slice(e,a+1)}}function jc(t){return typeof t=="string"?t:JSON.stringify(
780
+ t,null,2)}function $c(t,e,n=false){if(e===false)return "rejected";if(n)return "bounded_degradation";switch(t){case "deterministic":case "exact":return "exact";case "semantic":return "task_equivalent";default:return "\
781
+ not_verified"}}function pt(t){return Math.round(t*1e6)/1e6}function an(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}function Fc(t,e,n,o){if(e)return an(-t.extraCostUsd);let r=s=>t.actualInput/1e3*
782
+ s.inputPer1k+t.actualOutput/1e3*s.outputPer1k;return an(r(o)-r(n))}function zc(t,e){if(!(e>0))return false;if(e>=1)return true;let n=ie(`${t}:cascade-sample`);return Number.parseInt(n.slice(0,13),16)/2**52<e}
776
783
  function ft(){return {executionClass:"NO_RETRIEVAL",confidence:1,reason:"n/a (short-circuited)",rounds:0}}function mt(){return {chosen:"json-compact",encoded:"",instruction:"",candidateTokens:{},instructionOverheadTokens:0,
777
- reason:"no structured payload"}}function Ao(t,e="",n=null){if(t==null||typeof t!="object")return "";let o=t,r=[],s=e||"the value",i=h=>typeof o[h]=="number"?o[h]:null,a=i("maxLength"),c=i("minLength"),
778
- l=i("maxItems"),u=i("minItems"),d=i("maximum"),f=i("minimum");if(a!=null){let h=n!=null?Math.min(a,n):a;r.push(`${s}<=${h}ch`);}c!=null&&r.push(`${s}>=${c}ch`),l!=null&&r.push(`${s}<=${l} items`),u!=null&&
779
- r.push(`${s}>=${u} items`),d!=null&&r.push(`${s}<=${d}`),f!=null&&r.push(`${s}>=${f}`),typeof o.pattern=="string"&&r.push(`${s} matches /${o.pattern}/`);let m=o.properties;if(m&&typeof m=="object")for(let[
780
- h,p]of Object.entries(m)){let g=Ao(p,e?`${e}.${h}`:h,n);g&&r.push(g);}if(o.items!==void 0){let h=Ao(o.items,`${s} entries`,n);h&&r.push(h);}return r.join("; ")}function ht(t){let e=t.response;return e?e.
781
- contractId??e.version??JSON.stringify(e.schema??{}).slice(0,200):""}function Fc(t){return t.some(e=>/exceeds maxItems|exceeds maxLength|match pattern|exceeds maximum|below minimum|below minLength|below minItems/.
782
- test(e.message))}function _o(t){return JSON.stringify({type:"function",function:{name:t.id,...t.description?{description:t.description}:{},parameters:t.parameters??{type:"object",properties:{}}}})}function gt(t,e){
783
- for(let n=t.length-1;n>=0;n--)if(t[n].role==="user"){t.splice(n,0,e);return}t.push(e);}function Do(t,e=false){if(e){let n=0;for(;n<t.length&&t[n].role==="system";)n+=1;return n}for(let n=t.length-1;n>=0;n--)
784
- if(t[n].role==="user")return n;return Do(t,true)}function zc(t,e){let n=Io(t,e);return n.cacheReadMultiplier<1?n:null}var Vc=72*3600;function xf(t){t.licenseGate&&(console.warn("[bvsala] Ignoring the injected `licenseGate`: in the published package a license is only accepted as a `licenseKey` verified against BiVelio\
785
- 's embedded public key. Get yours at https://savings.bivelio.com/dashboard/install"),t={...t,licenseGate:void 0});let n={...t,tokenizer:t.tokenizer??No},o,r;if(t.licenseKey&&!t.licenseGate){let a=fs;if(t.licenseServerUrl){let c=new qe,l=f=>Gt(f,a,{revocation:c,...t.now?{now:t.now}:{},maxStalenessSeconds:t.licenseRevocation?.maxStalenessSeconds??Vc}),u=l(t.licenseKey);n.licenseGate=
786
- {isEntitled:f=>u.isEntitled(f),isActive:()=>u.isActive(),status:()=>u.status()};let d=`${t.licenseServerUrl.replace(/\/+$/,"")}/licenses/revocations`;o=new Yt({url:d,publicKeyPem:a,snapshot:c,getRefreshAfter:()=>u.
784
+ reason:"no structured payload"}}function Do(t,e="",n=null){if(t==null||typeof t!="object")return "";let o=t,r=[],s=e||"the value",i=h=>typeof o[h]=="number"?o[h]:null,a=i("maxLength"),c=i("minLength"),
785
+ l=i("maxItems"),u=i("minItems"),d=i("maximum"),m=i("minimum");if(a!=null){let h=n!=null?Math.min(a,n):a;r.push(`${s}<=${h}ch`);}c!=null&&r.push(`${s}>=${c}ch`),l!=null&&r.push(`${s}<=${l} items`),u!=null&&
786
+ r.push(`${s}>=${u} items`),d!=null&&r.push(`${s}<=${d}`),m!=null&&r.push(`${s}>=${m}`),typeof o.pattern=="string"&&r.push(`${s} matches /${o.pattern}/`);let f=o.properties;if(f&&typeof f=="object")for(let[
787
+ h,g]of Object.entries(f)){let p=Do(g,e?`${e}.${h}`:h,n);p&&r.push(p);}if(o.items!==void 0){let h=Do(o.items,`${s} entries`,n);h&&r.push(h);}return r.join("; ")}function ht(t){let e=t.response;return e?e.
788
+ contractId??e.version??JSON.stringify(e.schema??{}).slice(0,200):""}function Vc(t){return t.some(e=>/exceeds maxItems|exceeds maxLength|match pattern|exceeds maximum|below minimum|below minLength|below minItems/.
789
+ test(e.message))}function Ao(t){return JSON.stringify({type:"function",function:{name:t.id,...t.description?{description:t.description}:{},parameters:t.parameters??{type:"object",properties:{}}}})}function gt(t,e){
790
+ for(let n=t.length-1;n>=0;n--)if(t[n].role==="user"){t.splice(n,0,e);return}t.push(e);}function Po(t,e=false){if(e){let n=0;for(;n<t.length&&t[n].role==="system";)n+=1;return n}for(let n=t.length-1;n>=0;n--)
791
+ if(t[n].role==="user")return n;return Po(t,true)}function Uc(t,e){let n=Oo(t,e);return n.cacheReadMultiplier<1?n:null}var qc=72*3600;function vf(t){t.licenseGate&&(console.warn("[bvsala] Ignoring the injected `licenseGate`: in the published package a license is only accepted as a `licenseKey` verified against BiVelio\
792
+ 's embedded public key. Get yours at https://savings.bivelio.com/dashboard/install"),t={...t,licenseGate:void 0});let n={...t,tokenizer:t.tokenizer??jo},o,r;if(t.licenseKey&&!t.licenseGate){let a=ms;if(t.licenseServerUrl){let c=new qe,l=m=>Gt(m,a,{revocation:c,...t.now?{now:t.now}:{},maxStalenessSeconds:t.licenseRevocation?.maxStalenessSeconds??qc}),u=l(t.licenseKey);n.licenseGate=
793
+ {isEntitled:m=>u.isEntitled(m),isActive:()=>u.isActive(),status:()=>u.status()};let d=`${t.licenseServerUrl.replace(/\/+$/,"")}/licenses/revocations`;o=new Yt({url:d,publicKeyPem:a,snapshot:c,getRefreshAfter:()=>u.
787
794
  refreshAfter?.(),...t.now?{nowSeconds:()=>Math.floor(t.now()/1e3)}:{},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.licensePollIntervalSeconds!=null?{pollIntervalSeconds:t.licensePollIntervalSeconds}:
788
795
  {},...t.silenceWarnings!=null?{silenceWarnings:t.silenceWarnings}:{},...t.licenseRevocation??{}}),o.start(),t.serviceAccountKey&&t.licenseRefresh?.enabled!==false&&(r=new Xt({url:`${t.licenseServerUrl.replace(
789
- /\/+$/,"")}/api/license/current`,serviceAccountKey:t.serviceAccountKey,publicKey:a,initialToken:t.licenseKey,revocados:c,onNewToken:f=>{u=l(f);},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?
796
+ /\/+$/,"")}/api/license/current`,serviceAccountKey:t.serviceAccountKey,publicKey:a,initialToken:t.licenseKey,revocados:c,onNewToken:m=>{u=l(m);},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?
790
797
  {now:t.now}:{},...t.licenseRefresh?.intervalMs!=null?{pollIntervalMs:t.licenseRefresh.intervalMs}:{},...t.licenseRefresh?.leadSeconds!=null?{refreshLeadSeconds:t.licenseRefresh.leadSeconds}:{}}),r.start());}else
791
- n.licenseGate=xs(t.licenseKey,a,t.now);}let s=new sn(n),i;if(t.serviceAccountKey&&t.metering?.enabled!==false){let a=t.meteringUrl??(t.licenseServerUrl?`${t.licenseServerUrl.replace(/\/+$/,"")}/api/meteri\
798
+ n.licenseGate=ys(t.licenseKey,a,t.now);}let s=new sn(n),i;if(t.serviceAccountKey&&t.metering?.enabled!==false){let a=t.meteringUrl??(t.licenseServerUrl?`${t.licenseServerUrl.replace(/\/+$/,"")}/api/meteri\
792
799
  ng/usage`:void 0);if(a){i=new dt({url:a,serviceAccountKey:t.serviceAccountKey,surface:"sdk",...t.metering?.orgId?{orgId:t.metering.orgId}:{},...t.metering?.flushIntervalMs!=null?{flushIntervalMs:t.metering.
793
800
  flushIntervalMs}:{},...t.metering?.maxBatch!=null?{maxBatch:t.metering.maxBatch}:{},...t.metering?.maxBuffer!=null?{maxBuffer:t.metering.maxBuffer}:{},...t.meteringFetch?{fetchImpl:t.meteringFetch}:t.
794
801
  licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?{now:t.now}:{},...t.metering?.ci!=null?{ci:t.metering.ci}:{},...t.silenceWarnings!=null?{silenceWarnings:t.silenceWarnings}:{}});let c=t.metering?.ci??
795
- uo();if(t.metering?.seatId)i.setSeat(t.metering.seatId,c);else {let l=i;po(t.serviceAccountKey).then(u=>l.setSeat(u,c)).catch(()=>{});}i.start();}}return {generate:async a=>{let c=await s.generate(a);if(i)
802
+ po();if(t.metering?.seatId)i.setSeat(t.metering.seatId,c);else {let l=i;fo(t.serviceAccountKey).then(u=>l.setSeat(u,c)).catch(()=>{});}i.start();}}return {generate:async a=>{let c=await s.generate(a);if(i)
796
803
  try{i.record(c.report);}catch{}return c},close:()=>{o?.stop(),r?.stop(),i?.stop();}}}/*! Bundled license information:
797
804
 
798
805
  @noble/curves/utils.js:
@@ -801,4 +808,4 @@ try{i.record(c.report);}catch{}return c},close:()=>{o?.stop(),r?.stop(),i?.stop(
801
808
  @noble/curves/abstract/edwards.js:
802
809
  @noble/curves/ed25519.js:
803
810
  (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
804
- */export{xr as AnthropicProvider,fn as BV_SALA_VERSION,bt as CATALOGO,zi as COMPACT_ROWS_INSTRUCTION,vs as DEFAULT_COST_MODEL,Vc as DEFAULT_MAX_STALENESS_SECONDS,fs as EMBEDDED_PUBLIC_KEY,bn as ExactTokenizer,wt as ExecutionRouter,Ct as FormatSelector,hn as HeuristicEstimator,vt as InMemoryExactCache,Ko as InMemorySemanticCache,De as LicenseError,sl as MODELOS_POR_CODIFICACION,jo as MODELS_BY_ENCODING,Pn as MockProvider,hr as OpenAICompatibleProvider,Xs as PRECIOS_AL_DIA,Gc as QUALITY_STATUSES,Tn as ResolverRegistry,Yt as RevocationPoller,qe as RevocationSnapshot,je as SavingsLedger,It as SchemaRegistry,kt as Singleflight,gn as TokenizerRegistry,St as ToolSelector,rt as TraceCollector,qo as UMBRAL_LOCAL,dt as UsageEmitter,_i as adaptiveK,ki as arithmeticResolver,wn as buildExactKey,Vo as buildInflightKey,kn as canonicalize,tr as compactRowsSerializer,ir as compresionFiel,za as computeNextDelay,hi as cosine,Vi as createCompactRowsSerializer,Jo as createDefaultResolvers,Zc as createHandoff,Pu as createMockProvider,xf as createSavingsLayer,or as csvSerializer,Zo as decodeCompactRows,Oi as dedupe,No as defaultTokenizerRegistry,po as deriveSeatId,lo as deriveStatus,uo as detectCi,Uo as embebedorLocal,Jl as emptyState,ji as encodeCompactRows,Ei as evalArithmetic,Sn as evaluatePolicy,Go as executeRetrievalPlan,xs as gateFromKey,Ne as heuristicEstimator,Na as isKeyset,Ae as isStrictCompatible,Yo as jsonCompactSerializer,yi as keyTokensMatch,Gt as liveGateFromKey,Wl as mergeDelta,vn as modelFamilyOf,En as multisetEqual,nt as negationCount,Ru as noopCompressor,yt as normalizeText,et as numericTokens,xt as precioDeLista,Gl as projectContext,xu as providerNativeBackend,mn as randomId,ti as registerExactTokenizer,il as registrarTokenizadorExacto,Di as renderState,sr as resolveConstraintBackend,ks as resolveDependencies,Ld as resolveLicense,ie as sha256,Dn as shouldCompress,Se as stableStringify,Rt as uniformColumns,ae as validateAgainstSchema,mi as vectorLocal,co as verifyCompactSignature,Ue as verifyLicenseToken,bs as verifyRevocationList,Tu as withProtectedSpans,tt as words};
811
+ */export{yr as AnthropicProvider,fn as BV_SALA_VERSION,bt as CATALOGO,Ui as COMPACT_ROWS_INSTRUCTION,ks as DEFAULT_COST_MODEL,qc as DEFAULT_MAX_STALENESS_SECONDS,ms as EMBEDDED_PUBLIC_KEY,bn as ExactTokenizer,wt as ExecutionRouter,Ct as FormatSelector,hn as HeuristicEstimator,vt as InMemoryExactCache,Jo as InMemorySemanticCache,Rn as InMemoryToolSetFreezer,De as LicenseError,al as MODELOS_POR_CODIFICACION,$o as MODELS_BY_ENCODING,Ln as MockProvider,gr as OpenAICompatibleProvider,Qs as PRECIOS_AL_DIA,Zc as QUALITY_STATUSES,En as ResolverRegistry,Yt as RevocationPoller,qe as RevocationSnapshot,je as SavingsLedger,It as SchemaRegistry,kt as Singleflight,gn as TokenizerRegistry,St as ToolSelector,rt as TraceCollector,Ho as UMBRAL_LOCAL,dt as UsageEmitter,Di as adaptiveK,wi as arithmeticResolver,wn as buildExactKey,Uo as buildInflightKey,kn as canonicalize,nr as compactRowsSerializer,ar as compresionFiel,Ua as computeNextDelay,gi as cosine,qi as createCompactRowsSerializer,Wo as createDefaultResolvers,Qc as createHandoff,Mu as createMockProvider,vf as createSavingsLayer,rr as csvSerializer,Xo as decodeCompactRows,Ai as dedupe,jo as defaultTokenizerRegistry,fo as deriveSeatId,uo as deriveStatus,po as detectCi,qo as embebedorLocal,Gl as emptyState,Fi as encodeCompactRows,Ei as evalArithmetic,Sn as evaluatePolicy,Yo as executeRetrievalPlan,ys as gateFromKey,Ne as heuristicEstimator,$a as isKeyset,Ae as isStrictCompatible,Zo as jsonCompactSerializer,vi as keyTokensMatch,Gt as liveGateFromKey,Yl as mergeDelta,vn as modelFamilyOf,Tn as multisetEqual,nt as negationCount,Iu as noopCompressor,yt as normalizeText,et as numericTokens,xt as precioDeLista,Zl as projectContext,vu as providerNativeBackend,mn as randomId,ni as registerExactTokenizer,cl as registrarTokenizadorExacto,Li as renderState,ir as resolveConstraintBackend,ws as resolveDependencies,Bd as resolveLicense,ie as sha256,Pn as shouldCompress,Se as stableStringify,Rt as uniformColumns,ae as validateAgainstSchema,hi as vectorLocal,lo as verifyCompactSignature,Ue as verifyLicenseToken,xs as verifyRevocationList,Cu as withProtectedSpans,tt as words};