From 9cabdb8915d4ba071c26fbd87427d7f3661199ae Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Wed, 12 Aug 2026 14:46:05 +0200 Subject: [PATCH 1/6] fix(audit): align session counts with expanded threads --- docs/features/session-keeping.mdx | 4 +- .../{index-DiApg2WK.js => index-DuX4l0_z.js} | 48 +++++++++---------- .../admin/dashboard/static/dist/index.html | 2 +- internal/admin/handler.go | 2 + internal/admin/handler_audit.go | 3 ++ internal/admin/handler_audit_sessions_test.go | 13 +++-- internal/auditlog/reader.go | 9 ++-- internal/auditlog/reader_sessions_mongodb.go | 34 +++++++++++-- .../auditlog/reader_sessions_mongodb_test.go | 4 +- internal/auditlog/reader_sessions_sql.go | 11 ++++- internal/auditlog/session_id_test.go | 36 ++++++++++---- tools/seed-demo-data.sh | 17 ++++++- .../pages/audit-logs/AuditEntrySummary.svelte | 24 ++++++++-- .../pages/audit-logs/AuditThreadGroup.svelte | 2 + .../src/pages/audit-logs/audit-logic.js | 39 +++++++++++++-- .../src/pages/audit-logs/live-logs-logic.js | 37 ++++++++++++-- web/dashboard/tests/audit-list.test.js | 11 ++++- 17 files changed, 227 insertions(+), 69 deletions(-) rename internal/admin/dashboard/static/dist/assets/{index-DiApg2WK.js => index-DuX4l0_z.js} (87%) diff --git a/docs/features/session-keeping.mdx b/docs/features/session-keeping.mdx index 017144e45..5a37c1fda 100644 --- a/docs/features/session-keeping.mdx +++ b/docs/features/session-keeping.mdx @@ -100,7 +100,9 @@ checkbox. Requests with no detected session remain round robin. Audit entries record the session id (`session_id`), and the Audit Logs page groups them by default ("Group by session" toggle). Each thread shows its latest request with a count badge; the expander on the left unfolds the older -requests. `GET /admin/audit/sessions` serves the thread list; +requests. The badge counts the complete session; when filters match only part +of it, its tooltip also reports the matching count. `GET /admin/audit/sessions` +serves the thread list with `matching_count` and `total_count`; `GET /admin/audit/log?session_id=…` returns one session's entries. ## Configuration diff --git a/internal/admin/dashboard/static/dist/assets/index-DiApg2WK.js b/internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js similarity index 87% rename from internal/admin/dashboard/static/dist/assets/index-DiApg2WK.js rename to internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js index dff92e905..f08bb5e70 100644 --- a/internal/admin/dashboard/static/dist/assets/index-DiApg2WK.js +++ b/internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js @@ -9,7 +9,7 @@ `)}function mx(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function hx(e){let t=mx(e);return t?String(t.circuit_state||``).trim():``}function gx(e){let t=hx(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function _x(e){let t=hx(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function vx(e){let t=mx(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function yx(e){let t=mx(e);return t&&Array.isArray(t.models)?t.models:[]}function bx(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function xx(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function Sx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function Cx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function wx(e){return String(e&&(e.slug||e.name)||``).trim()}function Tx(e){return String(e&&e.status||``).trim()||`connecting`}function Ex(e){switch(Tx(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function Dx(e,t){let n=Tx(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function Ox(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function kx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function Ax(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function jx(e){return String(e||``).split(` `).map(e=>e.trim()).filter(e=>e)}function Mx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Nx(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function Px(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function Fx(e){return{name:String(e.name||``).trim(),slug:wx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:Mx(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Ix(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Ax(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>wx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Nx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:hc(e.allowed_tools),disallowed_tools:hc(e.disallowed_tools),user_paths:jx(e.user_paths),tool_timeout_seconds:s}}}function Lx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Rx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function zx(e){let t=e||Cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Rx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Bx(e){return zx(e).length===0}function Vx(e){return(e||[]).length}function Hx(e){return(e||[]).filter(e=>Tx(e)===`connected`).length}function Ux(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Tx(e)===`degraded`).length}function Wx(e,t){return!!e&&Vx(t)>0}function Gx(e){return String(Hx(e))+`/`+String(Vx(e))}function Kx(e){return Ux(e)>0?`is-degraded`:`is-healthy`}function qx(e){let t=Ux(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Vx(e),r=Hx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Jx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Yx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Xx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Zx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Qx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function $x(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function eS(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function tS(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:eS(Number(t))}function nS(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function rS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=nS(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function iS(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=nS(i,n);return a.month+` `+a.day+`, `+a.year}function aS(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function oS(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>rS(e,r,i)),c=aS(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),precision:0,callback:e=>xc(e)}}}}}}function sS(e=Qy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function cS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||sS();return{type:`line`,data:{labels:t.map(e=>rS(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+eS(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),callback:e=>eS(e)}}}}}}var lS=class{#e=j(N(Jb()));get status(){return R(this.#e)}set status(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=j(!1);get loadedOnce(){return R(this.#n)}set loadedOnce(e){M(this.#n,e,!0)}#r=j(!1);get detailsExpanded(){return R(this.#r)}set detailsExpanded(e){M(this.#r,e,!0)}#i=j(N({}));get cardOverrides(){return R(this.#i)}set cardOverrides(e){M(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Yb(xa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Qb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Zb(xa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Xb(xa(),this.detailsExpanded),Zb(xa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await ws(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Jb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Jb();n.summary||=Jb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Es(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Jb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),ix(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Gb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},uS=class{#e=j(N(Jx()));get stats(){return R(this.#e)}set stats(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await ws(`/admin/audit/stats?`+Uc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Jx();return}this.stats=Yx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Jx()}finally{e===this.#n&&(this.loading=!1)}}},dS=class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!1);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}async fetch(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await ws(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},fS=class{#e=j(N([]));get data(){return R(this.#e)}set data(e){M(this.#e,e,!0)}#t=j(`tokens`);get mode(){return R(this.#t)}set mode(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await ws(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(Es(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},pS=new lS,mS=new uS,hS=new dS,gS=new fS,_S=(e,t=f,n=f,r=f,i=f)=>{var a=yS(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=P(c),u=P(l),d=P(u,!0);D(u),Ve(),D(l);var p=I(l,4),m=P(p),h=P(m,!0);D(m),Ve(),D(p);var g=I(p,4),_=P(g,!0);D(g),D(c),D(a),L((e,n,r,i,a,o)=>{H(s,t()),K(l,`title`,e),H(d,n),K(p,`title`,r),H(h,i),K(g,`title`,a),H(_,o)},[()=>Sc(`Input tokens`,n()),()=>xc(n()),()=>Sc(`Output tokens`,r()),()=>xc(r()),()=>Sc(`Total tokens`,i()),()=>xc(i())]),V(e,a)},vS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=SS(),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u);var p=I(u,2),m=e=>{var t=bS(),n=P(t,!0);D(t),L(()=>{K(t,`aria-label`,o().title),K(t,`title`,o().title),H(n,a())}),z(`click`,t,function(...e){o().onclick?.apply(this,e)}),V(e,t)},h=e=>{var t=xS(),n=P(t,!0);D(t),L(()=>H(n,a())),V(e,t)};U(p,e=>{o()?e(m):e(h,-1)}),D(s),L(()=>{G(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),H(l,r()),H(d,i())}),V(e,s)},yS=B(`
i + o =
`),bS=B(``),xS=B(` `),SS=B(`
`),CS=B(`
Cache Hits
`),wS=B(`
Total Requests
Estimated Cost
Prompt Cache Rate
`);function TS(e,t){O(t,!0);let n=A(()=>Yc.summary),r=A(()=>Yc.cacheOverview),i=A(()=>Yc.cacheAnalyticsEnabled()),a=A(()=>pS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=wS(),c=P(s);{let e=A(()=>Cb(R(n)));_S(c,()=>`Tokens`,()=>R(n).total_input_tokens,()=>R(n).total_output_tokens,()=>R(e))}var l=I(c,2),u=I(P(l),2),d=P(u,!0);D(u),D(l);var f=I(l,2),p=e=>{var t=CS(),n=I(P(t),2),i=P(n,!0);D(n),D(t),L(e=>H(i,e),[()=>_c(R(r).summary.total_hits)]),V(e,t)};U(f,e=>{R(i)&&e(p)});var m=I(f,2),h=I(P(m),2),g=P(h,!0);D(h),D(m);var _=I(m,2),v=e=>{{let t=A(()=>Db(R(r)));_S(e,()=>`Local Cache`,()=>R(r).summary.total_input_tokens,()=>R(r).summary.total_output_tokens,()=>R(t))}};U(_,e=>{R(i)&&e(v)});var y=I(_,2),b=I(P(y),2),x=P(b);Hy(x,{build:()=>Hb(Rb(R(n)),Xy(`var(--token-prompt)`),Xy(`var(--bg-surface-hover)`))});var S=I(x,2),C=P(S,!0);D(S),D(b),D(y);var w=I(y,2),T=e=>{{let t=A(()=>$b(R(a))),n=A(()=>tx(R(a))),r=A(()=>rx(R(a))),i=A(()=>nx(R(a))?{title:`View providers overview`,onclick:o}:null);vS(e,()=>`provider-status-overview-card`,()=>R(t),()=>`Provider Status`,()=>R(n),()=>R(r),()=>R(i))}};U(w,e=>{R(a).total>0&&e(T)});var E=I(w,2),ee=e=>{{let t=A(()=>Kx(hS.servers)),n=A(()=>Gx(hS.servers)),r=A(()=>qx(hS.servers));vS(e,()=>`mcp-servers-flag`,()=>R(t),()=>`MCP Servers`,()=>R(n),()=>R(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},te=A(()=>Wx(hS.available,hS.servers));U(E,e=>{R(te)&&e(ee)}),D(s),L((e,t,n,r,i)=>{K(u,`title`,e),H(d,t),H(g,n),K(b,`aria-label`,r),H(C,i)},[()=>Eb(R(n),R(r),R(i)),()=>_c(Tb(R(n),R(r),R(i))),()=>vc(R(n).total_cost),()=>`Prompt cache rate `+Bb(R(n)),()=>Bb(R(n))]),V(e,s),k()}Br([`click`]);var ES=B(` `),DS=B(`
`),OS=B(`No usage in the selected period yet`),kS=B(`
`),AS=B(`

Tokens

Share of input tokens over the selected period
`);function jS(e,t){O(t,!0);let n=A(()=>Yc.cacheAnalyticsEnabled()),r=A(()=>jb(Yc.summary,Yc.cacheOverview,R(n))),i=A(()=>Mb(Yc.summary,Yc.cacheOverview,R(n))),a=A(()=>Ab(Yc.summary,Yc.cacheOverview,R(n)));var o=AS(),s=I(P(o),2);let c;var l=P(s);W(l,17,()=>R(i),e=>e.key,(e,t)=>{var n=DS(),r=P(n),i=e=>{var n=ES(),r=P(n);D(n),L(()=>H(r,`${R(t).pct??``}%`)),V(e,n)};U(r,e=>{R(t).pct>=8&&e(i)}),D(n),L(e=>{Bi(n,`width: ${R(t).pct??``}%; background: var(${R(t).colorVar??``})`),K(n,`title`,e)},[()=>Nb(R(t))]),V(e,n)});var u=I(l,2),d=e=>{V(e,OS())};U(u,e=>{R(a)||e(d)}),D(s);var f=I(s,2);W(f,21,()=>R(r),e=>e.key,(e,t)=>{var n=kS(),r=P(n),i=I(r,2),a=P(i,!0);D(i);var o=I(i,2),s=P(o);D(o);var c=I(o,2),l=P(c,!0);D(c),D(n),L((e,i)=>{K(n,`title`,e),Bi(r,`background: var(${R(t).colorVar??``})`),H(a,R(t).label),H(s,`${R(t).pct??``}%`),H(l,i)},[()=>Nb(R(t)),()=>_c(R(t).tokens)]),V(e,n)}),D(f),D(o),L(e=>{c=G(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!R(a)}),K(s,`aria-label`,e)},[()=>Pb(R(i))]),V(e,o),k()}var MS=B(``);function NS(e,t){let n=q(t,`size`,3,16),r=q(t,`label`,3,`Loading`),i=q(t,`class`,3,``);var a=MS();L(()=>{G(a,1,Ni([`spinner`,i()]),`svelte-b54l9o`),Bi(a,`--spinner-size: ${n()??``}px`),K(a,`aria-label`,r())}),V(e,a)}var PS=Jr(` `),FS=Jr(``);function IS(e,t){let n=q(t,`label`,3,`No data`);var r=FS(),i=I(P(r),9),a=e=>{var t=PS(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(i,e=>{n()&&e(a)}),D(r),L(()=>{K(r,`role`,n()?`img`:void 0),K(r,`aria-label`,n()||void 0),K(r,`aria-hidden`,n()?void 0:`true`)}),V(e,r)}var LS=B(`
`),RS=B(`

`);function zS(e,t){O(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Uc.interval=e,t.onintervalchange?.()}function i(){let e=Yc.daily;if(e.length===0)return null;let t=Uc.rangeStart(),n=Uc.rangeEnd(),r=Lb(Ib(e,Uc.interval,t,n),Ib(Array.isArray(Yc.cacheOverview.daily)?Yc.cacheOverview.daily:[],Uc.interval,t,n));return Vb(qy(),r,{cacheEnabled:Yc.cacheAnalyticsEnabled(),resolve:Xy})}var a=RS(),o=P(a),s=P(o),c=P(s,!0);D(s);var l=I(s,2);{let e=A(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Gy(l,{ariaLabel:`Usage chart interval`,get options(){return R(e)},get value(){return Uc.interval},onchange:r})}D(o);var u=I(o,2),d=P(u);Hy(d,{build:i});var f=I(d,2),p=e=>{var t=LS();NS(P(t),{size:24,label:`Loading usage`}),D(t),V(e,t)},m=e=>{var t=LS();IS(P(t),{}),D(t),V(e,t)};U(f,e=>{Yc.daily.length===0&&Yc.loading?e(p):Yc.daily.length===0&&!Y.authError&&e(m,1)}),D(u),D(a),L(e=>H(c,e),[()=>Uc.chartTitle()]),V(e,a),k()}var BS=10,VS=.7;function HS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+VS,r=Math.ceil(n*BS);return r<1?1:r>BS?BS:r}function US(){let e=[];for(let t=0;t<=BS;t++)e.push(t);return e}function WS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=as(ss(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);os(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=os(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function GS(e){let t=as(ss(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);os(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),os(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),YS=B(`
`),XS=B(`
`),ZS=B(`
`),QS=B(`
`),$S=B(`

Activity

Mon Wed Fri
`,1);function eC(e,t){O(t,!0);let n=j(N({show:!1,x:0,y:0,text:``})),r=A(()=>vs.currentDateKey()),i=A(()=>WS(gS.data,gS.mode,R(r))),a=A(()=>GS(R(r)));function o(e,t){t.empty||M(n,{show:!0,x:e.clientX,y:e.clientY,text:qS(t,gS.mode)},!0)}function s(){M(n,{show:!1,x:0,y:0,text:``},!0)}var c=$S(),l=F(c),u=P(l),d=I(P(u),2),f=e=>{NS(e,{size:14,label:`Loading activity`})};U(d,e=>{gS.loading&&gS.data.length===0&&e(f)}),Gy(I(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return gS.mode},onchange:e=>gS.mode=e}),D(u);var p=I(u,2),m=I(P(p),2),h=P(m);W(h,21,()=>R(a),e=>e.key,(e,t)=>{var n=JS(),r=P(n,!0);D(n),L(()=>{Bi(n,`grid-column: ${R(t).col+1} / span ${R(t).span??``}`),H(r,R(t).label)}),V(e,n)}),D(h);var g=I(h,2);W(g,21,()=>R(i),ii,(e,t,n)=>{var r=XS();W(r,23,()=>R(t),(e,t)=>n+`-`+t,(e,t)=>{var n=YS();L(()=>G(n,1,Ni([`contribution-calendar-cell`,R(t).empty?`empty`:`level-${R(t).level}`]),`svelte-3hfxuq`)),zr(`mouseenter`,n,e=>o(e,R(t))),zr(`mouseleave`,n,s),V(e,n)}),D(r),V(e,r)}),D(g),D(m),D(p);var _=I(p,2),v=P(_),y=P(v),b=P(y,!0);D(y),D(v);var x=I(v,2);W(I(P(x),2),16,US,e=>e,(e,t)=>{var n=ZS();L(()=>G(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),V(e,n)}),Ve(2),D(x),D(_),D(l);var S=I(l,2),C=e=>{var t=QS(),r=P(t,!0);D(t),L(()=>{Bi(t,`left: ${R(n).x??``}px; top: ${R(n).y-40}px`),H(r,R(n).text)}),V(e,t)};U(S,e=>{R(n).show&&e(C)}),L(e=>H(b,e),[()=>KS(gS.data,gS.mode)]),V(e,c),k()}var tC=B(``),nC=B(`

`),rC=B(`
`);function iC(e,t){O(t,!0);let n=q(t,`label`,3,`help`),r=q(t,`text`,3,``),i=q(t,`open`,15,!1),a=q(t,`external`,3,!1),o=A(()=>!!r()||!!t.help||a());var s=rC(),c=P(s),l=P(c);mi(l,()=>t.title??f);var u=I(l,2),d=e=>{var r=tC();let a;L(()=>{a=G(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),K(r,`aria-label`,(i()?`Hide `:`Show `)+n()),K(r,`aria-expanded`,i()),K(r,`aria-controls`,t.copyId)}),z(`click`,r,()=>i(!i())),V(e,r)};U(u,e=>{R(o)&&e(d)}),mi(I(u,2),()=>t.extra??f),D(c);var p=I(c,2),m=e=>{var n=nC(),i=P(n),a=e=>{var n=Xr();mi(F(n),()=>t.help),V(e,n)},o=e=>{var t=Yr();L(()=>H(t,r())),V(e,t)};U(i,e=>{t.help?e(a):e(o,-1)}),D(n),L(()=>K(n,`id`,t.copyId)),V(e,n)};U(p,e=>{i()&&R(o)&&!a()&&e(m)}),D(s),V(e,s),k()}Br([`click`]);var aC=B(`

Provider Latency

`),oC=B(`
Avg
`),sC=B(`

Requests by Status

Success 2xx 4xx 5xx
`,1);function cC(e,t){O(t,!0);let n=sS(),r=A(()=>mS.stats);function i(){return{interval:R(r).interval,zone:vs.effectiveTimezone(),resolve:Xy,formatTimestamp:e=>vs.formatTimestamp(e)}}var a=Xr(),o=F(a),s=e=>{var t=sC(),a=F(t),o=P(a),s=I(P(o),2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c);var d=I(c,2),f=I(P(d),4),p=P(f,!0);D(f),D(d);var m=I(d,2),h=I(P(m),4),g=P(h,!0);D(h),D(m);var _=I(m,2),v=I(P(_),4),y=P(v,!0);D(v),D(_),D(s),D(o);var b=I(o,2);Hy(P(b),{build:()=>oS(qy(),R(r).buckets,i())}),D(b),D(a);var x=I(a,2),S=e=>{var t=oC(),a=P(t),o=P(a);iC(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{V(e,aC())},$$slots:{title:!0}});var s=I(o,2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c),D(s),D(a);var d=I(a,2);Hy(P(d),{build:()=>cS(qy(),R(r).buckets,R(r).provider_latency,{...i(),providerColor:n})}),D(d),D(t),L(e=>H(u,e),[()=>tS(R(r))]),V(e,t)},C=A(()=>Zx(R(r)));U(x,e=>{R(C)&&e(S)}),L((e,t,n,r)=>{H(u,e),H(p,t),H(g,n),H(y,r)},[()=>Qx(R(r)),()=>_c($x(R(r),`status_2xx`)),()=>_c($x(R(r),`status_4xx`)),()=>_c($x(R(r),`status_5xx`))]),V(e,t)},c=A(()=>Xx(R(r)));U(o,e=>{R(c)&&e(s)}),V(e,a),k()}var lC=(e,t=f,n=f,r)=>{let i=Et(()=>h(r?.(),!1));var a=fC(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=e=>{var t=uC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)},u=e=>{var t=dC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(c,e=>{R(i)?e(l):e(u,-1)}),D(a),L(()=>H(s,t())),V(e,a)},uC=B(` `),dC=B(` `),fC=B(`
`),pC=B(`

`),mC=B(`
Breaker State
`),hC=B(`
`),gC=B(`
Models (Recent Traffic)
`),_C=B(`
`),vC=B(`

`);function yC(e,t){O(t,!0);let n=A(()=>_x(t.provider)),r=A(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=vC();let a;var o=P(i),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=e=>{var n=pC(),r=P(n,!0);D(n),L(()=>H(r,t.provider.last_error)),V(e,n)};U(l,e=>{t.provider.last_error&&e(u)});var d=I(l,2),f=e=>{var r=_C(),i=P(r);{let e=A(()=>vx(t.provider));lC(i,()=>`Recent Requests`,()=>R(e))}var a=I(i,2),o=e=>{var r=mC(),i=I(P(r),2),a=P(i),o=P(a,!0);D(a),D(i),D(r),L(e=>{G(a,1,Ni([`provider-status-health-state`,R(n)]),`svelte-6y9wjv`),H(o,e)},[()=>gx(t.provider)]),V(e,r)},s=A(()=>hx(t.provider));U(a,e=>{R(s)&&e(o)});var c=I(a,2),l=e=>{var n=gC(),r=I(P(n),2);W(r,21,()=>yx(t.provider),e=>e.model,(e,t)=>{var n=hC();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L((e,i)=>{r=G(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":R(t).flagged}),K(n,`title`,e),H(a,R(t).model),H(s,i)},[()=>xx(R(t)),()=>bx(R(t))]),V(e,n)}),D(r),D(n),V(e,n)},u=A(()=>yx(t.provider).length>0);U(c,e=>{R(u)&&e(l)}),D(r),V(e,r)},p=A(()=>mx(t.provider));U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=P(m);W(h,17,()=>R(r),([e,t])=>e,(e,t)=>{var n=A(()=>g(R(t),2));lC(e,()=>R(n)[0],()=>R(n)[1],()=>!0)});var _=I(h,2);{let e=A(()=>fx(t.provider));lC(_,()=>`Configured Models`,()=>R(e))}var v=I(_,2);{let e=A(()=>ux(t.provider));lC(v,()=>`Retry`,()=>R(e))}var y=I(v,2);{let e=A(()=>dx(t.provider));lC(y,()=>`Circuit Breaker`,()=>R(e))}D(m),D(o),D(i),L(()=>{a=G(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),K(i,`aria-hidden`,!t.expanded),H(c,t.provider.status_reason)}),V(e,i),k()}var bC=B(` `),xC=B(``),SC=B(`

Models Available
Last Checked
`);function CC(e,t){O(t,!0);let n=A(()=>pS.cardExpanded(t.provider)),r=e=>vs.formatTimestamp(e);var i=SC(),a=P(i),o=P(a),s=P(o),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=e=>{var n=bC(),r=P(n);D(n),L(e=>H(r,`(${e??``})`),[()=>cx(t.provider)]),V(e,n)},f=A(()=>cx(t.provider));U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var n=xC();L((e,t,r)=>{K(n,`href`,e),K(n,`aria-label`,t),K(n,`title`,r)},[()=>lx(t.provider),()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`]),V(e,n)},h=A(()=>lx(t.provider));U(p,e=>{R(h)&&e(m)}),D(s),D(o);var g=I(o,2),_=P(g,!0);D(g),D(a);var v=I(a,2),y=P(v),b=I(P(y),2),x=P(b,!0);D(b),D(y);var S=I(y,2),C=I(P(S),2),w=P(C,!0);D(C),D(S),D(v);var T=I(v,2);yC(T,{get provider(){return t.provider},get expanded(){return R(n)}});var E=I(T,2);let ee;J(P(E),{get icon(){return Va},class:`provider-status-card-toggle-icon`}),D(E),D(i),L((e,r,i,a,o)=>{H(l,t.provider.name),G(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),K(g,`title`,r),H(_,t.provider.status_label),H(x,i),K(C,`title`,a),H(w,o),ee=G(E,1,`provider-status-card-toggle svelte-nopjmh`,null,ee,{"is-expanded":R(n)}),K(E,`aria-expanded`,R(n)),K(E,`aria-label`,(R(n)?`Collapse `:`Expand `)+t.provider.name+` details`),K(E,`title`,R(n)?`Collapse details`:`Expand details`)},[()=>ex(t.provider.status),()=>px(t.provider),()=>_c(t.provider.runtime?.discovered_model_count),()=>sx(t.provider,r),()=>ox(t.provider,r)]),z(`click`,E,()=>pS.toggleCard(t.provider)),V(e,i),k()}Br([`click`]);var wC=B(`

Providers Overview

`),TC=B(`
`);function EC(e,t){O(t,!0);let n=A(()=>pS.status.providers);var r=Xr(),i=F(r),a=e=>{var t=wC(),r=P(t),i=I(P(r),2),a=P(i),o=P(a,!0);D(a);var s=I(a,2);let c;D(i),D(r);var l=I(r,2);W(l,21,()=>R(n),e=>e.name,(e,t)=>{CC(e,{get provider(){return R(t)}})}),D(l),D(t),L((e,t)=>{K(i,`aria-checked`,pS.detailsExpanded),K(i,`title`,e),H(o,t),c=G(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":pS.detailsExpanded})},[()=>pS.detailsToggleLabel(),()=>pS.detailsToggleLabel()]),z(`click`,i,()=>pS.toggleDetails()),V(e,t)},o=e=>{var t=TC();NS(P(t),{size:18,label:`Loading provider status`}),D(t),V(e,t)};U(i,e=>{R(n).length>0?e(a):pS.loading&&!pS.loadedOnce&&e(o,1)}),V(e,r),k()}Br([`click`]);var DC=B(`
`);function OC(e,t){O(t,!0);function n(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch(),pS.fetch(),hS.fetch(),gS.fetch()}function r(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch()}function i(){r(),gS.fetch()}On(()=>{if(Y.refreshTick,Yo.page===`overview`)return wr(()=>{n(),vb.start()}),()=>{vb.stop(),pS.stopPolling()}});var a=DC(),o=P(a);Sb(o,{});var s=I(o,4);fl(P(s),{onchange:i}),D(s);var c=I(s,2);Kc(c,{});var l=I(c,2);TS(l,{});var u=I(l,2);jS(u,{});var d=I(u,2);zS(d,{onintervalchange:r});var f=I(d,2);eC(f,{});var p=I(f,2);cC(p,{}),EC(I(p,2),{}),D(a),V(e,a),k()}var kC=`/admin/live/logs?types=audit,usage`;function AC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function jC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function MC(e){let t=kC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function NC(){return{async consumeLiveLogsBody(e){await tb(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>AC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eAC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!AC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!AC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!AC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var PC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},FC=new Set(Object.keys(PC));function IC(e){return String(e&&(e.id||e.request_id)||``).trim()}function LC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:BC(n.data)&&BC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(PC[a]||0)>(PC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&BC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function RC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function zC(e){return FC.has(String(e&&e.eventType||``).trim())}function BC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var VC=200,HC=class{#e=j(N({entries:[],total:0,limit:25,offset:0}));get auditLog(){return R(this.#e)}set auditLog(e){M(this.#e,e,!0)}#t=j(N({entries:[],total:0,limit:50,offset:0}));get usageLog(){return R(this.#t)}set usageLog(e){M(this.#t,e,!0)}#n=j(N({}));get auditRecords(){return R(this.#n)}set auditRecords(e){M(this.#n,e,!0)}#r=j(N([]));get auditRecordChanges(){return R(this.#r)}set auditRecordChanges(e){M(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=j(``);get auditSearch(){return R(this.#i)}set auditSearch(e){M(this.#i,e,!0)}#a=j(``);get auditMethod(){return R(this.#a)}set auditMethod(e){M(this.#a,e,!0)}#o=j(``);get auditStatusCode(){return R(this.#o)}set auditStatusCode(e){M(this.#o,e,!0)}#s=j(``);get auditStream(){return R(this.#s)}set auditStream(e){M(this.#s,e,!0)}#c=j(Sa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return R(this.#c)}set auditGroupSessions(e){M(this.#c,e,!0)}#l=j(N({}));get auditThreadChildren(){return R(this.#l)}set auditThreadChildren(e){M(this.#l,e,!0)}#u=j(``);get usageLogSearch(){return R(this.#u)}set usageLogSearch(e){M(this.#u,e,!0)}#d=j(``);get usageFilterModel(){return R(this.#d)}set usageFilterModel(e){M(this.#d,e,!0)}#f=j(``);get usageFilterProvider(){return R(this.#f)}set usageFilterProvider(e){M(this.#f,e,!0)}#p=j(``);get usageFilterLabel(){return R(this.#p)}set usageFilterLabel(e){M(this.#p,e,!0)}#m=j(``);get usageFilterUserPath(){return R(this.#m)}set usageFilterUserPath(e){M(this.#m,e,!0)}#h=j(!1);get usageLogHideCached(){return R(this.#h)}set usageLogHideCached(e){M(this.#h,e,!0)}#g=j(!1);get liveLogsStreaming(){return R(this.#g)}set liveLogsStreaming(e){M(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=IC(e);if(!n)return e;let r=LC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():IC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=VC)return;let t={...this.auditRecords},n=e.length-VC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Uc.customStartDate}get customEndDate(){return Uc.customEndDate}get followsToday(){return Uc.followsToday}liveLogsEnabled(){return ks.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await ks.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=MC(this.liveLogsLastSeq),r=Y.generation;try{let i=await Ss(n,t);if(i.status===401){if(Y.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await ws(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(HC.prototype,NC());var UC=new HC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!UC.liveLogsController,UC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&UC.ensureLiveLogs()})}var WC=null;An(()=>{On(()=>{let e=Y.refreshTick;if(WC===null){WC=e;return}e!==WC&&(WC=e,wr(()=>{UC.stopLiveLogs(),UC.startLiveLogs()}))})});function GC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function KC(){return{entries:[],total:0,limit:50,offset:0}}function qC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function JC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function YC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function XC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function ZC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function QC(e,t,n){let r=XC(e,t);return r<=0?``:n?_c(r)+` cached requests hidden`:_c(Number(e&&e.total_requests||0))+` to providers + `+_c(r)+` from cache`}function $C(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:vc(t.total_input_cost)+` input + `+vc(t.total_output_cost)+` output`}function ew(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function tw(e){return ew(e)>0}function nw(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function rw(){return`Estimated at 4 net characters removed per token`}function iw(e,t){return t===`costs`?vc(nw(e)):xc(ew(e))}function aw(e,t){let n=t===`costs`,r=n?Number(nw(e)):ew(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function ow(e,t){let n=aw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function sw(e,t){let n=ew(e);if(n<=0)return``;let r=[_c(n)+` estimated prompt token-transmissions removed across provider requests`,rw(),`Savings are summed per provider request; resent conversation history is counted again`],i=nw(e);i!=null&&(r.push(vc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=ow(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` +`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Ix(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Ax(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>wx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Nx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:hc(e.allowed_tools),disallowed_tools:hc(e.disallowed_tools),user_paths:jx(e.user_paths),tool_timeout_seconds:s}}}function Lx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Rx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function zx(e){let t=e||Cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Rx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Bx(e){return zx(e).length===0}function Vx(e){return(e||[]).length}function Hx(e){return(e||[]).filter(e=>Tx(e)===`connected`).length}function Ux(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Tx(e)===`degraded`).length}function Wx(e,t){return!!e&&Vx(t)>0}function Gx(e){return String(Hx(e))+`/`+String(Vx(e))}function Kx(e){return Ux(e)>0?`is-degraded`:`is-healthy`}function qx(e){let t=Ux(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Vx(e),r=Hx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Jx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Yx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Xx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Zx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Qx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function $x(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function eS(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function tS(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:eS(Number(t))}function nS(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function rS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=nS(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function iS(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=nS(i,n);return a.month+` `+a.day+`, `+a.year}function aS(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function oS(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>rS(e,r,i)),c=aS(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),precision:0,callback:e=>xc(e)}}}}}}function sS(e=Qy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function cS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||sS();return{type:`line`,data:{labels:t.map(e=>rS(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+eS(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),callback:e=>eS(e)}}}}}}var lS=class{#e=j(N(Jb()));get status(){return R(this.#e)}set status(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=j(!1);get loadedOnce(){return R(this.#n)}set loadedOnce(e){M(this.#n,e,!0)}#r=j(!1);get detailsExpanded(){return R(this.#r)}set detailsExpanded(e){M(this.#r,e,!0)}#i=j(N({}));get cardOverrides(){return R(this.#i)}set cardOverrides(e){M(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Yb(xa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Qb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Zb(xa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Xb(xa(),this.detailsExpanded),Zb(xa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await ws(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Jb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Jb();n.summary||=Jb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Es(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Jb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),ix(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Gb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},uS=class{#e=j(N(Jx()));get stats(){return R(this.#e)}set stats(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await ws(`/admin/audit/stats?`+Uc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Jx();return}this.stats=Yx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Jx()}finally{e===this.#n&&(this.loading=!1)}}},dS=class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!1);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}async fetch(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await ws(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},fS=class{#e=j(N([]));get data(){return R(this.#e)}set data(e){M(this.#e,e,!0)}#t=j(`tokens`);get mode(){return R(this.#t)}set mode(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await ws(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(Es(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},pS=new lS,mS=new uS,hS=new dS,gS=new fS,_S=(e,t=f,n=f,r=f,i=f)=>{var a=yS(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=P(c),u=P(l),d=P(u,!0);D(u),Ve(),D(l);var p=I(l,4),m=P(p),h=P(m,!0);D(m),Ve(),D(p);var g=I(p,4),_=P(g,!0);D(g),D(c),D(a),L((e,n,r,i,a,o)=>{H(s,t()),K(l,`title`,e),H(d,n),K(p,`title`,r),H(h,i),K(g,`title`,a),H(_,o)},[()=>Sc(`Input tokens`,n()),()=>xc(n()),()=>Sc(`Output tokens`,r()),()=>xc(r()),()=>Sc(`Total tokens`,i()),()=>xc(i())]),V(e,a)},vS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=SS(),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u);var p=I(u,2),m=e=>{var t=bS(),n=P(t,!0);D(t),L(()=>{K(t,`aria-label`,o().title),K(t,`title`,o().title),H(n,a())}),z(`click`,t,function(...e){o().onclick?.apply(this,e)}),V(e,t)},h=e=>{var t=xS(),n=P(t,!0);D(t),L(()=>H(n,a())),V(e,t)};U(p,e=>{o()?e(m):e(h,-1)}),D(s),L(()=>{G(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),H(l,r()),H(d,i())}),V(e,s)},yS=B(`
i + o =
`),bS=B(``),xS=B(` `),SS=B(`
`),CS=B(`
Cache Hits
`),wS=B(`
Total Requests
Estimated Cost
Prompt Cache Rate
`);function TS(e,t){O(t,!0);let n=A(()=>Yc.summary),r=A(()=>Yc.cacheOverview),i=A(()=>Yc.cacheAnalyticsEnabled()),a=A(()=>pS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=wS(),c=P(s);{let e=A(()=>Cb(R(n)));_S(c,()=>`Tokens`,()=>R(n).total_input_tokens,()=>R(n).total_output_tokens,()=>R(e))}var l=I(c,2),u=I(P(l),2),d=P(u,!0);D(u),D(l);var f=I(l,2),p=e=>{var t=CS(),n=I(P(t),2),i=P(n,!0);D(n),D(t),L(e=>H(i,e),[()=>_c(R(r).summary.total_hits)]),V(e,t)};U(f,e=>{R(i)&&e(p)});var m=I(f,2),h=I(P(m),2),g=P(h,!0);D(h),D(m);var _=I(m,2),v=e=>{{let t=A(()=>Db(R(r)));_S(e,()=>`Local Cache`,()=>R(r).summary.total_input_tokens,()=>R(r).summary.total_output_tokens,()=>R(t))}};U(_,e=>{R(i)&&e(v)});var y=I(_,2),b=I(P(y),2),x=P(b);Hy(x,{build:()=>Hb(Rb(R(n)),Xy(`var(--token-prompt)`),Xy(`var(--bg-surface-hover)`))});var S=I(x,2),C=P(S,!0);D(S),D(b),D(y);var w=I(y,2),T=e=>{{let t=A(()=>$b(R(a))),n=A(()=>tx(R(a))),r=A(()=>rx(R(a))),i=A(()=>nx(R(a))?{title:`View providers overview`,onclick:o}:null);vS(e,()=>`provider-status-overview-card`,()=>R(t),()=>`Provider Status`,()=>R(n),()=>R(r),()=>R(i))}};U(w,e=>{R(a).total>0&&e(T)});var E=I(w,2),ee=e=>{{let t=A(()=>Kx(hS.servers)),n=A(()=>Gx(hS.servers)),r=A(()=>qx(hS.servers));vS(e,()=>`mcp-servers-flag`,()=>R(t),()=>`MCP Servers`,()=>R(n),()=>R(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},te=A(()=>Wx(hS.available,hS.servers));U(E,e=>{R(te)&&e(ee)}),D(s),L((e,t,n,r,i)=>{K(u,`title`,e),H(d,t),H(g,n),K(b,`aria-label`,r),H(C,i)},[()=>Eb(R(n),R(r),R(i)),()=>_c(Tb(R(n),R(r),R(i))),()=>vc(R(n).total_cost),()=>`Prompt cache rate `+Bb(R(n)),()=>Bb(R(n))]),V(e,s),k()}Br([`click`]);var ES=B(` `),DS=B(`
`),OS=B(`No usage in the selected period yet`),kS=B(`
`),AS=B(`

Tokens

Share of input tokens over the selected period
`);function jS(e,t){O(t,!0);let n=A(()=>Yc.cacheAnalyticsEnabled()),r=A(()=>jb(Yc.summary,Yc.cacheOverview,R(n))),i=A(()=>Mb(Yc.summary,Yc.cacheOverview,R(n))),a=A(()=>Ab(Yc.summary,Yc.cacheOverview,R(n)));var o=AS(),s=I(P(o),2);let c;var l=P(s);W(l,17,()=>R(i),e=>e.key,(e,t)=>{var n=DS(),r=P(n),i=e=>{var n=ES(),r=P(n);D(n),L(()=>H(r,`${R(t).pct??``}%`)),V(e,n)};U(r,e=>{R(t).pct>=8&&e(i)}),D(n),L(e=>{Bi(n,`width: ${R(t).pct??``}%; background: var(${R(t).colorVar??``})`),K(n,`title`,e)},[()=>Nb(R(t))]),V(e,n)});var u=I(l,2),d=e=>{V(e,OS())};U(u,e=>{R(a)||e(d)}),D(s);var f=I(s,2);W(f,21,()=>R(r),e=>e.key,(e,t)=>{var n=kS(),r=P(n),i=I(r,2),a=P(i,!0);D(i);var o=I(i,2),s=P(o);D(o);var c=I(o,2),l=P(c,!0);D(c),D(n),L((e,i)=>{K(n,`title`,e),Bi(r,`background: var(${R(t).colorVar??``})`),H(a,R(t).label),H(s,`${R(t).pct??``}%`),H(l,i)},[()=>Nb(R(t)),()=>_c(R(t).tokens)]),V(e,n)}),D(f),D(o),L(e=>{c=G(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!R(a)}),K(s,`aria-label`,e)},[()=>Pb(R(i))]),V(e,o),k()}var MS=B(``);function NS(e,t){let n=q(t,`size`,3,16),r=q(t,`label`,3,`Loading`),i=q(t,`class`,3,``);var a=MS();L(()=>{G(a,1,Ni([`spinner`,i()]),`svelte-b54l9o`),Bi(a,`--spinner-size: ${n()??``}px`),K(a,`aria-label`,r())}),V(e,a)}var PS=Jr(` `),FS=Jr(``);function IS(e,t){let n=q(t,`label`,3,`No data`);var r=FS(),i=I(P(r),9),a=e=>{var t=PS(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(i,e=>{n()&&e(a)}),D(r),L(()=>{K(r,`role`,n()?`img`:void 0),K(r,`aria-label`,n()||void 0),K(r,`aria-hidden`,n()?void 0:`true`)}),V(e,r)}var LS=B(`
`),RS=B(`

`);function zS(e,t){O(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Uc.interval=e,t.onintervalchange?.()}function i(){let e=Yc.daily;if(e.length===0)return null;let t=Uc.rangeStart(),n=Uc.rangeEnd(),r=Lb(Ib(e,Uc.interval,t,n),Ib(Array.isArray(Yc.cacheOverview.daily)?Yc.cacheOverview.daily:[],Uc.interval,t,n));return Vb(qy(),r,{cacheEnabled:Yc.cacheAnalyticsEnabled(),resolve:Xy})}var a=RS(),o=P(a),s=P(o),c=P(s,!0);D(s);var l=I(s,2);{let e=A(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Gy(l,{ariaLabel:`Usage chart interval`,get options(){return R(e)},get value(){return Uc.interval},onchange:r})}D(o);var u=I(o,2),d=P(u);Hy(d,{build:i});var f=I(d,2),p=e=>{var t=LS();NS(P(t),{size:24,label:`Loading usage`}),D(t),V(e,t)},m=e=>{var t=LS();IS(P(t),{}),D(t),V(e,t)};U(f,e=>{Yc.daily.length===0&&Yc.loading?e(p):Yc.daily.length===0&&!Y.authError&&e(m,1)}),D(u),D(a),L(e=>H(c,e),[()=>Uc.chartTitle()]),V(e,a),k()}var BS=10,VS=.7;function HS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+VS,r=Math.ceil(n*BS);return r<1?1:r>BS?BS:r}function US(){let e=[];for(let t=0;t<=BS;t++)e.push(t);return e}function WS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=as(ss(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);os(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=os(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function GS(e){let t=as(ss(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);os(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),os(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),YS=B(`
`),XS=B(`
`),ZS=B(`
`),QS=B(`
`),$S=B(`

Activity

Mon Wed Fri
`,1);function eC(e,t){O(t,!0);let n=j(N({show:!1,x:0,y:0,text:``})),r=A(()=>vs.currentDateKey()),i=A(()=>WS(gS.data,gS.mode,R(r))),a=A(()=>GS(R(r)));function o(e,t){t.empty||M(n,{show:!0,x:e.clientX,y:e.clientY,text:qS(t,gS.mode)},!0)}function s(){M(n,{show:!1,x:0,y:0,text:``},!0)}var c=$S(),l=F(c),u=P(l),d=I(P(u),2),f=e=>{NS(e,{size:14,label:`Loading activity`})};U(d,e=>{gS.loading&&gS.data.length===0&&e(f)}),Gy(I(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return gS.mode},onchange:e=>gS.mode=e}),D(u);var p=I(u,2),m=I(P(p),2),h=P(m);W(h,21,()=>R(a),e=>e.key,(e,t)=>{var n=JS(),r=P(n,!0);D(n),L(()=>{Bi(n,`grid-column: ${R(t).col+1} / span ${R(t).span??``}`),H(r,R(t).label)}),V(e,n)}),D(h);var g=I(h,2);W(g,21,()=>R(i),ii,(e,t,n)=>{var r=XS();W(r,23,()=>R(t),(e,t)=>n+`-`+t,(e,t)=>{var n=YS();L(()=>G(n,1,Ni([`contribution-calendar-cell`,R(t).empty?`empty`:`level-${R(t).level}`]),`svelte-3hfxuq`)),zr(`mouseenter`,n,e=>o(e,R(t))),zr(`mouseleave`,n,s),V(e,n)}),D(r),V(e,r)}),D(g),D(m),D(p);var _=I(p,2),v=P(_),y=P(v),b=P(y,!0);D(y),D(v);var x=I(v,2);W(I(P(x),2),16,US,e=>e,(e,t)=>{var n=ZS();L(()=>G(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),V(e,n)}),Ve(2),D(x),D(_),D(l);var S=I(l,2),C=e=>{var t=QS(),r=P(t,!0);D(t),L(()=>{Bi(t,`left: ${R(n).x??``}px; top: ${R(n).y-40}px`),H(r,R(n).text)}),V(e,t)};U(S,e=>{R(n).show&&e(C)}),L(e=>H(b,e),[()=>KS(gS.data,gS.mode)]),V(e,c),k()}var tC=B(``),nC=B(`

`),rC=B(`
`);function iC(e,t){O(t,!0);let n=q(t,`label`,3,`help`),r=q(t,`text`,3,``),i=q(t,`open`,15,!1),a=q(t,`external`,3,!1),o=A(()=>!!r()||!!t.help||a());var s=rC(),c=P(s),l=P(c);mi(l,()=>t.title??f);var u=I(l,2),d=e=>{var r=tC();let a;L(()=>{a=G(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),K(r,`aria-label`,(i()?`Hide `:`Show `)+n()),K(r,`aria-expanded`,i()),K(r,`aria-controls`,t.copyId)}),z(`click`,r,()=>i(!i())),V(e,r)};U(u,e=>{R(o)&&e(d)}),mi(I(u,2),()=>t.extra??f),D(c);var p=I(c,2),m=e=>{var n=nC(),i=P(n),a=e=>{var n=Xr();mi(F(n),()=>t.help),V(e,n)},o=e=>{var t=Yr();L(()=>H(t,r())),V(e,t)};U(i,e=>{t.help?e(a):e(o,-1)}),D(n),L(()=>K(n,`id`,t.copyId)),V(e,n)};U(p,e=>{i()&&R(o)&&!a()&&e(m)}),D(s),V(e,s),k()}Br([`click`]);var aC=B(`

Provider Latency

`),oC=B(`
Avg
`),sC=B(`

Requests by Status

Success 2xx 4xx 5xx
`,1);function cC(e,t){O(t,!0);let n=sS(),r=A(()=>mS.stats);function i(){return{interval:R(r).interval,zone:vs.effectiveTimezone(),resolve:Xy,formatTimestamp:e=>vs.formatTimestamp(e)}}var a=Xr(),o=F(a),s=e=>{var t=sC(),a=F(t),o=P(a),s=I(P(o),2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c);var d=I(c,2),f=I(P(d),4),p=P(f,!0);D(f),D(d);var m=I(d,2),h=I(P(m),4),g=P(h,!0);D(h),D(m);var _=I(m,2),v=I(P(_),4),y=P(v,!0);D(v),D(_),D(s),D(o);var b=I(o,2);Hy(P(b),{build:()=>oS(qy(),R(r).buckets,i())}),D(b),D(a);var x=I(a,2),S=e=>{var t=oC(),a=P(t),o=P(a);iC(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{V(e,aC())},$$slots:{title:!0}});var s=I(o,2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c),D(s),D(a);var d=I(a,2);Hy(P(d),{build:()=>cS(qy(),R(r).buckets,R(r).provider_latency,{...i(),providerColor:n})}),D(d),D(t),L(e=>H(u,e),[()=>tS(R(r))]),V(e,t)},C=A(()=>Zx(R(r)));U(x,e=>{R(C)&&e(S)}),L((e,t,n,r)=>{H(u,e),H(p,t),H(g,n),H(y,r)},[()=>Qx(R(r)),()=>_c($x(R(r),`status_2xx`)),()=>_c($x(R(r),`status_4xx`)),()=>_c($x(R(r),`status_5xx`))]),V(e,t)},c=A(()=>Xx(R(r)));U(o,e=>{R(c)&&e(s)}),V(e,a),k()}var lC=(e,t=f,n=f,r)=>{let i=Et(()=>h(r?.(),!1));var a=fC(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=e=>{var t=uC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)},u=e=>{var t=dC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(c,e=>{R(i)?e(l):e(u,-1)}),D(a),L(()=>H(s,t())),V(e,a)},uC=B(` `),dC=B(` `),fC=B(`
`),pC=B(`

`),mC=B(`
Breaker State
`),hC=B(`
`),gC=B(`
Models (Recent Traffic)
`),_C=B(`
`),vC=B(`

`);function yC(e,t){O(t,!0);let n=A(()=>_x(t.provider)),r=A(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=vC();let a;var o=P(i),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=e=>{var n=pC(),r=P(n,!0);D(n),L(()=>H(r,t.provider.last_error)),V(e,n)};U(l,e=>{t.provider.last_error&&e(u)});var d=I(l,2),f=e=>{var r=_C(),i=P(r);{let e=A(()=>vx(t.provider));lC(i,()=>`Recent Requests`,()=>R(e))}var a=I(i,2),o=e=>{var r=mC(),i=I(P(r),2),a=P(i),o=P(a,!0);D(a),D(i),D(r),L(e=>{G(a,1,Ni([`provider-status-health-state`,R(n)]),`svelte-6y9wjv`),H(o,e)},[()=>gx(t.provider)]),V(e,r)},s=A(()=>hx(t.provider));U(a,e=>{R(s)&&e(o)});var c=I(a,2),l=e=>{var n=gC(),r=I(P(n),2);W(r,21,()=>yx(t.provider),e=>e.model,(e,t)=>{var n=hC();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L((e,i)=>{r=G(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":R(t).flagged}),K(n,`title`,e),H(a,R(t).model),H(s,i)},[()=>xx(R(t)),()=>bx(R(t))]),V(e,n)}),D(r),D(n),V(e,n)},u=A(()=>yx(t.provider).length>0);U(c,e=>{R(u)&&e(l)}),D(r),V(e,r)},p=A(()=>mx(t.provider));U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=P(m);W(h,17,()=>R(r),([e,t])=>e,(e,t)=>{var n=A(()=>g(R(t),2));lC(e,()=>R(n)[0],()=>R(n)[1],()=>!0)});var _=I(h,2);{let e=A(()=>fx(t.provider));lC(_,()=>`Configured Models`,()=>R(e))}var v=I(_,2);{let e=A(()=>ux(t.provider));lC(v,()=>`Retry`,()=>R(e))}var y=I(v,2);{let e=A(()=>dx(t.provider));lC(y,()=>`Circuit Breaker`,()=>R(e))}D(m),D(o),D(i),L(()=>{a=G(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),K(i,`aria-hidden`,!t.expanded),H(c,t.provider.status_reason)}),V(e,i),k()}var bC=B(` `),xC=B(``),SC=B(`

Models Available
Last Checked
`);function CC(e,t){O(t,!0);let n=A(()=>pS.cardExpanded(t.provider)),r=e=>vs.formatTimestamp(e);var i=SC(),a=P(i),o=P(a),s=P(o),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=e=>{var n=bC(),r=P(n);D(n),L(e=>H(r,`(${e??``})`),[()=>cx(t.provider)]),V(e,n)},f=A(()=>cx(t.provider));U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var n=xC();L((e,t,r)=>{K(n,`href`,e),K(n,`aria-label`,t),K(n,`title`,r)},[()=>lx(t.provider),()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`]),V(e,n)},h=A(()=>lx(t.provider));U(p,e=>{R(h)&&e(m)}),D(s),D(o);var g=I(o,2),_=P(g,!0);D(g),D(a);var v=I(a,2),y=P(v),b=I(P(y),2),x=P(b,!0);D(b),D(y);var S=I(y,2),C=I(P(S),2),w=P(C,!0);D(C),D(S),D(v);var T=I(v,2);yC(T,{get provider(){return t.provider},get expanded(){return R(n)}});var E=I(T,2);let ee;J(P(E),{get icon(){return Va},class:`provider-status-card-toggle-icon`}),D(E),D(i),L((e,r,i,a,o)=>{H(l,t.provider.name),G(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),K(g,`title`,r),H(_,t.provider.status_label),H(x,i),K(C,`title`,a),H(w,o),ee=G(E,1,`provider-status-card-toggle svelte-nopjmh`,null,ee,{"is-expanded":R(n)}),K(E,`aria-expanded`,R(n)),K(E,`aria-label`,(R(n)?`Collapse `:`Expand `)+t.provider.name+` details`),K(E,`title`,R(n)?`Collapse details`:`Expand details`)},[()=>ex(t.provider.status),()=>px(t.provider),()=>_c(t.provider.runtime?.discovered_model_count),()=>sx(t.provider,r),()=>ox(t.provider,r)]),z(`click`,E,()=>pS.toggleCard(t.provider)),V(e,i),k()}Br([`click`]);var wC=B(`

Providers Overview

`),TC=B(`
`);function EC(e,t){O(t,!0);let n=A(()=>pS.status.providers);var r=Xr(),i=F(r),a=e=>{var t=wC(),r=P(t),i=I(P(r),2),a=P(i),o=P(a,!0);D(a);var s=I(a,2);let c;D(i),D(r);var l=I(r,2);W(l,21,()=>R(n),e=>e.name,(e,t)=>{CC(e,{get provider(){return R(t)}})}),D(l),D(t),L((e,t)=>{K(i,`aria-checked`,pS.detailsExpanded),K(i,`title`,e),H(o,t),c=G(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":pS.detailsExpanded})},[()=>pS.detailsToggleLabel(),()=>pS.detailsToggleLabel()]),z(`click`,i,()=>pS.toggleDetails()),V(e,t)},o=e=>{var t=TC();NS(P(t),{size:18,label:`Loading provider status`}),D(t),V(e,t)};U(i,e=>{R(n).length>0?e(a):pS.loading&&!pS.loadedOnce&&e(o,1)}),V(e,r),k()}Br([`click`]);var DC=B(`
`);function OC(e,t){O(t,!0);function n(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch(),pS.fetch(),hS.fetch(),gS.fetch()}function r(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch()}function i(){r(),gS.fetch()}On(()=>{if(Y.refreshTick,Yo.page===`overview`)return wr(()=>{n(),vb.start()}),()=>{vb.stop(),pS.stopPolling()}});var a=DC(),o=P(a);Sb(o,{});var s=I(o,4);fl(P(s),{onchange:i}),D(s);var c=I(s,2);Kc(c,{});var l=I(c,2);TS(l,{});var u=I(l,2);jS(u,{});var d=I(u,2);zS(d,{onintervalchange:r});var f=I(d,2);eC(f,{});var p=I(f,2);cC(p,{}),EC(I(p,2),{}),D(a),V(e,a),k()}var kC=`/admin/live/logs?types=audit,usage`;function AC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function jC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function MC(e){let t=kC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function NC(){return{async consumeLiveLogsBody(e){await tb(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>AC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eAC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1)),session_matching_count:Math.max(1,Number(o.session_matching_count||o.session_count||1))+Math.max(1,Number(e.session_matching_count||e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=Number(i.session_matching_count),s=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1,session_matching_count:(Number.isFinite(o)&&o>0?o:Number.isFinite(a)&&a>0?a:1)+1}),c=[...n];return c.splice(r,1),c.unshift(s),this.auditLog.entries=c,this.prependLiveAuditThreadChild(t,i),s},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!AC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=Number(i.session_matching_count),o=[...n];o.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t),session_matching_count:Math.max(1,(Number.isFinite(a)&&a>0?a:Number(i.session_count||1))-t)}),this.auditLog.entries=o},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!AC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!AC(e,t,n)):[];if(u.length===0){s=!0;return}let d=Math.max(1,Number(e.session_matching_count||c)),f={...u[0],session_id:r,session_count:c-1,session_matching_count:Math.max(1,d-1)};i.push(f),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var PC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},FC=new Set(Object.keys(PC));function IC(e){return String(e&&(e.id||e.request_id)||``).trim()}function LC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:BC(n.data)&&BC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(PC[a]||0)>(PC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&BC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function RC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function zC(e){return FC.has(String(e&&e.eventType||``).trim())}function BC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var VC=200,HC=class{#e=j(N({entries:[],total:0,limit:25,offset:0}));get auditLog(){return R(this.#e)}set auditLog(e){M(this.#e,e,!0)}#t=j(N({entries:[],total:0,limit:50,offset:0}));get usageLog(){return R(this.#t)}set usageLog(e){M(this.#t,e,!0)}#n=j(N({}));get auditRecords(){return R(this.#n)}set auditRecords(e){M(this.#n,e,!0)}#r=j(N([]));get auditRecordChanges(){return R(this.#r)}set auditRecordChanges(e){M(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=j(``);get auditSearch(){return R(this.#i)}set auditSearch(e){M(this.#i,e,!0)}#a=j(``);get auditMethod(){return R(this.#a)}set auditMethod(e){M(this.#a,e,!0)}#o=j(``);get auditStatusCode(){return R(this.#o)}set auditStatusCode(e){M(this.#o,e,!0)}#s=j(``);get auditStream(){return R(this.#s)}set auditStream(e){M(this.#s,e,!0)}#c=j(Sa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return R(this.#c)}set auditGroupSessions(e){M(this.#c,e,!0)}#l=j(N({}));get auditThreadChildren(){return R(this.#l)}set auditThreadChildren(e){M(this.#l,e,!0)}#u=j(``);get usageLogSearch(){return R(this.#u)}set usageLogSearch(e){M(this.#u,e,!0)}#d=j(``);get usageFilterModel(){return R(this.#d)}set usageFilterModel(e){M(this.#d,e,!0)}#f=j(``);get usageFilterProvider(){return R(this.#f)}set usageFilterProvider(e){M(this.#f,e,!0)}#p=j(``);get usageFilterLabel(){return R(this.#p)}set usageFilterLabel(e){M(this.#p,e,!0)}#m=j(``);get usageFilterUserPath(){return R(this.#m)}set usageFilterUserPath(e){M(this.#m,e,!0)}#h=j(!1);get usageLogHideCached(){return R(this.#h)}set usageLogHideCached(e){M(this.#h,e,!0)}#g=j(!1);get liveLogsStreaming(){return R(this.#g)}set liveLogsStreaming(e){M(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=IC(e);if(!n)return e;let r=LC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():IC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=VC)return;let t={...this.auditRecords},n=e.length-VC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Uc.customStartDate}get customEndDate(){return Uc.customEndDate}get followsToday(){return Uc.followsToday}liveLogsEnabled(){return ks.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await ks.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=MC(this.liveLogsLastSeq),r=Y.generation;try{let i=await Ss(n,t);if(i.status===401){if(Y.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await ws(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(HC.prototype,NC());var UC=new HC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!UC.liveLogsController,UC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&UC.ensureLiveLogs()})}var WC=null;An(()=>{On(()=>{let e=Y.refreshTick;if(WC===null){WC=e;return}e!==WC&&(WC=e,wr(()=>{UC.stopLiveLogs(),UC.startLiveLogs()}))})});function GC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function KC(){return{entries:[],total:0,limit:50,offset:0}}function qC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function JC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function YC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function XC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function ZC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function QC(e,t,n){let r=XC(e,t);return r<=0?``:n?_c(r)+` cached requests hidden`:_c(Number(e&&e.total_requests||0))+` to providers + `+_c(r)+` from cache`}function $C(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:vc(t.total_input_cost)+` input + `+vc(t.total_output_cost)+` output`}function ew(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function tw(e){return ew(e)>0}function nw(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function rw(){return`Estimated at 4 net characters removed per token`}function iw(e,t){return t===`costs`?vc(nw(e)):xc(ew(e))}function aw(e,t){let n=t===`costs`,r=n?Number(nw(e)):ew(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function ow(e,t){let n=aw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function sw(e,t){let n=ew(e);if(n<=0)return``;let r=[_c(n)+` estimated prompt token-transmissions removed across provider requests`,rw(),`Savings are summed per provider request; resent conversation history is counted again`],i=nw(e);i!=null&&(r.push(vc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=ow(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` `)}function cw(e){return String(e&&e.cost_source||``).trim()}function lw(e){let t=cw(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function uw(e){switch(cw(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function dw(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function fw(e){let t=dw(e);return t===`exact`||t===`semantic`}function pw(e){let t=dw(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function mw(e,t){let n=t?String(t):``;return fw(e)?n?`Saved by cache — not charged `+n:`Saved by cache — not charged`:n}function hw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function gw(e){return Number(e&&e.cached_input_tokens||0)>0}function _w(e){return gw(e)?(hw(e)*100).toFixed(1)+`%`:``}function vw(e){if(!gw(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[_c(t)+` cached / `+_c(i)+` input tokens`];return r>0&&a.push(_c(r)+` cache write`),a.join(` `)}function yw(e){let t=[];if(uw(e)&&(t.push(uw(e)),t.push(``)),t.push(`Input: `+vc(e.input_cost)),t.push(`Output: `+vc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):_c(r);t.push(e+`: `+i)}}return t.join(` @@ -37,34 +37,34 @@ /team/alpha /non-existing`),D(g);var y=I(g,2);PE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=YA();ut(r),L(()=>r.disabled=n.vmFormManaged),la(r,()=>n.vmForm.description,e=>n.vmForm.description=e),V(e,r)},$$slots:{default:!0}});var b=I(y,2),x=e=>{PE(e,{id:`virtual-model-slowdown`,label:`Slowdown (extra inference time)`,children:(e,t)=>{var r=XA(),i=F(r);ea(i),Ve(2),L(()=>i.disabled=n.vmFormManaged),la(i,()=>n.vmForm.slowdown,e=>n.vmForm.slowdown=e),V(e,r)},$$slots:{default:!0}})},S=A(()=>n.vmFormSupportsSlowdown());U(b,e=>{R(S)&&e(x)});var C=I(b,2),w=P(C),T=e=>{var t=ZA(),r=P(t,!0);D(t),L(()=>H(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),V(e,t)};U(w,e=>{n.vmFormMode===`edit`&&e(T)});var E=I(w,2),ee=P(E);{let e=A(()=>n.vmFormToggleRestricted()),t=A(()=>n.vmFormToggleLabel());PA(ee,{get enabled(){return n.vmForm.enabled},get restricted(){return R(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return R(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}D(E),D(C),L(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),z(`click`,f,()=>n.addVmTarget()),la(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var ej=B(`

Pricing override

`,1),tj=B(``),nj=B(``),rj=B(``),ij=B(``),aj=B(`
`),oj=B(`
Tiered pricing exists for this override and will be preserved. Tier editing can be added without a database migration.
`),sj=B(`
No pricing fields set.
`),cj=B(`
`),lj=B(`

Currency is USD. Saved fields override model registry and config.yaml pricing for this - selector; unset fields continue to inherit.

Price Type USD Source
`,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

Failover mapping

`,1),fj=B(``),pj=B(`

This failover mapping is defined in configuration and is read-only here.

`),mj=B(``),hj=B(`
`),gj=B(`
`,1),_j=B(`
`);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
`),xj=B(``),Sj=B(`
`),Cj=B(`

No failover suggestions were generated.

`),wj=B(`

No failover drafts match the filter.

`),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
Rate limit management is unavailable.
`),kj=B(` Add`,1),Aj=B(`

`),jj=B(`

No rules.

`),Mj=B(` Edit`,1),Nj=B(`
`),Pj=B(`
`),Fj=B(`

`),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
models
`),Bj=B(`
Virtual models feature is unavailable.
`),Vj=B(`
`),Hj=B(``),Uj=B(`
`),Wj=B(``),Gj=B(`
`),Kj=B(`

No models registered.

`),qj=B(`

No models in this category.

`),Jj=B(`

No models match your filter.

`),Yj=B(`
`);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
`),LM=B(` `),RM=B(` `),zM=B(`
`),BM=B(`
`,1),VM=B(`
`,1),HM=B(`
`),UM=B(`
Async
`),WM=B(`
`);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

`),jN=B(`

`),MN=B(`
`),NN=B(`
`),PN=B(`

No guardrails configured for this workflow.

`),FN=B(`

Guardrails

`),IN=B(``),LN=B(`

`);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

`),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
`),$N=B(`
`),eP=B(`
`),tP=B(`

No guardrail steps configured yet.

`),nP=B(`

Guardrail Steps

Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

`),rP=B(`

Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

Preview

Live
`,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

Loading workflows...

`),oP=B(`
`),sP=B(`

No active workflows found.

`),cP=B(`

No workflows match your filter.

`),lP=B(`
`);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
Workflows feature is unavailable.
`),pP=B(`
`),mP=B(`
`),hP=B(``),gP=B(`
`);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){return!!BP(e)&&VP(e)>1}function UP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:BP(e.latest)||String(e.session_id||``).trim(),session_count:Number(e.count||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function WP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>JP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!JP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>JP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!JP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function GP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function KP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function qP(e){return String(e&&e.id||``).trim()}function JP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function YP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function XP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function ZP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&XP(t)}function QP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!ZP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>YP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>JP(e))),s=[];return a.forEach(e=>{let t=JP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!ZP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>YP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>JP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=JP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(VP(l[r]),VP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function eF(e,t){let n=qP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function tF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>qP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function nF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function rF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function iF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function aF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function oF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function sF(e){let t=oF(e);return t.length>1||t.some(e=>!(e&&e.success))}function cF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function lF(e){return String(e&&e.kind||``).trim()||`attempt`}function uF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function dF(e){return String(e&&e.model||``).trim()||`-`}function fF(e){let t=oF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function pF(e){return oF(e).length+`×`}function mF(e){let t=oF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function hF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=lF(e);n&&n!==`attempt`&&t.push(n),t.push(cF(e));let r=uF(e);r&&r!==`-`&&t.push(r);let i=dF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function gF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function _F(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function vF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function yF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function bF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=gF(e,t),a=vF(e,t),o=_F(t),s=i!=null&&i!==``,c=lF(t),l=oF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:yF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function xF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function SF(e){return xF(e).filter(e=>!(e&&e.no_change))}function CF(e){return xF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function wF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function TF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=SF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:wF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function EF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function DF(e){let t=EF(e);return Number(t&&t.cached_input_tokens||0)>0}function OF(e){let t=EF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function kF(e){let t=EF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:OF(e).toFixed(1)+`% cached`}function AF(e){return DF(e)?kF(e):``}function jF(e,t){let n=EF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function MF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&iF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:AF(e),promptCacheHighlight:jF(e,t),noChangeSteps:CF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function NF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&iF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&iF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function PF(e,t){let n=[{id:`request`,pane:MF(e,t)}];return SF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:TF(e,t)})}),sF(e)?oF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:bF(e,t)})}):n.push({id:`response`,pane:NF(e)}),n}function FF(e){if(!sF(e))return`response`;let t=oF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function IF(e,t,n){return e&&(Array.isArray(n)?n:PF(t)).some(t=>t.id===e)?e:FF(t)}function LF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var RF=100;function zF(){return{entries:[],total:0,limit:25,offset:0}}var BF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=zF();return}let a=n?UP(i.data):i.data,o=(n?$P:QP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=KP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=KP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=tF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=zF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=GP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=GP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:RF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=WP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=qP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=eF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>BF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>BF.isAuditEntryExpanded(e);var VF=B(`
`);function HF(e,t){O(t,!0);let n=Mw(()=>BF.fetchAuditLog(!0));On(()=>n.cancel);var r=VF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return BF.auditSearch},set value(e){BF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>BF.fetchAuditLog(!0)),Ui(o,()=>BF.auditMethod,e=>BF.auditMethod=e),z(`change`,p,()=>BF.fetchAuditLog(!0)),Ui(p,()=>BF.auditStatusCode,e=>BF.auditStatusCode=e),z(`change`,E,()=>BF.fetchAuditLog(!0)),Ui(E,()=>BF.auditStream,e=>BF.auditStream=e),z(`click`,re,()=>BF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var UF=B(`Live stream connecting…`),WF=B(` `),GF=B(`Live`),KF=B(` `);function qF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=KF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,UF())},c=e=>{var t=WF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,GF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var JF=B(` `),YF=B(``);function XF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:aF(t.entry)&&`failover: `+aF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=YF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=JF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var ZF=B(``),QF=B(` `);function $F(e,t){O(t,!0);let n=A(()=>fF(t.entry)),r=A(()=>R(n).length>0?mF(t.entry):``),i=A(()=>R(n).length>0?pF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=QF(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=ZF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>hF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var eI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function tI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function nI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:tI(e)).filter(Boolean).join(` -`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function rI(e){return!e||typeof e!=`object`?``:nI(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function iI(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function aI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(aI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...aI(t)]);let t=String(e);return t?[t]:[]}function oI(e){return nL(e).flatMap(e=>[...e.name?[String(e.name)]:[],...aI(e.arguments)])}function sI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?oI([e]):iI(e)):iI(e)}function cI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function lI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function uI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function dI(e){return{characters:(Array.isArray(e)?e:[]).map(uI)}}function fI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function pI(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=nI(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=nI(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function mI(e){return rI(e)}function hI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...iI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...sI(e.content)),t.push(...oI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...oI([e]));return}t.push(...sI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...iI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var gI=e=>nI(e);function _I(e){if(!e||!e.data)return``;let t=OP(e.data.response_body,0,gI);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?OP(EP(e),0,gI)||e:``}return OP(n,0,gI)||nI(n)}function vI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function yI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function bI(e){return e?!!SI(e):!1}function xI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function SI(e){switch(xI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function CI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function wI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function TI(e){let t=SI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||lL(n)!==``}function EI(e,t){let n=String(t||``).trim(),r=SI(e&&e.path),i=CI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=lL(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&wI(o,CI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&wI(o,{role:String(a.role||`assistant`),content:CI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var DI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function OI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||DI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function kI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function AI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=jI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function jI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function MI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function NI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?uL(t,e)>=0?t:e:t,null)}function PI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return NI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function FI(e,t){let n=NI(e);return!!n&&String(n.id||``)===String(t||``)}function II(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function LI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function RI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||vI(n.output));return!!(r||i)}function zI(e){return!e||yI(e.path)?!1:bI(e.path)||RI(e)}function BI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function WI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function GI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
`+UI(t)+``+UI(qI(e[t]))+`
`);return t.length?``:``}function YI(e){let t=KI(e.content_type),n=UI(t+` · `+GI(e.bytes)),r=JI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
`+n+`
`+r+`
`}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
`+n+`
`+UI(i)+`
`+r+`
`}function XI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function ZI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function QI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return UI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+UI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+UI(e.slice(r)):UI(e)}function $I(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=ZI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return UI(o);if(!i(e))return o.split(` -`).map(e=>QI(e,a)).join(` + selector; unset fields continue to inherit.

Price Type USD Source
`,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

Failover mapping

`,1),fj=B(``),pj=B(`

This failover mapping is defined in configuration and is read-only here.

`),mj=B(``),hj=B(`
`),gj=B(`
`,1),_j=B(`
`);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
`),xj=B(``),Sj=B(`
`),Cj=B(`

No failover suggestions were generated.

`),wj=B(`

No failover drafts match the filter.

`),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
Rate limit management is unavailable.
`),kj=B(` Add`,1),Aj=B(`

`),jj=B(`

No rules.

`),Mj=B(` Edit`,1),Nj=B(`
`),Pj=B(`
`),Fj=B(`

`),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
models
`),Bj=B(`
Virtual models feature is unavailable.
`),Vj=B(`
`),Hj=B(``),Uj=B(`
`),Wj=B(``),Gj=B(`
`),Kj=B(`

No models registered.

`),qj=B(`

No models in this category.

`),Jj=B(`

No models match your filter.

`),Yj=B(`
`);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
`),LM=B(` `),RM=B(` `),zM=B(`
`),BM=B(`
`,1),VM=B(`
`,1),HM=B(`
`),UM=B(`
Async
`),WM=B(`
`);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

`),jN=B(`

`),MN=B(`
`),NN=B(`
`),PN=B(`

No guardrails configured for this workflow.

`),FN=B(`

Guardrails

`),IN=B(``),LN=B(`

`);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

`),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
`),$N=B(`
`),eP=B(`
`),tP=B(`

No guardrail steps configured yet.

`),nP=B(`

Guardrail Steps

Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

`),rP=B(`

Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

Preview

Live
`,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

Loading workflows...

`),oP=B(`
`),sP=B(`

No active workflows found.

`),cP=B(`

No workflows match your filter.

`),lP=B(`
`);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
Workflows feature is unavailable.
`),pP=B(`
`),mP=B(`
`),hP=B(``),gP=B(`
`);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){let t=Number(e&&e.session_matching_count);return Number.isFinite(t)&&t>0?t:VP(e)}function UP(e){return!!BP(e)&&VP(e)>1}function WP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>{let t=Number(e.matching_count||e.count||1),n=Number.isFinite(t)&&t>0?t:1,r=Number(e.total_count||n),i=Number.isFinite(r)&&r>n?r:n;return{...e.latest,session_id:BP(e.latest)||String(e.session_id||``).trim(),session_count:i,session_matching_count:n}}),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function GP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>YP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!YP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>YP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!YP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function KP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function qP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function JP(e){return String(e&&e.id||``).trim()}function YP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function XP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function ZP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function QP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&ZP(t)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=[];return a.forEach(e=>{let t=YP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function eF(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=YP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(VP(l[r]),VP(e)),session_matching_count:Math.max(HP(l[r]),HP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function tF(e,t){let n=JP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function nF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>JP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function rF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function iF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function aF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function oF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function sF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function cF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))}function lF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function uF(e){return String(e&&e.kind||``).trim()||`attempt`}function dF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function fF(e){return String(e&&e.model||``).trim()||`-`}function pF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function mF(e){return sF(e).length+`×`}function hF(e){let t=sF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function gF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=uF(e);n&&n!==`attempt`&&t.push(n),t.push(lF(e));let r=dF(e);r&&r!==`-`&&t.push(r);let i=fF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function _F(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function vF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function yF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function bF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function xF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=_F(e,t),a=yF(e,t),o=vF(t),s=i!=null&&i!==``,c=uF(t),l=sF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:bF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function SF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function CF(e){return SF(e).filter(e=>!(e&&e.no_change))}function wF(e){return SF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function TF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function EF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=CF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:TF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function DF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function OF(e){let t=DF(e);return Number(t&&t.cached_input_tokens||0)>0}function kF(e){let t=DF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function AF(e){let t=DF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:kF(e).toFixed(1)+`% cached`}function jF(e){return OF(e)?AF(e):``}function MF(e,t){let n=DF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function NF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&aF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:jF(e),promptCacheHighlight:MF(e,t),noChangeSteps:wF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function PF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&aF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&aF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function FF(e,t){let n=[{id:`request`,pane:NF(e,t)}];return CF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:EF(e,t)})}),cF(e)?sF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:xF(e,t)})}):n.push({id:`response`,pane:PF(e)}),n}function IF(e){if(!cF(e))return`response`;let t=sF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function LF(e,t,n){return e&&(Array.isArray(n)?n:FF(t)).some(t=>t.id===e)?e:IF(t)}function RF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var zF=100;function BF(){return{entries:[],total:0,limit:25,offset:0}}var VF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=BF();return}let a=n?WP(i.data):i.data,o=(n?eF:$P)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=qP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=qP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=nF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=BF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=KP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=KP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:zF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=GP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=JP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=tF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>VF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>VF.isAuditEntryExpanded(e);var HF=B(`
`);function UF(e,t){O(t,!0);let n=Mw(()=>VF.fetchAuditLog(!0));On(()=>n.cancel);var r=HF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return VF.auditSearch},set value(e){VF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>VF.fetchAuditLog(!0)),Ui(o,()=>VF.auditMethod,e=>VF.auditMethod=e),z(`change`,p,()=>VF.fetchAuditLog(!0)),Ui(p,()=>VF.auditStatusCode,e=>VF.auditStatusCode=e),z(`change`,E,()=>VF.fetchAuditLog(!0)),Ui(E,()=>VF.auditStream,e=>VF.auditStream=e),z(`click`,re,()=>VF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var WF=B(`Live stream connecting…`),GF=B(` `),KF=B(`Live`),qF=B(` `);function JF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=qF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,WF())},c=e=>{var t=GF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,KF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var YF=B(` `),XF=B(``);function ZF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:oF(t.entry)&&`failover: `+oF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=XF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=YF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var QF=B(``),$F=B(` `);function eI(e,t){O(t,!0);let n=A(()=>pF(t.entry)),r=A(()=>R(n).length>0?hF(t.entry):``),i=A(()=>R(n).length>0?mF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=$F(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=QF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>gF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var tI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function nI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function rI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:nI(e)).filter(Boolean).join(` +`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function iI(e){return!e||typeof e!=`object`?``:rI(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function aI(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function oI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(oI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...oI(t)]);let t=String(e);return t?[t]:[]}function sI(e){return rL(e).flatMap(e=>[...e.name?[String(e.name)]:[],...oI(e.arguments)])}function cI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?sI([e]):aI(e)):aI(e)}function lI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function uI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function dI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function fI(e){return{characters:(Array.isArray(e)?e:[]).map(dI)}}function pI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function mI(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=rI(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=rI(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function hI(e){return iI(e)}function gI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...aI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...cI(e.content)),t.push(...sI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...sI([e]));return}t.push(...cI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...aI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var _I=e=>rI(e);function vI(e){if(!e||!e.data)return``;let t=OP(e.data.response_body,0,_I);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?OP(EP(e),0,_I)||e:``}return OP(n,0,_I)||rI(n)}function yI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function bI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function xI(e){return e?!!CI(e):!1}function SI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function CI(e){switch(SI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function wI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function TI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function EI(e){let t=CI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||uL(n)!==``}function DI(e,t){let n=String(t||``).trim(),r=CI(e&&e.path),i=wI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=uL(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&TI(o,wI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&TI(o,{role:String(a.role||`assistant`),content:wI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var OI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function kI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||OI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function AI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function jI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=MI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function MI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function NI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function PI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?dL(t,e)>=0?t:e:t,null)}function FI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return PI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function II(e,t){let n=PI(e);return!!n&&String(n.id||``)===String(t||``)}function LI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function RI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function zI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||yI(n.output));return!!(r||i)}function BI(e){return!e||bI(e.path)?!1:xI(e.path)||zI(e)}function VI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function GI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function KI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
`+WI(t)+``+WI(JI(e[t]))+`
`);return t.length?``:``}function XI(e){let t=qI(e.content_type),n=WI(t+` · `+KI(e.bytes)),r=YI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
`+n+`
`+r+`
`}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
`+n+`
`+WI(i)+`
`+r+`
`}function ZI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function QI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function $I(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return WI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+WI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+WI(e.slice(r)):WI(e)}function eL(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=QI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return WI(o);if(!i(e))return o.split(` +`).map(e=>$I(e,a)).join(` `);let s=o.split(` -`),c=[],l=0;for(;lQI(e,a)).join(` -`);c.push(``+o+``),l=r+1;continue}c.push(QI(e,a)),l++}return c.join(` -`)}function eL(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function tL(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=eL(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:dI(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function nL(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function rL(e){return Array.isArray(e)?nL(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function iL(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:nI(e.content)})):[]}function aL(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function oL(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&aL(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||aL(e,t,t.name||``)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{t&&aL(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||aL(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||aL(e,t,t.name||``)})}function sL(e){return Array.isArray(e)?`[`+e.map(sL).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+sL(e[t])).join(`,`)+`}`:JSON.stringify(e)}function cL(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(sL)}function lL(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function uL(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function dL(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(uL),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;oL(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName,functionCallID:e.functionCallID});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(e,t)=>lI(e,t),b=e=>dI(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>tL(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=nI(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,iI(g.system))}))}if(g&&g.instructions!==void 0){let e=nI(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,iI(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=nI(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,iI(e.content))}));return}if(t===`assistant`){let n=rI(e),r=[...nL(e.tool_calls),...rL(e.content)];if(n||r.length>0){let a=y(n,iI(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}iL(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=rI(e);n&&i.push(x(t,n,{promptCache:y(n,iI(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:nI(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?iI(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=nL([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=nI(e.content);n&&i.push(x(t,n,{promptCache:y(n,iI(e.content))}))}}}):pI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=iI(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=cL(g),T=w!==null,E=jI(e),ee=!!E&&a.has(E),te=String(g&&g.previous_response_id||``).trim(),ne=lL(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=T&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(T&&!e&&!ee||!T&&!re)return}p&&T&&(l=[...w]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let oe=cI(e);if(g&&oe!==null&&i.splice(0,i.length,...fI(i,oe)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=rI(e.message),r=nL(e.message.tool_calls);if(n||r.length>0){let e=x(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:nL([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=mI(e);if(n){let e=x(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=nI(_.content),n=rL(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let se=_I(e);se&&i.push(x(`error`,se));let ce=String(_&&_.id||``).trim();ce&&o.add(ce)}),{messages:i,entryIDs:[...a]}}function fL(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+mL(e)+`)`}).join(` +`),c=[],l=0;for(;l$I(e,a)).join(` +`);c.push(``+o+``),l=r+1;continue}c.push($I(e,a)),l++}return c.join(` +`)}function tL(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function nL(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=tL(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:fI(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function rL(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function iL(e){return Array.isArray(e)?rL(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function aL(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:rI(e.content)})):[]}function oL(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function sL(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&oL(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||oL(e,t,t.name||``)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{t&&oL(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||oL(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||oL(e,t,t.name||``)})}function cL(e){return Array.isArray(e)?`[`+e.map(cL).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+cL(e[t])).join(`,`)+`}`:JSON.stringify(e)}function lL(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(cL)}function uL(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function dL(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function fL(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(dL),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;sL(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName,functionCallID:e.functionCallID});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(e,t)=>uI(e,t),b=e=>fI(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>nL(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=rI(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,aI(g.system))}))}if(g&&g.instructions!==void 0){let e=rI(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,aI(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=rI(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,aI(e.content))}));return}if(t===`assistant`){let n=iI(e),r=[...rL(e.tool_calls),...iL(e.content)];if(n||r.length>0){let a=y(n,aI(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}aL(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=iI(e);n&&i.push(x(t,n,{promptCache:y(n,aI(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:rI(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?aI(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=rL([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=rI(e.content);n&&i.push(x(t,n,{promptCache:y(n,aI(e.content))}))}}}):mI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=aI(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=lL(g),T=w!==null,E=MI(e),ee=!!E&&a.has(E),te=String(g&&g.previous_response_id||``).trim(),ne=uL(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=T&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(T&&!e&&!ee||!T&&!re)return}p&&T&&(l=[...w]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let oe=lI(e);if(g&&oe!==null&&i.splice(0,i.length,...pI(i,oe)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=iI(e.message),r=rL(e.message.tool_calls);if(n||r.length>0){let e=x(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:rL([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=hI(e);if(n){let e=x(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=rI(_.content),n=iL(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let se=vI(e);se&&i.push(x(`error`,se));let ce=String(_&&_.id||``).trim();ce&&o.add(ce)}),{messages:i,entryIDs:[...a]}}function pL(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+hL(e)+`)`}).join(` -`):e.text||``}function pL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?fL({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` +`):e.text||``}function mL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?pL({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` -`):``}function mL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var hL=600*1e3,gL=15*1e3,_L=250,vL=class{#e=j(!1);get conversationOpen(){return R(this.#e)}set conversationOpen(e){M(this.#e,e,!0)}#t=j(!1);get conversationLoading(){return R(this.#t)}set conversationLoading(e){M(this.#t,e,!0)}#n=j(``);get conversationError(){return R(this.#n)}set conversationError(e){M(this.#n,e,!0)}#r=j(``);get conversationAnchorID(){return R(this.#r)}set conversationAnchorID(e){M(this.#r,e,!0)}#i=j(N([]));get conversationEntryIDs(){return R(this.#i)}set conversationEntryIDs(e){M(this.#i,e,!0)}#a=j(``);get conversationSessionID(){return R(this.#a)}set conversationSessionID(e){M(this.#a,e,!0)}#o=j(!1);get conversationTruncated(){return R(this.#o)}set conversationTruncated(e){M(this.#o,e,!0)}#s=j(!1);get conversationFollowLatest(){return R(this.#s)}set conversationFollowLatest(e){M(this.#s,e,!0)}#c=j(``);get conversationOpenedFromID(){return R(this.#c)}set conversationOpenedFromID(e){M(this.#c,e,!0)}#l=j(``);get followUpText(){return R(this.#l)}set followUpText(e){M(this.#l,e,!0)}#u=j(!1);get followUpSending(){return R(this.#u)}set followUpSending(e){M(this.#u,e,!0)}#d=j(``);get followUpError(){return R(this.#d)}set followUpError(e){M(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=j(null);get conversationDialogEl(){return R(this.#f)}set conversationDialogEl(e){M(this.#f,e,!0)}#p=j(null);get conversationCloseBtnEl(){return R(this.#p)}set conversationCloseBtnEl(e){M(this.#p,e,!0)}#m=j(null);get conversationThreadEl(){return R(this.#m)}set conversationThreadEl(e){M(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>UC.auditRecord(e)).filter(Boolean)}#h=A(()=>dL(this.conversationEntries,this.conversationAnchorID));get conversationView(){return R(this.#h)}set conversationView(e){M(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],UC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return zI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return gc(e)}renderBodyWithConversationHighlights(e,t,n){return $I(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(UC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof UC.auditEntryLiveDetailPending==`function`&&UC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=dL(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=PI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=AI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),II(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=IC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof UC.liveAuditStateSettled!=`function`||!UC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await ws(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=UC.upsertAuditRecords(s,`conversation.hydrated`),l=LI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=FI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return MI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return TI(e)?SI(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=EI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=bL(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},hL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=OI(e,n,r),o=await Ss(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await yL(o),!UC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Es(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+gL;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function yL(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function bL(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function xL(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var SL=new vL,CL=0;An(()=>{On(()=>{let e=RC(UC.auditRecordChanges,CL);e.length!==0&&(CL=Number(e[e.length-1].version||0),wr(()=>{e.forEach(e=>{if(!zC(e))return;let t=UC.auditRecord(e.key);SL.handleAuditRecordChange(t,e.eventType)})}))})});var wL=B(``),TL=B(` `),EL=B(` `),DL=B(``),OL=B(`
`);function kL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`expanded`,3,!1),i=q(t,`onactivate`,3,null),a=q(t,`hidePath`,3,!1),o=A(()=>vs.formatTimestamp(t.entry.timestamp)),s=A(()=>R(o)===`-`?R(o):R(o).slice(R(o).lastIndexOf(` `)+1)),c=A(()=>SL.conversationOpen&&String(SL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(e){if(e.stopPropagation(),e.preventDefault(),R(c)){SL.closeConversation();return}SL.openConversation(t.entry,e.currentTarget)}var f=OL();let p;var m=P(f),h=P(m),g=e=>{var t=wL(),r=P(t);{let e=A(()=>n().expanded?Va:Ua);J(r,{get icon(){return R(e)},class:`audit-thread-expander-svg`})}var i=I(r,2),a=P(i,!0);D(i),D(t),L(()=>{K(t,`aria-expanded`,n().expanded),K(t,`title`,`Session with `+n().count+` requests`),K(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),H(a,n().count)}),z(`click`,t,u),V(e,t)};U(h,e=>{n()&&e(g)});var _=I(h,2),v=P(_),y=P(v,!0);D(v);var b=I(v,2),x=P(b,!0);D(b),D(_);var S=I(_,2),C=e=>{var n=TL(),r=P(n,!0);D(n),L(e=>H(r,e),[()=>jc(t.entry)]),V(e,n)};U(S,e=>{(t.entry.requested_model||t.entry.model)&&e(C)});var w=I(S,2),T=e=>{var n=EL(),r=P(n,!0);D(n),L(()=>H(r,t.entry.path||`-`)),V(e,n)};U(w,e=>{a()||e(T)}),D(m);var E=I(m,2),ee=P(E);$F(ee,{get entry(){return t.entry}});var te=I(ee,2),ne=P(te),re=P(ne,!0);D(ne);var ie=I(ne,2),ae=P(ie,!0);D(ie),D(te);var oe=I(te,2),se=P(oe,!0);D(oe);var ce=I(oe,2),le=e=>{var t=DL();let n;var r=P(t);{let e=A(()=>R(c)?Ha:Ua);J(r,{get icon(){return R(e)},class:`audit-conversation-trigger-svg`})}D(t),L(()=>{n=G(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":R(c)}),K(t,`title`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-label`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-pressed`,R(c))}),z(`click`,t,d),V(e,t)},ue=A(()=>SL.canShowConversation(t.entry));U(ce,e=>{R(ue)&&e(le)}),D(E),D(f),L((e,n,i,a)=>{p=G(f,1,`audit-entry-summary svelte-17mysgz`,null,p,e),K(f,`aria-expanded`,r()),G(_,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),K(_,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),K(_,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),H(y,t.entry.status_code||`-`),H(x,t.entry.method||`-`),K(te,`title`,i),K(te,`aria-label`,R(o)),H(re,R(o)),H(ae,R(s)),H(se,a)},[()=>({"audit-entry-summary-live-in-progress":iF(t.entry),"audit-entry-summary-has-interactions":SL.canShowConversation(t.entry)}),()=>rF(t.entry.status_code),()=>Tc(t.entry.timestamp),()=>nF(t.entry.duration_ns)]),z(`click`,f,l),V(e,f),k()}Br([`click`]);var AL=B(``);function jL(e,t){O(t,!0);let n=q(t,`label`,3,`Copy`),r=q(t,`copiedLabel`,3,`Copied`),i=q(t,`errorLabel`,3,``),a=q(t,`class`,3,`btn`),o=A(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=AL();let c;var l=P(s),u=e=>{J(e,{get icon(){return Ga},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{J(e,{get icon(){return Ja},width:`14`,height:`14`})};U(l,e=>{t.state.copied?e(u):e(d,-1)});var f=I(l,2),p=P(f,!0);D(f),D(s),L(()=>{c=G(s,1,Ni([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),H(p,R(o))}),z(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),V(e,s),k()}Br([`click`]);var ML=B(`
Error Message
 
`),NL=B(`
 
`),PL=B(` `),FL=B(` streaming`),IL=B(`
Body
`),LL=B(`

`),RL=B(`

`),zL=B(`

`),BL=B(`
`);function VL(e,t){O(t,!0);let n=MM({logPrefix:`Failed to copy audit payload:`}),r=MM({logPrefix:`Failed to copy audit payload:`}),i=A(()=>t.pane&&t.pane.showHeaders?gc(t.pane.headers):``),a=A(()=>!t.pane||!t.pane.showBody?``:WI(t.pane.body)?YI(t.pane.body):SL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=A(()=>!!(t.pane&&SL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),SL.handleErrorConversationClick(e,t.pane.entry))}var c=BL();let l;var u=P(c),d=e=>{var n=ML(),r=I(P(n),2);let i;var a=P(r,!0);D(r),D(n),L(()=>{i=G(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":R(o)}),K(r,`role`,R(o)?`button`:null),K(r,`tabindex`,R(o)?0:null),H(a,t.pane.errorMessage)}),z(`mousedown`,r,e=>SL.startBodyInteraction(e)),z(`keydown`,r,s),z(`click`,r,e=>SL.handleErrorConversationClick(e,t.pane.entry)),V(e,n)};U(u,e=>{t.pane.showErrorMessage&&e(d)});var f=I(u,2),p=e=>{var n=NL(),a=P(n),o=P(a),s=P(o,!0);D(o),jL(I(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,gc)}),D(a);var c=I(a,2),l=P(c,!0);D(c),D(n),L(()=>{H(s,t.pane.headersTitle||`Headers`),H(l,R(i))}),V(e,n)};U(f,e=>{t.pane.showHeaders&&e(p)});var m=I(f,2),h=e=>{var r=IL(),i=P(r),o=P(i),s=I(P(o),2),c=e=>{var n=PL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.bodyCacheRatioLabel)),V(e,n)};U(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=I(s,2),u=e=>{V(e,FL())};U(l,e=>{t.pane.streaming&&e(u)}),D(o),jL(I(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,gc)}),D(i);var d=I(i,2);pi(d,()=>R(a),!0),D(d),D(r),z(`mousedown`,d,e=>SL.startBodyInteraction(e)),z(`click`,d,e=>SL.handleBodyConversationClick(e,t.pane.entry)),V(e,r)};U(m,e=>{t.pane.showBody&&e(h)});var g=I(m,2),_=e=>{var n=LL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.emptyMessage)),V(e,n)};U(g,e=>{t.pane.showEmpty&&e(_)});var v=I(g,2),y=e=>{var n=RL(),r=I(P(n),2),i=P(r,!0);D(r),D(n),L(()=>H(i,t.pane.pendingMessage)),V(e,n)};U(v,e=>{t.pane.showPending&&e(y)});var b=I(v,2),x=e=>{var n=zL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.tooLargeMessage)),V(e,n)};U(b,e=>{t.pane.showTooLarge&&e(x)}),D(c),L(()=>l=G(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),V(e,c),k()}Br([`mousedown`,`keydown`,`click`]);var HL=B(` `),UL=B(` `),WL=B(` `),GL=B(` `),KL=B(``),qL=B(`
`),JL=B(`
`);function YL(e,t){O(t,!0);let n=q(t,`panes`,19,()=>[]),r=j(null),i=A(()=>IF(R(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=LF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),M(r,a,!0))}var c=JL(),l=P(c);W(l,21,n,e=>e.id,(e,t)=>{var n=KL();let c;var l=P(n),u=P(l),d=e=>{J(e,{get icon(){return Ma}})},f=e=>{J(e,{get icon(){return ja}})};U(u,e=>{R(t).pane.direction===`request`?e(d):R(t).pane.direction===`response`&&e(f,1)}),D(l);var p=I(l,2),m=P(p,!0);D(p);var h=I(p,2),g=e=>{var n=HL(),r=P(n);D(n),L(()=>H(r,`#${R(t).pane.seq??``}`)),V(e,n)};U(h,e=>{R(t).pane.seq&&e(g)});var _=I(h,2),v=e=>{var n=UL(),r=P(n,!0);D(n),L(()=>{G(n,1,`provider-badge audit-pane-kind audit-pane-kind-${R(t).pane.kind??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.kind)}),V(e,n)};U(_,e=>{R(t).pane.kind&&e(v)});var y=I(_,2);W(y,17,()=>R(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=WL(),r=P(n,!0);D(n),L(()=>{K(n,`title`,R(t).title),H(r,R(t).label)}),V(e,n)});var b=I(y,2),x=e=>{var n=GL(),r=P(n,!0);D(n),L(()=>H(r,R(t).pane.savingsLabel)),V(e,n)};U(b,e=>{R(t).pane.savingsLabel&&e(x)});var S=I(b,2),C=e=>{var n=UL(),r=P(n,!0);D(n),L(e=>{G(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.statusCode)},[()=>rF(R(t).pane.statusCode)]),V(e,n)};U(S,e=>{R(t).pane.statusCode&&e(C)}),D(n),L((e,r)=>{c=G(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":R(i)===R(t).id}),K(n,`aria-selected`,R(i)===R(t).id),K(n,`id`,e),K(n,`aria-controls`,r),K(n,`tabindex`,R(i)===R(t).id?0:-1),G(l,1,Ni([`audit-pane-icon`,R(t).pane.direction&&`audit-pane-icon-${R(t).pane.direction}`]),`svelte-1bc5vi5`),H(m,R(t).pane.title)},[()=>a(R(t).id),()=>o(R(t).id)]),z(`keydown`,n,e=>s(e,R(t).id)),z(`click`,n,()=>M(r,R(t).id,!0)),V(e,n)}),D(l),W(I(l,2),17,n,e=>e.id,(e,t)=>{var n=qL();let r;VL(P(n),{get pane(){return R(t).pane}}),D(n),L((e,a)=>{K(n,`id`,e),K(n,`aria-labelledby`,a),r=Bi(n,``,r,{display:R(i)===R(t).id?null:`none`})},[()=>o(R(t).id),()=>a(R(t).id)]),V(e,n)}),D(c),V(e,c),k()}Br([`keydown`,`click`]);var XL=B(`
`),ZL=B(`
`);function QL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`hidePath`,3,!1),i=A(()=>BF.isAuditEntryExpanded(t.entry)),a=A(()=>SL.conversationOpen&&String(SL.conversationAnchorID||``)===String(t.entry.id||``)),o=A(()=>R(i)?PF(t.entry,hI):[]),s=A(()=>R(i)?kN(t.entry,wP.auditEntryWorkflow(t.entry),wP.workflowFeatureCaps()):null);function c(){BF.toggleAuditEntryExpanded(t.entry)}var l=ZL();let u;var d=P(l);kL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return R(i)},get hidePath(){return r()},onactivate:c});var f=I(d,2),p=e=>{var n=XL(),r=P(n),i=e=>{GM(e,{get chart(){return R(s)}})};U(r,e=>{R(s)&&e(i)});var a=I(r,2);YL(a,{get entry(){return t.entry},get panes(){return R(o)}}),XF(I(a,2),{get entry(){return t.entry}}),D(n),Di(3,n,()=>rc,()=>({y:-6,duration:SP(150)})),V(e,n)};U(f,e=>{R(i)&&e(p)}),D(l),L(()=>u=G(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":R(a)})),V(e,l),k()}var $L=B(`
`),eR=B(`
`),tR=B(`

`),nR=B(`
`),rR=B(`
`);function iR(e,t){O(t,!0);let n=A(()=>BP(t.entry)),r=A(()=>BF.isThreadExpanded(R(n))),i=A(()=>BF.threadChildren(R(n))),a=A(()=>R(i)&&!R(i).loading&&Number(R(i).total||0)>R(i).entries.length+1);var o=Xr(),s=F(o),c=e=>{QL(e,{get entry(){return t.entry}})},l=A(()=>!HP(t.entry)),u=e=>{var n=rR(),o=P(n);{let e=A(()=>({count:VP(t.entry),expanded:R(r),ontoggle:()=>BF.toggleThread(t.entry)}));QL(o,{get entry(){return t.entry},get thread(){return R(e)}})}var s=I(o,2),c=e=>{var n=nR(),r=P(n),o=e=>{var t=$L();NS(P(t),{size:14,label:`Loading session requests`}),D(t),V(e,t)};U(r,e=>{R(i)&&R(i).loading&&e(o)});var s=I(r,2);W(s,17,()=>R(i)&&R(i).entries||[],e=>e.id,(e,n)=>{var r=eR(),i=P(r);{let e=A(()=>R(n).path===t.entry.path);QL(i,{get entry(){return R(n)},get hidePath(){return R(e)}})}D(r),V(e,r)});var c=I(s,2),l=e=>{var t=tR(),n=P(t);D(t),L(()=>H(n,`Showing the latest ${R(i).entries.length+1} of ${R(i).total??``} - requests in this session.`)),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(n),Di(3,n,()=>ic,()=>({duration:SP(150)})),V(e,n)};U(s,e=>{R(r)&&e(c)}),D(n),V(e,n)};U(s,e=>{R(l)?e(c):e(u,-1)}),V(e,o),k()}var aR=B(`

.

`),oR=B(`
Audit logging is off. Live entries are temporary and disappear after - refresh. Set LOGGING_ENABLED=true to persist them.
`),sR=B(`

`),cR=B(`
`),lR=B(`
`),uR=B(`
`),dR=B(`
`),fR=B(`
`);function pR(e,t){O(t,!0);let n=A(()=>ks.config&&ks.config.LOGGING_RETENTION_DAYS);On(()=>{if(Y.refreshTick,Yo.page===`audit-logs`)return wr(()=>r())});function r(){let e=!1;return(async()=>{try{await ks.ensureLoaded()}finally{await BF.fetchAuditLog(!0),!e&&ks.liveLogsVisible()&&UC.ensureLiveLogs()}})(),()=>{e=!0,UC.stopLiveLogs()}}var i=fR(),a=P(i),o=P(a),s=I(P(o),2),c=e=>{iC(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=aR(),r=P(t,!0),i=I(r),a=P(i,!0);D(i),Ve(),D(t),L((e,t)=>{H(r,e),H(a,t)},[()=>IP(R(n)),()=>LP(R(n))]),V(e,t)},$$slots:{title:!0}})},l=A(()=>FP(R(n)));U(s,e=>{R(l)&&e(c)}),D(o),D(a);var u=I(a,2);fl(P(u),{onchange:()=>BF.fetchAuditLog(!0)}),D(u);var d=I(u,2);Kc(d,{});var f=I(d,2),p=e=>{V(e,oR())},m=A(()=>ks.loaded&&!ks.auditVisible()&&!Y.needsAuth);U(f,e=>{R(m)&&e(p)});var h=I(f,2),g=P(h);HF(g,{});var _=I(g,2),v=P(_),y=P(v),b=e=>{var t=sR(),n=P(t);D(t),L(e=>H(n,`Showing ${BF.auditLog.offset+1}-${e??``} of ${BF.auditLog.total??``} - ${BF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(BF.auditLog.offset+BF.auditLog.limit,BF.auditLog.total)]),V(e,t)};U(y,e=>{BF.auditLog.total>0&&e(b)});var x=I(y,2),S=P(x);ea(S),Ve(2),D(x),D(v),qF(I(v,2),{}),D(_);var C=I(_,2),w=e=>{var t=cR();NS(P(t),{size:18,label:`Loading audit logs`}),D(t),V(e,t)},T=e=>{var t=uR();W(t,29,()=>BF.auditLog.entries,e=>e.id,(e,t)=>{var n=lR(),r=P(n),i=e=>{iR(e,{get entry(){return R(t)}})},a=e=>{QL(e,{get entry(){return R(t)}})};U(r,e=>{BF.auditGroupSessions?e(i):e(a,-1)}),D(n),Ei(n,()=>vP,()=>({duration:SP(150)})),Di(1,n,()=>CP,()=>({live:R(t)._live})),V(e,n)}),D(t),V(e,t)};U(C,e=>{BF.loading&&BF.auditLog.entries.length===0?e(w):BF.auditLog.entries.length>0&&e(T,1)});var E=I(C,2),ee=e=>{var t=dR();IS(P(t),{}),D(t),V(e,t)};U(E,e=>{BF.auditLog.entries.length===0&&!BF.loading&&!Y.needsAuth&&e(ee)}),oT(I(E,2),{get total(){return BF.auditLog.total},get offset(){return BF.auditLog.offset},get limit(){return BF.auditLog.limit},onprev:()=>BF.auditLogPrevPage(),onnext:()=>BF.auditLogNextPage()}),D(h),D(i),L(()=>na(S,BF.auditGroupSessions)),z(`change`,S,()=>BF.toggleAuditGroupSessions()),V(e,i),k()}Br([`change`]);function mR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function hR(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function gR(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function _R(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function vR(e,t){let n=String(t||``).trim();return n&&gR(e,n)?n:_R(e)}function yR(e,t){let n=gR(e,t);return!n||!n.defaults?{}:mR(n.defaults)}function bR(e,t,n){return{...yR(e,n),...mR(t)}}function xR(e,t){let n=vR(e,t);return{name:``,type:n,description:``,user_path:``,config:yR(e,n)}}function SR(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function CR(e,t){let n=gR(e,t);return n&&n.label?n.label:t||`Unknown`}function wR(e,t){let n=gR(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function TR(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?hR(n):n}function ER(e,t,n){if(!t)return e;let r=mR(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=hR(n):r[t.key]=n;return r}function DR(e,t,n){return TR(e,t).includes(String(n||``).trim())}function OR(e,t,n,r){let i=hR(TR(e,t)),a=String(n||``).trim();return a?ER(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function kR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:mR(e&&e.config)}}var AR=new class{#e=j(N([]));get guardrails(){return R(this.#e)}set guardrails(e){M(this.#e,e,!0)}#t=j(N([]));get types(){return R(this.#t)}set types(e){M(this.#t,e,!0)}#n=j(!0);get available(){return R(this.#n)}set available(e){M(this.#n,e,!0)}#r=j(!1);get loading(){return R(this.#r)}set loading(e){M(this.#r,e,!0)}#i=j(!1);get typesLoading(){return R(this.#i)}set typesLoading(e){M(this.#i,e,!0)}#a=j(``);get error(){return R(this.#a)}set error(e){M(this.#a,e,!0)}#o=j(``);get filter(){return R(this.#o)}set filter(e){M(this.#o,e,!0)}#s=j(!1);get formOpen(){return R(this.#s)}set formOpen(e){M(this.#s,e,!0)}#c=j(!1);get formSubmitting(){return R(this.#c)}set formSubmitting(e){M(this.#c,e,!0)}#l=j(``);get deletingName(){return R(this.#l)}set deletingName(e){M(this.#l,e,!0)}#u=j(`create`);get formMode(){return R(this.#u)}set formMode(e){M(this.#u,e,!0)}#d=j(``);get formOriginalName(){return R(this.#d)}set formOriginalName(e){M(this.#d,e,!0)}#f=j(N({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}get filtered(){return SR(this.guardrails,this.filter)}typeLabel(e){return CR(this.types,e)}typeFields(e){return wR(this.types,e)}fieldValue(e){return TR(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:ER(this.form.config,e,t)}}arrayFieldSelected(e,t){return DR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:OR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=xR(this.types,_R(this.types)),this.formOpen=!0}openEdit(e){let t=vR(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:bR(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=xR(this.types,_R(this.types))}changeType(e){let t=vR(this.types,e);this.form={...this.form,type:t,config:yR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await kT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=vR(this.types,this.form.type);this.form={...this.form,type:t,config:bR(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=kR(this.form);try{let t=await AT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await AT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},jR=B(`
`),MR=B(`

Loading guardrails...

`),NR=B(`
`),PR=B(`
`),FR=B(`
NameTypeUser PathSummaryActions
`),IR=B(`

No guardrails defined yet.

`),LR=B(`

Instances

Each instance has a reusable name, a type, an optional user path for +`):``}function hL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var gL=600*1e3,_L=15*1e3,vL=250,yL=class{#e=j(!1);get conversationOpen(){return R(this.#e)}set conversationOpen(e){M(this.#e,e,!0)}#t=j(!1);get conversationLoading(){return R(this.#t)}set conversationLoading(e){M(this.#t,e,!0)}#n=j(``);get conversationError(){return R(this.#n)}set conversationError(e){M(this.#n,e,!0)}#r=j(``);get conversationAnchorID(){return R(this.#r)}set conversationAnchorID(e){M(this.#r,e,!0)}#i=j(N([]));get conversationEntryIDs(){return R(this.#i)}set conversationEntryIDs(e){M(this.#i,e,!0)}#a=j(``);get conversationSessionID(){return R(this.#a)}set conversationSessionID(e){M(this.#a,e,!0)}#o=j(!1);get conversationTruncated(){return R(this.#o)}set conversationTruncated(e){M(this.#o,e,!0)}#s=j(!1);get conversationFollowLatest(){return R(this.#s)}set conversationFollowLatest(e){M(this.#s,e,!0)}#c=j(``);get conversationOpenedFromID(){return R(this.#c)}set conversationOpenedFromID(e){M(this.#c,e,!0)}#l=j(``);get followUpText(){return R(this.#l)}set followUpText(e){M(this.#l,e,!0)}#u=j(!1);get followUpSending(){return R(this.#u)}set followUpSending(e){M(this.#u,e,!0)}#d=j(``);get followUpError(){return R(this.#d)}set followUpError(e){M(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=j(null);get conversationDialogEl(){return R(this.#f)}set conversationDialogEl(e){M(this.#f,e,!0)}#p=j(null);get conversationCloseBtnEl(){return R(this.#p)}set conversationCloseBtnEl(e){M(this.#p,e,!0)}#m=j(null);get conversationThreadEl(){return R(this.#m)}set conversationThreadEl(e){M(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>UC.auditRecord(e)).filter(Boolean)}#h=A(()=>fL(this.conversationEntries,this.conversationAnchorID));get conversationView(){return R(this.#h)}set conversationView(e){M(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],UC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return BI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return gc(e)}renderBodyWithConversationHighlights(e,t,n){return eL(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(UC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof UC.auditEntryLiveDetailPending==`function`&&UC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=fL(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=FI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=jI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),LI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=IC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof UC.liveAuditStateSettled!=`function`||!UC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await ws(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=UC.upsertAuditRecords(s,`conversation.hydrated`),l=RI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=II(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return NI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return EI(e)?CI(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=DI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=xL(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},gL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=kI(e,n,r),o=await Ss(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await bL(o),!UC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Es(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+_L;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function bL(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function xL(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function SL(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var CL=new yL,wL=0;An(()=>{On(()=>{let e=RC(UC.auditRecordChanges,wL);e.length!==0&&(wL=Number(e[e.length-1].version||0),wr(()=>{e.forEach(e=>{if(!zC(e))return;let t=UC.auditRecord(e.key);CL.handleAuditRecordChange(t,e.eventType)})}))})});var TL=B(``),EL=B(` `),DL=B(` `),OL=B(``),kL=B(`

`);function AL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`expanded`,3,!1),i=q(t,`onactivate`,3,null),a=q(t,`hidePath`,3,!1),o=A(()=>vs.formatTimestamp(t.entry.timestamp)),s=A(()=>R(o)===`-`?R(o):R(o).slice(R(o).lastIndexOf(` `)+1)),c=A(()=>CL.conversationOpen&&String(CL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(){let e=Number(n().count||1),t=Number(n().matchingCount||e);return t{var t=TL(),r=P(t);{let e=A(()=>n().expanded?Va:Ua);J(r,{get icon(){return R(e)},class:`audit-thread-expander-svg`})}var i=I(r,2),a=P(i,!0);D(i),D(t),L((e,r)=>{K(t,`aria-expanded`,n().expanded),K(t,`title`,e),K(t,`aria-label`,r),H(a,n().count)},[()=>d(),()=>d()+`, `+(n().expanded?`collapse`:`expand`)]),z(`click`,t,u),V(e,t)};U(g,e=>{n()&&e(_)});var v=I(g,2),y=P(v),b=P(y,!0);D(y);var x=I(y,2),S=P(x,!0);D(x),D(v);var C=I(v,2),w=e=>{var n=EL(),r=P(n,!0);D(n),L(e=>H(r,e),[()=>jc(t.entry)]),V(e,n)};U(C,e=>{(t.entry.requested_model||t.entry.model)&&e(w)});var T=I(C,2),E=e=>{var n=DL(),r=P(n,!0);D(n),L(()=>H(r,t.entry.path||`-`)),V(e,n)};U(T,e=>{a()||e(E)}),D(h);var ee=I(h,2),te=P(ee);eI(te,{get entry(){return t.entry}});var ne=I(te,2),re=P(ne),ie=P(re,!0);D(re);var ae=I(re,2),oe=P(ae,!0);D(ae),D(ne);var se=I(ne,2),ce=P(se,!0);D(se);var le=I(se,2),ue=e=>{var t=OL();let n;var r=P(t);{let e=A(()=>R(c)?Ha:Ua);J(r,{get icon(){return R(e)},class:`audit-conversation-trigger-svg`})}D(t),L(()=>{n=G(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":R(c)}),K(t,`title`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-label`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-pressed`,R(c))}),z(`click`,t,f),V(e,t)},de=A(()=>CL.canShowConversation(t.entry));U(le,e=>{R(de)&&e(ue)}),D(ee),D(p),L((e,n,i,a)=>{m=G(p,1,`audit-entry-summary svelte-17mysgz`,null,m,e),K(p,`aria-expanded`,r()),G(v,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),K(v,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),K(v,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),H(b,t.entry.status_code||`-`),H(S,t.entry.method||`-`),K(ne,`title`,i),K(ne,`aria-label`,R(o)),H(ie,R(o)),H(oe,R(s)),H(ce,a)},[()=>({"audit-entry-summary-live-in-progress":aF(t.entry),"audit-entry-summary-has-interactions":CL.canShowConversation(t.entry)}),()=>iF(t.entry.status_code),()=>Tc(t.entry.timestamp),()=>rF(t.entry.duration_ns)]),z(`click`,p,l),V(e,p),k()}Br([`click`]);var jL=B(``);function ML(e,t){O(t,!0);let n=q(t,`label`,3,`Copy`),r=q(t,`copiedLabel`,3,`Copied`),i=q(t,`errorLabel`,3,``),a=q(t,`class`,3,`btn`),o=A(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=jL();let c;var l=P(s),u=e=>{J(e,{get icon(){return Ga},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{J(e,{get icon(){return Ja},width:`14`,height:`14`})};U(l,e=>{t.state.copied?e(u):e(d,-1)});var f=I(l,2),p=P(f,!0);D(f),D(s),L(()=>{c=G(s,1,Ni([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),H(p,R(o))}),z(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),V(e,s),k()}Br([`click`]);var NL=B(`
Error Message
 
`),PL=B(`
 
`),FL=B(` `),IL=B(` streaming`),LL=B(`
Body
`),RL=B(`

`),zL=B(`

`),BL=B(`

`),VL=B(`
`);function HL(e,t){O(t,!0);let n=MM({logPrefix:`Failed to copy audit payload:`}),r=MM({logPrefix:`Failed to copy audit payload:`}),i=A(()=>t.pane&&t.pane.showHeaders?gc(t.pane.headers):``),a=A(()=>!t.pane||!t.pane.showBody?``:GI(t.pane.body)?XI(t.pane.body):CL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=A(()=>!!(t.pane&&CL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),CL.handleErrorConversationClick(e,t.pane.entry))}var c=VL();let l;var u=P(c),d=e=>{var n=NL(),r=I(P(n),2);let i;var a=P(r,!0);D(r),D(n),L(()=>{i=G(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":R(o)}),K(r,`role`,R(o)?`button`:null),K(r,`tabindex`,R(o)?0:null),H(a,t.pane.errorMessage)}),z(`mousedown`,r,e=>CL.startBodyInteraction(e)),z(`keydown`,r,s),z(`click`,r,e=>CL.handleErrorConversationClick(e,t.pane.entry)),V(e,n)};U(u,e=>{t.pane.showErrorMessage&&e(d)});var f=I(u,2),p=e=>{var n=PL(),a=P(n),o=P(a),s=P(o,!0);D(o),ML(I(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,gc)}),D(a);var c=I(a,2),l=P(c,!0);D(c),D(n),L(()=>{H(s,t.pane.headersTitle||`Headers`),H(l,R(i))}),V(e,n)};U(f,e=>{t.pane.showHeaders&&e(p)});var m=I(f,2),h=e=>{var r=LL(),i=P(r),o=P(i),s=I(P(o),2),c=e=>{var n=FL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.bodyCacheRatioLabel)),V(e,n)};U(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=I(s,2),u=e=>{V(e,IL())};U(l,e=>{t.pane.streaming&&e(u)}),D(o),ML(I(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,gc)}),D(i);var d=I(i,2);pi(d,()=>R(a),!0),D(d),D(r),z(`mousedown`,d,e=>CL.startBodyInteraction(e)),z(`click`,d,e=>CL.handleBodyConversationClick(e,t.pane.entry)),V(e,r)};U(m,e=>{t.pane.showBody&&e(h)});var g=I(m,2),_=e=>{var n=RL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.emptyMessage)),V(e,n)};U(g,e=>{t.pane.showEmpty&&e(_)});var v=I(g,2),y=e=>{var n=zL(),r=I(P(n),2),i=P(r,!0);D(r),D(n),L(()=>H(i,t.pane.pendingMessage)),V(e,n)};U(v,e=>{t.pane.showPending&&e(y)});var b=I(v,2),x=e=>{var n=BL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.tooLargeMessage)),V(e,n)};U(b,e=>{t.pane.showTooLarge&&e(x)}),D(c),L(()=>l=G(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),V(e,c),k()}Br([`mousedown`,`keydown`,`click`]);var UL=B(` `),WL=B(` `),GL=B(` `),KL=B(` `),qL=B(``),JL=B(`
`),YL=B(`
`);function XL(e,t){O(t,!0);let n=q(t,`panes`,19,()=>[]),r=j(null),i=A(()=>LF(R(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=RF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),M(r,a,!0))}var c=YL(),l=P(c);W(l,21,n,e=>e.id,(e,t)=>{var n=qL();let c;var l=P(n),u=P(l),d=e=>{J(e,{get icon(){return Ma}})},f=e=>{J(e,{get icon(){return ja}})};U(u,e=>{R(t).pane.direction===`request`?e(d):R(t).pane.direction===`response`&&e(f,1)}),D(l);var p=I(l,2),m=P(p,!0);D(p);var h=I(p,2),g=e=>{var n=UL(),r=P(n);D(n),L(()=>H(r,`#${R(t).pane.seq??``}`)),V(e,n)};U(h,e=>{R(t).pane.seq&&e(g)});var _=I(h,2),v=e=>{var n=WL(),r=P(n,!0);D(n),L(()=>{G(n,1,`provider-badge audit-pane-kind audit-pane-kind-${R(t).pane.kind??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.kind)}),V(e,n)};U(_,e=>{R(t).pane.kind&&e(v)});var y=I(_,2);W(y,17,()=>R(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=GL(),r=P(n,!0);D(n),L(()=>{K(n,`title`,R(t).title),H(r,R(t).label)}),V(e,n)});var b=I(y,2),x=e=>{var n=KL(),r=P(n,!0);D(n),L(()=>H(r,R(t).pane.savingsLabel)),V(e,n)};U(b,e=>{R(t).pane.savingsLabel&&e(x)});var S=I(b,2),C=e=>{var n=WL(),r=P(n,!0);D(n),L(e=>{G(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.statusCode)},[()=>iF(R(t).pane.statusCode)]),V(e,n)};U(S,e=>{R(t).pane.statusCode&&e(C)}),D(n),L((e,r)=>{c=G(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":R(i)===R(t).id}),K(n,`aria-selected`,R(i)===R(t).id),K(n,`id`,e),K(n,`aria-controls`,r),K(n,`tabindex`,R(i)===R(t).id?0:-1),G(l,1,Ni([`audit-pane-icon`,R(t).pane.direction&&`audit-pane-icon-${R(t).pane.direction}`]),`svelte-1bc5vi5`),H(m,R(t).pane.title)},[()=>a(R(t).id),()=>o(R(t).id)]),z(`keydown`,n,e=>s(e,R(t).id)),z(`click`,n,()=>M(r,R(t).id,!0)),V(e,n)}),D(l),W(I(l,2),17,n,e=>e.id,(e,t)=>{var n=JL();let r;HL(P(n),{get pane(){return R(t).pane}}),D(n),L((e,a)=>{K(n,`id`,e),K(n,`aria-labelledby`,a),r=Bi(n,``,r,{display:R(i)===R(t).id?null:`none`})},[()=>o(R(t).id),()=>a(R(t).id)]),V(e,n)}),D(c),V(e,c),k()}Br([`keydown`,`click`]);var ZL=B(`
`),QL=B(`
`);function $L(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`hidePath`,3,!1),i=A(()=>VF.isAuditEntryExpanded(t.entry)),a=A(()=>CL.conversationOpen&&String(CL.conversationAnchorID||``)===String(t.entry.id||``)),o=A(()=>R(i)?FF(t.entry,gI):[]),s=A(()=>R(i)?kN(t.entry,wP.auditEntryWorkflow(t.entry),wP.workflowFeatureCaps()):null);function c(){VF.toggleAuditEntryExpanded(t.entry)}var l=QL();let u;var d=P(l);AL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return R(i)},get hidePath(){return r()},onactivate:c});var f=I(d,2),p=e=>{var n=ZL(),r=P(n),i=e=>{GM(e,{get chart(){return R(s)}})};U(r,e=>{R(s)&&e(i)});var a=I(r,2);XL(a,{get entry(){return t.entry},get panes(){return R(o)}}),ZF(I(a,2),{get entry(){return t.entry}}),D(n),Di(3,n,()=>rc,()=>({y:-6,duration:SP(150)})),V(e,n)};U(f,e=>{R(i)&&e(p)}),D(l),L(()=>u=G(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":R(a)})),V(e,l),k()}var eR=B(`
`),tR=B(`
`),nR=B(`

`),rR=B(`
`),iR=B(`
`);function aR(e,t){O(t,!0);let n=A(()=>BP(t.entry)),r=A(()=>VF.isThreadExpanded(R(n))),i=A(()=>VF.threadChildren(R(n))),a=A(()=>R(i)&&!R(i).loading&&Number(R(i).total||0)>R(i).entries.length+1);var o=Xr(),s=F(o),c=e=>{$L(e,{get entry(){return t.entry}})},l=A(()=>!UP(t.entry)),u=e=>{var n=iR(),o=P(n);{let e=A(()=>({count:VP(t.entry),matchingCount:HP(t.entry),expanded:R(r),ontoggle:()=>VF.toggleThread(t.entry)}));$L(o,{get entry(){return t.entry},get thread(){return R(e)}})}var s=I(o,2),c=e=>{var n=rR(),r=P(n),o=e=>{var t=eR();NS(P(t),{size:14,label:`Loading session requests`}),D(t),V(e,t)};U(r,e=>{R(i)&&R(i).loading&&e(o)});var s=I(r,2);W(s,17,()=>R(i)&&R(i).entries||[],e=>e.id,(e,n)=>{var r=tR(),i=P(r);{let e=A(()=>R(n).path===t.entry.path);$L(i,{get entry(){return R(n)},get hidePath(){return R(e)}})}D(r),V(e,r)});var c=I(s,2),l=e=>{var t=nR(),n=P(t);D(t),L(()=>H(n,`Showing the latest ${R(i).entries.length+1} of ${R(i).total??``} + requests in this session.`)),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(n),Di(3,n,()=>ic,()=>({duration:SP(150)})),V(e,n)};U(s,e=>{R(r)&&e(c)}),D(n),V(e,n)};U(s,e=>{R(l)?e(c):e(u,-1)}),V(e,o),k()}var oR=B(`

.

`),sR=B(`
Audit logging is off. Live entries are temporary and disappear after + refresh. Set LOGGING_ENABLED=true to persist them.
`),cR=B(`

`),lR=B(`
`),uR=B(`
`),dR=B(`
`),fR=B(`
`),pR=B(`
`);function mR(e,t){O(t,!0);let n=A(()=>ks.config&&ks.config.LOGGING_RETENTION_DAYS);On(()=>{if(Y.refreshTick,Yo.page===`audit-logs`)return wr(()=>r())});function r(){let e=!1;return(async()=>{try{await ks.ensureLoaded()}finally{await VF.fetchAuditLog(!0),!e&&ks.liveLogsVisible()&&UC.ensureLiveLogs()}})(),()=>{e=!0,UC.stopLiveLogs()}}var i=pR(),a=P(i),o=P(a),s=I(P(o),2),c=e=>{iC(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=oR(),r=P(t,!0),i=I(r),a=P(i,!0);D(i),Ve(),D(t),L((e,t)=>{H(r,e),H(a,t)},[()=>IP(R(n)),()=>LP(R(n))]),V(e,t)},$$slots:{title:!0}})},l=A(()=>FP(R(n)));U(s,e=>{R(l)&&e(c)}),D(o),D(a);var u=I(a,2);fl(P(u),{onchange:()=>VF.fetchAuditLog(!0)}),D(u);var d=I(u,2);Kc(d,{});var f=I(d,2),p=e=>{V(e,sR())},m=A(()=>ks.loaded&&!ks.auditVisible()&&!Y.needsAuth);U(f,e=>{R(m)&&e(p)});var h=I(f,2),g=P(h);UF(g,{});var _=I(g,2),v=P(_),y=P(v),b=e=>{var t=cR(),n=P(t);D(t),L(e=>H(n,`Showing ${VF.auditLog.offset+1}-${e??``} of ${VF.auditLog.total??``} + ${VF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(VF.auditLog.offset+VF.auditLog.limit,VF.auditLog.total)]),V(e,t)};U(y,e=>{VF.auditLog.total>0&&e(b)});var x=I(y,2),S=P(x);ea(S),Ve(2),D(x),D(v),JF(I(v,2),{}),D(_);var C=I(_,2),w=e=>{var t=lR();NS(P(t),{size:18,label:`Loading audit logs`}),D(t),V(e,t)},T=e=>{var t=dR();W(t,29,()=>VF.auditLog.entries,e=>e.id,(e,t)=>{var n=uR(),r=P(n),i=e=>{aR(e,{get entry(){return R(t)}})},a=e=>{$L(e,{get entry(){return R(t)}})};U(r,e=>{VF.auditGroupSessions?e(i):e(a,-1)}),D(n),Ei(n,()=>vP,()=>({duration:SP(150)})),Di(1,n,()=>CP,()=>({live:R(t)._live})),V(e,n)}),D(t),V(e,t)};U(C,e=>{VF.loading&&VF.auditLog.entries.length===0?e(w):VF.auditLog.entries.length>0&&e(T,1)});var E=I(C,2),ee=e=>{var t=fR();IS(P(t),{}),D(t),V(e,t)};U(E,e=>{VF.auditLog.entries.length===0&&!VF.loading&&!Y.needsAuth&&e(ee)}),oT(I(E,2),{get total(){return VF.auditLog.total},get offset(){return VF.auditLog.offset},get limit(){return VF.auditLog.limit},onprev:()=>VF.auditLogPrevPage(),onnext:()=>VF.auditLogNextPage()}),D(h),D(i),L(()=>na(S,VF.auditGroupSessions)),z(`change`,S,()=>VF.toggleAuditGroupSessions()),V(e,i),k()}Br([`change`]);function hR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function gR(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function _R(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function vR(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function yR(e,t){let n=String(t||``).trim();return n&&_R(e,n)?n:vR(e)}function bR(e,t){let n=_R(e,t);return!n||!n.defaults?{}:hR(n.defaults)}function xR(e,t,n){return{...bR(e,n),...hR(t)}}function SR(e,t){let n=yR(e,t);return{name:``,type:n,description:``,user_path:``,config:bR(e,n)}}function CR(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function wR(e,t){let n=_R(e,t);return n&&n.label?n.label:t||`Unknown`}function TR(e,t){let n=_R(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function ER(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?gR(n):n}function DR(e,t,n){if(!t)return e;let r=hR(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=gR(n):r[t.key]=n;return r}function OR(e,t,n){return ER(e,t).includes(String(n||``).trim())}function kR(e,t,n,r){let i=gR(ER(e,t)),a=String(n||``).trim();return a?DR(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function AR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:hR(e&&e.config)}}var jR=new class{#e=j(N([]));get guardrails(){return R(this.#e)}set guardrails(e){M(this.#e,e,!0)}#t=j(N([]));get types(){return R(this.#t)}set types(e){M(this.#t,e,!0)}#n=j(!0);get available(){return R(this.#n)}set available(e){M(this.#n,e,!0)}#r=j(!1);get loading(){return R(this.#r)}set loading(e){M(this.#r,e,!0)}#i=j(!1);get typesLoading(){return R(this.#i)}set typesLoading(e){M(this.#i,e,!0)}#a=j(``);get error(){return R(this.#a)}set error(e){M(this.#a,e,!0)}#o=j(``);get filter(){return R(this.#o)}set filter(e){M(this.#o,e,!0)}#s=j(!1);get formOpen(){return R(this.#s)}set formOpen(e){M(this.#s,e,!0)}#c=j(!1);get formSubmitting(){return R(this.#c)}set formSubmitting(e){M(this.#c,e,!0)}#l=j(``);get deletingName(){return R(this.#l)}set deletingName(e){M(this.#l,e,!0)}#u=j(`create`);get formMode(){return R(this.#u)}set formMode(e){M(this.#u,e,!0)}#d=j(``);get formOriginalName(){return R(this.#d)}set formOriginalName(e){M(this.#d,e,!0)}#f=j(N({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}get filtered(){return CR(this.guardrails,this.filter)}typeLabel(e){return wR(this.types,e)}typeFields(e){return TR(this.types,e)}fieldValue(e){return ER(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:DR(this.form.config,e,t)}}arrayFieldSelected(e,t){return OR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:kR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=SR(this.types,vR(this.types)),this.formOpen=!0}openEdit(e){let t=yR(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:xR(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=SR(this.types,vR(this.types))}changeType(e){let t=yR(this.types,e);this.form={...this.form,type:t,config:bR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await kT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=yR(this.types,this.form.type);this.form={...this.form,type:t,config:xR(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=AR(this.form);try{let t=await AT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await AT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},MR=B(`
`),NR=B(`

Loading guardrails...

`),PR=B(`
`),FR=B(`
`),IR=B(`
NameTypeUser PathSummaryActions
`),LR=B(`

No guardrails defined yet.

`),RR=B(`

Instances

Each instance has a reusable name, a type, an optional user path for future UI visibility scoping, and a JSON-backed config payload for - that type.

`);function RR(e,t){O(t,!0);var n=LR(),r=P(n),i=I(P(r),2);J(P(i),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(i),D(r);var a=I(r,2),o=e=>{var t=jR(),n=P(t);jw(P(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return AR.filter},set value(e){AR.filter=e}}),D(n),D(t),V(e,t)};U(a,e=>{AR.available&&e(o)});var s=I(a,2),c=e=>{var t=MR();NS(P(t),{size:16,label:`Loading guardrails`}),Ve(),D(t),V(e,t)};U(s,e=>{AR.loading&&AR.filtered.length===0&&e(c)});var l=I(s,2),u=e=>{var t=FR(),n=P(t),r=I(P(n));W(r,21,()=>AR.filtered,e=>e.name,(e,t)=>{var n=PR(),r=P(n),i=P(r,!0);D(r);var a=I(r),o=P(a),s=P(o,!0);D(o),D(a);var c=I(a),l=P(c,!0);D(c);var u=I(c),d=P(u),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var n=NR(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(p,e=>{R(t).description&&e(m)}),D(u);var h=I(u),g=P(h),_=P(g);{let e=A(()=>`Edit guardrail `+R(t).name);OT(_,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AR.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=I(_,2);{let e=A(()=>(AR.deletingName===R(t).name?`Deleting guardrail `:`Delete guardrail `)+R(t).name),n=A(()=>AR.deletingName===R(t).name);OT(v,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>AR.deleteGuardrail(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(g),D(h),D(n),L(e=>{H(i,R(t).name),H(s,e),H(l,R(t).user_path||`—`),H(f,R(t).summary||R(t).description||`No summary yet.`)},[()=>AR.typeLabel(R(t).type)]),V(e,n)}),D(r),D(n),D(t),V(e,t)};U(l,e=>{AR.filtered.length>0&&e(u)});var d=I(l,2),f=e=>{V(e,IR())};U(d,e=>{AR.filtered.length===0&&!AR.loading&&AR.available&&!AR.error&&!Y.authError&&e(f)}),D(n),L(()=>i.disabled=AR.typesLoading||AR.formSubmitting||!AR.available),z(`click`,i,()=>AR.openCreate()),V(e,n),k()}Br([`click`]);var zR=B(`

Workflows reference these names directly, so renames are - intentionally avoided after creation.

`),BR=B(``),VR=B(``),HR=B(``),UR=B(``),WR=B(``),GR=B(``),KR=B(``),qR=B(``),JR=B(``),YR=B(`
`),XR=B(``),ZR=B(` `),QR=B(`
`),$R=B(`
`);function ez(e,t){O(t,!0);let n=A(()=>AR.formMode===`edit`);{let t=e=>{V(e,zR())},r=A(()=>R(n)?`Edit Guardrail`:`Create Guardrail`);ME(e,{get open(){return AR.formOpen},get title(){return R(r)},ariaLabel:`Guardrail editor`,get error(){return AR.error},get submitting(){return AR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>AR.closeForm(),onsubmit:()=>AR.submitForm(),headerHint:t,children:(e,t)=>{var r=$R(),i=P(r);PE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=BR();ea(r),L(()=>{r.disabled=R(n),K(r,`data-modal-autofocus`,!R(n)||void 0)}),la(r,()=>AR.form.name,e=>AR.form.name=e),V(e,r)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=HR();W(r,21,()=>AR.types,e=>e.type,(e,t)=>{var n=VR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).type)&&(n.value=(n.__value=R(t).type)??``)}),V(e,n)}),D(r);var i;Hi(r),L(()=>{r.disabled=R(n),i!==(i=AR.form.type)&&(r.value=(r.__value=AR.form.type)??``,Vi(r,AR.form.type))}),z(`change`,r,e=>AR.changeType(e.currentTarget.value)),V(e,r)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=UR();ea(r),L(()=>K(r,`data-modal-autofocus`,R(n)?!0:void 0)),la(r,()=>AR.form.description,e=>AR.form.description=e),V(e,r)},$$slots:{default:!0}});var s=I(o,2),c=P(s);iC(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{V(e,WR())},$$slots:{title:!0}});var l=I(c,2);ea(l),D(s),W(I(s,2),17,()=>AR.typeFields(AR.form.type),e=>e.key,(e,t)=>{var n=Xr(),r=F(n),i=e=>{var n=YR(),r=P(n);{let e=e=>{var n=GR(),r=P(n,!0);D(n),L(()=>{K(n,`for`,`guardrail-field-`+R(t).key),H(r,R(t).label)}),V(e,n)},n=A(()=>`guardrail-field-help-`+R(t).key),i=A(()=>R(t).label+` help`),a=A(()=>R(t).help||``);iC(r,{get copyId(){return R(n)},get label(){return R(i)},get text(){return R(a)},title:e,$$slots:{title:!0}})}var i=I(r,2),a=e=>{var n=KR();W(n,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=VR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(n);var r;Hi(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Vi(n,e))},[()=>AR.fieldValue(R(t))]),z(`change`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},o=e=>{var n=qR();ut(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>AR.fieldValue(R(t))]),z(`input`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},s=e=>{var n=JR();ea(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`type`,R(t).input||`text`),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>AR.fieldValue(R(t))]),z(`input`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)};U(i,e=>{R(t).input===`select`?e(a):R(t).input===`textarea`?e(o,1):e(s,-1)}),D(n),V(e,n)},a=e=>{var n=QR(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).options||[],e=>R(t).key+`-`+e.value,(e,n)=>{var r=XR(),i=P(r);ea(i);var a=I(i,2),o=P(a,!0);D(a),D(r),L(e=>{na(i,e),H(o,R(n).label)},[()=>AR.arrayFieldSelected(R(t),R(n).value)]),z(`change`,i,e=>AR.toggleArrayFieldValue(R(t),R(n).value,e.currentTarget.checked)),V(e,r)}),D(a);var o=I(a,2),s=e=>{var n=ZR(),r=P(n,!0);D(n),L(()=>{K(n,`id`,`guardrail-field-help-`+R(t).key),H(r,R(t).help)}),V(e,n)};U(o,e=>{R(t).help&&e(s)}),D(n),L(()=>{K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),H(i,R(t).label)}),V(e,n)};U(r,e=>{R(t).input===`checkboxes`?e(a,-1):e(i)}),V(e,n)}),D(r),la(l,()=>AR.form.user_path,e=>AR.form.user_path=e),V(e,r)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var tz=B(`

Guardrails

`),nz=B(`
Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage - definitions here.
`),rz=B(`
Guardrails feature is unavailable.
`),iz=B(`
`),az=B(`

Reusable Policy Objects

Guardrail Library

Store guardrails in the database, keep them hot in memory, and attach - them to workflows by reference.

Instances
Types
`);function oz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`guardrails`&&(ks.ensureLoaded(),AR.fetchPage())});var n=az(),r=P(n),i=P(r);iC(P(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{V(e,tz())},$$slots:{title:!0}}),D(i),D(r);var a=I(r,2),o=I(P(a),2),s=P(o),c=I(P(s),2),l=P(c,!0);D(c),D(s);var u=I(s,2),d=I(P(u),2),f=P(d,!0);D(d),D(u),D(o),D(a);var p=I(a,2);Kc(p,{});var m=I(p,2),h=e=>{V(e,nz())},g=A(()=>!ks.guardrailsVisible());U(m,e=>{R(g)&&e(h)});var _=I(m,2),v=e=>{V(e,rz())};U(_,e=>{!Y.authError&&!AR.available&&e(v)});var y=I(_,2),b=e=>{var t=iz(),n=P(t,!0);D(t),L(()=>H(n,AR.error)),V(e,t)};U(y,e=>{!Y.authError&&AR.error&&!AR.formOpen&&e(b)});var x=I(y,2);ez(x,{}),RR(I(x,2),{}),D(n),L((e,t)=>{H(l,e),H(f,t)},[()=>_c(AR.guardrails.length),()=>_c(AR.types.length)]),V(e,n),k()}var $=new class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get slugEdited(){return R(this.#c)}set slugEdited(e){M(this.#c,e,!0)}#l=j(!1);get advancedOpen(){return R(this.#l)}set advancedOpen(e){M(this.#l,e,!0)}#u=j(N(Sx()));get form(){return R(this.#u)}set form(e){M(this.#u,e,!0)}#d=j(``);get deletingName(){return R(this.#d)}set deletingName(e){M(this.#d,e,!0)}#f=j(``);get reconnectingName(){return R(this.#f)}set reconnectingName(e){M(this.#f,e,!0)}#p=j(!1);get catalogOpen(){return R(this.#p)}set catalogOpen(e){M(this.#p,e,!0)}#m=j(!1);get catalogLoading(){return R(this.#m)}set catalogLoading(e){M(this.#m,e,!0)}#h=j(``);get catalogError(){return R(this.#h)}set catalogError(e){M(this.#h,e,!0)}#g=j(N(Cx()));get catalog(){return R(this.#g)}set catalog(e){M(this.#g,e,!0)}#_=A(()=>Px(this.servers,this.filter));get filtered(){return R(this.#_)}set filtered(e){M(this.#_,e)}async fetchServers(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await kT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Fx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=Ax(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Ix(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}let r=e.result.data,i=Tx(r);i===`connected`?lc.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?lc.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):lc.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>wx(e)===wx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...Cx(),server:n,status:Tx(e)};try{let e=await ws(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:ys(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Lx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=Cx()}},sz=B(``),cz=B(`

`),lz=B(`
`),uz=B(`

`),dz=B(`
  • `),fz=B(`

      `),pz=B(`

      No tools listed — the server may still be connecting or degraded.

      `),mz=B(` `,1),hz=B(``);function gz(e,t){O(t,!0);let n=A(()=>zx($.catalog));Hs(e,{get open(){return $.catalogOpen},variant:`editor`,onclose:()=>$.closeCatalog(),children:(e,t)=>{var r=hz(),i=P(r),a=P(i),o=I(P(a),2),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=P(l,!0);D(l),D(o),D(a),Rs(I(a,2),{label:`Close MCP server catalog`,onclick:()=>$.closeCatalog()}),D(i);var d=I(i,2),f=e=>{ET(e,{label:`Loading catalog...`})},p=e=>{var t=sz(),n=P(t,!0);D(t),L(()=>H(n,$.catalogError)),V(e,t)},m=e=>{var t=mz(),r=F(t),i=e=>{var t=cz(),n=P(t,!0);D(t),L(()=>H(n,$.catalog.instructions)),V(e,t)};U(r,e=>{$.catalog.instructions&&e(i)});var a=I(r,2);W(a,17,()=>R(n),e=>e.key,(e,t)=>{var n=fz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).items,e=>e.key,(e,t)=>{var n=dz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{var n=lz(),r=P(n,!0);D(n),L(()=>{K(n,`title`,`Exposed on the aggregated /mcp endpoint as `+R(t).aggregated),H(r,R(t).aggregated)}),V(e,n)};U(a,e=>{R(t).aggregated&&e(o)});var s=I(a,2),c=e=>{var n=uz(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(s,e=>{R(t).description&&e(c)}),D(n),L(()=>{K(r,`title`,R(t).aggregated||R(t).name),H(i,R(t).name)}),V(e,n)}),D(a),D(n),L(()=>H(i,R(t).title)),V(e,n)});var o=I(a,2),s=e=>{V(e,pz())},c=A(()=>Bx($.catalog));U(o,e=>{R(c)&&e(s)}),V(e,t)};U(d,e=>{$.catalogLoading?e(f):$.catalogError?e(p,1):e(m,-1)});var h=I(d,2),g=P(h);D(h),D(r),L((e,t)=>{H(c,$.catalog.server),G(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),H(u,t)},[()=>Ex($.catalog),()=>Tx($.catalog)]),z(`click`,g,()=>$.closeCatalog()),V(e,r)},$$slots:{default:!0}}),k()}Br([`click`]);var _z=B(`

      The display name can change. The slug is the stable client-facing identity.

      `),vz=B(` Human-readable and Unicode-friendly. You can change it later.`,1),yz=B(`Derived from the name. You may edit it before saving.`),bz=B(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),xz=B(` `,1),Sz=B(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),Cz=B(``),wz=B(`
      `),Tz=B(`
      Headers
      Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
      Advanced settings Description, access rules, and timeout
      `,1);function Ez(e,t){O(t,!0);{let t=e=>{V(e,_z())},n=A(()=>$.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);ME(e,{get open(){return $.formOpen},get title(){return R(n)},ariaLabel:`MCP server editor`,get error(){return $.error},get submitting(){return $.formSubmitting},onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var n=Tz(),r=F(n);PE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=vz(),r=F(n);ea(r),Ve(2),z(`input`,r,()=>$.syncSlugFromName()),la(r,()=>$.form.name,e=>$.form.name=e),V(e,n)},$$slots:{default:!0}});var i=I(r,2);PE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=xz(),r=F(n);ea(r);var i=I(r,2),a=e=>{V(e,yz())},o=e=>{V(e,bz())};U(i,e=>{$.formMode===`create`?e(a):e(o,-1)}),L(()=>r.disabled=$.formMode===`edit`),z(`input`,r,()=>$.markSlugEdited()),la(r,()=>$.form.slug,e=>$.form.slug=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=Sz(),r=F(n),i=P(r);i.value=i.__value=`http`;var a=I(i);a.value=a.__value=`sse`,D(r),Ve(2),Ui(r,()=>$.form.transport,e=>$.form.transport=e),V(e,n)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=Cz();ea(n),la(n,()=>$.form.url,e=>$.form.url=e),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=I(P(s),2);W(c,21,()=>$.form.headers,ii,(e,t,n)=>{var r=wz(),i=P(r);ea(i);var a=I(i,2);ea(a),OT(I(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeHeader(n),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),la(i,()=>R(t).name,e=>R(t).name=e),la(a,()=>R(t).value,e=>R(t).value=e),V(e,r)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l),Ve(2),D(s);var d=I(s,2),f=P(d);PA(P(f),{get enabled(){return $.form.enabled},label:`MCP server`,onclick:()=>$.form.enabled=!$.form.enabled}),D(f),D(d);var p=I(d,2),m=I(P(p),2),h=P(m),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=I(P(y),2);ea(b),D(y);var x=I(y,2),S=I(P(x),2);ut(S),K(S,`placeholder`,`/ -/team/alpha`),D(x);var C=I(x,2),w=I(P(C),2);ea(w),D(C),D(m),D(p),L(()=>p.open=$.advancedOpen),z(`click`,u,()=>$.addHeader()),zr(`toggle`,p,e=>$.advancedOpen=e.currentTarget.open),la(g,()=>$.form.description,e=>$.form.description=e),la(v,()=>$.form.allowed_tools,e=>$.form.allowed_tools=e),la(b,()=>$.form.disallowed_tools,e=>$.form.disallowed_tools=e),la(S,()=>$.form.user_paths,e=>$.form.user_paths=e),la(w,()=>$.form.tool_timeout_seconds,e=>$.form.tool_timeout_seconds=e),V(e,n)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`input`,`click`]);var Dz=B(`Config`),Oz=B(`
      `),kz=B(`
      `),Az=B(`
      NameTransportEndpointStatusToolsEnabledActions
      `);function jz(e,t){O(t,!0);function n(e){return Dx(e,e=>vs.formatTimestamp(e))}var r=Az(),i=P(r),a=I(P(i));W(a,21,()=>$.filtered,e=>wx(e),(e,t)=>{var r=kz(),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=e=>{V(e,Dz())};U(s,e=>{R(t).managed&&e(c)});var l=I(s,2),u=P(l,!0);D(l),D(i);var d=I(i),f=P(d),p=P(f,!0);D(f),D(d);var m=I(d),h=P(m,!0);D(m);var g=I(m),_=P(g),v=P(_,!0);D(_);var y=I(_,2),b=e=>{var n=Oz(),r=P(n,!0);D(n),L(()=>H(r,R(t).last_error)),V(e,n)},x=A(()=>Tx(R(t))===`degraded`&&R(t).last_error);U(y,e=>{R(x)&&e(b)}),D(g);var S=I(g),C=P(S),w=P(C,!0);D(C);var T=I(C,2),E=P(T,!0);D(T),D(S);var ee=I(S),te=P(ee),ne=P(te,!0);D(te),D(ee);var re=I(ee),ie=P(re),ae=P(ie),oe=e=>{{let n=A(()=>`Edit MCP server `+R(t).name);OT(e,{get label(){return R(n)},class:`table-icon-btn`,onclick:()=>$.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(ae,e=>{R(t).managed||e(oe)});var se=I(ae,2);{let e=A(()=>`Inspect catalog of MCP server `+R(t).name);OT(se,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.openCatalog(R(t)),children:(e,t)=>{J(e,{get icon(){return ro},class:`form-action-icon`})},$$slots:{default:!0}})}var ce=I(se,2);{let e=A(()=>($.reconnectingName===wx(R(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+R(t).name),n=A(()=>$.reconnectingName===wx(R(t)));OT(ce,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.reconnectServer(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var le=I(ce,2),ue=e=>{{let n=A(()=>($.deletingName===wx(R(t))?`Deleting MCP server `:`Delete MCP server `)+R(t).name),r=A(()=>$.deletingName===wx(R(t)));OT(e,{get label(){return R(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.deleteServer(R(t)),get disabled(){return R(r)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(le,e=>{R(t).managed||e(ue)}),D(ie),D(re),D(r),L((e,n,r,i,a,s,c,l)=>{H(o,R(t).name),H(u,e),H(p,R(t).transport||`http`),K(m,`title`,n),H(h,r),G(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),K(_,`title`,a),H(v,s),H(w,c),H(E,l),G(te,1,Ni([`auth-key-status-badge`,R(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),H(ne,R(t).enabled?`Enabled`:`Disabled`)},[()=>wx(R(t)),()=>Ox(R(t)),()=>Ox(R(t)),()=>Ex(R(t)),()=>n(R(t)),()=>Tx(R(t)),()=>_c(R(t).tool_count||0),()=>kx(R(t))]),V(e,r)}),D(a),D(i),D(r),V(e,r),k()}var Mz=B(`

      MCP Servers

      `),Nz=B(``),Pz=B(`
      MCP server management is unavailable.
      `),Fz=B(``),Iz=B(`
      `),Lz=B(`

      No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

      `),Rz=B(`

      No MCP servers match your filter.

      `),zz=B(`
      `);function Bz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`mcp-servers`&&$.fetchServers()});var n=zz(),r=P(n),i=P(r);iC(P(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{V(e,Mz())},$$slots:{title:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=Nz();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=$.formSubmitting),z(`click`,t,()=>$.openCreate()),V(e,t)};U(o,e=>{$.available&&!Y.authError&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,Pz())};U(c,e=>{!$.available&&!Y.authError&&e(l)});var u=I(c,2),d=e=>{var t=Fz(),n=P(t,!0);D(t),L(()=>H(n,$.error)),V(e,t)};U(u,e=>{$.error&&!Y.authError&&!$.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading MCP servers...`})};U(f,e=>{$.loading&&!Y.authError&&e(p)});var m=I(f,2),h=e=>{var t=Iz(),n=P(t);jw(P(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return $.filter},set value(e){$.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{($.servers.length>0||$.filter)&&$.available&&!Y.authError&&e(h)});var g=I(m,2);Ez(g,{});var _=I(g,2);gz(_,{});var v=I(_,2),y=e=>{jz(e,{})};U(v,e=>{$.filtered.length>0&&$.available&&!Y.authError&&e(y)});var b=I(v,2),x=e=>{V(e,Lz())};U(b,e=>{$.servers.length===0&&!$.filter&&!$.loading&&!Y.authError&&!$.error&&$.available&&e(x)});var S=I(b,2),C=e=>{V(e,Rz())};U(S,e=>{$.servers.length>0&&$.filtered.length===0&&$.filter&&!$.loading&&!Y.authError&&$.available&&e(C)}),D(n),V(e,n),k()}Br([`click`]);var Vz=`api_keys`,Hz=`session_sticky_keys`,Uz=`base_url`,Wz=`service_account_json`,Gz=`models`,Kz={[Vz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[Hz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[Uz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[Wz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[Gz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function qz(e){return Kz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Jz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Yz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Xz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function Zz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Qz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(Kz).map(e=>({name:e,advanced:e!==Vz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...qz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var $z=new Set([`name`,`type`,`enabled`]);function eB(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Jz(),i={...e};for(let e of Object.keys(r))!$z.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function tB(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function nB(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function rB(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function iB(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function aB(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function oB(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:rB(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function sB(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function cB(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=Qz(r);for(let t of[...o,...s]){let n=lB(e,t);n&&(i[t.name]=n)}return i}function lB(e,t){if(t.name===`api_keys`){let n=iB(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!sB(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function uB(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Qz(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=dB(e,t.name));for(let t of Object.keys(Kz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=dB(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function dB(e,t){switch(t){case Vz:return iB(e&&e.api_keys);case Gz:return hc(e&&e.models);case Hz:return!!(e&&e.session_sticky_keys);case Wz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var fB=new class{#e=j(N([]));get rows(){return R(this.#e)}set rows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get advancedOpen(){return R(this.#c)}set advancedOpen(e){M(this.#c,e,!0)}#l=j(N(Jz()));get form(){return R(this.#l)}set form(e){M(this.#l,e,!0)}#u=j(N({}));get fieldErrors(){return R(this.#u)}set fieldErrors(e){M(this.#u,e,!0)}#d=j(``);get focusField(){return R(this.#d)}set focusField(e){M(this.#d,e,!0)}#f=j(``);get deletingName(){return R(this.#f)}set deletingName(e){M(this.#f,e,!0)}#p=j(!1);get deleteSubmitting(){return R(this.#p)}set deleteSubmitting(e){M(this.#p,e,!0)}#m=j(N([]));get types(){return R(this.#m)}set types(e){M(this.#m,e,!0)}#h=j(!1);get typesLoaded(){return R(this.#h)}set typesLoaded(e){M(this.#h,e,!0)}#g=null;get filteredRows(){return Yz(this.rows,this.filter)}get schema(){return Zz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Qz(e,e&&e.default_base_url)}async fetchTypes(){let e=await kT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await kT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,Jz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,oB(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Jz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=eB(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=ys(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Wc.fetchModels(),Wc.fetchCategories()}async submitForm(){let e=this.schema,t=cB(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=uB(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await AT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}lc.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await AT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Js.error=t.error;return}if(t.status===`error`){Js.error=t.error;return}lc.success(`Provider "`+e+`" deleted.`),Js.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Js.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},pB=B(`Config`),mB=B(` `,1),hB=B(`
      `),gB=B(`
      NameTypeBase URLAuthModelsEnabledUpdatedActions
      `);function _B(e,t){O(t,!0);var n=gB(),r=P(n),i=I(P(r));W(i,21,()=>fB.filteredRows,e=>e.name,(e,t)=>{var n=hB(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=e=>{V(e,pB())};U(o,e=>{R(t).managed&&e(s)}),D(r);var c=I(r),l=P(c),u=P(l,!0);D(l),D(c);var d=I(c),f=P(d,!0);D(d);var p=I(d),m=P(p,!0);D(p);var h=I(p),g=P(h,!0);D(h);var _=I(h),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x,!0);D(x);var C=I(x),w=P(C),T=P(w),E=e=>{var n=mB(),r=F(n);{let e=A(()=>`Edit provider `+R(t).name);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fB.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>(fB.deletingName===R(t).name?`Deleting provider `:`Delete provider `)+R(t).name),n=A(()=>fB.deletingName===R(t).name);OT(i,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>fB.requestDelete(R(t).name),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)};U(T,e=>{R(t).managed||e(E)}),D(w),D(C),D(n),L((e,n,r)=>{H(a,R(t).name),H(u,R(t).type),K(d,`title`,R(t).base_url||``),H(f,R(t).base_url||`—`),H(m,e),H(g,n),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).enabled,"auth-key-status-inactive":!R(t).enabled}),H(b,R(t).enabled?`Enabled`:`Disabled`),H(S,r)},[()=>tB(R(t)),()=>nB(R(t)),()=>vs.formatTimestamp(R(t).updated_at)]),V(e,n)}),D(i),D(r),D(n),V(e,n),k()}var vB=B(``),yB=B(`
      `),bB=B(`
      `,1),xB=B(``),SB=B(``),CB=B(``),wB=B(``),TB=B(``),EB=B(` `),DB=B(` `),OB=B(`
      `);function kB(e,t){O(t,!0);let n=A(()=>`provider-credential-`+t.field.name),r=A(()=>fB.fieldErrors[t.field.name]||``),i=A(()=>R(r)?R(n)+`-error`:t.field.hint?R(n)+`-hint`:void 0),a=A(()=>{let e=String(fB.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){fB.clearFieldError(t.field.name)}var s=OB(),c=P(s),l=P(c),u=I(l),d=e=>{V(e,vB())};U(u,e=>{t.field.required&&e(d)}),D(c);var f=I(c,2),p=e=>{var t=bB(),a=F(t);W(a,21,()=>fB.form.api_keys,ii,(e,t,a)=>{var s=yB(),c=P(s);ea(c),K(c,`aria-label`,`API key `+(a+1)),OT(I(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>fB.removeApiKeyRow(a),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(s),L(()=>{K(c,`id`,a===0?R(n):R(n)+`-`+a),K(c,`aria-invalid`,R(r)?`true`:void 0),K(c,`aria-describedby`,a===0?R(i):void 0)}),z(`input`,c,o),la(c,()=>R(t).value,e=>R(t).value=e),V(e,s)}),D(a);var s=I(a,2),c=P(s);J(P(c),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(c),D(s),L(()=>K(c,`id`,fB.form.api_keys.length===0?R(n):void 0)),z(`click`,c,()=>fB.addApiKeyRow()),V(e,t)},m=e=>{var s=SB(),c=P(s);c.value=c.__value=``,W(I(c),16,()=>R(a),e=>e,(e,t)=>{var n=xB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(s),L(()=>{K(s,`id`,R(n)),K(s,`aria-invalid`,R(r)?`true`:void 0),K(s,`aria-describedby`,R(i))}),z(`change`,s,o),Ui(s,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,s)},h=e=>{var a=CB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`change`,a,o),ua(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)},g=e=>{var a=wB();ut(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)},_=e=>{var a=TB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)};U(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=I(f,2),y=e=>{var t=EB(),i=P(t,!0);D(t),L(()=>{K(t,`id`,R(n)+`-error`),H(i,R(r))}),V(e,t)},b=e=>{var r=DB(),i=P(r,!0);D(r),L(()=>{K(r,`id`,R(n)+`-hint`),H(i,t.field.hint)}),V(e,r)};U(v,e=>{R(r)?e(y):t.field.hint&&e(b,1)}),D(s),L(()=>{K(c,`for`,R(n)),H(l,`${t.field.label??``} `)}),V(e,s),k()}Br([`input`,`click`,`change`]);var AB=B(`

      The name is the stable identity used for routing and cannot change once created.

      `),jB=B(``),MB=B(` `),NB=B(`Determines which fields the gateway uses to build requests.`),PB=B(` `),FB=B(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),IB=B(`Immutable once created.`),LB=B(`

      Pick a type to configure its credentials — each provider type asks for different settings.

      `),RB=B(`
      Advanced settings
      `),zB=B(`
      `,1);function BB(e,t){O(t,!0);let n=A(()=>Xz(fB.types,fB.form.type)),r=A(()=>fB.formFields),i=A(()=>fB.fieldErrors.name||``),a=A(()=>fB.fieldErrors.type||``);function o(){fB.selectType(),fB.formMode===`create`&&(fB.form.name=aB(fB.rows,fB.form.type))}On(()=>{let e=fB.focusField;if(!e)return;fB.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{V(e,AB())},s=A(()=>fB.formMode===`edit`?`Edit Provider`:`Add Provider`);ME(e,{get open(){return fB.formOpen},get title(){return R(s)},ariaLabel:`Provider credential editor`,get error(){return fB.error},get submitting(){return fB.formSubmitting},novalidate:!0,onclose:()=>fB.closeForm(),onsubmit:()=>fB.submitForm(),headerHint:t,children:(e,t)=>{var s=zB(),c=F(s),l=I(P(c),2),u=P(l);u.value=u.__value=``,W(I(u),16,()=>R(n),e=>e,(e,t)=>{var n=jB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(l);var d=I(l,2),f=e=>{var t=MB(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)},p=e=>{V(e,NB())};U(d,e=>{R(a)?e(f):e(p,-1)}),D(c);var m=I(c,2),h=I(P(m),2);ea(h);var g=I(h,2),_=e=>{var t=PB(),n=P(t,!0);D(t),L(()=>H(n,R(i))),V(e,t)},v=e=>{V(e,FB())},y=e=>{V(e,IB())};U(g,e=>{R(i)?e(_):fB.formMode===`create`?e(v,1):e(y,-1)}),D(m);var b=I(m,2),x=e=>{V(e,LB())};U(b,e=>{fB.form.type||e(x)});var S=I(b,2);W(S,17,()=>R(r).primary,e=>e.name,(e,t)=>{kB(e,{get field(){return R(t)}})});var C=I(S,2),w=P(C);PA(P(w),{get enabled(){return fB.form.enabled},label:`provider`,onclick:()=>fB.form.enabled=!fB.form.enabled}),D(w),D(C);var T=I(C,2),E=e=>{var t=RB(),n=P(t),i=P(n),a=I(P(i),2),o=P(a,!0);D(a),D(i),D(n);var s=I(n,2);W(s,21,()=>R(r).advanced,e=>e.name,(e,t)=>{kB(e,{get field(){return R(t)}})}),D(s),D(t),L(e=>{t.open=fB.advancedOpen,H(o,e)},[()=>R(r).advanced.map(e=>e.label).join(`, `)]),zr(`toggle`,t,e=>fB.advancedOpen=e.currentTarget.open),V(e,t)};U(T,e=>{R(r).advanced.length>0&&e(E)}),L(()=>{l.disabled=fB.formMode===`edit`,K(l,`aria-invalid`,R(a)?`true`:void 0),K(l,`aria-describedby`,R(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=fB.formMode===`edit`,K(h,`aria-invalid`,R(i)?`true`:void 0),K(h,`aria-describedby`,R(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),z(`change`,l,o),Ui(l,()=>fB.form.type,e=>fB.form.type=e),z(`input`,h,()=>fB.clearFieldError(`name`)),la(h,()=>fB.form.name,e=>fB.form.name=e),V(e,s)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var VB=B(`

      Providers

      `),HB=B(``),UB=B(`
      Provider credential management is unavailable.
      `),WB=B(``),GB=B(`
      `),KB=B(`

      No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

      `),qB=B(`

      No providers match your filter.

      `),JB=B(`
      `);function YB(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`providers-config`&&fB.fetchPage()});var n=JB(),r=P(n),i=P(r);iC(P(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{V(e,VB())},help:e=>{Ve(),V(e,Yr(`Configure LLM provider credentials here instead of setting API keys as + that type.

      `);function zR(e,t){O(t,!0);var n=RR(),r=P(n),i=I(P(r),2);J(P(i),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(i),D(r);var a=I(r,2),o=e=>{var t=MR(),n=P(t);jw(P(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return jR.filter},set value(e){jR.filter=e}}),D(n),D(t),V(e,t)};U(a,e=>{jR.available&&e(o)});var s=I(a,2),c=e=>{var t=NR();NS(P(t),{size:16,label:`Loading guardrails`}),Ve(),D(t),V(e,t)};U(s,e=>{jR.loading&&jR.filtered.length===0&&e(c)});var l=I(s,2),u=e=>{var t=IR(),n=P(t),r=I(P(n));W(r,21,()=>jR.filtered,e=>e.name,(e,t)=>{var n=FR(),r=P(n),i=P(r,!0);D(r);var a=I(r),o=P(a),s=P(o,!0);D(o),D(a);var c=I(a),l=P(c,!0);D(c);var u=I(c),d=P(u),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var n=PR(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(p,e=>{R(t).description&&e(m)}),D(u);var h=I(u),g=P(h),_=P(g);{let e=A(()=>`Edit guardrail `+R(t).name);OT(_,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>jR.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=I(_,2);{let e=A(()=>(jR.deletingName===R(t).name?`Deleting guardrail `:`Delete guardrail `)+R(t).name),n=A(()=>jR.deletingName===R(t).name);OT(v,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>jR.deleteGuardrail(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(g),D(h),D(n),L(e=>{H(i,R(t).name),H(s,e),H(l,R(t).user_path||`—`),H(f,R(t).summary||R(t).description||`No summary yet.`)},[()=>jR.typeLabel(R(t).type)]),V(e,n)}),D(r),D(n),D(t),V(e,t)};U(l,e=>{jR.filtered.length>0&&e(u)});var d=I(l,2),f=e=>{V(e,LR())};U(d,e=>{jR.filtered.length===0&&!jR.loading&&jR.available&&!jR.error&&!Y.authError&&e(f)}),D(n),L(()=>i.disabled=jR.typesLoading||jR.formSubmitting||!jR.available),z(`click`,i,()=>jR.openCreate()),V(e,n),k()}Br([`click`]);var BR=B(`

      Workflows reference these names directly, so renames are + intentionally avoided after creation.

      `),VR=B(``),HR=B(``),UR=B(``),WR=B(``),GR=B(``),KR=B(``),qR=B(``),JR=B(``),YR=B(``),XR=B(`
      `),ZR=B(``),QR=B(` `),$R=B(`
      `),ez=B(`
      `);function tz(e,t){O(t,!0);let n=A(()=>jR.formMode===`edit`);{let t=e=>{V(e,BR())},r=A(()=>R(n)?`Edit Guardrail`:`Create Guardrail`);ME(e,{get open(){return jR.formOpen},get title(){return R(r)},ariaLabel:`Guardrail editor`,get error(){return jR.error},get submitting(){return jR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>jR.closeForm(),onsubmit:()=>jR.submitForm(),headerHint:t,children:(e,t)=>{var r=ez(),i=P(r);PE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=VR();ea(r),L(()=>{r.disabled=R(n),K(r,`data-modal-autofocus`,!R(n)||void 0)}),la(r,()=>jR.form.name,e=>jR.form.name=e),V(e,r)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=UR();W(r,21,()=>jR.types,e=>e.type,(e,t)=>{var n=HR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).type)&&(n.value=(n.__value=R(t).type)??``)}),V(e,n)}),D(r);var i;Hi(r),L(()=>{r.disabled=R(n),i!==(i=jR.form.type)&&(r.value=(r.__value=jR.form.type)??``,Vi(r,jR.form.type))}),z(`change`,r,e=>jR.changeType(e.currentTarget.value)),V(e,r)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=WR();ea(r),L(()=>K(r,`data-modal-autofocus`,R(n)?!0:void 0)),la(r,()=>jR.form.description,e=>jR.form.description=e),V(e,r)},$$slots:{default:!0}});var s=I(o,2),c=P(s);iC(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{V(e,GR())},$$slots:{title:!0}});var l=I(c,2);ea(l),D(s),W(I(s,2),17,()=>jR.typeFields(jR.form.type),e=>e.key,(e,t)=>{var n=Xr(),r=F(n),i=e=>{var n=XR(),r=P(n);{let e=e=>{var n=KR(),r=P(n,!0);D(n),L(()=>{K(n,`for`,`guardrail-field-`+R(t).key),H(r,R(t).label)}),V(e,n)},n=A(()=>`guardrail-field-help-`+R(t).key),i=A(()=>R(t).label+` help`),a=A(()=>R(t).help||``);iC(r,{get copyId(){return R(n)},get label(){return R(i)},get text(){return R(a)},title:e,$$slots:{title:!0}})}var i=I(r,2),a=e=>{var n=qR();W(n,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=HR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(n);var r;Hi(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Vi(n,e))},[()=>jR.fieldValue(R(t))]),z(`change`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},o=e=>{var n=JR();ut(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>jR.fieldValue(R(t))]),z(`input`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},s=e=>{var n=YR();ea(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`type`,R(t).input||`text`),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>jR.fieldValue(R(t))]),z(`input`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)};U(i,e=>{R(t).input===`select`?e(a):R(t).input===`textarea`?e(o,1):e(s,-1)}),D(n),V(e,n)},a=e=>{var n=$R(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).options||[],e=>R(t).key+`-`+e.value,(e,n)=>{var r=ZR(),i=P(r);ea(i);var a=I(i,2),o=P(a,!0);D(a),D(r),L(e=>{na(i,e),H(o,R(n).label)},[()=>jR.arrayFieldSelected(R(t),R(n).value)]),z(`change`,i,e=>jR.toggleArrayFieldValue(R(t),R(n).value,e.currentTarget.checked)),V(e,r)}),D(a);var o=I(a,2),s=e=>{var n=QR(),r=P(n,!0);D(n),L(()=>{K(n,`id`,`guardrail-field-help-`+R(t).key),H(r,R(t).help)}),V(e,n)};U(o,e=>{R(t).help&&e(s)}),D(n),L(()=>{K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),H(i,R(t).label)}),V(e,n)};U(r,e=>{R(t).input===`checkboxes`?e(a,-1):e(i)}),V(e,n)}),D(r),la(l,()=>jR.form.user_path,e=>jR.form.user_path=e),V(e,r)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var nz=B(`

      Guardrails

      `),rz=B(`
      Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage + definitions here.
      `),iz=B(`
      Guardrails feature is unavailable.
      `),az=B(`
      `),oz=B(`

      Reusable Policy Objects

      Guardrail Library

      Store guardrails in the database, keep them hot in memory, and attach + them to workflows by reference.

      Instances
      Types
      `);function sz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`guardrails`&&(ks.ensureLoaded(),jR.fetchPage())});var n=oz(),r=P(n),i=P(r);iC(P(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{V(e,nz())},$$slots:{title:!0}}),D(i),D(r);var a=I(r,2),o=I(P(a),2),s=P(o),c=I(P(s),2),l=P(c,!0);D(c),D(s);var u=I(s,2),d=I(P(u),2),f=P(d,!0);D(d),D(u),D(o),D(a);var p=I(a,2);Kc(p,{});var m=I(p,2),h=e=>{V(e,rz())},g=A(()=>!ks.guardrailsVisible());U(m,e=>{R(g)&&e(h)});var _=I(m,2),v=e=>{V(e,iz())};U(_,e=>{!Y.authError&&!jR.available&&e(v)});var y=I(_,2),b=e=>{var t=az(),n=P(t,!0);D(t),L(()=>H(n,jR.error)),V(e,t)};U(y,e=>{!Y.authError&&jR.error&&!jR.formOpen&&e(b)});var x=I(y,2);tz(x,{}),zR(I(x,2),{}),D(n),L((e,t)=>{H(l,e),H(f,t)},[()=>_c(jR.guardrails.length),()=>_c(jR.types.length)]),V(e,n),k()}var $=new class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get slugEdited(){return R(this.#c)}set slugEdited(e){M(this.#c,e,!0)}#l=j(!1);get advancedOpen(){return R(this.#l)}set advancedOpen(e){M(this.#l,e,!0)}#u=j(N(Sx()));get form(){return R(this.#u)}set form(e){M(this.#u,e,!0)}#d=j(``);get deletingName(){return R(this.#d)}set deletingName(e){M(this.#d,e,!0)}#f=j(``);get reconnectingName(){return R(this.#f)}set reconnectingName(e){M(this.#f,e,!0)}#p=j(!1);get catalogOpen(){return R(this.#p)}set catalogOpen(e){M(this.#p,e,!0)}#m=j(!1);get catalogLoading(){return R(this.#m)}set catalogLoading(e){M(this.#m,e,!0)}#h=j(``);get catalogError(){return R(this.#h)}set catalogError(e){M(this.#h,e,!0)}#g=j(N(Cx()));get catalog(){return R(this.#g)}set catalog(e){M(this.#g,e,!0)}#_=A(()=>Px(this.servers,this.filter));get filtered(){return R(this.#_)}set filtered(e){M(this.#_,e)}async fetchServers(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await kT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Fx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=Ax(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Ix(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}let r=e.result.data,i=Tx(r);i===`connected`?lc.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?lc.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):lc.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>wx(e)===wx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...Cx(),server:n,status:Tx(e)};try{let e=await ws(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:ys(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Lx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=Cx()}},cz=B(``),lz=B(`

      `),uz=B(`
      `),dz=B(`

      `),fz=B(`
    • `),pz=B(`

        `),mz=B(`

        No tools listed — the server may still be connecting or degraded.

        `),hz=B(` `,1),gz=B(``);function _z(e,t){O(t,!0);let n=A(()=>zx($.catalog));Hs(e,{get open(){return $.catalogOpen},variant:`editor`,onclose:()=>$.closeCatalog(),children:(e,t)=>{var r=gz(),i=P(r),a=P(i),o=I(P(a),2),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=P(l,!0);D(l),D(o),D(a),Rs(I(a,2),{label:`Close MCP server catalog`,onclick:()=>$.closeCatalog()}),D(i);var d=I(i,2),f=e=>{ET(e,{label:`Loading catalog...`})},p=e=>{var t=cz(),n=P(t,!0);D(t),L(()=>H(n,$.catalogError)),V(e,t)},m=e=>{var t=hz(),r=F(t),i=e=>{var t=lz(),n=P(t,!0);D(t),L(()=>H(n,$.catalog.instructions)),V(e,t)};U(r,e=>{$.catalog.instructions&&e(i)});var a=I(r,2);W(a,17,()=>R(n),e=>e.key,(e,t)=>{var n=pz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).items,e=>e.key,(e,t)=>{var n=fz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{var n=uz(),r=P(n,!0);D(n),L(()=>{K(n,`title`,`Exposed on the aggregated /mcp endpoint as `+R(t).aggregated),H(r,R(t).aggregated)}),V(e,n)};U(a,e=>{R(t).aggregated&&e(o)});var s=I(a,2),c=e=>{var n=dz(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(s,e=>{R(t).description&&e(c)}),D(n),L(()=>{K(r,`title`,R(t).aggregated||R(t).name),H(i,R(t).name)}),V(e,n)}),D(a),D(n),L(()=>H(i,R(t).title)),V(e,n)});var o=I(a,2),s=e=>{V(e,mz())},c=A(()=>Bx($.catalog));U(o,e=>{R(c)&&e(s)}),V(e,t)};U(d,e=>{$.catalogLoading?e(f):$.catalogError?e(p,1):e(m,-1)});var h=I(d,2),g=P(h);D(h),D(r),L((e,t)=>{H(c,$.catalog.server),G(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),H(u,t)},[()=>Ex($.catalog),()=>Tx($.catalog)]),z(`click`,g,()=>$.closeCatalog()),V(e,r)},$$slots:{default:!0}}),k()}Br([`click`]);var vz=B(`

        The display name can change. The slug is the stable client-facing identity.

        `),yz=B(` Human-readable and Unicode-friendly. You can change it later.`,1),bz=B(`Derived from the name. You may edit it before saving.`),xz=B(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),Sz=B(` `,1),Cz=B(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),wz=B(``),Tz=B(`
        `),Ez=B(`
        Headers
        Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
        Advanced settings Description, access rules, and timeout
        `,1);function Dz(e,t){O(t,!0);{let t=e=>{V(e,vz())},n=A(()=>$.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);ME(e,{get open(){return $.formOpen},get title(){return R(n)},ariaLabel:`MCP server editor`,get error(){return $.error},get submitting(){return $.formSubmitting},onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var n=Ez(),r=F(n);PE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=yz(),r=F(n);ea(r),Ve(2),z(`input`,r,()=>$.syncSlugFromName()),la(r,()=>$.form.name,e=>$.form.name=e),V(e,n)},$$slots:{default:!0}});var i=I(r,2);PE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=Sz(),r=F(n);ea(r);var i=I(r,2),a=e=>{V(e,bz())},o=e=>{V(e,xz())};U(i,e=>{$.formMode===`create`?e(a):e(o,-1)}),L(()=>r.disabled=$.formMode===`edit`),z(`input`,r,()=>$.markSlugEdited()),la(r,()=>$.form.slug,e=>$.form.slug=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=Cz(),r=F(n),i=P(r);i.value=i.__value=`http`;var a=I(i);a.value=a.__value=`sse`,D(r),Ve(2),Ui(r,()=>$.form.transport,e=>$.form.transport=e),V(e,n)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=wz();ea(n),la(n,()=>$.form.url,e=>$.form.url=e),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=I(P(s),2);W(c,21,()=>$.form.headers,ii,(e,t,n)=>{var r=Tz(),i=P(r);ea(i);var a=I(i,2);ea(a),OT(I(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeHeader(n),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),la(i,()=>R(t).name,e=>R(t).name=e),la(a,()=>R(t).value,e=>R(t).value=e),V(e,r)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l),Ve(2),D(s);var d=I(s,2),f=P(d);PA(P(f),{get enabled(){return $.form.enabled},label:`MCP server`,onclick:()=>$.form.enabled=!$.form.enabled}),D(f),D(d);var p=I(d,2),m=I(P(p),2),h=P(m),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=I(P(y),2);ea(b),D(y);var x=I(y,2),S=I(P(x),2);ut(S),K(S,`placeholder`,`/ +/team/alpha`),D(x);var C=I(x,2),w=I(P(C),2);ea(w),D(C),D(m),D(p),L(()=>p.open=$.advancedOpen),z(`click`,u,()=>$.addHeader()),zr(`toggle`,p,e=>$.advancedOpen=e.currentTarget.open),la(g,()=>$.form.description,e=>$.form.description=e),la(v,()=>$.form.allowed_tools,e=>$.form.allowed_tools=e),la(b,()=>$.form.disallowed_tools,e=>$.form.disallowed_tools=e),la(S,()=>$.form.user_paths,e=>$.form.user_paths=e),la(w,()=>$.form.tool_timeout_seconds,e=>$.form.tool_timeout_seconds=e),V(e,n)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`input`,`click`]);var Oz=B(`Config`),kz=B(`
        `),Az=B(`
        `),jz=B(`
        NameTransportEndpointStatusToolsEnabledActions
        `);function Mz(e,t){O(t,!0);function n(e){return Dx(e,e=>vs.formatTimestamp(e))}var r=jz(),i=P(r),a=I(P(i));W(a,21,()=>$.filtered,e=>wx(e),(e,t)=>{var r=Az(),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=e=>{V(e,Oz())};U(s,e=>{R(t).managed&&e(c)});var l=I(s,2),u=P(l,!0);D(l),D(i);var d=I(i),f=P(d),p=P(f,!0);D(f),D(d);var m=I(d),h=P(m,!0);D(m);var g=I(m),_=P(g),v=P(_,!0);D(_);var y=I(_,2),b=e=>{var n=kz(),r=P(n,!0);D(n),L(()=>H(r,R(t).last_error)),V(e,n)},x=A(()=>Tx(R(t))===`degraded`&&R(t).last_error);U(y,e=>{R(x)&&e(b)}),D(g);var S=I(g),C=P(S),w=P(C,!0);D(C);var T=I(C,2),E=P(T,!0);D(T),D(S);var ee=I(S),te=P(ee),ne=P(te,!0);D(te),D(ee);var re=I(ee),ie=P(re),ae=P(ie),oe=e=>{{let n=A(()=>`Edit MCP server `+R(t).name);OT(e,{get label(){return R(n)},class:`table-icon-btn`,onclick:()=>$.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(ae,e=>{R(t).managed||e(oe)});var se=I(ae,2);{let e=A(()=>`Inspect catalog of MCP server `+R(t).name);OT(se,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.openCatalog(R(t)),children:(e,t)=>{J(e,{get icon(){return ro},class:`form-action-icon`})},$$slots:{default:!0}})}var ce=I(se,2);{let e=A(()=>($.reconnectingName===wx(R(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+R(t).name),n=A(()=>$.reconnectingName===wx(R(t)));OT(ce,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.reconnectServer(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var le=I(ce,2),ue=e=>{{let n=A(()=>($.deletingName===wx(R(t))?`Deleting MCP server `:`Delete MCP server `)+R(t).name),r=A(()=>$.deletingName===wx(R(t)));OT(e,{get label(){return R(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.deleteServer(R(t)),get disabled(){return R(r)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(le,e=>{R(t).managed||e(ue)}),D(ie),D(re),D(r),L((e,n,r,i,a,s,c,l)=>{H(o,R(t).name),H(u,e),H(p,R(t).transport||`http`),K(m,`title`,n),H(h,r),G(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),K(_,`title`,a),H(v,s),H(w,c),H(E,l),G(te,1,Ni([`auth-key-status-badge`,R(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),H(ne,R(t).enabled?`Enabled`:`Disabled`)},[()=>wx(R(t)),()=>Ox(R(t)),()=>Ox(R(t)),()=>Ex(R(t)),()=>n(R(t)),()=>Tx(R(t)),()=>_c(R(t).tool_count||0),()=>kx(R(t))]),V(e,r)}),D(a),D(i),D(r),V(e,r),k()}var Nz=B(`

        MCP Servers

        `),Pz=B(``),Fz=B(`
        MCP server management is unavailable.
        `),Iz=B(``),Lz=B(`
        `),Rz=B(`

        No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

        `),zz=B(`

        No MCP servers match your filter.

        `),Bz=B(`
        `);function Vz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`mcp-servers`&&$.fetchServers()});var n=Bz(),r=P(n),i=P(r);iC(P(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{V(e,Nz())},$$slots:{title:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=Pz();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=$.formSubmitting),z(`click`,t,()=>$.openCreate()),V(e,t)};U(o,e=>{$.available&&!Y.authError&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,Fz())};U(c,e=>{!$.available&&!Y.authError&&e(l)});var u=I(c,2),d=e=>{var t=Iz(),n=P(t,!0);D(t),L(()=>H(n,$.error)),V(e,t)};U(u,e=>{$.error&&!Y.authError&&!$.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading MCP servers...`})};U(f,e=>{$.loading&&!Y.authError&&e(p)});var m=I(f,2),h=e=>{var t=Lz(),n=P(t);jw(P(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return $.filter},set value(e){$.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{($.servers.length>0||$.filter)&&$.available&&!Y.authError&&e(h)});var g=I(m,2);Dz(g,{});var _=I(g,2);_z(_,{});var v=I(_,2),y=e=>{Mz(e,{})};U(v,e=>{$.filtered.length>0&&$.available&&!Y.authError&&e(y)});var b=I(v,2),x=e=>{V(e,Rz())};U(b,e=>{$.servers.length===0&&!$.filter&&!$.loading&&!Y.authError&&!$.error&&$.available&&e(x)});var S=I(b,2),C=e=>{V(e,zz())};U(S,e=>{$.servers.length>0&&$.filtered.length===0&&$.filter&&!$.loading&&!Y.authError&&$.available&&e(C)}),D(n),V(e,n),k()}Br([`click`]);var Hz=`api_keys`,Uz=`session_sticky_keys`,Wz=`base_url`,Gz=`service_account_json`,Kz=`models`,qz={[Hz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[Uz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[Wz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[Gz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[Kz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function Jz(e){return qz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Yz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Xz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Zz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function Qz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function $z(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(qz).map(e=>({name:e,advanced:e!==Hz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...Jz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var eB=new Set([`name`,`type`,`enabled`]);function tB(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Yz(),i={...e};for(let e of Object.keys(r))!eB.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function nB(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function rB(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function iB(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function aB(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function oB(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function sB(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:iB(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function cB(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function lB(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=$z(r);for(let t of[...o,...s]){let n=uB(e,t);n&&(i[t.name]=n)}return i}function uB(e,t){if(t.name===`api_keys`){let n=aB(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!cB(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function dB(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=$z(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=fB(e,t.name));for(let t of Object.keys(qz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=fB(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function fB(e,t){switch(t){case Hz:return aB(e&&e.api_keys);case Kz:return hc(e&&e.models);case Uz:return!!(e&&e.session_sticky_keys);case Gz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var pB=new class{#e=j(N([]));get rows(){return R(this.#e)}set rows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get advancedOpen(){return R(this.#c)}set advancedOpen(e){M(this.#c,e,!0)}#l=j(N(Yz()));get form(){return R(this.#l)}set form(e){M(this.#l,e,!0)}#u=j(N({}));get fieldErrors(){return R(this.#u)}set fieldErrors(e){M(this.#u,e,!0)}#d=j(``);get focusField(){return R(this.#d)}set focusField(e){M(this.#d,e,!0)}#f=j(``);get deletingName(){return R(this.#f)}set deletingName(e){M(this.#f,e,!0)}#p=j(!1);get deleteSubmitting(){return R(this.#p)}set deleteSubmitting(e){M(this.#p,e,!0)}#m=j(N([]));get types(){return R(this.#m)}set types(e){M(this.#m,e,!0)}#h=j(!1);get typesLoaded(){return R(this.#h)}set typesLoaded(e){M(this.#h,e,!0)}#g=null;get filteredRows(){return Xz(this.rows,this.filter)}get schema(){return Qz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return $z(e,e&&e.default_base_url)}async fetchTypes(){let e=await kT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await kT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,Yz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,sB(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Yz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=tB(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=ys(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Wc.fetchModels(),Wc.fetchCategories()}async submitForm(){let e=this.schema,t=lB(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=dB(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await AT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}lc.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await AT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Js.error=t.error;return}if(t.status===`error`){Js.error=t.error;return}lc.success(`Provider "`+e+`" deleted.`),Js.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Js.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},mB=B(`Config`),hB=B(` `,1),gB=B(`
        `),_B=B(`
        NameTypeBase URLAuthModelsEnabledUpdatedActions
        `);function vB(e,t){O(t,!0);var n=_B(),r=P(n),i=I(P(r));W(i,21,()=>pB.filteredRows,e=>e.name,(e,t)=>{var n=gB(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=e=>{V(e,mB())};U(o,e=>{R(t).managed&&e(s)}),D(r);var c=I(r),l=P(c),u=P(l,!0);D(l),D(c);var d=I(c),f=P(d,!0);D(d);var p=I(d),m=P(p,!0);D(p);var h=I(p),g=P(h,!0);D(h);var _=I(h),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x,!0);D(x);var C=I(x),w=P(C),T=P(w),E=e=>{var n=hB(),r=F(n);{let e=A(()=>`Edit provider `+R(t).name);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pB.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>(pB.deletingName===R(t).name?`Deleting provider `:`Delete provider `)+R(t).name),n=A(()=>pB.deletingName===R(t).name);OT(i,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>pB.requestDelete(R(t).name),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)};U(T,e=>{R(t).managed||e(E)}),D(w),D(C),D(n),L((e,n,r)=>{H(a,R(t).name),H(u,R(t).type),K(d,`title`,R(t).base_url||``),H(f,R(t).base_url||`—`),H(m,e),H(g,n),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).enabled,"auth-key-status-inactive":!R(t).enabled}),H(b,R(t).enabled?`Enabled`:`Disabled`),H(S,r)},[()=>nB(R(t)),()=>rB(R(t)),()=>vs.formatTimestamp(R(t).updated_at)]),V(e,n)}),D(i),D(r),D(n),V(e,n),k()}var yB=B(``),bB=B(`
        `),xB=B(`
        `,1),SB=B(``),CB=B(``),wB=B(``),TB=B(``),EB=B(``),DB=B(` `),OB=B(` `),kB=B(`
        `);function AB(e,t){O(t,!0);let n=A(()=>`provider-credential-`+t.field.name),r=A(()=>pB.fieldErrors[t.field.name]||``),i=A(()=>R(r)?R(n)+`-error`:t.field.hint?R(n)+`-hint`:void 0),a=A(()=>{let e=String(pB.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){pB.clearFieldError(t.field.name)}var s=kB(),c=P(s),l=P(c),u=I(l),d=e=>{V(e,yB())};U(u,e=>{t.field.required&&e(d)}),D(c);var f=I(c,2),p=e=>{var t=xB(),a=F(t);W(a,21,()=>pB.form.api_keys,ii,(e,t,a)=>{var s=bB(),c=P(s);ea(c),K(c,`aria-label`,`API key `+(a+1)),OT(I(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>pB.removeApiKeyRow(a),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(s),L(()=>{K(c,`id`,a===0?R(n):R(n)+`-`+a),K(c,`aria-invalid`,R(r)?`true`:void 0),K(c,`aria-describedby`,a===0?R(i):void 0)}),z(`input`,c,o),la(c,()=>R(t).value,e=>R(t).value=e),V(e,s)}),D(a);var s=I(a,2),c=P(s);J(P(c),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(c),D(s),L(()=>K(c,`id`,pB.form.api_keys.length===0?R(n):void 0)),z(`click`,c,()=>pB.addApiKeyRow()),V(e,t)},m=e=>{var s=CB(),c=P(s);c.value=c.__value=``,W(I(c),16,()=>R(a),e=>e,(e,t)=>{var n=SB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(s),L(()=>{K(s,`id`,R(n)),K(s,`aria-invalid`,R(r)?`true`:void 0),K(s,`aria-describedby`,R(i))}),z(`change`,s,o),Ui(s,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,s)},h=e=>{var a=wB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`change`,a,o),ua(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)},g=e=>{var a=TB();ut(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)},_=e=>{var a=EB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)};U(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=I(f,2),y=e=>{var t=DB(),i=P(t,!0);D(t),L(()=>{K(t,`id`,R(n)+`-error`),H(i,R(r))}),V(e,t)},b=e=>{var r=OB(),i=P(r,!0);D(r),L(()=>{K(r,`id`,R(n)+`-hint`),H(i,t.field.hint)}),V(e,r)};U(v,e=>{R(r)?e(y):t.field.hint&&e(b,1)}),D(s),L(()=>{K(c,`for`,R(n)),H(l,`${t.field.label??``} `)}),V(e,s),k()}Br([`input`,`click`,`change`]);var jB=B(`

        The name is the stable identity used for routing and cannot change once created.

        `),MB=B(``),NB=B(` `),PB=B(`Determines which fields the gateway uses to build requests.`),FB=B(` `),IB=B(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),LB=B(`Immutable once created.`),RB=B(`

        Pick a type to configure its credentials — each provider type asks for different settings.

        `),zB=B(`
        Advanced settings
        `),BB=B(`
        `,1);function VB(e,t){O(t,!0);let n=A(()=>Zz(pB.types,pB.form.type)),r=A(()=>pB.formFields),i=A(()=>pB.fieldErrors.name||``),a=A(()=>pB.fieldErrors.type||``);function o(){pB.selectType(),pB.formMode===`create`&&(pB.form.name=oB(pB.rows,pB.form.type))}On(()=>{let e=pB.focusField;if(!e)return;pB.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{V(e,jB())},s=A(()=>pB.formMode===`edit`?`Edit Provider`:`Add Provider`);ME(e,{get open(){return pB.formOpen},get title(){return R(s)},ariaLabel:`Provider credential editor`,get error(){return pB.error},get submitting(){return pB.formSubmitting},novalidate:!0,onclose:()=>pB.closeForm(),onsubmit:()=>pB.submitForm(),headerHint:t,children:(e,t)=>{var s=BB(),c=F(s),l=I(P(c),2),u=P(l);u.value=u.__value=``,W(I(u),16,()=>R(n),e=>e,(e,t)=>{var n=MB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(l);var d=I(l,2),f=e=>{var t=NB(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)},p=e=>{V(e,PB())};U(d,e=>{R(a)?e(f):e(p,-1)}),D(c);var m=I(c,2),h=I(P(m),2);ea(h);var g=I(h,2),_=e=>{var t=FB(),n=P(t,!0);D(t),L(()=>H(n,R(i))),V(e,t)},v=e=>{V(e,IB())},y=e=>{V(e,LB())};U(g,e=>{R(i)?e(_):pB.formMode===`create`?e(v,1):e(y,-1)}),D(m);var b=I(m,2),x=e=>{V(e,RB())};U(b,e=>{pB.form.type||e(x)});var S=I(b,2);W(S,17,()=>R(r).primary,e=>e.name,(e,t)=>{AB(e,{get field(){return R(t)}})});var C=I(S,2),w=P(C);PA(P(w),{get enabled(){return pB.form.enabled},label:`provider`,onclick:()=>pB.form.enabled=!pB.form.enabled}),D(w),D(C);var T=I(C,2),E=e=>{var t=zB(),n=P(t),i=P(n),a=I(P(i),2),o=P(a,!0);D(a),D(i),D(n);var s=I(n,2);W(s,21,()=>R(r).advanced,e=>e.name,(e,t)=>{AB(e,{get field(){return R(t)}})}),D(s),D(t),L(e=>{t.open=pB.advancedOpen,H(o,e)},[()=>R(r).advanced.map(e=>e.label).join(`, `)]),zr(`toggle`,t,e=>pB.advancedOpen=e.currentTarget.open),V(e,t)};U(T,e=>{R(r).advanced.length>0&&e(E)}),L(()=>{l.disabled=pB.formMode===`edit`,K(l,`aria-invalid`,R(a)?`true`:void 0),K(l,`aria-describedby`,R(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=pB.formMode===`edit`,K(h,`aria-invalid`,R(i)?`true`:void 0),K(h,`aria-describedby`,R(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),z(`change`,l,o),Ui(l,()=>pB.form.type,e=>pB.form.type=e),z(`input`,h,()=>pB.clearFieldError(`name`)),la(h,()=>pB.form.name,e=>pB.form.name=e),V(e,s)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var HB=B(`

        Providers

        `),UB=B(``),WB=B(`
        Provider credential management is unavailable.
        `),GB=B(``),KB=B(`
        `),qB=B(`

        No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

        `),JB=B(`

        No providers match your filter.

        `),YB=B(`
        `);function XB(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`providers-config`&&pB.fetchPage()});var n=YB(),r=P(n),i=P(r);iC(P(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{V(e,HB())},help:e=>{Ve(),V(e,Yr(`Configure LLM provider credentials here instead of setting API keys as environment variables. Providers declared in config.yaml or env vars are read-only (Config badge) and cannot be edited or deleted from the - dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=HB();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=fB.formSubmitting),z(`click`,t,()=>fB.openCreate()),V(e,t)};U(o,e=>{fB.available&&!Y.needsAuth&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,UB())};U(c,e=>{!fB.available&&!Y.needsAuth&&e(l)});var u=I(c,2),d=e=>{var t=WB(),n=P(t,!0);D(t),L(()=>H(n,fB.error)),V(e,t)};U(u,e=>{fB.error&&!Y.needsAuth&&!fB.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading providers...`})};U(f,e=>{fB.loading&&!Y.needsAuth&&e(p)});var m=I(f,2),h=e=>{var t=GB(),n=P(t);jw(P(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return fB.filter},set value(e){fB.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{(fB.rows.length>0||fB.filter)&&fB.available&&!Y.needsAuth&&e(h)});var g=I(m,2);BB(g,{});var _=I(g,2),v=e=>{_B(e,{})};U(_,e=>{fB.filteredRows.length>0&&fB.available&&!Y.needsAuth&&e(v)});var y=I(_,2),b=e=>{V(e,KB())};U(y,e=>{fB.rows.length===0&&!fB.filter&&!fB.loading&&!Y.needsAuth&&!fB.error&&fB.available&&e(b)});var x=I(y,2),S=e=>{V(e,qB())};U(x,e=>{fB.rows.length>0&&fB.filteredRows.length===0&&fB.filter&&!fB.loading&&!Y.needsAuth&&fB.available&&e(S)}),D(n),V(e,n),k()}Br([`click`]);function XB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function ZB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function QB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function $B(e){if(QB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function eV(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=QB(t.user_path);if(r)return{error:r};let i=$B(t.user_path),a=ZB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function tV(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function nV(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function rV(e,t=Date.now()){return!e||e.active===!1||nV(e)?!1:!tV(e,t)}function iV(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function aV(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!rV(e,i)?!1:!a||iV(e).includes(a))}function oV(e,t){return nV(e)?2:+!rV(e,t)}function sV(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function cV(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function lV(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=oV(e,t),i=oV(n,t);if(r!==i)return r-i;let[a,o]=r===2?[cV(e),cV(n)]:[sV(e),sV(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function uV(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!rV(n,t),0)}function dV(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var fV=new class{#e=j(N([]));get keys(){return R(this.#e)}set keys(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get showInactive(){return R(this.#a)}set showInactive(e){M(this.#a,e,!0)}#o=A(()=>lV(aV(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return R(this.#o)}set visibleKeys(e){M(this.#o,e)}#s=A(()=>uV(this.keys));get inactiveCount(){return R(this.#s)}set inactiveCount(e){M(this.#s,e)}#c=j(!1);get formOpen(){return R(this.#c)}set formOpen(e){M(this.#c,e,!0)}#l=j(!1);get formSubmitting(){return R(this.#l)}set formSubmitting(e){M(this.#l,e,!0)}#u=j(``);get issuedValue(){return R(this.#u)}set issuedValue(e){M(this.#u,e,!0)}#d=j(``);get deactivatingID(){return R(this.#d)}set deactivatingID(e){M(this.#d,e,!0)}#f=j(``);get dashboardAccessID(){return R(this.#f)}set dashboardAccessID(e){M(this.#f,e,!0)}#p=j(N(XB()));get form(){return R(this.#p)}set form(e){M(this.#p,e,!0)}#m=j(N(dV()));get labelsEditor(){return R(this.#m)}set labelsEditor(e){M(this.#m,e,!0)}copyState=MM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=XB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=XB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=XB()}async submitForm(){let e=eV(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=XB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=dV())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:ZB(e.value)};try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}lc.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,lc.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),lc.error(n.error);return}lc.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,lc.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),lc.error(t.error);return}lc.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},pV=B(``),mV=B(`

        Store this key securely — it won’t be shown again.

        `),hV=B(``),gV=B(``),_V=B(``),vV=B(``),yV=B(`
        `);function bV(e,t){O(t,!0);{let t=A(()=>fV.issuedValue?``:fV.error),n=A(()=>fV.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=A(()=>fV.issuedValue?Ba:po);ME(e,{get open(){return fV.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return R(t)},get submitting(){return fV.formSubmitting},get submitLabel(){return R(n)},submittingLabel:`Creating...`,get submitIcon(){return R(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>fV.closeForm(),onsubmit:()=>fV.issuedValue?fV.dismissIssuedKey():fV.submitForm(),children:(e,t)=>{var n=Xr(),r=F(n),i=e=>{var t=mV(),n=I(P(t),2),r=P(n),i=P(r,!0);D(r),jL(I(r,2),{get state(){return fV.copyState},onclick:()=>fV.copyIssuedValue()}),D(n);var a=I(n,2),o=e=>{V(e,pV())};U(a,e=>{fV.copyState.error&&e(o)}),D(t),L(()=>H(i,fV.issuedValue)),V(e,t)},a=e=>{var t=yV(),n=P(t),r=P(n),i=I(P(r),2);ea(i),D(r);var a=I(r,2),o=I(P(a),2);ea(o),D(a),D(n);var s=I(n,2),c=P(s);iC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{V(e,hV())},help:e=>{Ve(),V(e,Yr(`When set, this key overrides the configured user path request - header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=I(c,2);ea(l),D(s);var u=I(s,2),d=P(u);iC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{V(e,gV())},help:e=>{Ve(),V(e,Yr(`Every request authenticated with this key gets these labels, in + dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=UB();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=pB.formSubmitting),z(`click`,t,()=>pB.openCreate()),V(e,t)};U(o,e=>{pB.available&&!Y.needsAuth&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,WB())};U(c,e=>{!pB.available&&!Y.needsAuth&&e(l)});var u=I(c,2),d=e=>{var t=GB(),n=P(t,!0);D(t),L(()=>H(n,pB.error)),V(e,t)};U(u,e=>{pB.error&&!Y.needsAuth&&!pB.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading providers...`})};U(f,e=>{pB.loading&&!Y.needsAuth&&e(p)});var m=I(f,2),h=e=>{var t=KB(),n=P(t);jw(P(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return pB.filter},set value(e){pB.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{(pB.rows.length>0||pB.filter)&&pB.available&&!Y.needsAuth&&e(h)});var g=I(m,2);VB(g,{});var _=I(g,2),v=e=>{vB(e,{})};U(_,e=>{pB.filteredRows.length>0&&pB.available&&!Y.needsAuth&&e(v)});var y=I(_,2),b=e=>{V(e,qB())};U(y,e=>{pB.rows.length===0&&!pB.filter&&!pB.loading&&!Y.needsAuth&&!pB.error&&pB.available&&e(b)});var x=I(y,2),S=e=>{V(e,JB())};U(x,e=>{pB.rows.length>0&&pB.filteredRows.length===0&&pB.filter&&!pB.loading&&!Y.needsAuth&&pB.available&&e(S)}),D(n),V(e,n),k()}Br([`click`]);function ZB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function QB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function $B(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function eV(e){if($B(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function tV(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=$B(t.user_path);if(r)return{error:r};let i=eV(t.user_path),a=QB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function nV(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function rV(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function iV(e,t=Date.now()){return!e||e.active===!1||rV(e)?!1:!nV(e,t)}function aV(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function oV(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!iV(e,i)?!1:!a||aV(e).includes(a))}function sV(e,t){return rV(e)?2:+!iV(e,t)}function cV(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function lV(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function uV(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=sV(e,t),i=sV(n,t);if(r!==i)return r-i;let[a,o]=r===2?[lV(e),lV(n)]:[cV(e),cV(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function dV(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!iV(n,t),0)}function fV(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var pV=new class{#e=j(N([]));get keys(){return R(this.#e)}set keys(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get showInactive(){return R(this.#a)}set showInactive(e){M(this.#a,e,!0)}#o=A(()=>uV(oV(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return R(this.#o)}set visibleKeys(e){M(this.#o,e)}#s=A(()=>dV(this.keys));get inactiveCount(){return R(this.#s)}set inactiveCount(e){M(this.#s,e)}#c=j(!1);get formOpen(){return R(this.#c)}set formOpen(e){M(this.#c,e,!0)}#l=j(!1);get formSubmitting(){return R(this.#l)}set formSubmitting(e){M(this.#l,e,!0)}#u=j(``);get issuedValue(){return R(this.#u)}set issuedValue(e){M(this.#u,e,!0)}#d=j(``);get deactivatingID(){return R(this.#d)}set deactivatingID(e){M(this.#d,e,!0)}#f=j(``);get dashboardAccessID(){return R(this.#f)}set dashboardAccessID(e){M(this.#f,e,!0)}#p=j(N(ZB()));get form(){return R(this.#p)}set form(e){M(this.#p,e,!0)}#m=j(N(fV()));get labelsEditor(){return R(this.#m)}set labelsEditor(e){M(this.#m,e,!0)}copyState=MM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=ZB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=ZB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=ZB()}async submitForm(){let e=tV(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=ZB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=fV())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:QB(e.value)};try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}lc.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,lc.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),lc.error(n.error);return}lc.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,lc.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),lc.error(t.error);return}lc.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},mV=B(``),hV=B(`

        Store this key securely — it won’t be shown again.

        `),gV=B(``),_V=B(``),vV=B(``),yV=B(``),bV=B(`
        `);function xV(e,t){O(t,!0);{let t=A(()=>pV.issuedValue?``:pV.error),n=A(()=>pV.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=A(()=>pV.issuedValue?Ba:po);ME(e,{get open(){return pV.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return R(t)},get submitting(){return pV.formSubmitting},get submitLabel(){return R(n)},submittingLabel:`Creating...`,get submitIcon(){return R(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>pV.closeForm(),onsubmit:()=>pV.issuedValue?pV.dismissIssuedKey():pV.submitForm(),children:(e,t)=>{var n=Xr(),r=F(n),i=e=>{var t=hV(),n=I(P(t),2),r=P(n),i=P(r,!0);D(r),ML(I(r,2),{get state(){return pV.copyState},onclick:()=>pV.copyIssuedValue()}),D(n);var a=I(n,2),o=e=>{V(e,mV())};U(a,e=>{pV.copyState.error&&e(o)}),D(t),L(()=>H(i,pV.issuedValue)),V(e,t)},a=e=>{var t=bV(),n=P(t),r=P(n),i=I(P(r),2);ea(i),D(r);var a=I(r,2),o=I(P(a),2);ea(o),D(a),D(n);var s=I(n,2),c=P(s);iC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{V(e,gV())},help:e=>{Ve(),V(e,Yr(`When set, this key overrides the configured user path request + header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=I(c,2);ea(l),D(s);var u=I(s,2),d=P(u);iC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{V(e,_V())},help:e=>{Ve(),V(e,Yr(`Every request authenticated with this key gets these labels, in addition to any labels from tagging headers. Labels show up in - usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=I(d,2);ea(f),D(u);var p=I(u,2),m=P(p);iC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{V(e,_V())},help:e=>{Ve(),V(e,Yr(`When off, this key is denied the dashboard and every /admin API + usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=I(d,2);ea(f),D(u);var p=I(u,2),m=P(p);iC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{V(e,vV())},help:e=>{Ve(),V(e,Yr(`When off, this key is denied the dashboard and every /admin API endpoint. Model endpoints and GET /v1/usage stay available to - the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=I(m,2),g=P(h);ea(g),Ve(2),D(h),D(p),PE(I(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=vV();ut(n),la(n,()=>fV.form.description,e=>fV.form.description=e),V(e,n)},$$slots:{default:!0}}),D(t),la(i,()=>fV.form.name,e=>fV.form.name=e),la(o,()=>fV.form.expires_at,e=>fV.form.expires_at=e),la(l,()=>fV.form.user_path,e=>fV.form.user_path=e),la(f,()=>fV.form.labels,e=>fV.form.labels=e),ua(g,()=>fV.form.dashboard_access,e=>fV.form.dashboard_access=e),V(e,t)};U(r,e=>{fV.issuedValue?e(i):e(a,-1)}),V(e,n)},$$slots:{default:!0}})}k()}var xV=B(`

        `),SV=B(`

        Applies to new requests made with this key. Leave empty to remove all labels.

        `,1);function CV(e,t){O(t,!0),ME(e,{get open(){return fV.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return fV.labelsEditor.error},get submitting(){return fV.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>fV.closeLabelsEditor(),onsubmit:()=>fV.submitLabelsEditor(),headerHint:e=>{var t=xV(),n=P(t,!0);D(t),L(()=>H(n,fV.labelsEditor.name)),V(e,t)},children:(e,t)=>{PE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=SV(),r=F(n);ea(r),Ve(2),la(r,()=>fV.labelsEditor.value,e=>fV.labelsEditor.value=e),V(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),k()}var wV=B(` `),TV=B(`
        `),EV=B(``),DV=B(`Expired`),OV=B(` `),kV=B(` `,1),AV=B(`Deactivated`),jV=B(`
        `),MV=B(`
        NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
        `);function NV(e,t){O(t,!0);var n=MV(),r=P(n),i=P(r),a=P(i),o=I(P(a),5),s=P(o);J(I(P(s)),{get icon(){return eo},width:`13`,height:`13`}),D(s),D(o),Ve(3),D(a),D(i);var c=I(i);W(c,21,()=>fV.visibleKeys,e=>e.id,(e,t)=>{var n=jV();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i),s=P(o,!0);D(o);var c=I(o),l=P(c,!0);D(c);var u=I(c),d=P(u),f=e=>{var n=TV();W(n,20,()=>R(t).labels||[],e=>e,(e,t)=>{var n=wV(),r=P(n,!0);D(n),L(e=>{Bi(n,e),H(r,t)},[()=>eb(t)]),V(e,n)}),D(n),V(e,n)},p=e=>{V(e,EV())};U(d,e=>{(R(t).labels||[]).length>0?e(f):e(p,-1)}),D(u);var m=I(u),h=P(m),g=P(h,!0);D(h),D(m);var _=I(m),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x),C=e=>{var n=OV(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{V(e,DV())},s=A(()=>tV(R(t)));U(a,e=>{R(s)&&e(o)}),D(n),L(e=>H(i,e),[()=>wc(R(t).expires_at)]),V(e,n)},w=e=>{V(e,Yr(`—`))};U(S,e=>{R(t).expires_at?e(C):e(w,-1)}),D(x);var T=I(x),E=P(T,!0);D(T);var ee=I(T),te=P(ee),ne=P(te),re=e=>{var n=kV(),r=F(n);{let e=A(()=>(R(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+R(t).name),n=A(()=>!!fV.dashboardAccessID);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fV.toggleDashboardAccess(R(t)),get disabled(){return R(n)},children:(e,n)=>{{let n=A(()=>R(t).dashboard_access?wo:Co);J(e,{get icon(){return R(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>`Edit labels for API key `+R(t).name);OT(i,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fV.openLabelsEditor(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=I(i,2);{let e=A(()=>(fV.deactivatingID===R(t).id?`Deactivating API key `:`Deactivate API key `)+R(t).name),n=A(()=>fV.deactivatingID===R(t).id);OT(a,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>fV.deactivateKey(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)},ie=e=>{var n=AV();L(e=>K(n,`title`,e),[()=>R(t).deactivated_at?`Deactivated on `+Tc(R(t).deactivated_at):`Deactivated`]),V(e,n)},ae=A(()=>nV(R(t)));U(ne,e=>{R(t).active?e(re):R(ae)&&e(ie,1)}),D(te),D(ee),D(n),L((e,i,o)=>{r=G(n,1,`svelte-nf0ldb`,null,r,e),H(a,R(t).name),H(s,R(t).description||`—`),H(l,R(t).user_path||`—`),H(g,R(t).redacted_value),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).dashboard_access,"auth-key-status-inactive":!R(t).dashboard_access}),H(b,R(t).dashboard_access?`Allowed`:`Denied`),K(x,`title`,i),H(E,o)},[()=>({"auth-key-row-deactivated":nV(R(t))}),()=>R(t).expires_at?Tc(R(t).expires_at):``,()=>vs.formatTimestamp(R(t).created_at)]),V(e,n)}),D(c),D(r),D(n),V(e,n),k()}var PV=B(``),FV=B(`
        API key management is unavailable.
        `),IV=B(``),LV=B(`

        Managed API keys authenticate requests to the gateway. Deactivation is - permanent — create a new key if access needs to be restored.

        `),RV=B(`
        `),zV=B(`
        `),BV=B(`

        `),VV=B(`

        No API keys yet. Issue a key to get started.

        `),HV=B(`
        `);function UV(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`auth-keys`&&fV.fetchKeys()});var n=HV(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=PV();J(P(t),{get icon(){return po},class:`table-icon-svg`}),Ve(2),D(t),L(()=>t.disabled=fV.formSubmitting),z(`click`,t,()=>{fV.formSubmitting||fV.openForm()}),V(e,t)};U(a,e=>{fV.available&&!Y.authError&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,FV())};U(s,e=>{!fV.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=IV(),n=P(t,!0);D(t),L(()=>H(n,fV.error)),V(e,t)};U(l,e=>{fV.error&&!Y.authError&&!fV.formOpen&&e(u)});var d=I(l,2),f=e=>{V(e,LV())};U(d,e=>{fV.available&&!Y.authError&&e(f)});var p=I(d,2);bV(p,{});var m=I(p,2);CV(m,{});var h=I(m,2),g=e=>{var t=RV();NS(P(t),{size:18,label:`Loading API keys`}),D(t),V(e,t)};U(h,e=>{fV.loading&&fV.keys.length===0&&e(g)});var _=I(h,2),v=e=>{var t=zV(),n=P(t);jw(P(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return fV.filter},set value(e){fV.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i);ea(a);var o=I(a,2),s=I(P(o)),c=e=>{var t=Yr();L(()=>H(t,`(${fV.inactiveCount??``})`)),V(e,t)};U(s,e=>{fV.inactiveCount>0&&e(c)}),D(o),D(i),D(r),D(t),ua(a,()=>fV.showInactive,e=>fV.showInactive=e),V(e,t)};U(_,e=>{fV.keys.length>0&&fV.available&&e(v)});var y=I(_,2),b=e=>{NV(e,{})};U(y,e=>{fV.visibleKeys.length>0&&fV.available&&e(b)});var x=I(y,2),S=e=>{var t=BV(),n=P(t);D(t),L(()=>H(n,`No API keys match the current filter.${fV.inactiveCount>0&&!fV.showInactive?` `+fV.inactiveCount+` inactive `+(fV.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),V(e,t)};U(x,e=>{fV.keys.length>0&&fV.visibleKeys.length===0&&fV.available&&e(S)});var C=I(x,2),w=e=>{V(e,VV())};U(C,e=>{fV.keys.length===0&&!fV.loading&&!Y.authError&&!fV.error&&fV.available&&e(w)}),D(n),V(e,n),k()}Br([`click`]);var WV=B(`

        Timezone

        `),GV=B(``),KV=B(``),qV=B(`
        `,1);function JV(e,t){O(t,!0);function n(){vs.saveOverride(),Y.refresh()}function r(){vs.clearOverride(),Y.refresh()}var i=qV(),a=F(i);iC(P(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{V(e,WV())},$$slots:{title:!0}}),D(a);var o=I(a,2),s=P(o),c=I(P(s),2),l=P(c),u=P(l);D(l),l.value=l.__value=``,W(I(l),17,()=>vs.options,e=>e.value,(e,t)=>{var n=GV(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(c),D(s),D(o);var d=I(o,2),f=P(d),p=e=>{var t=KV();z(`click`,t,r),V(e,t)};U(f,e=>{vs.override&&e(p)}),D(d),L(e=>H(u,`Automatic (${e??``})`),[()=>vs.detectedTimeZoneLabel()]),zr(`focus`,c,()=>vs.ensureOptions()),z(`change`,c,n),Ui(c,()=>vs.override,e=>vs.override=e),V(e,i),k()}Br([`change`,`click`]);var YV=B(``),XV=B(`

        Failover

        `,1);function ZV(e,t){O(t,!0);let n=A(()=>Q.failoverSaving||Q.failoverGenerating||Q.failoverDraftSaving||!Q.failoverAvailable||!Q.failoverEnabled());var r=XV(),i=F(r),a=I(P(i),2),o=P(a),s=P(o);J(s,{get icon(){return Fo},class:`form-action-icon`});var c=I(s,2),l=P(c,!0);D(c),D(o);var u=I(o,2);J(P(u),{get icon(){return Ao},class:`form-action-icon`}),Ve(2),D(u),D(a),D(i);var d=I(i,2),f=P(d),p=e=>{var t=YV(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(f,e=>{Q.failoverError&&e(p)}),D(d),Dj(I(d,2),{}),L(()=>{o.disabled=R(n),H(l,Q.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=R(n)}),z(`click`,o,()=>Q.generateFailoverRules()),z(`click`,u,()=>Q.openFailoverResetDialog()),V(e,r),k()}Br([`click`]);function QV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function $V(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function eH(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var tH=B(`

        Budget Resets

        `),nH=B(``),rH=B(`

        If the selected day does not exist in a month, the reset runs on - the last day of that month.

        `),iH=B(``),aH=B(``),oH=B(`
        Monthly
        Weekly
        Daily
        `,1);function sH(e,t){O(t,!0);let n=j(N(QV())),r=j(!1),i=j(!1),a=j(``),o=j(!1),s=A(()=>ks.budgetsVisible());async function c(){if(await ks.ensureLoaded(),!ks.budgetsVisible()){M(a,``);return}M(r,!0),M(a,``);try{let e=await ws(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load budget settings.`);return}M(n,$V(e.data,R(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),M(a,`Unable to load budget settings.`)}finally{M(r,!1)}}async function l(){if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/budgets/settings`,`PUT`,$V(R(n),R(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){lc.error(`Unable to save budget settings.`);return}M(n,$V(e.data,R(n)),!0),M(a,``),lc.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),lc.error(`Unable to save budget settings.`)}finally{M(i,!1)}}}On(()=>{Y.refreshTick,c()});var u=Xr(),d=F(u),f=e=>{var t=oH(),s=F(t),c=P(s);iC(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{V(e,tH())},$$slots:{title:!0}});var u=I(c,2),d=P(u),f=I(P(d),2),p=P(f);iC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return R(o)},set open(e){M(o,e,!0)},title:e=>{V(e,nH())},$$slots:{title:!0}});var m=I(p,2);ea(m),D(f);var h=I(f,2),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=P(y),x=e=>{V(e,rH())};U(b,e=>{R(o)&&e(x)}),D(y),D(d);var S=I(d,2),C=I(P(S),2),w=I(P(C),2);W(w,21,eH,e=>e.value,(e,t)=>{var n=iH(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(w),D(C);var T=I(C,2),E=I(P(T),2);ea(E),D(T);var ee=I(T,2),te=I(P(ee),2);ea(te),D(ee),Ve(2),D(S);var ne=I(S,2),re=I(P(ne),4),ie=I(P(re),2);ea(ie),D(re);var ae=I(re,2),oe=I(P(ae),2);ea(oe),D(ae),Ve(2),D(ne),D(u);var se=I(u,2),ce=P(se);J(P(ce),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(ce);var le=I(ce,2),ue=e=>{NS(e,{size:16,label:`Loading budget settings`})};U(le,e=>{R(r)&&e(ue)}),D(se),D(s);var de=I(s,2),fe=P(de),pe=e=>{var t=aH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(fe,e=>{R(a)&&e(pe)}),D(de),L(()=>{ce.disabled=R(i)||R(r),K(ce,`aria-busy`,R(i)?`true`:`false`)}),la(m,()=>R(n).monthly_reset_day,e=>R(n).monthly_reset_day=e),la(g,()=>R(n).monthly_reset_hour,e=>R(n).monthly_reset_hour=e),la(v,()=>R(n).monthly_reset_minute,e=>R(n).monthly_reset_minute=e),Ui(w,()=>R(n).weekly_reset_weekday,e=>R(n).weekly_reset_weekday=e),la(E,()=>R(n).weekly_reset_hour,e=>R(n).weekly_reset_hour=e),la(te,()=>R(n).weekly_reset_minute,e=>R(n).weekly_reset_minute=e),la(ie,()=>R(n).daily_reset_hour,e=>R(n).daily_reset_hour=e),la(oe,()=>R(n).daily_reset_minute,e=>R(n).daily_reset_minute=e),z(`click`,ce,l),V(e,t)};U(d,e=>{R(s)&&e(f)}),V(e,u),k()}Br([`click`]);var cH=B(`

        Reset All Budgets

        Start new budget periods for every configured budget without changing - the limits.

        `);function lH(e,t){O(t,!0);var n=Xr(),r=F(n),i=e=>{var t=cH(),n=I(P(t),2),r=P(n);J(P(r),{get icon(){return go},class:`form-action-icon`}),Ve(2),D(r),D(n),D(t),L(()=>r.disabled=X.resetAllLoading),z(`click`,r,()=>X.openResetDialog()),V(e,t)},a=A(()=>ks.budgetsVisible());U(r,e=>{R(a)&&e(i)}),V(e,n),k()}Br([`click`]);function uH(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function dH(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function fH(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function pH(e){return e&&e.error&&e.error.message?e.error.message:``}var mH=B(`

        Tagging based on headers

        `),hH=B(`config`),gH=B(``),_H=B(`
        `),vH=B(`

        No tagging headers configured. Requests are not labelled.

        `),yH=B(``),bH=B(`
        `,1);function xH(e,t){O(t,!0);let n=j(N([])),r=j(!0),i=j(!1),a=j(!1),o=j(``);function s(){R(n).push(uH())}function c(e){let t=R(n)[e];!t||t.managed||R(n).splice(e,1)}async function l(){M(i,!0),M(o,``);try{let e=await ws(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){M(o,`Unable to load tagging settings.`);return}M(n,dH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),M(o,`Unable to load tagging settings.`)}finally{M(i,!1)}}async function u(){if(!(R(a)||!R(r))){M(a,!0);try{let e=await Ts(`/admin/tagging/settings`,`PUT`,fH(R(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){lc.error(e.status!==401&&pH(e.data)||`Unable to save tagging settings.`);return}M(n,dH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0),M(o,``),lc.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),lc.error(`Unable to save tagging settings.`)}finally{M(a,!1)}}}On(()=>{Y.refreshTick,l()});var d=bH(),f=F(d),p=P(f);iC(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{V(e,mH())},$$slots:{title:!0}});var m=I(p,2),h=P(m);W(h,17,()=>R(n),ii,(e,t,n)=>{var i=_H(),a=P(i),o=P(a);K(o,`for`,`tagging-header-`+n);var s=I(o,2);ea(s),K(s,`id`,`tagging-header-`+n),D(a);var l=I(a,2),u=P(l);K(u,`for`,`tagging-prefix-`+n);var d=I(u,2);ea(d),K(d,`id`,`tagging-prefix-`+n),D(l);var f=I(l,2),p=P(f);K(p,`for`,`tagging-delimiter-`+n);var m=I(p,2);ea(m),K(m,`id`,`tagging-delimiter-`+n),D(f);var h=I(f,2),g=P(h);ea(g),Ve(2),D(h);var _=I(h,2),v=P(_),y=e=>{V(e,hH())},b=e=>{var i=gH();L(()=>{i.disabled=!R(r),K(i,`aria-label`,`Remove tagging header `+(R(t).header||n+1))}),z(`click`,i,()=>c(n)),V(e,i)};U(v,e=>{R(t).managed?e(y):e(b,-1)}),D(_),D(i),L(()=>{s.disabled=R(t).managed||!R(r),d.disabled=R(t).managed||!R(r),m.disabled=R(t).managed||!R(r),g.disabled=R(t).managed||!R(r)}),la(s,()=>R(t).header,e=>R(t).header=e),la(d,()=>R(t).prefix,e=>R(t).prefix=e),la(m,()=>R(t).delimiter,e=>R(t).delimiter=e),ua(g,()=>R(t).do_not_pass,e=>R(t).do_not_pass=e),V(e,i)});var g=I(h,2),_=e=>{NS(e,{size:16,label:`Loading tagging settings`})};U(g,e=>{R(i)&&e(_)});var v=I(g,2),y=e=>{V(e,vH())};U(v,e=>{!R(i)&&R(n).length===0&&e(y)}),D(m);var b=I(m,2),x=P(b);J(P(x),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(x);var S=I(x,2);J(P(S),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(S),D(b),D(f);var C=I(f,2),w=P(C),T=e=>{var t=yH(),n=P(t,!0);D(t),L(()=>H(n,R(o))),V(e,t)};U(w,e=>{R(o)&&e(T)}),D(C),L(()=>{x.disabled=!R(r)||R(a)||R(i),S.disabled=!R(r)||R(a)||R(i),K(S,`aria-busy`,R(a)?`true`:`false`)}),z(`click`,x,s),z(`click`,S,u),V(e,d),k()}Br([`click`]);function SH(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?Cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?Cc(r):``}}function CH(e,t,n,r){return{...SH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function wH(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var TH=B(`

        Usage Pricing Recalculation

        `),EH=B(`
        `);function DH(e,t){O(t,!0);let n=j(``),r=j(``),i=j(!1),a=A(()=>ks.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}R(i)||Js.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Fa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/usage/recalculate-pricing`,`POST`,CH({selectedPreset:Uc.selectedPreset,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate,today:vs.todayDate()},R(n),R(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Js.error=`Unable to recalculate pricing.`;return}Js.close(),lc.success(wH(e.data)),Yc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Js.error=`Unable to recalculate pricing.`}finally{M(i,!1)}}}var c=Xr(),l=F(c),u=e=>{var t=EH(),s=P(t);iC(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{V(e,TH())},$$slots:{title:!0}});var c=I(s,2),l=P(c),u=I(P(l),2);fl(P(u),{}),D(u),D(l);var d=I(l,2),f=I(P(d),2);ea(f),D(d);var p=I(d,2),m=I(P(p),2);ea(m),D(p),D(c);var h=I(c,2),g=P(h);J(P(g),{get icon(){return Fa},class:`form-action-icon`}),Ve(2),D(g),D(h),D(t),L(()=>{g.disabled=R(i)||!R(a),K(g,`aria-busy`,R(i)?`true`:`false`)}),la(f,()=>R(n),e=>M(n,e)),la(m,()=>R(r),e=>M(r,e)),z(`click`,g,o),V(e,t)};U(l,e=>{R(a)&&e(u)}),V(e,c),k()}Br([`click`]);function OH(e){return String(e&&e.status||`ok`).toLowerCase()}function kH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=OH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function AH(e){return!!e&&OH(e)===`ok`}function jH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function MH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var NH=B(`

        Runtime Refresh

        `),PH=B(`
      • `),FH=B(`
          `),IH=B(`
          `,1);function LH(e,t){O(t,!0);let n=j(!1),r=j(null);async function i(){if(!R(n)){M(n,!0),M(r,null);try{let e=await Ts(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){lc.error(`Runtime refresh failed.`);return}M(r,e.data&&typeof e.data==`object`?e.data:null,!0),AH(R(r))?lc.success(kH(R(r))):lc.error(kH(R(r))),Y.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),lc.error(`Runtime refresh failed.`)}finally{M(n,!1)}}}var a=IH(),o=F(a),s=P(o);iC(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{V(e,NH())},$$slots:{title:!0}});var c=I(s,2),l=P(c);let u;J(P(l),{get icon(){return ho},class:`settings-refresh-icon`}),Ve(2),D(l),D(c),D(o);var d=I(o,2),f=P(d),p=e=>{var t=FH();W(t,21,()=>jH(R(r)),e=>e.name,(e,t)=>{var n=PH(),r=P(n,!0);D(n),L(e=>{G(n,1,`runtime-refresh-step is-${R(t).status??``}`,`svelte-yeq2mp`),H(r,e)},[()=>MH(R(t))]),V(e,n)}),D(t),V(e,t)},m=A(()=>jH(R(r)).length>0);U(f,e=>{R(m)&&e(p)}),D(d),L(()=>{u=G(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":R(n)}),l.disabled=R(n),K(l,`aria-busy`,R(n)?`true`:`false`)}),z(`click`,l,i),V(e,a),k()}Br([`click`]);var RH=B(``),zH=B(`

          `),BH=B(`

          `),VH=B(``),HH=B(`
          `),UH=B(`

          AI Processing

          `);function WH(e,t){O(t,!0);let n=j(N([])),r=j(!1),i=j(``),a=j(``);async function o(){M(r,!0),M(a,``);try{let e=await ws(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load runtime settings.`);return}M(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),M(a,`Unable to load runtime settings.`)}finally{M(r,!1)}}async function s(e,t,r){if(!(e.locked||R(i))){M(i,e.key,!0);try{let i=await Ts(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,lc.error(`Unable to save ${e.label}.`);return}M(n,R(n).map(t=>t.key===e.key?i.data:t),!0),lc.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),lc.error(`Unable to save ${e.label}.`)}finally{M(i,``)}}}On(()=>{Y.refreshTick,o()});var c=Xr(),l=F(c),u=e=>{var t=UH(),o=P(t),c=I(P(o),2),l=e=>{var t=RH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(o);var u=I(o,2);W(u,21,()=>R(n),e=>e.key,(e,t)=>{var n=HH(),r=P(n),a=P(r),o=P(a,!0);D(a);var c=I(a,2),l=e=>{var n=zH(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(c,e=>{R(t).description&&e(l)});var u=I(c,2),d=e=>{var n=BH(),r=P(n);D(n),L(()=>H(r,`Managed by ${(R(t).managed_by||`environment`)??``}`)),V(e,n)};U(u,e=>{R(t).locked&&e(d)}),D(r);var f=I(r,2);W(f,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=VH(),r=P(n,!0);D(n);var i={};L(()=>{K(n,`title`,R(t).description||``),H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(f);var p;Hi(f),D(n),L(()=>{K(a,`for`,`runtime-setting-${R(t).key}`),H(o,R(t).label),K(f,`id`,`runtime-setting-${R(t).key}`),f.disabled=R(t).locked||R(i)!==``,p!==(p=R(t).value)&&(f.value=(f.__value=R(t).value)??``,Vi(f,R(t).value))}),z(`change`,f,e=>s(R(t),e.currentTarget.value,e.currentTarget)),V(e,n)}),D(u),D(t),L(()=>K(u,`aria-busy`,R(r)?`true`:`false`)),V(e,t)};U(l,e=>{(R(n).length>0||R(a))&&e(u)}),V(e,c),k()}Br([`change`]);var GH=B(`
          `);function KH(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`settings`&&(vs.ensureOptions(),ks.ensureLoaded())});var n=GH(),r=I(P(n),2),i=P(r);JV(i,{});var a=I(i,2);ZV(a,{});var o=I(a,2);sH(o,{});var s=I(o,2);lH(s,{});var c=I(s,2);xH(c,{});var l=I(c,2);WH(l,{});var u=I(l,2);DH(u,{}),LH(I(u,2),{}),D(r);var d=I(r,2),f=P(d,!0);D(d),D(n),L(e=>H(f,e),[()=>Wo()]),V(e,n),k()}var qH=B(`
          `),JH=B(`
           
          `),YH=B(`
           
          `),XH=B(`
           
          `),ZH=B(`
          `),QH=B(`
          `,1),$H=B(`
          `);function eU(e,t){O(t,!0);let n=q(t,`showPromptCache`,3,!0),r=MM({logPrefix:`Failed to copy interaction message:`}),i=A(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=$H();let l;var u=P(c),d=e=>{var r=JH(),i=P(r),a=P(i),c=P(a,!0);D(a);var l=I(a,2),u=P(l,!0);D(l);var d=I(l,2),f=P(d,!0);D(d),D(i);var p=I(i,2),m=e=>{var n=qH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${t.msg.functionCallID??``}`)),V(e,n)};U(p,e=>{t.msg.functionCallID&&e(m)});var h=I(p,2),g=e=>{var n=Xr();W(F(n),17,()=>t.msg.toolCalls,ii,(e,n)=>{var r=Xr(),i=F(r),a=e=>{var r=qH(),i=P(r);D(r),L(()=>H(i,`Call ID${t.msg.toolCalls.length>1?` (`+R(n).name+`)`:``}: ${R(n).id??``}`)),V(e,r)};U(i,e=>{R(n).id&&e(a)}),V(e,r)}),V(e,n)};U(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=I(h,2),v=P(_,!0);D(_),D(r),L((e,n,i,a)=>{K(r,`title`,e),H(c,t.msg.roleLabel),H(u,n),H(f,i),H(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>vs.formatTimestamp(t.msg.timestamp),()=>fL(t.msg)]),V(e,r)},f=e=>{var r=QH(),i=F(r),a=P(i),s=P(a,!0);D(a);var c=I(a,2),l=P(c,!0);D(c),D(i);var u=I(i,2),d=e=>{var r=YH(),i=P(r,!0);D(r),L(e=>{K(r,`title`,e),H(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),V(e,r)};U(u,e=>{t.msg.text&&e(d)});var f=I(u,2),p=e=>{var n=ZH();W(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=XH(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(r);var c=I(r,2),l=e=>{var n=qH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${R(t).id??``}`)),V(e,n)};U(c,e=>{R(t).id&&e(l)});var u=I(c,2),d=P(u,!0);D(u),D(n),L((e,n)=>{H(a,R(t).name+`()`),H(s,e),H(d,n)},[()=>mL(R(t))||`No arguments`,()=>mL(R(t))||`No arguments`]),V(e,n)}),D(n),V(e,n)};U(f,e=>{t.msg.toolCalls&&e(p)}),L((e,n)=>{K(i,`title`,e),H(s,t.msg.roleLabel),H(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>vs.formatTimestamp(t.msg.timestamp)]),V(e,r)};U(u,e=>{R(i)?e(d):e(f,-1)});var p=I(u,2);let m;var h=P(p);{let e=A(()=>r.copied?Ga:Ja);J(h,{get icon(){return R(e)},width:`14`,height:`14`})}D(p),D(c),L(e=>{G(c,1,Ni([R(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),K(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),K(c,`data-entry-id`,t.msg.entryID),l=Bi(c,``,l,e),m=G(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),K(p,`aria-label`,r.copied?`Message copied`:`Copy message`),K(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),z(`click`,p,e=>{e.stopPropagation(),r.copy(pL(t.msg))}),V(e,c),k()}Br([`click`]);function tU(e,t=0){let n=Math.max(0,aU(e)-Math.max(0,aU(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function nU(e,t,n=0){let r=tU(t,n),i=aU(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function rU(e,t,n=0){return nU(aU(t)-aU(e),t,n)}function iU(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=aU(t),a=0;e.forEach((e,t)=>{aU(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=aU(e[c])0&&s===c&&l?`end`:`start`}}function aU(e){let t=Number(e);return Number.isFinite(t)?t:0}var oU=B(`
          `),sU=B(`
          `),cU=B(`

          Loading interactions...

          `),lU=B(`

          No interaction data available for this entry.

          `),uU=B(``),dU=B(`
          `,1),fU=B(`

          Showing the newest part of this session and the selected log.

          `),pU=B(`
          `),mU=B(``),hU=B(``),gU=B(``);function _U(e,t){O(t,!0);let n=SL,r=Number(Sa(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=j(N(a)),s=j(320),c=j(760),l=j(!1),u=j(!1),d=j(Sa(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=SP(180);return t?rc(e,{x:R(o),duration:r,easing:oc}):n?{duration:0}:ic(e,{axis:`x`,duration:r,easing:oc})}async function m(e){if(e===R(l))return;let t=R(l)&&!e;M(u,t,!0),M(l,e,!0),t&&(await xr(),M(u,!1))}function h(){M(d,!R(d)),Ca(i,R(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=tU(window.innerWidth,e);M(s,t.min,!0),M(c,t.max,!0),M(o,nU(a,window.innerWidth,e),!0)}function v(e){M(o,rU(e,window.innerWidth,g()),!0),a=R(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),Ca(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=R(o)+(e.key===`ArrowLeft`?24:-24),_(),a=R(o),Ca(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=iU(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:SP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}On(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Oa.anyOpen&&(R(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),On(()=>{n.conversationOpen||M(l,!1)}),On(()=>{if(!R(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),On(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var T=Xr(),E=F(T),ee=e=>{var t=Xr();W(F(t),16,()=>[R(l)],e=>e,(e,t)=>{var r=gU();let i,a;var l=P(r),f=I(l,2),g=P(f),_=I(P(g),2),v=P(_);let w;D(_),D(g);var T=I(g,2),E=P(T),ee=P(E);{let e=A(()=>t?so:oo);J(ee,{get icon(){return R(e)},class:`table-icon-svg`})}D(E),Rs(I(E,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),D(T),D(f);var te=I(f,2),ne=P(te),re=e=>{var t=oU(),n=P(t);J(P(n),{get icon(){return Na},width:`14`,height:`14`}),D(n);var r=I(n,2);J(P(r),{get icon(){return Aa},width:`14`,height:`14`}),D(r),D(t),z(`click`,n,()=>C(-1)),z(`click`,r,()=>C(1)),V(e,t)};U(ne,e=>{n.conversationMessages.length>1&&e(re)});var ie=I(ne,2),ae=e=>{var t=sU(),r=P(t,!0);D(t),L(()=>H(r,n.conversationError)),V(e,t)};U(ie,e=>{n.conversationError&&e(ae)});var oe=I(ie,2),se=e=>{V(e,cU())};U(oe,e=>{n.conversationLoading&&e(se)});var ce=I(oe,2),le=e=>{V(e,lU())},ue=A(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());U(ce,e=>{R(ue)&&e(le)});var de=I(ce,2),fe=e=>{var t=dU(),r=F(t),i=e=>{var t=uU(),n=P(t);let r;Ve(2),D(t),L(()=>{K(t,`aria-checked`,R(d)),K(t,`title`,(R(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=G(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":R(d)})}),z(`click`,t,h),V(e,t)},a=A(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));U(r,e=>{R(a)&&e(i)});var o=I(r,2);W(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{eU(e,{get msg(){return R(t)},get showPromptCache(){return R(d)}})}),D(o),ma(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),V(e,t)};U(de,e=>{n.conversationMessages.length>0&&e(fe)});var pe=I(de,2),me=e=>{V(e,fU())};U(pe,e=>{n.conversationTruncated&&e(me)});var he=I(pe,2),ge=e=>{var t=pU(),r=I(P(t),2),i=P(r,!0);D(r),D(t),L(e=>H(i,e),[()=>n.conversationLiveStatusText()]),V(e,t)},_e=A(()=>n.conversationLiveWaiting());U(he,e=>{R(_e)&&e(ge)}),D(te);var ve=I(te,2),ye=e=>{var t=hU(),r=P(t),i=P(r);ut(i);var a=I(i,2),o=e=>{var t=mU(),r=P(t,!0);D(t),L(()=>H(r,n.followUpError)),V(e,t)};U(a,e=>{n.followUpError&&e(o)});var s=I(a,2),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u),D(s),D(r),D(t),L((e,t,r)=>{i.disabled=e,H(l,t),u.disabled=r,H(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),zr(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),la(i,()=>n.followUpText,e=>n.followUpText=e),V(e,t)},be=A(()=>n.conversationAnchorID&&n.followUpKind());U(ve,e=>{R(be)&&e(ye)}),D(r),ma(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),L(()=>{i=G(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),K(r,`role`,t?`dialog`:void 0),K(r,`aria-modal`,t?`true`:void 0),a=Bi(r,``,a,{"--conversation-panel-width":R(o)+`px`}),K(l,`aria-valuemin`,R(s)),K(l,`aria-valuemax`,R(c)),K(l,`aria-valuenow`,R(o)),K(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),K(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=G(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),K(E,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),K(E,`title`,t?`Exit fullscreen`:`Fullscreen`),K(E,`aria-pressed`,t)}),z(`pointerdown`,l,y),z(`pointermove`,l,b),z(`pointerup`,l,x),zr(`pointercancel`,l,x),zr(`lostpointercapture`,l,x),z(`keydown`,l,S),z(`click`,E,()=>m(!t)),Di(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&R(u)})),V(e,r)}),V(e,t)};U(E,e=>{n.conversationOpen&&e(ee)}),V(e,T),k()}Br([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var vU=B(`
          `,1);function yU(e,t){O(t,!0);let n={overview:OC,usage:wT,budgets:eD,"rate-limits":dO,models:Xj,workflows:_P,"audit-logs":pR,guardrails:oz,"mcp-servers":Bz,"providers-config":YB,"auth-keys":UV,settings:KH};vs.init(),Uc.init(),Y.init(),Ea.init(),Da.init(),Yo.init(),On(()=>{Y.refreshTick,ks.fetch(),Wc.fetchModels(),Wc.fetchCategories()}),On(()=>{document.body.classList.toggle(`dashboard-modal-open`,Oa.anyOpen)});let r=A(()=>n[Yo.page]||OC);var i=vU(),a=F(i);Is(a,{});var o=I(a,2);let s;var c=P(o);mc(c,{}),hi(I(c,2),()=>R(r),(e,t)=>{t(e,{})}),D(o);var l=I(o,2);_U(l,{});var u=I(l,2);Ks(u,{});var d=I(u,2);Qs(d,{}),fc(I(d,2),{}),L(()=>s=G(o,1,`content`,null,s,{"interactions-open":SL.conversationOpen})),V(e,i),k()}$r(yU,{target:document.getElementById(`app`)}); \ No newline at end of file + the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=I(m,2),g=P(h);ea(g),Ve(2),D(h),D(p),PE(I(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=yV();ut(n),la(n,()=>pV.form.description,e=>pV.form.description=e),V(e,n)},$$slots:{default:!0}}),D(t),la(i,()=>pV.form.name,e=>pV.form.name=e),la(o,()=>pV.form.expires_at,e=>pV.form.expires_at=e),la(l,()=>pV.form.user_path,e=>pV.form.user_path=e),la(f,()=>pV.form.labels,e=>pV.form.labels=e),ua(g,()=>pV.form.dashboard_access,e=>pV.form.dashboard_access=e),V(e,t)};U(r,e=>{pV.issuedValue?e(i):e(a,-1)}),V(e,n)},$$slots:{default:!0}})}k()}var SV=B(`

          `),CV=B(`

          Applies to new requests made with this key. Leave empty to remove all labels.

          `,1);function wV(e,t){O(t,!0),ME(e,{get open(){return pV.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return pV.labelsEditor.error},get submitting(){return pV.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>pV.closeLabelsEditor(),onsubmit:()=>pV.submitLabelsEditor(),headerHint:e=>{var t=SV(),n=P(t,!0);D(t),L(()=>H(n,pV.labelsEditor.name)),V(e,t)},children:(e,t)=>{PE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=CV(),r=F(n);ea(r),Ve(2),la(r,()=>pV.labelsEditor.value,e=>pV.labelsEditor.value=e),V(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),k()}var TV=B(` `),EV=B(`
          `),DV=B(``),OV=B(`Expired`),kV=B(` `),AV=B(` `,1),jV=B(`Deactivated`),MV=B(`
          `),NV=B(`
          NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
          `);function PV(e,t){O(t,!0);var n=NV(),r=P(n),i=P(r),a=P(i),o=I(P(a),5),s=P(o);J(I(P(s)),{get icon(){return eo},width:`13`,height:`13`}),D(s),D(o),Ve(3),D(a),D(i);var c=I(i);W(c,21,()=>pV.visibleKeys,e=>e.id,(e,t)=>{var n=MV();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i),s=P(o,!0);D(o);var c=I(o),l=P(c,!0);D(c);var u=I(c),d=P(u),f=e=>{var n=EV();W(n,20,()=>R(t).labels||[],e=>e,(e,t)=>{var n=TV(),r=P(n,!0);D(n),L(e=>{Bi(n,e),H(r,t)},[()=>eb(t)]),V(e,n)}),D(n),V(e,n)},p=e=>{V(e,DV())};U(d,e=>{(R(t).labels||[]).length>0?e(f):e(p,-1)}),D(u);var m=I(u),h=P(m),g=P(h,!0);D(h),D(m);var _=I(m),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x),C=e=>{var n=kV(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{V(e,OV())},s=A(()=>nV(R(t)));U(a,e=>{R(s)&&e(o)}),D(n),L(e=>H(i,e),[()=>wc(R(t).expires_at)]),V(e,n)},w=e=>{V(e,Yr(`—`))};U(S,e=>{R(t).expires_at?e(C):e(w,-1)}),D(x);var T=I(x),E=P(T,!0);D(T);var ee=I(T),te=P(ee),ne=P(te),re=e=>{var n=AV(),r=F(n);{let e=A(()=>(R(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+R(t).name),n=A(()=>!!pV.dashboardAccessID);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pV.toggleDashboardAccess(R(t)),get disabled(){return R(n)},children:(e,n)=>{{let n=A(()=>R(t).dashboard_access?wo:Co);J(e,{get icon(){return R(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>`Edit labels for API key `+R(t).name);OT(i,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pV.openLabelsEditor(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=I(i,2);{let e=A(()=>(pV.deactivatingID===R(t).id?`Deactivating API key `:`Deactivate API key `)+R(t).name),n=A(()=>pV.deactivatingID===R(t).id);OT(a,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>pV.deactivateKey(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)},ie=e=>{var n=jV();L(e=>K(n,`title`,e),[()=>R(t).deactivated_at?`Deactivated on `+Tc(R(t).deactivated_at):`Deactivated`]),V(e,n)},ae=A(()=>rV(R(t)));U(ne,e=>{R(t).active?e(re):R(ae)&&e(ie,1)}),D(te),D(ee),D(n),L((e,i,o)=>{r=G(n,1,`svelte-nf0ldb`,null,r,e),H(a,R(t).name),H(s,R(t).description||`—`),H(l,R(t).user_path||`—`),H(g,R(t).redacted_value),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).dashboard_access,"auth-key-status-inactive":!R(t).dashboard_access}),H(b,R(t).dashboard_access?`Allowed`:`Denied`),K(x,`title`,i),H(E,o)},[()=>({"auth-key-row-deactivated":rV(R(t))}),()=>R(t).expires_at?Tc(R(t).expires_at):``,()=>vs.formatTimestamp(R(t).created_at)]),V(e,n)}),D(c),D(r),D(n),V(e,n),k()}var FV=B(``),IV=B(`
          API key management is unavailable.
          `),LV=B(``),RV=B(`

          Managed API keys authenticate requests to the gateway. Deactivation is + permanent — create a new key if access needs to be restored.

          `),zV=B(`
          `),BV=B(`
          `),VV=B(`

          `),HV=B(`

          No API keys yet. Issue a key to get started.

          `),UV=B(`
          `);function WV(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`auth-keys`&&pV.fetchKeys()});var n=UV(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=FV();J(P(t),{get icon(){return po},class:`table-icon-svg`}),Ve(2),D(t),L(()=>t.disabled=pV.formSubmitting),z(`click`,t,()=>{pV.formSubmitting||pV.openForm()}),V(e,t)};U(a,e=>{pV.available&&!Y.authError&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,IV())};U(s,e=>{!pV.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=LV(),n=P(t,!0);D(t),L(()=>H(n,pV.error)),V(e,t)};U(l,e=>{pV.error&&!Y.authError&&!pV.formOpen&&e(u)});var d=I(l,2),f=e=>{V(e,RV())};U(d,e=>{pV.available&&!Y.authError&&e(f)});var p=I(d,2);xV(p,{});var m=I(p,2);wV(m,{});var h=I(m,2),g=e=>{var t=zV();NS(P(t),{size:18,label:`Loading API keys`}),D(t),V(e,t)};U(h,e=>{pV.loading&&pV.keys.length===0&&e(g)});var _=I(h,2),v=e=>{var t=BV(),n=P(t);jw(P(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return pV.filter},set value(e){pV.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i);ea(a);var o=I(a,2),s=I(P(o)),c=e=>{var t=Yr();L(()=>H(t,`(${pV.inactiveCount??``})`)),V(e,t)};U(s,e=>{pV.inactiveCount>0&&e(c)}),D(o),D(i),D(r),D(t),ua(a,()=>pV.showInactive,e=>pV.showInactive=e),V(e,t)};U(_,e=>{pV.keys.length>0&&pV.available&&e(v)});var y=I(_,2),b=e=>{PV(e,{})};U(y,e=>{pV.visibleKeys.length>0&&pV.available&&e(b)});var x=I(y,2),S=e=>{var t=VV(),n=P(t);D(t),L(()=>H(n,`No API keys match the current filter.${pV.inactiveCount>0&&!pV.showInactive?` `+pV.inactiveCount+` inactive `+(pV.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),V(e,t)};U(x,e=>{pV.keys.length>0&&pV.visibleKeys.length===0&&pV.available&&e(S)});var C=I(x,2),w=e=>{V(e,HV())};U(C,e=>{pV.keys.length===0&&!pV.loading&&!Y.authError&&!pV.error&&pV.available&&e(w)}),D(n),V(e,n),k()}Br([`click`]);var GV=B(`

          Timezone

          `),KV=B(``),qV=B(``),JV=B(`
          `,1);function YV(e,t){O(t,!0);function n(){vs.saveOverride(),Y.refresh()}function r(){vs.clearOverride(),Y.refresh()}var i=JV(),a=F(i);iC(P(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{V(e,GV())},$$slots:{title:!0}}),D(a);var o=I(a,2),s=P(o),c=I(P(s),2),l=P(c),u=P(l);D(l),l.value=l.__value=``,W(I(l),17,()=>vs.options,e=>e.value,(e,t)=>{var n=KV(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(c),D(s),D(o);var d=I(o,2),f=P(d),p=e=>{var t=qV();z(`click`,t,r),V(e,t)};U(f,e=>{vs.override&&e(p)}),D(d),L(e=>H(u,`Automatic (${e??``})`),[()=>vs.detectedTimeZoneLabel()]),zr(`focus`,c,()=>vs.ensureOptions()),z(`change`,c,n),Ui(c,()=>vs.override,e=>vs.override=e),V(e,i),k()}Br([`change`,`click`]);var XV=B(``),ZV=B(`

          Failover

          `,1);function QV(e,t){O(t,!0);let n=A(()=>Q.failoverSaving||Q.failoverGenerating||Q.failoverDraftSaving||!Q.failoverAvailable||!Q.failoverEnabled());var r=ZV(),i=F(r),a=I(P(i),2),o=P(a),s=P(o);J(s,{get icon(){return Fo},class:`form-action-icon`});var c=I(s,2),l=P(c,!0);D(c),D(o);var u=I(o,2);J(P(u),{get icon(){return Ao},class:`form-action-icon`}),Ve(2),D(u),D(a),D(i);var d=I(i,2),f=P(d),p=e=>{var t=XV(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(f,e=>{Q.failoverError&&e(p)}),D(d),Dj(I(d,2),{}),L(()=>{o.disabled=R(n),H(l,Q.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=R(n)}),z(`click`,o,()=>Q.generateFailoverRules()),z(`click`,u,()=>Q.openFailoverResetDialog()),V(e,r),k()}Br([`click`]);function $V(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function eH(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function tH(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var nH=B(`

          Budget Resets

          `),rH=B(``),iH=B(`

          If the selected day does not exist in a month, the reset runs on + the last day of that month.

          `),aH=B(``),oH=B(``),sH=B(`
          Monthly
          Weekly
          Daily
          `,1);function cH(e,t){O(t,!0);let n=j(N($V())),r=j(!1),i=j(!1),a=j(``),o=j(!1),s=A(()=>ks.budgetsVisible());async function c(){if(await ks.ensureLoaded(),!ks.budgetsVisible()){M(a,``);return}M(r,!0),M(a,``);try{let e=await ws(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load budget settings.`);return}M(n,eH(e.data,R(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),M(a,`Unable to load budget settings.`)}finally{M(r,!1)}}async function l(){if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/budgets/settings`,`PUT`,eH(R(n),R(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){lc.error(`Unable to save budget settings.`);return}M(n,eH(e.data,R(n)),!0),M(a,``),lc.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),lc.error(`Unable to save budget settings.`)}finally{M(i,!1)}}}On(()=>{Y.refreshTick,c()});var u=Xr(),d=F(u),f=e=>{var t=sH(),s=F(t),c=P(s);iC(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{V(e,nH())},$$slots:{title:!0}});var u=I(c,2),d=P(u),f=I(P(d),2),p=P(f);iC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return R(o)},set open(e){M(o,e,!0)},title:e=>{V(e,rH())},$$slots:{title:!0}});var m=I(p,2);ea(m),D(f);var h=I(f,2),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=P(y),x=e=>{V(e,iH())};U(b,e=>{R(o)&&e(x)}),D(y),D(d);var S=I(d,2),C=I(P(S),2),w=I(P(C),2);W(w,21,tH,e=>e.value,(e,t)=>{var n=aH(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(w),D(C);var T=I(C,2),E=I(P(T),2);ea(E),D(T);var ee=I(T,2),te=I(P(ee),2);ea(te),D(ee),Ve(2),D(S);var ne=I(S,2),re=I(P(ne),4),ie=I(P(re),2);ea(ie),D(re);var ae=I(re,2),oe=I(P(ae),2);ea(oe),D(ae),Ve(2),D(ne),D(u);var se=I(u,2),ce=P(se);J(P(ce),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(ce);var le=I(ce,2),ue=e=>{NS(e,{size:16,label:`Loading budget settings`})};U(le,e=>{R(r)&&e(ue)}),D(se),D(s);var de=I(s,2),fe=P(de),pe=e=>{var t=oH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(fe,e=>{R(a)&&e(pe)}),D(de),L(()=>{ce.disabled=R(i)||R(r),K(ce,`aria-busy`,R(i)?`true`:`false`)}),la(m,()=>R(n).monthly_reset_day,e=>R(n).monthly_reset_day=e),la(g,()=>R(n).monthly_reset_hour,e=>R(n).monthly_reset_hour=e),la(v,()=>R(n).monthly_reset_minute,e=>R(n).monthly_reset_minute=e),Ui(w,()=>R(n).weekly_reset_weekday,e=>R(n).weekly_reset_weekday=e),la(E,()=>R(n).weekly_reset_hour,e=>R(n).weekly_reset_hour=e),la(te,()=>R(n).weekly_reset_minute,e=>R(n).weekly_reset_minute=e),la(ie,()=>R(n).daily_reset_hour,e=>R(n).daily_reset_hour=e),la(oe,()=>R(n).daily_reset_minute,e=>R(n).daily_reset_minute=e),z(`click`,ce,l),V(e,t)};U(d,e=>{R(s)&&e(f)}),V(e,u),k()}Br([`click`]);var lH=B(`

          Reset All Budgets

          Start new budget periods for every configured budget without changing + the limits.

          `);function uH(e,t){O(t,!0);var n=Xr(),r=F(n),i=e=>{var t=lH(),n=I(P(t),2),r=P(n);J(P(r),{get icon(){return go},class:`form-action-icon`}),Ve(2),D(r),D(n),D(t),L(()=>r.disabled=X.resetAllLoading),z(`click`,r,()=>X.openResetDialog()),V(e,t)},a=A(()=>ks.budgetsVisible());U(r,e=>{R(a)&&e(i)}),V(e,n),k()}Br([`click`]);function dH(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function fH(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function pH(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function mH(e){return e&&e.error&&e.error.message?e.error.message:``}var hH=B(`

          Tagging based on headers

          `),gH=B(`config`),_H=B(``),vH=B(`
          `),yH=B(`

          No tagging headers configured. Requests are not labelled.

          `),bH=B(``),xH=B(`
          `,1);function SH(e,t){O(t,!0);let n=j(N([])),r=j(!0),i=j(!1),a=j(!1),o=j(``);function s(){R(n).push(dH())}function c(e){let t=R(n)[e];!t||t.managed||R(n).splice(e,1)}async function l(){M(i,!0),M(o,``);try{let e=await ws(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){M(o,`Unable to load tagging settings.`);return}M(n,fH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),M(o,`Unable to load tagging settings.`)}finally{M(i,!1)}}async function u(){if(!(R(a)||!R(r))){M(a,!0);try{let e=await Ts(`/admin/tagging/settings`,`PUT`,pH(R(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){lc.error(e.status!==401&&mH(e.data)||`Unable to save tagging settings.`);return}M(n,fH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0),M(o,``),lc.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),lc.error(`Unable to save tagging settings.`)}finally{M(a,!1)}}}On(()=>{Y.refreshTick,l()});var d=xH(),f=F(d),p=P(f);iC(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{V(e,hH())},$$slots:{title:!0}});var m=I(p,2),h=P(m);W(h,17,()=>R(n),ii,(e,t,n)=>{var i=vH(),a=P(i),o=P(a);K(o,`for`,`tagging-header-`+n);var s=I(o,2);ea(s),K(s,`id`,`tagging-header-`+n),D(a);var l=I(a,2),u=P(l);K(u,`for`,`tagging-prefix-`+n);var d=I(u,2);ea(d),K(d,`id`,`tagging-prefix-`+n),D(l);var f=I(l,2),p=P(f);K(p,`for`,`tagging-delimiter-`+n);var m=I(p,2);ea(m),K(m,`id`,`tagging-delimiter-`+n),D(f);var h=I(f,2),g=P(h);ea(g),Ve(2),D(h);var _=I(h,2),v=P(_),y=e=>{V(e,gH())},b=e=>{var i=_H();L(()=>{i.disabled=!R(r),K(i,`aria-label`,`Remove tagging header `+(R(t).header||n+1))}),z(`click`,i,()=>c(n)),V(e,i)};U(v,e=>{R(t).managed?e(y):e(b,-1)}),D(_),D(i),L(()=>{s.disabled=R(t).managed||!R(r),d.disabled=R(t).managed||!R(r),m.disabled=R(t).managed||!R(r),g.disabled=R(t).managed||!R(r)}),la(s,()=>R(t).header,e=>R(t).header=e),la(d,()=>R(t).prefix,e=>R(t).prefix=e),la(m,()=>R(t).delimiter,e=>R(t).delimiter=e),ua(g,()=>R(t).do_not_pass,e=>R(t).do_not_pass=e),V(e,i)});var g=I(h,2),_=e=>{NS(e,{size:16,label:`Loading tagging settings`})};U(g,e=>{R(i)&&e(_)});var v=I(g,2),y=e=>{V(e,yH())};U(v,e=>{!R(i)&&R(n).length===0&&e(y)}),D(m);var b=I(m,2),x=P(b);J(P(x),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(x);var S=I(x,2);J(P(S),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(S),D(b),D(f);var C=I(f,2),w=P(C),T=e=>{var t=bH(),n=P(t,!0);D(t),L(()=>H(n,R(o))),V(e,t)};U(w,e=>{R(o)&&e(T)}),D(C),L(()=>{x.disabled=!R(r)||R(a)||R(i),S.disabled=!R(r)||R(a)||R(i),K(S,`aria-busy`,R(a)?`true`:`false`)}),z(`click`,x,s),z(`click`,S,u),V(e,d),k()}Br([`click`]);function CH(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?Cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?Cc(r):``}}function wH(e,t,n,r){return{...CH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function TH(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var EH=B(`

          Usage Pricing Recalculation

          `),DH=B(`
          `);function OH(e,t){O(t,!0);let n=j(``),r=j(``),i=j(!1),a=A(()=>ks.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}R(i)||Js.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Fa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/usage/recalculate-pricing`,`POST`,wH({selectedPreset:Uc.selectedPreset,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate,today:vs.todayDate()},R(n),R(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Js.error=`Unable to recalculate pricing.`;return}Js.close(),lc.success(TH(e.data)),Yc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Js.error=`Unable to recalculate pricing.`}finally{M(i,!1)}}}var c=Xr(),l=F(c),u=e=>{var t=DH(),s=P(t);iC(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{V(e,EH())},$$slots:{title:!0}});var c=I(s,2),l=P(c),u=I(P(l),2);fl(P(u),{}),D(u),D(l);var d=I(l,2),f=I(P(d),2);ea(f),D(d);var p=I(d,2),m=I(P(p),2);ea(m),D(p),D(c);var h=I(c,2),g=P(h);J(P(g),{get icon(){return Fa},class:`form-action-icon`}),Ve(2),D(g),D(h),D(t),L(()=>{g.disabled=R(i)||!R(a),K(g,`aria-busy`,R(i)?`true`:`false`)}),la(f,()=>R(n),e=>M(n,e)),la(m,()=>R(r),e=>M(r,e)),z(`click`,g,o),V(e,t)};U(l,e=>{R(a)&&e(u)}),V(e,c),k()}Br([`click`]);function kH(e){return String(e&&e.status||`ok`).toLowerCase()}function AH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=kH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function jH(e){return!!e&&kH(e)===`ok`}function MH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function NH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var PH=B(`

          Runtime Refresh

          `),FH=B(`
        • `),IH=B(`
            `),LH=B(`
            `,1);function RH(e,t){O(t,!0);let n=j(!1),r=j(null);async function i(){if(!R(n)){M(n,!0),M(r,null);try{let e=await Ts(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){lc.error(`Runtime refresh failed.`);return}M(r,e.data&&typeof e.data==`object`?e.data:null,!0),jH(R(r))?lc.success(AH(R(r))):lc.error(AH(R(r))),Y.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),lc.error(`Runtime refresh failed.`)}finally{M(n,!1)}}}var a=LH(),o=F(a),s=P(o);iC(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{V(e,PH())},$$slots:{title:!0}});var c=I(s,2),l=P(c);let u;J(P(l),{get icon(){return ho},class:`settings-refresh-icon`}),Ve(2),D(l),D(c),D(o);var d=I(o,2),f=P(d),p=e=>{var t=IH();W(t,21,()=>MH(R(r)),e=>e.name,(e,t)=>{var n=FH(),r=P(n,!0);D(n),L(e=>{G(n,1,`runtime-refresh-step is-${R(t).status??``}`,`svelte-yeq2mp`),H(r,e)},[()=>NH(R(t))]),V(e,n)}),D(t),V(e,t)},m=A(()=>MH(R(r)).length>0);U(f,e=>{R(m)&&e(p)}),D(d),L(()=>{u=G(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":R(n)}),l.disabled=R(n),K(l,`aria-busy`,R(n)?`true`:`false`)}),z(`click`,l,i),V(e,a),k()}Br([`click`]);var zH=B(``),BH=B(`

            `),VH=B(`

            `),HH=B(``),UH=B(`
            `),WH=B(`

            AI Processing

            `);function GH(e,t){O(t,!0);let n=j(N([])),r=j(!1),i=j(``),a=j(``);async function o(){M(r,!0),M(a,``);try{let e=await ws(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load runtime settings.`);return}M(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),M(a,`Unable to load runtime settings.`)}finally{M(r,!1)}}async function s(e,t,r){if(!(e.locked||R(i))){M(i,e.key,!0);try{let i=await Ts(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,lc.error(`Unable to save ${e.label}.`);return}M(n,R(n).map(t=>t.key===e.key?i.data:t),!0),lc.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),lc.error(`Unable to save ${e.label}.`)}finally{M(i,``)}}}On(()=>{Y.refreshTick,o()});var c=Xr(),l=F(c),u=e=>{var t=WH(),o=P(t),c=I(P(o),2),l=e=>{var t=zH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(o);var u=I(o,2);W(u,21,()=>R(n),e=>e.key,(e,t)=>{var n=UH(),r=P(n),a=P(r),o=P(a,!0);D(a);var c=I(a,2),l=e=>{var n=BH(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(c,e=>{R(t).description&&e(l)});var u=I(c,2),d=e=>{var n=VH(),r=P(n);D(n),L(()=>H(r,`Managed by ${(R(t).managed_by||`environment`)??``}`)),V(e,n)};U(u,e=>{R(t).locked&&e(d)}),D(r);var f=I(r,2);W(f,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=HH(),r=P(n,!0);D(n);var i={};L(()=>{K(n,`title`,R(t).description||``),H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(f);var p;Hi(f),D(n),L(()=>{K(a,`for`,`runtime-setting-${R(t).key}`),H(o,R(t).label),K(f,`id`,`runtime-setting-${R(t).key}`),f.disabled=R(t).locked||R(i)!==``,p!==(p=R(t).value)&&(f.value=(f.__value=R(t).value)??``,Vi(f,R(t).value))}),z(`change`,f,e=>s(R(t),e.currentTarget.value,e.currentTarget)),V(e,n)}),D(u),D(t),L(()=>K(u,`aria-busy`,R(r)?`true`:`false`)),V(e,t)};U(l,e=>{(R(n).length>0||R(a))&&e(u)}),V(e,c),k()}Br([`change`]);var KH=B(`
            `);function qH(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`settings`&&(vs.ensureOptions(),ks.ensureLoaded())});var n=KH(),r=I(P(n),2),i=P(r);YV(i,{});var a=I(i,2);QV(a,{});var o=I(a,2);cH(o,{});var s=I(o,2);uH(s,{});var c=I(s,2);SH(c,{});var l=I(c,2);GH(l,{});var u=I(l,2);OH(u,{}),RH(I(u,2),{}),D(r);var d=I(r,2),f=P(d,!0);D(d),D(n),L(e=>H(f,e),[()=>Wo()]),V(e,n),k()}var JH=B(`
            `),YH=B(`
             
            `),XH=B(`
             
            `),ZH=B(`
             
            `),QH=B(`
            `),$H=B(`
            `,1),eU=B(`
            `);function tU(e,t){O(t,!0);let n=q(t,`showPromptCache`,3,!0),r=MM({logPrefix:`Failed to copy interaction message:`}),i=A(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=eU();let l;var u=P(c),d=e=>{var r=YH(),i=P(r),a=P(i),c=P(a,!0);D(a);var l=I(a,2),u=P(l,!0);D(l);var d=I(l,2),f=P(d,!0);D(d),D(i);var p=I(i,2),m=e=>{var n=JH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${t.msg.functionCallID??``}`)),V(e,n)};U(p,e=>{t.msg.functionCallID&&e(m)});var h=I(p,2),g=e=>{var n=Xr();W(F(n),17,()=>t.msg.toolCalls,ii,(e,n)=>{var r=Xr(),i=F(r),a=e=>{var r=JH(),i=P(r);D(r),L(()=>H(i,`Call ID${t.msg.toolCalls.length>1?` (`+R(n).name+`)`:``}: ${R(n).id??``}`)),V(e,r)};U(i,e=>{R(n).id&&e(a)}),V(e,r)}),V(e,n)};U(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=I(h,2),v=P(_,!0);D(_),D(r),L((e,n,i,a)=>{K(r,`title`,e),H(c,t.msg.roleLabel),H(u,n),H(f,i),H(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>vs.formatTimestamp(t.msg.timestamp),()=>pL(t.msg)]),V(e,r)},f=e=>{var r=$H(),i=F(r),a=P(i),s=P(a,!0);D(a);var c=I(a,2),l=P(c,!0);D(c),D(i);var u=I(i,2),d=e=>{var r=XH(),i=P(r,!0);D(r),L(e=>{K(r,`title`,e),H(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),V(e,r)};U(u,e=>{t.msg.text&&e(d)});var f=I(u,2),p=e=>{var n=QH();W(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=ZH(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(r);var c=I(r,2),l=e=>{var n=JH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${R(t).id??``}`)),V(e,n)};U(c,e=>{R(t).id&&e(l)});var u=I(c,2),d=P(u,!0);D(u),D(n),L((e,n)=>{H(a,R(t).name+`()`),H(s,e),H(d,n)},[()=>hL(R(t))||`No arguments`,()=>hL(R(t))||`No arguments`]),V(e,n)}),D(n),V(e,n)};U(f,e=>{t.msg.toolCalls&&e(p)}),L((e,n)=>{K(i,`title`,e),H(s,t.msg.roleLabel),H(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>vs.formatTimestamp(t.msg.timestamp)]),V(e,r)};U(u,e=>{R(i)?e(d):e(f,-1)});var p=I(u,2);let m;var h=P(p);{let e=A(()=>r.copied?Ga:Ja);J(h,{get icon(){return R(e)},width:`14`,height:`14`})}D(p),D(c),L(e=>{G(c,1,Ni([R(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),K(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),K(c,`data-entry-id`,t.msg.entryID),l=Bi(c,``,l,e),m=G(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),K(p,`aria-label`,r.copied?`Message copied`:`Copy message`),K(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),z(`click`,p,e=>{e.stopPropagation(),r.copy(mL(t.msg))}),V(e,c),k()}Br([`click`]);function nU(e,t=0){let n=Math.max(0,oU(e)-Math.max(0,oU(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function rU(e,t,n=0){let r=nU(t,n),i=oU(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function iU(e,t,n=0){return rU(oU(t)-oU(e),t,n)}function aU(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=oU(t),a=0;e.forEach((e,t)=>{oU(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=oU(e[c])0&&s===c&&l?`end`:`start`}}function oU(e){let t=Number(e);return Number.isFinite(t)?t:0}var sU=B(`
            `),cU=B(`
            `),lU=B(`

            Loading interactions...

            `),uU=B(`

            No interaction data available for this entry.

            `),dU=B(``),fU=B(`
            `,1),pU=B(`

            Showing the newest part of this session and the selected log.

            `),mU=B(`
            `),hU=B(``),gU=B(``),_U=B(``);function vU(e,t){O(t,!0);let n=CL,r=Number(Sa(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=j(N(a)),s=j(320),c=j(760),l=j(!1),u=j(!1),d=j(Sa(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=SP(180);return t?rc(e,{x:R(o),duration:r,easing:oc}):n?{duration:0}:ic(e,{axis:`x`,duration:r,easing:oc})}async function m(e){if(e===R(l))return;let t=R(l)&&!e;M(u,t,!0),M(l,e,!0),t&&(await xr(),M(u,!1))}function h(){M(d,!R(d)),Ca(i,R(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=nU(window.innerWidth,e);M(s,t.min,!0),M(c,t.max,!0),M(o,rU(a,window.innerWidth,e),!0)}function v(e){M(o,iU(e,window.innerWidth,g()),!0),a=R(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),Ca(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=R(o)+(e.key===`ArrowLeft`?24:-24),_(),a=R(o),Ca(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=aU(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:SP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}On(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Oa.anyOpen&&(R(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),On(()=>{n.conversationOpen||M(l,!1)}),On(()=>{if(!R(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),On(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var T=Xr(),E=F(T),ee=e=>{var t=Xr();W(F(t),16,()=>[R(l)],e=>e,(e,t)=>{var r=_U();let i,a;var l=P(r),f=I(l,2),g=P(f),_=I(P(g),2),v=P(_);let w;D(_),D(g);var T=I(g,2),E=P(T),ee=P(E);{let e=A(()=>t?so:oo);J(ee,{get icon(){return R(e)},class:`table-icon-svg`})}D(E),Rs(I(E,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),D(T),D(f);var te=I(f,2),ne=P(te),re=e=>{var t=sU(),n=P(t);J(P(n),{get icon(){return Na},width:`14`,height:`14`}),D(n);var r=I(n,2);J(P(r),{get icon(){return Aa},width:`14`,height:`14`}),D(r),D(t),z(`click`,n,()=>C(-1)),z(`click`,r,()=>C(1)),V(e,t)};U(ne,e=>{n.conversationMessages.length>1&&e(re)});var ie=I(ne,2),ae=e=>{var t=cU(),r=P(t,!0);D(t),L(()=>H(r,n.conversationError)),V(e,t)};U(ie,e=>{n.conversationError&&e(ae)});var oe=I(ie,2),se=e=>{V(e,lU())};U(oe,e=>{n.conversationLoading&&e(se)});var ce=I(oe,2),le=e=>{V(e,uU())},ue=A(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());U(ce,e=>{R(ue)&&e(le)});var de=I(ce,2),fe=e=>{var t=fU(),r=F(t),i=e=>{var t=dU(),n=P(t);let r;Ve(2),D(t),L(()=>{K(t,`aria-checked`,R(d)),K(t,`title`,(R(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=G(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":R(d)})}),z(`click`,t,h),V(e,t)},a=A(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));U(r,e=>{R(a)&&e(i)});var o=I(r,2);W(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{tU(e,{get msg(){return R(t)},get showPromptCache(){return R(d)}})}),D(o),ma(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),V(e,t)};U(de,e=>{n.conversationMessages.length>0&&e(fe)});var pe=I(de,2),me=e=>{V(e,pU())};U(pe,e=>{n.conversationTruncated&&e(me)});var he=I(pe,2),ge=e=>{var t=mU(),r=I(P(t),2),i=P(r,!0);D(r),D(t),L(e=>H(i,e),[()=>n.conversationLiveStatusText()]),V(e,t)},_e=A(()=>n.conversationLiveWaiting());U(he,e=>{R(_e)&&e(ge)}),D(te);var ve=I(te,2),ye=e=>{var t=gU(),r=P(t),i=P(r);ut(i);var a=I(i,2),o=e=>{var t=hU(),r=P(t,!0);D(t),L(()=>H(r,n.followUpError)),V(e,t)};U(a,e=>{n.followUpError&&e(o)});var s=I(a,2),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u),D(s),D(r),D(t),L((e,t,r)=>{i.disabled=e,H(l,t),u.disabled=r,H(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),zr(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),la(i,()=>n.followUpText,e=>n.followUpText=e),V(e,t)},be=A(()=>n.conversationAnchorID&&n.followUpKind());U(ve,e=>{R(be)&&e(ye)}),D(r),ma(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),L(()=>{i=G(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),K(r,`role`,t?`dialog`:void 0),K(r,`aria-modal`,t?`true`:void 0),a=Bi(r,``,a,{"--conversation-panel-width":R(o)+`px`}),K(l,`aria-valuemin`,R(s)),K(l,`aria-valuemax`,R(c)),K(l,`aria-valuenow`,R(o)),K(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),K(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=G(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),K(E,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),K(E,`title`,t?`Exit fullscreen`:`Fullscreen`),K(E,`aria-pressed`,t)}),z(`pointerdown`,l,y),z(`pointermove`,l,b),z(`pointerup`,l,x),zr(`pointercancel`,l,x),zr(`lostpointercapture`,l,x),z(`keydown`,l,S),z(`click`,E,()=>m(!t)),Di(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&R(u)})),V(e,r)}),V(e,t)};U(E,e=>{n.conversationOpen&&e(ee)}),V(e,T),k()}Br([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var yU=B(`
            `,1);function bU(e,t){O(t,!0);let n={overview:OC,usage:wT,budgets:eD,"rate-limits":dO,models:Xj,workflows:_P,"audit-logs":mR,guardrails:sz,"mcp-servers":Vz,"providers-config":XB,"auth-keys":WV,settings:qH};vs.init(),Uc.init(),Y.init(),Ea.init(),Da.init(),Yo.init(),On(()=>{Y.refreshTick,ks.fetch(),Wc.fetchModels(),Wc.fetchCategories()}),On(()=>{document.body.classList.toggle(`dashboard-modal-open`,Oa.anyOpen)});let r=A(()=>n[Yo.page]||OC);var i=yU(),a=F(i);Is(a,{});var o=I(a,2);let s;var c=P(o);mc(c,{}),hi(I(c,2),()=>R(r),(e,t)=>{t(e,{})}),D(o);var l=I(o,2);vU(l,{});var u=I(l,2);Ks(u,{});var d=I(u,2);Qs(d,{}),fc(I(d,2),{}),L(()=>s=G(o,1,`content`,null,s,{"interactions-open":CL.conversationOpen})),V(e,i),k()}$r(bU,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index 9df8d21fc..2609b0a3d 100644 --- a/internal/admin/dashboard/static/dist/index.html +++ b/internal/admin/dashboard/static/dist/index.html @@ -7,7 +7,7 @@ GoModel Dashboard - + diff --git a/internal/admin/handler.go b/internal/admin/handler.go index 1bf85443c..924f0f4dc 100644 --- a/internal/admin/handler.go +++ b/internal/admin/handler.go @@ -171,6 +171,8 @@ type auditConversationResponse struct { type auditSessionResponse struct { SessionID string `json:"session_id,omitempty"` Count int `json:"count"` + MatchingCount int `json:"matching_count"` + TotalCount int `json:"total_count"` FirstTimestamp time.Time `json:"first_timestamp"` LastTimestamp time.Time `json:"last_timestamp"` Latest auditLogEntryResponse `json:"latest"` diff --git a/internal/admin/handler_audit.go b/internal/admin/handler_audit.go index 66225135e..f93f1eb07 100644 --- a/internal/admin/handler_audit.go +++ b/internal/admin/handler_audit.go @@ -263,9 +263,12 @@ func (h *Handler) AuditSessions(c *echo.Context) error { // Session heads are list rows too. Keep the default grouped view on the // same slim payload contract as /admin/audit/log. slimAuditListEntry(&enriched.Entries[i]) + totalCount := max(session.Count, session.TotalCount) response.Sessions[i] = auditSessionResponse{ SessionID: session.SessionID, Count: session.Count, + MatchingCount: session.Count, + TotalCount: totalCount, FirstTimestamp: session.FirstTimestamp, LastTimestamp: session.LastTimestamp, Latest: enriched.Entries[i], diff --git a/internal/admin/handler_audit_sessions_test.go b/internal/admin/handler_audit_sessions_test.go index 3de2dd675..d48a80bd2 100644 --- a/internal/admin/handler_audit_sessions_test.go +++ b/internal/admin/handler_audit_sessions_test.go @@ -40,6 +40,7 @@ func TestAuditSessions_Success(t *testing.T) { { SessionID: "sess-a", Count: 3, + TotalCount: 6, FirstTimestamp: now.Add(-time.Minute), LastTimestamp: now, Latest: auditlog.LogEntry{ @@ -83,9 +84,11 @@ func TestAuditSessions_Success(t *testing.T) { var result struct { Sessions []struct { - SessionID string `json:"session_id"` - Count int `json:"count"` - Latest *auditlog.LogEntry `json:"latest"` + SessionID string `json:"session_id"` + Count int `json:"count"` + MatchingCount int `json:"matching_count"` + TotalCount int `json:"total_count"` + Latest *auditlog.LogEntry `json:"latest"` } `json:"sessions"` Total int `json:"total"` } @@ -95,13 +98,13 @@ func TestAuditSessions_Success(t *testing.T) { if result.Total != 2 || len(result.Sessions) != 2 { t.Fatalf("total=%d sessions=%d, want 2/2", result.Total, len(result.Sessions)) } - if result.Sessions[0].SessionID != "sess-a" || result.Sessions[0].Count != 3 { + if result.Sessions[0].SessionID != "sess-a" || result.Sessions[0].Count != 3 || result.Sessions[0].MatchingCount != 3 || result.Sessions[0].TotalCount != 6 { t.Errorf("first session = %+v", result.Sessions[0]) } if result.Sessions[0].Latest == nil || result.Sessions[0].Latest.ID != "log-3" { t.Errorf("latest entry not embedded: %+v", result.Sessions[0].Latest) } - if result.Sessions[1].SessionID != "" || result.Sessions[1].Count != 1 { + if result.Sessions[1].SessionID != "" || result.Sessions[1].Count != 1 || result.Sessions[1].MatchingCount != 1 || result.Sessions[1].TotalCount != 1 { t.Errorf("singleton thread = %+v", result.Sessions[1]) } } diff --git a/internal/auditlog/reader.go b/internal/auditlog/reader.go index 1dd06516e..cc1925014 100644 --- a/internal/auditlog/reader.go +++ b/internal/auditlog/reader.go @@ -45,11 +45,13 @@ type LogListResult struct { } // SessionSummary describes one session (thread) of audit log entries: its -// latest entry plus aggregate span and count. Entries without a session id -// form singleton threads whose SessionID is empty. +// latest matching entry plus aggregate span and counts. Count reflects the +// active filters; TotalCount covers the complete session. Entries without a +// session id form singleton threads whose SessionID is empty. type SessionSummary struct { SessionID string `json:"session_id,omitempty"` Count int `json:"count"` + TotalCount int `json:"total_count"` FirstTimestamp time.Time `json:"first_timestamp"` LastTimestamp time.Time `json:"last_timestamp"` Latest LogEntry `json:"latest"` @@ -89,7 +91,8 @@ type Reader interface { // GetSessions returns a paginated list of audit sessions (threads): one // summary per distinct session id, plus singleton threads for entries // without one, ordered by latest activity. Filters apply to entries before - // grouping, so a thread's Latest and Count reflect the matching entries. + // grouping, so a thread's Latest, Count and span reflect the matching + // entries. TotalCount reflects the complete session. GetSessions(ctx context.Context, params LogQueryParams) (*SessionListResult, error) // GetLogByID returns a single audit log entry by ID. diff --git a/internal/auditlog/reader_sessions_mongodb.go b/internal/auditlog/reader_sessions_mongodb.go index 8f235dc97..745472658 100644 --- a/internal/auditlog/reader_sessions_mongodb.go +++ b/internal/auditlog/reader_sessions_mongodb.go @@ -70,6 +70,21 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) {Key: "as", Value: "latest"}, }}}, bson.D{{Key: "$unwind", Value: "$latest"}}, + // Count the complete session after the filtered page winners are + // known. Sessionless rows remain singleton threads and skip this + // lookup's match through the non-empty sid guard. + bson.D{{Key: "$lookup", Value: bson.D{ + {Key: "from", Value: r.collection.Name()}, + {Key: "let", Value: bson.D{{Key: "sid", Value: bson.D{{Key: "$ifNull", Value: bson.A{"$latest.session_id", ""}}}}}}, + {Key: "pipeline", Value: bson.A{ + bson.D{{Key: "$match", Value: bson.D{{Key: "$expr", Value: bson.D{{Key: "$and", Value: bson.A{ + bson.D{{Key: "$ne", Value: bson.A{"$$sid", ""}}}, + bson.D{{Key: "$eq", Value: bson.A{"$session_id", "$$sid"}}}, + }}}}}}}, + bson.D{{Key: "$count", Value: "count"}}, + }}, + {Key: "as", Value: "session_total"}, + }}}, }}, {Key: "total", Value: bson.A{ bson.D{{Key: "$count", Value: "count"}}, @@ -85,10 +100,13 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) var facetResult struct { Data []struct { - Latest mongoLogRow `bson:"latest"` - Count int `bson:"count"` - FirstTS time.Time `bson:"first_ts"` - LastTS time.Time `bson:"last_ts"` + Latest mongoLogRow `bson:"latest"` + Count int `bson:"count"` + SessionTotal []struct { + Count int `bson:"count"` + } `bson:"session_total"` + FirstTS time.Time `bson:"first_ts"` + LastTS time.Time `bson:"last_ts"` } `bson:"data"` Total []struct { Count int `bson:"count"` @@ -114,9 +132,17 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) if entry == nil { continue } + totalCount := 1 + if entry.SessionID != "" { + totalCount = row.Count + if len(row.SessionTotal) > 0 && row.SessionTotal[0].Count > totalCount { + totalCount = row.SessionTotal[0].Count + } + } sessions = append(sessions, SessionSummary{ SessionID: entry.SessionID, Count: row.Count, + TotalCount: totalCount, FirstTimestamp: row.FirstTS, LastTimestamp: row.LastTS, Latest: *entry, diff --git a/internal/auditlog/reader_sessions_mongodb_test.go b/internal/auditlog/reader_sessions_mongodb_test.go index 0d1508726..a5aca8321 100644 --- a/internal/auditlog/reader_sessions_mongodb_test.go +++ b/internal/auditlog/reader_sessions_mongodb_test.go @@ -43,10 +43,10 @@ func TestMongoDBReader_GetSessions(t *testing.T) { t.Fatalf("sessions[0].Latest.ID = %q, want solo", got) } threadA := result.Sessions[1] - if threadA.SessionID != "sess-a" || threadA.Count != 2 || threadA.Latest.ID != "a-2" { + if threadA.SessionID != "sess-a" || threadA.Count != 2 || threadA.TotalCount != 2 || threadA.Latest.ID != "a-2" { t.Fatalf("sess-a summary = %+v", threadA) } - if !threadA.FirstTimestamp.Equal(base) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { + if !threadA.FirstTimestamp.Equal(base.Add(-24*time.Hour)) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { t.Fatalf("sess-a span = %v..%v", threadA.FirstTimestamp, threadA.LastTimestamp) } if result.Sessions[2].SessionID != "sess-b" { diff --git a/internal/auditlog/reader_sessions_sql.go b/internal/auditlog/reader_sessions_sql.go index 3f9cec4bf..71f1c467d 100644 --- a/internal/auditlog/reader_sessions_sql.go +++ b/internal/auditlog/reader_sessions_sql.go @@ -63,7 +63,12 @@ func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*Se FROM ranked WHERE rn = 1 ORDER BY last_ts DESC, id DESC LIMIT ? OFFSET ? ) - SELECT ` + qualifiedLogColumns("l") + `, h.entry_count, h.first_ts, h.last_ts + SELECT ` + qualifiedLogColumns("l") + `, h.entry_count, + CASE WHEN NULLIF(l.session_id, '') IS NULL THEN 1 ELSE ( + SELECT COUNT(*) FROM audit_logs session_entries + WHERE session_entries.session_id = l.session_id + ) END AS total_count, + h.first_ts, h.last_ts FROM heads h JOIN audit_logs l ON l.id = h.id ORDER BY h.last_ts DESC, h.id DESC` @@ -92,12 +97,13 @@ func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*Se type sessionSummaryScanner struct { row sqlx.Row count *int + total *int firstTS *sqlx.Timestamp lastTS *sqlx.Timestamp } func (s sessionSummaryScanner) Scan(dest ...any) error { - return s.row.Scan(append(dest, s.count, s.firstTS, s.lastTS)...) + return s.row.Scan(append(dest, s.count, s.total, s.firstTS, s.lastTS)...) } func scanSQLSessionSummary(row sqlx.Row) (*SessionSummary, error) { @@ -106,6 +112,7 @@ func scanSQLSessionSummary(row sqlx.Row) (*SessionSummary, error) { entry, err := scanSQLLogEntry(sessionSummaryScanner{ row: row, count: &summary.Count, + total: &summary.TotalCount, firstTS: &firstTS, lastTS: &lastTS, }) diff --git a/internal/auditlog/session_id_test.go b/internal/auditlog/session_id_test.go index 99f030b99..8f5821f7b 100644 --- a/internal/auditlog/session_id_test.go +++ b/internal/auditlog/session_id_test.go @@ -271,18 +271,18 @@ func TestSQLReader_GetSessions(t *testing.T) { if got := result.Sessions[0].Latest.ID; got != "solo" { t.Fatalf("sessions[0].Latest.ID = %q, want solo", got) } - if result.Sessions[0].SessionID != "" || result.Sessions[0].Count != 1 { + if result.Sessions[0].SessionID != "" || result.Sessions[0].Count != 1 || result.Sessions[0].TotalCount != 1 { t.Fatalf("singleton thread = %+v", result.Sessions[0]) } threadA := result.Sessions[1] - if threadA.SessionID != "sess-a" || threadA.Count != 2 { + if threadA.SessionID != "sess-a" || threadA.Count != 2 || threadA.TotalCount != 2 { t.Fatalf("sess-a summary = %+v", threadA) } if threadA.Latest.ID != "a-2" { t.Fatalf("sess-a latest = %q, want a-2", threadA.Latest.ID) } - if !threadA.FirstTimestamp.Equal(base) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { + if !threadA.FirstTimestamp.Equal(base.Add(-24*time.Hour)) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { t.Fatalf("sess-a span = %v..%v", threadA.FirstTimestamp, threadA.LastTimestamp) } @@ -405,12 +405,13 @@ func TestSQLReader_GetSessionsOnLegacyUUIDSchema(t *testing.T) { }) } -// sessionThreadFixture is the shared grouped-view corpus: a two-entry session, -// a one-entry session and a sessionless request. The thread head (a-2) carries -// list columns and a data payload so the readers' head re-read is checked. +// sessionThreadFixture is the shared grouped-view corpus: a two-entry session +// crossing a UTC day boundary, a one-entry session and a sessionless request. +// The thread head (a-2) carries list columns and a data payload so the readers' +// head re-read is checked. func sessionThreadFixture(base time.Time) []*LogEntry { return []*LogEntry{ - {ID: "a-1", Timestamp: base, Provider: "openai", SessionID: "sess-a", StatusCode: 200}, + {ID: "a-1", Timestamp: base.Add(-24 * time.Hour), Provider: "openai", SessionID: "sess-a", StatusCode: 200}, { ID: "a-2", Timestamp: base.Add(2 * time.Minute), Provider: "openai", SessionID: "sess-a", StatusCode: 200, Path: "/v1/chat/completions", @@ -477,6 +478,7 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { params LogQueryParams wantSessionID string wantCount int + wantTotal int wantLatestID string }{ { @@ -484,6 +486,7 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { params: LogQueryParams{StatusCode: &status, Limit: 10}, wantSessionID: "sess-b", wantCount: 1, + wantTotal: 1, wantLatestID: "b-1", }, { @@ -491,6 +494,19 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { params: LogQueryParams{SessionID: "sess-a", Limit: 10}, wantSessionID: "sess-a", wantCount: 2, + wantTotal: 2, + wantLatestID: "a-2", + }, + { + name: "date filter reports matching and complete session counts", + params: LogQueryParams{ + QueryParams: QueryParams{StartDate: time.Date(2026, 7, 27, 0, 0, 0, 0, time.UTC), EndDate: time.Date(2026, 7, 27, 0, 0, 0, 0, time.UTC)}, + SessionID: "sess-a", + Limit: 10, + }, + wantSessionID: "sess-a", + wantCount: 1, + wantTotal: 2, wantLatestID: "a-2", }, } @@ -504,9 +520,9 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { t.Fatalf("result = %+v, want exactly one thread", result) } got := result.Sessions[0] - if got.SessionID != tt.wantSessionID || got.Count != tt.wantCount || got.Latest.ID != tt.wantLatestID { - t.Fatalf("thread = %+v, want session %q count %d latest %q", - got, tt.wantSessionID, tt.wantCount, tt.wantLatestID) + if got.SessionID != tt.wantSessionID || got.Count != tt.wantCount || got.TotalCount != tt.wantTotal || got.Latest.ID != tt.wantLatestID { + t.Fatalf("thread = %+v, want session %q count %d total %d latest %q", + got, tt.wantSessionID, tt.wantCount, tt.wantTotal, tt.wantLatestID) } }) } diff --git a/tools/seed-demo-data.sh b/tools/seed-demo-data.sh index afe1598c8..22975af6e 100755 --- a/tools/seed-demo-data.sh +++ b/tools/seed-demo-data.sh @@ -13,6 +13,10 @@ semantic_cache_pct="${DEMO_SEMANTIC_CACHE_PCT:-7}" prompt_cache_pct="${DEMO_PROMPT_CACHE_PCT:-28}" rewrite_pct="${DEMO_REWRITE_PCT:-18}" prefix="${DEMO_SEED_PREFIX:-demo-generated}" +utc_hour="$(date -u +%H)" +utc_minute="$(date -u +%M)" +utc_second="$(date -u +%S)" +current_utc_second=$((10#$utc_hour * 3600 + 10#$utc_minute * 60 + 10#$utc_second)) usage() { cat < stays open so the close can animate) and the state lives in // auditList. @@ -49,6 +49,21 @@ thread.ontoggle(); } + function threadDescription() { + const total = Number(thread.count || 1); + const matching = Number(thread.matchingCount || total); + if (matching < total) { + return ( + "Session with " + + total + + " requests; " + + matching + + " match selected filters" + ); + } + return "Session with " + total + " requests"; + } + function openConversation(event) { event.stopPropagation(); event.preventDefault(); @@ -75,10 +90,9 @@ type="button" class="audit-thread-expander" aria-expanded={thread.expanded} - title={"Session with " + thread.count + " requests"} - aria-label={"Session with " + - thread.count + - " requests, " + + title={threadDescription()} + aria-label={threadDescription() + + ", " + (thread.expanded ? "collapse" : "expand")} onclick={toggleThread} > diff --git a/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte b/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte index 7a0cc515b..b9fa2bb2d 100644 --- a/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte +++ b/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte @@ -11,6 +11,7 @@ import { auditIsThreadHead, auditSessionCount, + auditSessionMatchingCount, auditSessionId, } from "./audit-logic.js"; @@ -34,6 +35,7 @@ {entry} thread={{ count: auditSessionCount(entry), + matchingCount: auditSessionMatchingCount(entry), expanded, ontoggle: () => auditList.toggleThread(entry), }} diff --git a/web/dashboard/src/pages/audit-logs/audit-logic.js b/web/dashboard/src/pages/audit-logs/audit-logic.js index 35fdeebdc..9227cfc81 100644 --- a/web/dashboard/src/pages/audit-logs/audit-logic.js +++ b/web/dashboard/src/pages/audit-logs/audit-logic.js @@ -161,6 +161,14 @@ export function auditSessionCount(entry) { return Number.isFinite(count) && count > 1 ? count : 1; } +// The matching count is the part of a complete session that satisfied the +// active date/search filters. Older servers only provide one count, so use the +// complete count as a backwards-compatible fallback. +export function auditSessionMatchingCount(entry) { + const count = Number(entry && entry.session_matching_count); + return Number.isFinite(count) && count > 0 ? count : auditSessionCount(entry); +} + // auditIsThreadHead reports whether a row gets the expander: it belongs to a // session with more entries than itself. export function auditIsThreadHead(entry) { @@ -176,11 +184,28 @@ export function auditLogFromSessions(payload) { return { entries: sessions .filter((session) => session && session.latest) - .map((session) => ({ - ...session.latest, - session_id: auditSessionId(session.latest) || String(session.session_id || "").trim(), - session_count: Number(session.count || 1), - })), + .map((session) => { + const matchingValue = Number( + session.matching_count || session.count || 1, + ); + const matchingCount = + Number.isFinite(matchingValue) && matchingValue > 0 + ? matchingValue + : 1; + const totalValue = Number(session.total_count || matchingCount); + const totalCount = + Number.isFinite(totalValue) && totalValue > matchingCount + ? totalValue + : matchingCount; + return { + ...session.latest, + session_id: + auditSessionId(session.latest) || + String(session.session_id || "").trim(), + session_count: totalCount, + session_matching_count: matchingCount, + }; + }), total: Number((payload && payload.total) || 0), limit: Number((payload && payload.limit) || 25), offset: Number((payload && payload.offset) || 0), @@ -388,6 +413,10 @@ export function auditGroupedLogWithLiveEntries(payload, currentEntries, filters) auditSessionCount(merged[index]), auditSessionCount(entry), ), + session_matching_count: Math.max( + auditSessionMatchingCount(merged[index]), + auditSessionMatchingCount(entry), + ), }; keys.forEach((key) => persistedKeys.add(key)); return; diff --git a/web/dashboard/src/pages/audit-logs/live-logs-logic.js b/web/dashboard/src/pages/audit-logs/live-logs-logic.js index 3a3845eb0..a9743c1b1 100644 --- a/web/dashboard/src/pages/audit-logs/live-logs-logic.js +++ b/web/dashboard/src/pages/audit-logs/live-logs-logic.js @@ -262,7 +262,10 @@ export function liveLogsMethods() { ...head, session_count: Math.max(1, Number(other.session_count || 1)) + - Math.max(1, Number(entry.session_count || 1)) + Math.max(1, Number(entry.session_count || 1)), + session_matching_count: + Math.max(1, Number(other.session_matching_count || other.session_count || 1)) + + Math.max(1, Number(entry.session_matching_count || entry.session_count || 1)) }; const next = entries.filter((_, index) => index !== myIndex && index !== otherIndex); next.unshift(merged); @@ -284,9 +287,16 @@ export function liveLogsMethods() { if (headIndex < 0) return null; const oldHead = entries[headIndex]; const oldCount = Number(oldHead.session_count); + const oldMatchingCount = Number(oldHead.session_matching_count); const newHead = this.mergeLiveAuditUsagePatch({ ...patch, - session_count: (Number.isFinite(oldCount) && oldCount > 0 ? oldCount : 1) + 1 + session_count: (Number.isFinite(oldCount) && oldCount > 0 ? oldCount : 1) + 1, + session_matching_count: + (Number.isFinite(oldMatchingCount) && oldMatchingCount > 0 + ? oldMatchingCount + : Number.isFinite(oldCount) && oldCount > 0 + ? oldCount + : 1) + 1 }); const next = [...entries]; next.splice(headIndex, 1); @@ -339,8 +349,18 @@ export function liveLogsMethods() { const index = entries.findIndex((entry) => String(entry.session_id || '').trim() === sessionId); if (index < 0) return; const head = entries[index]; + const matchingCount = Number(head.session_matching_count); const next = [...entries]; - next.splice(index, 1, { ...head, session_count: Math.max(1, Number(head.session_count || 1) - count) }); + next.splice(index, 1, { + ...head, + session_count: Math.max(1, Number(head.session_count || 1) - count), + session_matching_count: Math.max( + 1, + (Number.isFinite(matchingCount) && matchingCount > 0 + ? matchingCount + : Number(head.session_count || 1)) - count + ) + }); this.auditLog.entries = next; }, @@ -459,7 +479,16 @@ export function liveLogsMethods() { reloadGroupedList = true; return; } - const promoted = { ...children[0], session_id: sessionId, session_count: sessionCount - 1 }; + const matchingCount = Math.max( + 1, + Number(entry.session_matching_count || sessionCount) + ); + const promoted = { + ...children[0], + session_id: sessionId, + session_count: sessionCount - 1, + session_matching_count: Math.max(1, matchingCount - 1) + }; next.push(promoted); this.auditThreadChildren = { ...this.auditThreadChildren, diff --git a/web/dashboard/tests/audit-list.test.js b/web/dashboard/tests/audit-list.test.js index 550739e18..a4d1a3c1d 100644 --- a/web/dashboard/tests/audit-list.test.js +++ b/web/dashboard/tests/audit-list.test.js @@ -30,6 +30,7 @@ import { auditIsThreadHead, auditLogFromSessions, auditSessionCount, + auditSessionMatchingCount, auditSessionId, auditTabKeydownTarget, buildAuditLogQuery, @@ -717,6 +718,11 @@ test("session head helpers handle missing ids and counts", () => { assert.equal(auditSessionCount({ session_count: 5 }), 5); assert.equal(auditSessionCount({ session_count: 0 }), 1); assert.equal(auditSessionCount({}), 1); + assert.equal( + auditSessionMatchingCount({ session_count: 6, session_matching_count: 3 }), + 3, + ); + assert.equal(auditSessionMatchingCount({ session_count: 6 }), 6); assert.equal(auditIsThreadHead({ session_id: "s-1", session_count: 2 }), true); assert.equal(auditIsThreadHead({ session_id: "s-1", session_count: 1 }), false); assert.equal(auditIsThreadHead({ session_count: 3 }), false); @@ -728,6 +734,8 @@ test("auditLogFromSessions maps thread summaries into head entries", () => { { session_id: "s-1", count: 3, + matching_count: 3, + total_count: 6, latest: { id: "log-3", session_id: "s-1", status_code: 200 }, }, { count: 1, latest: { id: "solo", status_code: 200 } }, @@ -740,7 +748,8 @@ test("auditLogFromSessions maps thread summaries into head entries", () => { const mapped = auditLogFromSessions(payload); assert.equal(mapped.entries.length, 2); assert.equal(mapped.entries[0].id, "log-3"); - assert.equal(mapped.entries[0].session_count, 3); + assert.equal(mapped.entries[0].session_count, 6); + assert.equal(mapped.entries[0].session_matching_count, 3); assert.equal(mapped.entries[1].id, "solo"); assert.equal(mapped.entries[1].session_count, 1); assert.equal(mapped.total, 12); From d4b72166c217e3e87efa79db4122e736f78052dc Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Wed, 12 Aug 2026 16:16:13 +0200 Subject: [PATCH 2/6] docs(api): deprecate legacy session count --- cmd/gomodel/docs/docs.go | 47 ++++++++++++++++++++++++++++++- docs/features/session-keeping.mdx | 1 + docs/openapi.json | 35 ++++++++++++++++++++++- internal/admin/handler.go | 10 +++++-- internal/auditlog/reader.go | 4 ++- tools/openapi-postprocess.mjs | 14 +++++++++ 6 files changed, 105 insertions(+), 6 deletions(-) diff --git a/cmd/gomodel/docs/docs.go b/cmd/gomodel/docs/docs.go index 541d4e6d5..40bc80218 100644 --- a/cmd/gomodel/docs/docs.go +++ b/cmd/gomodel/docs/docs.go @@ -6857,6 +6857,10 @@ const docTemplate = `{ }, "USAGE_PRICING_RECALCULATION_ENABLED": { "type": "string" + }, + "VIRTUAL_MODEL_STRATEGIES": { + "description": "VirtualModelStrategies is the comma-separated list of load-balancing\nstrategies this deployment supports. \"adaptive\" appears only when a\nroute-selector extension is registered, so the dashboard never offers\na strategy that would silently fall back to round robin.", + "type": "string" } } }, @@ -6929,6 +6933,9 @@ const docTemplate = `{ "path": { "type": "string" }, + "principal_id": { + "type": "string" + }, "provider": { "description": "canonical provider type used for routing and filters", "type": "string" @@ -6995,7 +7002,9 @@ const docTemplate = `{ "type": "object", "properties": { "count": { - "type": "integer" + "description": "Count is the number of requests matching the active filters.\nDeprecated: use MatchingCount.", + "type": "integer", + "x-deprecated": true }, "first_timestamp": { "type": "string" @@ -7006,8 +7015,16 @@ const docTemplate = `{ "latest": { "$ref": "#/definitions/admin.auditLogEntryResponse" }, + "matching_count": { + "description": "MatchingCount is the number of requests matching the active filters.", + "type": "integer" + }, "session_id": { "type": "string" + }, + "total_count": { + "description": "TotalCount is the number of requests in the complete session.", + "type": "integer" } } }, @@ -7391,6 +7408,9 @@ const docTemplate = `{ "service_account_json_base64": { "type": "string" }, + "session_sticky_keys": { + "type": "boolean" + }, "type": { "type": "string" }, @@ -7789,6 +7809,9 @@ const docTemplate = `{ "service_account_json_base64": { "type": "string" }, + "session_sticky_keys": { + "type": "boolean" + }, "type": { "type": "string" }, @@ -7839,6 +7862,10 @@ const docTemplate = `{ "description": "SessionAffinity keeps a detected session on the target that served it\nbefore. Omitted means enabled; false restores stateless balancing.", "type": "boolean" }, + "slowdown": { + "description": "Slowdown is an extra-time factor from 0.1 to 10; zero disables it.", + "type": "number" + }, "source": { "type": "string" }, @@ -8043,6 +8070,9 @@ const docTemplate = `{ "anthropicapi.MessagesRequest": { "type": "object", "properties": { + "cache_control": { + "type": "object" + }, "max_tokens": { "type": "integer" }, @@ -8181,6 +8211,9 @@ const docTemplate = `{ "anthropicapi.Tool": { "type": "object", "properties": { + "cache_control": { + "type": "object" + }, "description": { "type": "string" }, @@ -8305,6 +8338,10 @@ const docTemplate = `{ "description": "Error details (message can be long, so kept in JSON)", "type": "string" }, + "event_type": { + "description": "EventType identifies non-request security lifecycle entries written\nthrough the extension authentication event recorder.", + "type": "string" + }, "failover": { "description": "Failover captures runtime redirect details when translated execution\nmoved from the primary selector to a configured failover target.", "allOf": [ @@ -11137,6 +11174,10 @@ const docTemplate = `{ "session_affinity": { "type": "boolean" }, + "slowdown": { + "description": "Slowdown is an extra-time factor from 0.1 to 10; zero disables it.", + "type": "number" + }, "source": { "type": "string" }, @@ -11189,6 +11230,10 @@ const docTemplate = `{ "description": "SessionAffinity keeps requests of one detected session on the target that\nserved it before, while that target stays available. Tri-state: nil means\nenabled (the default); explicit false restores stateless balancing.", "type": "boolean" }, + "slowdown": { + "description": "Slowdown is an extra-time factor from 0.1 to 10; zero disables it. Nil\nleaves the setting unspecified so an alias can inherit its target model.", + "type": "number" + }, "source": { "type": "string" }, diff --git a/docs/features/session-keeping.mdx b/docs/features/session-keeping.mdx index 5a37c1fda..3e96a682e 100644 --- a/docs/features/session-keeping.mdx +++ b/docs/features/session-keeping.mdx @@ -103,6 +103,7 @@ latest request with a count badge; the expander on the left unfolds the older requests. The badge counts the complete session; when filters match only part of it, its tooltip also reports the matching count. `GET /admin/audit/sessions` serves the thread list with `matching_count` and `total_count`; +the deprecated `count` remains an alias of `matching_count` for compatibility. `GET /admin/audit/log?session_id=…` returns one session's entries. ## Configuration diff --git a/docs/openapi.json b/docs/openapi.json index 05d320fb1..92e91c71f 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -10041,6 +10041,10 @@ }, "USAGE_PRICING_RECALCULATION_ENABLED": { "type": "string" + }, + "VIRTUAL_MODEL_STRATEGIES": { + "description": "VirtualModelStrategies is the comma-separated list of load-balancing\nstrategies this deployment supports. \"adaptive\" appears only when a\nroute-selector extension is registered, so the dashboard never offers\na strategy that would silently fall back to round robin.", + "type": "string" } } }, @@ -10113,6 +10117,9 @@ "path": { "type": "string" }, + "principal_id": { + "type": "string" + }, "provider": { "description": "canonical provider type used for routing and filters", "type": "string" @@ -10179,7 +10186,9 @@ "type": "object", "properties": { "count": { - "type": "integer" + "description": "Count is the number of requests matching the active filters.\nDeprecated: use MatchingCount.", + "type": "integer", + "deprecated": true }, "first_timestamp": { "type": "string" @@ -10190,8 +10199,16 @@ "latest": { "$ref": "#/components/schemas/admin.auditLogEntryResponse" }, + "matching_count": { + "description": "MatchingCount is the number of requests matching the active filters.", + "type": "integer" + }, "session_id": { "type": "string" + }, + "total_count": { + "description": "TotalCount is the number of requests in the complete session.", + "type": "integer" } } }, @@ -10593,6 +10610,9 @@ "service_account_json_base64": { "type": "string" }, + "session_sticky_keys": { + "type": "boolean" + }, "type": { "type": "string" }, @@ -11002,6 +11022,9 @@ "service_account_json_base64": { "type": "string" }, + "session_sticky_keys": { + "type": "boolean" + }, "type": { "type": "string" }, @@ -11272,6 +11295,9 @@ "anthropicapi.MessagesRequest": { "type": "object", "properties": { + "cache_control": { + "type": "object" + }, "max_tokens": { "type": "integer" }, @@ -11410,6 +11436,9 @@ "anthropicapi.Tool": { "type": "object", "properties": { + "cache_control": { + "type": "object" + }, "description": { "type": "string" }, @@ -11534,6 +11563,10 @@ "description": "Error details (message can be long, so kept in JSON)", "type": "string" }, + "event_type": { + "description": "EventType identifies non-request security lifecycle entries written\nthrough the extension authentication event recorder.", + "type": "string" + }, "failover": { "description": "Failover captures runtime redirect details when translated execution\nmoved from the primary selector to a configured failover target.", "allOf": [ diff --git a/internal/admin/handler.go b/internal/admin/handler.go index 924f0f4dc..9facdf965 100644 --- a/internal/admin/handler.go +++ b/internal/admin/handler.go @@ -169,9 +169,13 @@ type auditConversationResponse struct { } type auditSessionResponse struct { - SessionID string `json:"session_id,omitempty"` - Count int `json:"count"` - MatchingCount int `json:"matching_count"` + SessionID string `json:"session_id,omitempty"` + // Count is the number of requests matching the active filters. + // Deprecated: use MatchingCount. + Count int `json:"count" extensions:"x-deprecated"` + // MatchingCount is the number of requests matching the active filters. + MatchingCount int `json:"matching_count"` + // TotalCount is the number of requests in the complete session. TotalCount int `json:"total_count"` FirstTimestamp time.Time `json:"first_timestamp"` LastTimestamp time.Time `json:"last_timestamp"` diff --git a/internal/auditlog/reader.go b/internal/auditlog/reader.go index cc1925014..f515b429d 100644 --- a/internal/auditlog/reader.go +++ b/internal/auditlog/reader.go @@ -49,7 +49,9 @@ type LogListResult struct { // active filters; TotalCount covers the complete session. Entries without a // session id form singleton threads whose SessionID is empty. type SessionSummary struct { - SessionID string `json:"session_id,omitempty"` + SessionID string `json:"session_id,omitempty"` + // Count is retained as the internal matching count for compatibility. + // Public API consumers should use the explicitly named matching_count field. Count int `json:"count"` TotalCount int `json:"total_count"` FirstTimestamp time.Time `json:"first_timestamp"` diff --git a/tools/openapi-postprocess.mjs b/tools/openapi-postprocess.mjs index 43fb3ab68..48db21e9a 100644 --- a/tools/openapi-postprocess.mjs +++ b/tools/openapi-postprocess.mjs @@ -47,6 +47,19 @@ function schema(name) { return result; } +// Swagger 2 has no standard property-level deprecation keyword. Response +// structs mark compatibility fields with x-deprecated, which survives the +// Swagger-to-OpenAPI conversion; normalize it for OpenAPI SDK generators. +function normalizeDeprecatedProperties() { + for (const target of Object.values(spec.components?.schemas || {})) { + for (const property of Object.values(target?.properties || {})) { + if (property?.["x-deprecated"] !== true) continue; + property.deprecated = true; + delete property["x-deprecated"]; + } + } +} + function applyResponseInputOneOf(name) { const properties = schema(name).properties; if (!properties?.input) { @@ -464,6 +477,7 @@ applyStringArrayPropertyBounds("admin.upsertVirtualModelRequest", "user_paths", applySlowdownSchemaConstraints(); applyPricingSchemaConstraints(); applyPathSidebarTitles(); +normalizeDeprecatedProperties(); // Bound the registry-backed admin model listing so OpenAPI consumers (and // security scanners like CKV_OPENAPI_21) see an explicit upper limit. The From fec64bcdb51d4b70d16b712f6f7cc1bc9aa8ce97 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Wed, 12 Aug 2026 16:22:34 +0200 Subject: [PATCH 3/6] fix(demo): use one UTC snapshot for seeding --- internal/auditlog/reader_sessions_mongodb.go | 5 +++-- internal/auditlog/reader_sessions_sql.go | 3 +++ internal/auditlog/session_id_test.go | 14 ++++++++++++-- tools/seed-demo-data.sh | 15 ++++++++------- web/dashboard/src/pages/audit-logs/audit-logic.js | 6 +++--- web/dashboard/tests/audit-list.test.js | 2 +- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/internal/auditlog/reader_sessions_mongodb.go b/internal/auditlog/reader_sessions_mongodb.go index 745472658..b9829e94a 100644 --- a/internal/auditlog/reader_sessions_mongodb.go +++ b/internal/auditlog/reader_sessions_mongodb.go @@ -71,8 +71,9 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) }}}, bson.D{{Key: "$unwind", Value: "$latest"}}, // Count the complete session after the filtered page winners are - // known. Sessionless rows remain singleton threads and skip this - // lookup's match through the non-empty sid guard. + // known. Deliberately omit the active filters to mirror the + // dashboard's unfiltered session_id expansion. Sessionless rows + // remain singletons and skip this match via the non-empty sid guard. bson.D{{Key: "$lookup", Value: bson.D{ {Key: "from", Value: r.collection.Name()}, {Key: "let", Value: bson.D{{Key: "sid", Value: bson.D{{Key: "$ifNull", Value: bson.A{"$latest.session_id", ""}}}}}}, diff --git a/internal/auditlog/reader_sessions_sql.go b/internal/auditlog/reader_sessions_sql.go index 71f1c467d..a3712a83a 100644 --- a/internal/auditlog/reader_sessions_sql.go +++ b/internal/auditlog/reader_sessions_sql.go @@ -47,6 +47,9 @@ func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*Se return nil, fmt.Errorf("failed to count audit sessions: %w", err) } + // The correlated count deliberately applies no active list filters: the + // dashboard expands a head with an unfiltered session_id query, so both + // operations describe the same complete session. query := `WITH ranked AS ( SELECT id, timestamp AS last_ts, ROW_NUMBER() OVER thread AS rn, diff --git a/internal/auditlog/session_id_test.go b/internal/auditlog/session_id_test.go index 8f5821f7b..116b020dc 100644 --- a/internal/auditlog/session_id_test.go +++ b/internal/auditlog/session_id_test.go @@ -411,10 +411,10 @@ func TestSQLReader_GetSessionsOnLegacyUUIDSchema(t *testing.T) { // head re-read is checked. func sessionThreadFixture(base time.Time) []*LogEntry { return []*LogEntry{ - {ID: "a-1", Timestamp: base.Add(-24 * time.Hour), Provider: "openai", SessionID: "sess-a", StatusCode: 200}, + {ID: "a-1", Timestamp: base.Add(-24 * time.Hour), Provider: "openai", SessionID: "sess-a", UserPath: "/tenants/a", StatusCode: 200}, { ID: "a-2", Timestamp: base.Add(2 * time.Minute), Provider: "openai", - SessionID: "sess-a", StatusCode: 200, Path: "/v1/chat/completions", + SessionID: "sess-a", UserPath: "/tenants/b", StatusCode: 200, Path: "/v1/chat/completions", Data: &LogData{UserAgent: "probe/1.0"}, }, {ID: "b-1", Timestamp: base.Add(time.Minute), Provider: "anthropic", SessionID: "sess-b", StatusCode: 500}, @@ -497,6 +497,16 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { wantTotal: 2, wantLatestID: "a-2", }, + { + name: "user path filter reports matching and complete session counts", + params: LogQueryParams{ + UserPath: "/tenants/b", ExactUserPath: true, SessionID: "sess-a", Limit: 10, + }, + wantSessionID: "sess-a", + wantCount: 1, + wantTotal: 2, + wantLatestID: "a-2", + }, { name: "date filter reports matching and complete session counts", params: LogQueryParams{ diff --git a/tools/seed-demo-data.sh b/tools/seed-demo-data.sh index 22975af6e..c86db6012 100755 --- a/tools/seed-demo-data.sh +++ b/tools/seed-demo-data.sh @@ -13,10 +13,8 @@ semantic_cache_pct="${DEMO_SEMANTIC_CACHE_PCT:-7}" prompt_cache_pct="${DEMO_PROMPT_CACHE_PCT:-28}" rewrite_pct="${DEMO_REWRITE_PCT:-18}" prefix="${DEMO_SEED_PREFIX:-demo-generated}" -utc_hour="$(date -u +%H)" -utc_minute="$(date -u +%M)" -utc_second="$(date -u +%S)" -current_utc_second=$((10#$utc_hour * 3600 + 10#$utc_minute * 60 + 10#$utc_second)) +seed_utc_epoch="$(date -u +%s)" +current_utc_second=$((seed_utc_epoch % 86400)) usage() { cat < { +test("buildAuditSessionQuery encodes the session id and omits active list filters", () => { const qs = buildAuditSessionQuery({ sessionId: "team/app|s 1", limit: 100 }); assert.equal(qs, "session_id=team%2Fapp%7Cs%201&limit=100&offset=0"); }); From 8a303930b45165c3c39dd83c3c1e312515678395 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Wed, 12 Aug 2026 16:24:55 +0200 Subject: [PATCH 4/6] test(audit): cover Mongo session total lookup --- internal/auditlog/reader_sessions_mongodb.go | 31 ++++++++++++------- .../auditlog/reader_sessions_mongodb_test.go | 22 +++++++++++++ 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/internal/auditlog/reader_sessions_mongodb.go b/internal/auditlog/reader_sessions_mongodb.go index b9829e94a..b49bab2ce 100644 --- a/internal/auditlog/reader_sessions_mongodb.go +++ b/internal/auditlog/reader_sessions_mongodb.go @@ -74,18 +74,7 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) // known. Deliberately omit the active filters to mirror the // dashboard's unfiltered session_id expansion. Sessionless rows // remain singletons and skip this match via the non-empty sid guard. - bson.D{{Key: "$lookup", Value: bson.D{ - {Key: "from", Value: r.collection.Name()}, - {Key: "let", Value: bson.D{{Key: "sid", Value: bson.D{{Key: "$ifNull", Value: bson.A{"$latest.session_id", ""}}}}}}, - {Key: "pipeline", Value: bson.A{ - bson.D{{Key: "$match", Value: bson.D{{Key: "$expr", Value: bson.D{{Key: "$and", Value: bson.A{ - bson.D{{Key: "$ne", Value: bson.A{"$$sid", ""}}}, - bson.D{{Key: "$eq", Value: bson.A{"$session_id", "$$sid"}}}, - }}}}}}}, - bson.D{{Key: "$count", Value: "count"}}, - }}, - {Key: "as", Value: "session_total"}, - }}}, + mongoSessionTotalLookup(r.collection.Name()), }}, {Key: "total", Value: bson.A{ bson.D{{Key: "$count", Value: "count"}}, @@ -151,3 +140,21 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) } return &SessionListResult{Sessions: sessions, Total: total, Limit: limit, Offset: offset}, nil } + +// mongoSessionTotalLookup builds the filter-independent count used by session +// summaries. Keeping it separate makes the aggregation contract testable +// without a running MongoDB service. +func mongoSessionTotalLookup(collectionName string) bson.D { + return bson.D{{Key: "$lookup", Value: bson.D{ + {Key: "from", Value: collectionName}, + {Key: "let", Value: bson.D{{Key: "sid", Value: bson.D{{Key: "$ifNull", Value: bson.A{"$latest.session_id", ""}}}}}}, + {Key: "pipeline", Value: bson.A{ + bson.D{{Key: "$match", Value: bson.D{{Key: "$expr", Value: bson.D{{Key: "$and", Value: bson.A{ + bson.D{{Key: "$ne", Value: bson.A{"$$sid", ""}}}, + bson.D{{Key: "$eq", Value: bson.A{"$session_id", "$$sid"}}}, + }}}}}}}, + bson.D{{Key: "$count", Value: "count"}}, + }}, + {Key: "as", Value: "session_total"}, + }}} +} diff --git a/internal/auditlog/reader_sessions_mongodb_test.go b/internal/auditlog/reader_sessions_mongodb_test.go index a5aca8321..ca85ccc42 100644 --- a/internal/auditlog/reader_sessions_mongodb_test.go +++ b/internal/auditlog/reader_sessions_mongodb_test.go @@ -2,14 +2,36 @@ package auditlog import ( "context" + "strings" "testing" "time" + "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "github.com/enterpilot/gomodel/internal/storage/mongotest" ) +func TestMongoSessionTotalLookup(t *testing.T) { + stage, err := bson.MarshalExtJSON(mongoSessionTotalLookup("custom_audit_logs"), false, false) + if err != nil { + t.Fatalf("marshal session total lookup: %v", err) + } + encoded := string(stage) + for _, want := range []string{ + `"from":"custom_audit_logs"`, + `"$ifNull":["$latest.session_id",""]`, + `"$ne":["$$sid",""]`, + `"$eq":["$session_id","$$sid"]`, + `"$count":"count"`, + `"as":"session_total"`, + } { + if !strings.Contains(encoded, want) { + t.Fatalf("session total lookup = %s, want fragment %s", encoded, want) + } + } +} + // Mirrors TestSQLReader_GetSessions so the hand-written MongoDB aggregation // cannot drift from the SQL behaviour. Skips without MONGO_TEST_DSN. func TestMongoDBReader_GetSessions(t *testing.T) { From e127cbb4350c4dd83658070fde7a8b6b32fabb5c Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Wed, 12 Aug 2026 16:35:26 +0200 Subject: [PATCH 5/6] fix(audit): increment merged live session counts --- .../{index-DuX4l0_z.js => index-Duzx7ccK.js} | 2 +- .../admin/dashboard/static/dist/index.html | 2 +- .../src/pages/audit-logs/audit-logic.js | 42 +++++++++++++------ web/dashboard/tests/audit-list.test.js | 30 +++++++++++++ 4 files changed, 62 insertions(+), 14 deletions(-) rename internal/admin/dashboard/static/dist/assets/{index-DuX4l0_z.js => index-Duzx7ccK.js} (97%) diff --git a/internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js b/internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js similarity index 97% rename from internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js rename to internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js index f08bb5e70..0a52a2de0 100644 --- a/internal/admin/dashboard/static/dist/assets/index-DuX4l0_z.js +++ b/internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js @@ -37,7 +37,7 @@ /team/alpha /non-existing`),D(g);var y=I(g,2);PE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=YA();ut(r),L(()=>r.disabled=n.vmFormManaged),la(r,()=>n.vmForm.description,e=>n.vmForm.description=e),V(e,r)},$$slots:{default:!0}});var b=I(y,2),x=e=>{PE(e,{id:`virtual-model-slowdown`,label:`Slowdown (extra inference time)`,children:(e,t)=>{var r=XA(),i=F(r);ea(i),Ve(2),L(()=>i.disabled=n.vmFormManaged),la(i,()=>n.vmForm.slowdown,e=>n.vmForm.slowdown=e),V(e,r)},$$slots:{default:!0}})},S=A(()=>n.vmFormSupportsSlowdown());U(b,e=>{R(S)&&e(x)});var C=I(b,2),w=P(C),T=e=>{var t=ZA(),r=P(t,!0);D(t),L(()=>H(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),V(e,t)};U(w,e=>{n.vmFormMode===`edit`&&e(T)});var E=I(w,2),ee=P(E);{let e=A(()=>n.vmFormToggleRestricted()),t=A(()=>n.vmFormToggleLabel());PA(ee,{get enabled(){return n.vmForm.enabled},get restricted(){return R(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return R(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}D(E),D(C),L(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),z(`click`,f,()=>n.addVmTarget()),la(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var ej=B(`

            Pricing override

            `,1),tj=B(``),nj=B(``),rj=B(``),ij=B(``),aj=B(`
            `),oj=B(`
            Tiered pricing exists for this override and will be preserved. Tier editing can be added without a database migration.
            `),sj=B(`
            No pricing fields set.
            `),cj=B(`
            `),lj=B(`

            Currency is USD. Saved fields override model registry and config.yaml pricing for this - selector; unset fields continue to inherit.

            Price Type USD Source
            `,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

            Failover mapping

            `,1),fj=B(``),pj=B(`

            This failover mapping is defined in configuration and is read-only here.

            `),mj=B(``),hj=B(`
            `),gj=B(`
            `,1),_j=B(`
            `);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
            `),xj=B(``),Sj=B(`
            `),Cj=B(`

            No failover suggestions were generated.

            `),wj=B(`

            No failover drafts match the filter.

            `),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
            Rate limit management is unavailable.
            `),kj=B(` Add`,1),Aj=B(`

            `),jj=B(`

            No rules.

            `),Mj=B(` Edit`,1),Nj=B(`
            `),Pj=B(`
            `),Fj=B(`

            `),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
            models
            `),Bj=B(`
            Virtual models feature is unavailable.
            `),Vj=B(`
            `),Hj=B(``),Uj=B(`
            `),Wj=B(``),Gj=B(`
            `),Kj=B(`

            No models registered.

            `),qj=B(`

            No models in this category.

            `),Jj=B(`

            No models match your filter.

            `),Yj=B(`
            `);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
            `),LM=B(` `),RM=B(` `),zM=B(`
            `),BM=B(`
            `,1),VM=B(`
            `,1),HM=B(`
            `),UM=B(`
            Async
            `),WM=B(`
            `);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

            `),jN=B(`

            `),MN=B(`
            `),NN=B(`
            `),PN=B(`

            No guardrails configured for this workflow.

            `),FN=B(`

            Guardrails

            `),IN=B(``),LN=B(`

            `);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

            `),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
            No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
            `),$N=B(`
            `),eP=B(`
            `),tP=B(`

            No guardrail steps configured yet.

            `),nP=B(`

            Guardrail Steps

            Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

            `),rP=B(`

            Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

            Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

            If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

            Preview

            Live
            `,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

            Loading workflows...

            `),oP=B(`
            `),sP=B(`

            No active workflows found.

            `),cP=B(`

            No workflows match your filter.

            `),lP=B(`
            `);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
            Workflows feature is unavailable.
            `),pP=B(`
            `),mP=B(`
            `),hP=B(``),gP=B(`
            `);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){let t=Number(e&&e.session_matching_count);return Number.isFinite(t)&&t>0?t:VP(e)}function UP(e){return!!BP(e)&&VP(e)>1}function WP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>{let t=Number(e.matching_count||e.count||1),n=Number.isFinite(t)&&t>0?t:1,r=Number(e.total_count||n),i=Number.isFinite(r)&&r>n?r:n;return{...e.latest,session_id:BP(e.latest)||String(e.session_id||``).trim(),session_count:i,session_matching_count:n}}),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function GP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>YP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!YP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>YP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!YP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function KP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function qP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function JP(e){return String(e&&e.id||``).trim()}function YP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function XP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function ZP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function QP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&ZP(t)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=[];return a.forEach(e=>{let t=YP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function eF(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=YP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(VP(l[r]),VP(e)),session_matching_count:Math.max(HP(l[r]),HP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function tF(e,t){let n=JP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function nF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>JP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function rF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function iF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function aF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function oF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function sF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function cF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))}function lF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function uF(e){return String(e&&e.kind||``).trim()||`attempt`}function dF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function fF(e){return String(e&&e.model||``).trim()||`-`}function pF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function mF(e){return sF(e).length+`×`}function hF(e){let t=sF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function gF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=uF(e);n&&n!==`attempt`&&t.push(n),t.push(lF(e));let r=dF(e);r&&r!==`-`&&t.push(r);let i=fF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function _F(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function vF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function yF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function bF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function xF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=_F(e,t),a=yF(e,t),o=vF(t),s=i!=null&&i!==``,c=uF(t),l=sF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:bF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function SF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function CF(e){return SF(e).filter(e=>!(e&&e.no_change))}function wF(e){return SF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function TF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function EF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=CF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:TF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function DF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function OF(e){let t=DF(e);return Number(t&&t.cached_input_tokens||0)>0}function kF(e){let t=DF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function AF(e){let t=DF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:kF(e).toFixed(1)+`% cached`}function jF(e){return OF(e)?AF(e):``}function MF(e,t){let n=DF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function NF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&aF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:jF(e),promptCacheHighlight:MF(e,t),noChangeSteps:wF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function PF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&aF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&aF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function FF(e,t){let n=[{id:`request`,pane:NF(e,t)}];return CF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:EF(e,t)})}),cF(e)?sF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:xF(e,t)})}):n.push({id:`response`,pane:PF(e)}),n}function IF(e){if(!cF(e))return`response`;let t=sF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function LF(e,t,n){return e&&(Array.isArray(n)?n:FF(t)).some(t=>t.id===e)?e:IF(t)}function RF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var zF=100;function BF(){return{entries:[],total:0,limit:25,offset:0}}var VF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=BF();return}let a=n?WP(i.data):i.data,o=(n?eF:$P)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=qP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=qP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=nF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=BF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=KP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=KP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:zF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=GP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=JP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=tF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>VF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>VF.isAuditEntryExpanded(e);var HF=B(`
            `);function UF(e,t){O(t,!0);let n=Mw(()=>VF.fetchAuditLog(!0));On(()=>n.cancel);var r=HF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return VF.auditSearch},set value(e){VF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>VF.fetchAuditLog(!0)),Ui(o,()=>VF.auditMethod,e=>VF.auditMethod=e),z(`change`,p,()=>VF.fetchAuditLog(!0)),Ui(p,()=>VF.auditStatusCode,e=>VF.auditStatusCode=e),z(`change`,E,()=>VF.fetchAuditLog(!0)),Ui(E,()=>VF.auditStream,e=>VF.auditStream=e),z(`click`,re,()=>VF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var WF=B(`Live stream connecting…`),GF=B(` `),KF=B(`Live`),qF=B(` `);function JF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=qF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,WF())},c=e=>{var t=GF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,KF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var YF=B(` `),XF=B(``);function ZF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:oF(t.entry)&&`failover: `+oF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=XF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=YF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var QF=B(``),$F=B(` `);function eI(e,t){O(t,!0);let n=A(()=>pF(t.entry)),r=A(()=>R(n).length>0?hF(t.entry):``),i=A(()=>R(n).length>0?mF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=$F(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=QF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>gF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var tI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function nI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function rI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:nI(e)).filter(Boolean).join(` + selector; unset fields continue to inherit.

            Price Type USD Source
            `,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

            Failover mapping

            `,1),fj=B(``),pj=B(`

            This failover mapping is defined in configuration and is read-only here.

            `),mj=B(``),hj=B(`
            `),gj=B(`
            `,1),_j=B(`
            `);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
            `),xj=B(``),Sj=B(`
            `),Cj=B(`

            No failover suggestions were generated.

            `),wj=B(`

            No failover drafts match the filter.

            `),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
            Rate limit management is unavailable.
            `),kj=B(` Add`,1),Aj=B(`

            `),jj=B(`

            No rules.

            `),Mj=B(` Edit`,1),Nj=B(`
            `),Pj=B(`
            `),Fj=B(`

            `),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
            models
            `),Bj=B(`
            Virtual models feature is unavailable.
            `),Vj=B(`
            `),Hj=B(``),Uj=B(`
            `),Wj=B(``),Gj=B(`
            `),Kj=B(`

            No models registered.

            `),qj=B(`

            No models in this category.

            `),Jj=B(`

            No models match your filter.

            `),Yj=B(`
            `);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
            `),LM=B(` `),RM=B(` `),zM=B(`
            `),BM=B(`
            `,1),VM=B(`
            `,1),HM=B(`
            `),UM=B(`
            Async
            `),WM=B(`
            `);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

            `),jN=B(`

            `),MN=B(`
            `),NN=B(`
            `),PN=B(`

            No guardrails configured for this workflow.

            `),FN=B(`

            Guardrails

            `),IN=B(``),LN=B(`

            `);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

            `),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
            No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
            `),$N=B(`
            `),eP=B(`
            `),tP=B(`

            No guardrail steps configured yet.

            `),nP=B(`

            Guardrail Steps

            Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

            `),rP=B(`

            Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

            Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

            If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

            Preview

            Live
            `,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

            Loading workflows...

            `),oP=B(`
            `),sP=B(`

            No active workflows found.

            `),cP=B(`

            No workflows match your filter.

            `),lP=B(`
            `);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
            Workflows feature is unavailable.
            `),pP=B(`
            `),mP=B(`
            `),hP=B(``),gP=B(`
            `);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){let t=Number(e&&e.session_matching_count);return Number.isFinite(t)&&t>0?t:VP(e)}function UP(e){return!!BP(e)&&VP(e)>1}function WP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>{let t=Number(e.matching_count||e.count||1),n=Number.isFinite(t)&&t>0?t:1,r=Number(e.total_count||n),i=Number.isFinite(r)&&r>n?r:n;return{...e.latest,session_id:BP(e.latest)||String(e.session_id||``).trim(),session_count:i,session_matching_count:n}}),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function GP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>YP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!YP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>YP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!YP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function KP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function qP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function JP(e){return String(e&&e.id||``).trim()}function YP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function XP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function ZP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function QP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&ZP(t)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=[];return a.forEach(e=>{let t=YP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function eF(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=YP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]);let a=VP(l[r]),c=HP(l[r]),u=Number(e&&e.session_count),d=Number.isFinite(u)&&u>1?u:null,f=Number(e&&e.session_matching_count),p=d!==null&&Number.isFinite(f)&&f>0?f:d;l[r]={...e,session_count:d===null?a+1:Math.max(a,d),session_matching_count:p===null?c+1:Math.max(c,p)},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function tF(e,t){let n=JP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function nF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>JP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function rF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function iF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function aF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function oF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function sF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function cF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))}function lF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function uF(e){return String(e&&e.kind||``).trim()||`attempt`}function dF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function fF(e){return String(e&&e.model||``).trim()||`-`}function pF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function mF(e){return sF(e).length+`×`}function hF(e){let t=sF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function gF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=uF(e);n&&n!==`attempt`&&t.push(n),t.push(lF(e));let r=dF(e);r&&r!==`-`&&t.push(r);let i=fF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function _F(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function vF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function yF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function bF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function xF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=_F(e,t),a=yF(e,t),o=vF(t),s=i!=null&&i!==``,c=uF(t),l=sF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:bF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function SF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function CF(e){return SF(e).filter(e=>!(e&&e.no_change))}function wF(e){return SF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function TF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function EF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=CF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:TF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function DF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function OF(e){let t=DF(e);return Number(t&&t.cached_input_tokens||0)>0}function kF(e){let t=DF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function AF(e){let t=DF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:kF(e).toFixed(1)+`% cached`}function jF(e){return OF(e)?AF(e):``}function MF(e,t){let n=DF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function NF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&aF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:jF(e),promptCacheHighlight:MF(e,t),noChangeSteps:wF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function PF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&aF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&aF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function FF(e,t){let n=[{id:`request`,pane:NF(e,t)}];return CF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:EF(e,t)})}),cF(e)?sF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:xF(e,t)})}):n.push({id:`response`,pane:PF(e)}),n}function IF(e){if(!cF(e))return`response`;let t=sF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function LF(e,t,n){return e&&(Array.isArray(n)?n:FF(t)).some(t=>t.id===e)?e:IF(t)}function RF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var zF=100;function BF(){return{entries:[],total:0,limit:25,offset:0}}var VF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=BF();return}let a=n?WP(i.data):i.data,o=(n?eF:$P)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=qP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=qP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=nF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=BF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=KP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=KP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:zF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=GP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=JP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=tF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>VF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>VF.isAuditEntryExpanded(e);var HF=B(`
            `);function UF(e,t){O(t,!0);let n=Mw(()=>VF.fetchAuditLog(!0));On(()=>n.cancel);var r=HF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return VF.auditSearch},set value(e){VF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>VF.fetchAuditLog(!0)),Ui(o,()=>VF.auditMethod,e=>VF.auditMethod=e),z(`change`,p,()=>VF.fetchAuditLog(!0)),Ui(p,()=>VF.auditStatusCode,e=>VF.auditStatusCode=e),z(`change`,E,()=>VF.fetchAuditLog(!0)),Ui(E,()=>VF.auditStream,e=>VF.auditStream=e),z(`click`,re,()=>VF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var WF=B(`Live stream connecting…`),GF=B(` `),KF=B(`Live`),qF=B(` `);function JF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=qF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,WF())},c=e=>{var t=GF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,KF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var YF=B(` `),XF=B(``);function ZF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:oF(t.entry)&&`failover: `+oF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=XF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=YF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var QF=B(``),$F=B(` `);function eI(e,t){O(t,!0);let n=A(()=>pF(t.entry)),r=A(()=>R(n).length>0?hF(t.entry):``),i=A(()=>R(n).length>0?mF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=$F(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=QF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>gF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var tI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function nI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function rI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:nI(e)).filter(Boolean).join(` `).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function iI(e){return!e||typeof e!=`object`?``:rI(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function aI(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function oI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(oI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...oI(t)]);let t=String(e);return t?[t]:[]}function sI(e){return rL(e).flatMap(e=>[...e.name?[String(e.name)]:[],...oI(e.arguments)])}function cI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?sI([e]):aI(e)):aI(e)}function lI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function uI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function dI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function fI(e){return{characters:(Array.isArray(e)?e:[]).map(dI)}}function pI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function mI(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=rI(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=rI(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function hI(e){return iI(e)}function gI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...aI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...cI(e.content)),t.push(...sI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...sI([e]));return}t.push(...cI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...aI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var _I=e=>rI(e);function vI(e){if(!e||!e.data)return``;let t=OP(e.data.response_body,0,_I);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?OP(EP(e),0,_I)||e:``}return OP(n,0,_I)||rI(n)}function yI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function bI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function xI(e){return e?!!CI(e):!1}function SI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function CI(e){switch(SI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function wI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function TI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function EI(e){let t=CI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||uL(n)!==``}function DI(e,t){let n=String(t||``).trim(),r=CI(e&&e.path),i=wI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=uL(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&TI(o,wI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&TI(o,{role:String(a.role||`assistant`),content:wI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var OI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function kI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||OI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function AI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function jI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=MI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function MI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function NI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function PI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?dL(t,e)>=0?t:e:t,null)}function FI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return PI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function II(e,t){let n=PI(e);return!!n&&String(n.id||``)===String(t||``)}function LI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function RI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function zI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||yI(n.output));return!!(r||i)}function BI(e){return!e||bI(e.path)?!1:xI(e.path)||zI(e)}function VI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function GI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function KI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
            `+WI(t)+``+WI(JI(e[t]))+`
            `);return t.length?``:``}function XI(e){let t=qI(e.content_type),n=WI(t+` · `+KI(e.bytes)),r=YI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
            `+n+`
            `+r+`
            `}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
            `+n+`
            `+WI(i)+`
            `+r+`
            `}function ZI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function QI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function $I(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return WI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+WI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+WI(e.slice(r)):WI(e)}function eL(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=QI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return WI(o);if(!i(e))return o.split(` `).map(e=>$I(e,a)).join(` `);let s=o.split(` diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index 2609b0a3d..e10d2144c 100644 --- a/internal/admin/dashboard/static/dist/index.html +++ b/internal/admin/dashboard/static/dist/index.html @@ -7,7 +7,7 @@ GoModel Dashboard - + diff --git a/web/dashboard/src/pages/audit-logs/audit-logic.js b/web/dashboard/src/pages/audit-logs/audit-logic.js index e6966aceb..3f3329b4d 100644 --- a/web/dashboard/src/pages/audit-logs/audit-logic.js +++ b/web/dashboard/src/pages/audit-logs/audit-logic.js @@ -368,9 +368,9 @@ export function auditLogWithLiveEntries(payload, currentEntries, filters) { } // auditGroupedLogWithLiveEntries is auditLogWithLiveEntries for grouped mode: -// a still-pending live preview folds into its session's fetched head (keeping -// the larger count) instead of duplicating the thread; previews without an -// on-screen thread prepend as singleton heads. +// a still-pending live preview folds into its session's fetched head instead +// of duplicating the thread; previews without an on-screen thread prepend as +// singleton heads. export function auditGroupedLogWithLiveEntries(payload, currentEntries, filters) { const next = payload && typeof payload === "object" @@ -404,19 +404,37 @@ export function auditGroupedLogWithLiveEntries(payload, currentEntries, filters) const sid = auditSessionId(entry); if (sid && headBySession.has(sid)) { // Fold into the fetched thread: the pending preview is newer than the - // persisted head, so it becomes the head and keeps the thread's count. + // persisted head, so it becomes the head. Counts already accumulated by + // the live grouping path are authoritative; otherwise this distinct + // request increments the fetched counts. const index = headBySession.get(sid); if (merged === entries) merged = [...entries]; + const previousTotal = auditSessionCount(merged[index]); + const previousMatching = auditSessionMatchingCount(merged[index]); + const incomingTotalValue = Number(entry && entry.session_count); + const incomingTotal = + Number.isFinite(incomingTotalValue) && incomingTotalValue > 1 + ? incomingTotalValue + : null; + const incomingMatchingValue = Number( + entry && entry.session_matching_count, + ); + const incomingMatching = + incomingTotal !== null && + Number.isFinite(incomingMatchingValue) && + incomingMatchingValue > 0 + ? incomingMatchingValue + : incomingTotal; merged[index] = { ...entry, - session_count: Math.max( - auditSessionCount(merged[index]), - auditSessionCount(entry), - ), - session_matching_count: Math.max( - auditSessionMatchingCount(merged[index]), - auditSessionMatchingCount(entry), - ), + session_count: + incomingTotal === null + ? previousTotal + 1 + : Math.max(previousTotal, incomingTotal), + session_matching_count: + incomingMatching === null + ? previousMatching + 1 + : Math.max(previousMatching, incomingMatching), }; keys.forEach((key) => persistedKeys.add(key)); return; diff --git a/web/dashboard/tests/audit-list.test.js b/web/dashboard/tests/audit-list.test.js index b869d3a02..41c44d22b 100644 --- a/web/dashboard/tests/audit-list.test.js +++ b/web/dashboard/tests/audit-list.test.js @@ -884,6 +884,36 @@ test("auditGroupedLogWithLiveEntries folds pending previews into fetched heads", assert.equal(next.total, 3); }); +test("auditGroupedLogWithLiveEntries increments counts for a new singleton preview", () => { + const payload = { + entries: [ + { + id: "head-a", + session_id: "s-a", + session_count: 6, + session_matching_count: 3, + }, + ], + total: 1, + limit: 25, + offset: 0, + }; + const pending = { + id: "live-1", + session_id: "s-a", + session_count: 1, + _live: true, + _live_pending: true, + }; + + const next = auditGroupedLogWithLiveEntries(payload, [pending], {}); + + assert.deepEqual(next.entries.map((entry) => entry.id), ["live-1"]); + assert.equal(next.entries[0].session_count, 7); + assert.equal(next.entries[0].session_matching_count, 4); + assert.equal(next.total, 1); +}); + test("auditGroupedLogWithLiveEntries keeps persisted rows over matching previews", () => { const payload = { entries: [{ id: "head-a", request_id: "req-1", session_id: "s-a", session_count: 2 }], From c02af9cf51d193634d5aa68eed2dd73b9c530146 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 14 Aug 2026 17:18:30 +0200 Subject: [PATCH 6/6] refactor(audit): simplify session count contract --- cmd/gomodel/docs/docs.go | 23 +----- docs/features/session-keeping.mdx | 10 +-- docs/openapi.json | 23 +----- .../{index-Duzx7ccK.js => index-CQOgx24d.js} | 48 ++++++------ .../admin/dashboard/static/dist/index.html | 2 +- internal/admin/handler.go | 13 +--- internal/admin/handler_audit.go | 14 +--- internal/admin/handler_audit_sessions_test.go | 30 +++----- internal/auditlog/reader.go | 21 ++---- internal/auditlog/reader_sessions_mongodb.go | 38 ++++------ .../auditlog/reader_sessions_mongodb_test.go | 15 ++-- internal/auditlog/reader_sessions_sql.go | 50 ++++--------- internal/auditlog/session_id_test.go | 75 ++++++++----------- tools/openapi-postprocess.mjs | 14 ---- tools/seed-demo-data.sh | 17 +++-- .../pages/audit-logs/AuditEntrySummary.svelte | 15 +--- .../pages/audit-logs/AuditThreadGroup.svelte | 2 - .../src/pages/audit-logs/audit-logic.js | 66 ++++------------ .../src/pages/audit-logs/live-logs-logic.js | 30 +------- web/dashboard/tests/audit-list.test.js | 18 +---- 20 files changed, 157 insertions(+), 367 deletions(-) rename internal/admin/dashboard/static/dist/assets/{index-Duzx7ccK.js => index-CQOgx24d.js} (86%) diff --git a/cmd/gomodel/docs/docs.go b/cmd/gomodel/docs/docs.go index 40bc80218..d9d600f73 100644 --- a/cmd/gomodel/docs/docs.go +++ b/cmd/gomodel/docs/docs.go @@ -257,7 +257,7 @@ const docTemplate = `{ }, "/admin/audit/sessions": { "get": { - "description": "Groups audit log entries by session id into threads and returns\none summary per thread — its latest entry, entry count, and time\nspan — ordered by latest activity. Entries without a session id\nappear as single-entry threads. Filters apply to entries before\ngrouping.", + "description": "Groups audit log entries by session id into threads and returns\none summary per thread — its latest matching entry and complete\nrequest count — ordered by latest activity. Entries without a session id\nappear as single-entry threads. Filters apply to entries before\ngrouping.", "produces": [ "application/json" ], @@ -7001,29 +7001,10 @@ const docTemplate = `{ "admin.auditSessionResponse": { "type": "object", "properties": { - "count": { - "description": "Count is the number of requests matching the active filters.\nDeprecated: use MatchingCount.", - "type": "integer", - "x-deprecated": true - }, - "first_timestamp": { - "type": "string" - }, - "last_timestamp": { - "type": "string" - }, "latest": { "$ref": "#/definitions/admin.auditLogEntryResponse" }, - "matching_count": { - "description": "MatchingCount is the number of requests matching the active filters.", - "type": "integer" - }, - "session_id": { - "type": "string" - }, - "total_count": { - "description": "TotalCount is the number of requests in the complete session.", + "request_count": { "type": "integer" } } diff --git a/docs/features/session-keeping.mdx b/docs/features/session-keeping.mdx index 3e96a682e..2b98b74e7 100644 --- a/docs/features/session-keeping.mdx +++ b/docs/features/session-keeping.mdx @@ -100,11 +100,11 @@ checkbox. Requests with no detected session remain round robin. Audit entries record the session id (`session_id`), and the Audit Logs page groups them by default ("Group by session" toggle). Each thread shows its latest request with a count badge; the expander on the left unfolds the older -requests. The badge counts the complete session; when filters match only part -of it, its tooltip also reports the matching count. `GET /admin/audit/sessions` -serves the thread list with `matching_count` and `total_count`; -the deprecated `count` remains an alias of `matching_count` for compatibility. -`GET /admin/audit/log?session_id=…` returns one session's entries. +requests. The badge counts the complete session. Filters select which sessions +appear and which matching request represents each thread. +`GET /admin/audit/sessions` returns each thread's `request_count` and latest +matching audit-log entry. `GET /admin/audit/log?session_id=…` returns all +requests in an expanded session. ## Configuration diff --git a/docs/openapi.json b/docs/openapi.json index 92e91c71f..02981cf84 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -334,7 +334,7 @@ }, "/admin/audit/sessions": { "get": { - "description": "Groups audit log entries by session id into threads and returns\none summary per thread — its latest entry, entry count, and time\nspan — ordered by latest activity. Entries without a session id\nappear as single-entry threads. Filters apply to entries before\ngrouping.", + "description": "Groups audit log entries by session id into threads and returns\none summary per thread — its latest matching entry and complete\nrequest count — ordered by latest activity. Entries without a session id\nappear as single-entry threads. Filters apply to entries before\ngrouping.", "tags": [ "admin" ], @@ -10185,29 +10185,10 @@ "admin.auditSessionResponse": { "type": "object", "properties": { - "count": { - "description": "Count is the number of requests matching the active filters.\nDeprecated: use MatchingCount.", - "type": "integer", - "deprecated": true - }, - "first_timestamp": { - "type": "string" - }, - "last_timestamp": { - "type": "string" - }, "latest": { "$ref": "#/components/schemas/admin.auditLogEntryResponse" }, - "matching_count": { - "description": "MatchingCount is the number of requests matching the active filters.", - "type": "integer" - }, - "session_id": { - "type": "string" - }, - "total_count": { - "description": "TotalCount is the number of requests in the complete session.", + "request_count": { "type": "integer" } } diff --git a/internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js b/internal/admin/dashboard/static/dist/assets/index-CQOgx24d.js similarity index 86% rename from internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js rename to internal/admin/dashboard/static/dist/assets/index-CQOgx24d.js index 0a52a2de0..c4d7bdf4c 100644 --- a/internal/admin/dashboard/static/dist/assets/index-Duzx7ccK.js +++ b/internal/admin/dashboard/static/dist/assets/index-CQOgx24d.js @@ -9,7 +9,7 @@ `)}function mx(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function hx(e){let t=mx(e);return t?String(t.circuit_state||``).trim():``}function gx(e){let t=hx(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function _x(e){let t=hx(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function vx(e){let t=mx(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function yx(e){let t=mx(e);return t&&Array.isArray(t.models)?t.models:[]}function bx(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function xx(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function Sx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function Cx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function wx(e){return String(e&&(e.slug||e.name)||``).trim()}function Tx(e){return String(e&&e.status||``).trim()||`connecting`}function Ex(e){switch(Tx(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function Dx(e,t){let n=Tx(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function Ox(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function kx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function Ax(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function jx(e){return String(e||``).split(` `).map(e=>e.trim()).filter(e=>e)}function Mx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Nx(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function Px(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function Fx(e){return{name:String(e.name||``).trim(),slug:wx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:Mx(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Ix(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Ax(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>wx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Nx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:hc(e.allowed_tools),disallowed_tools:hc(e.disallowed_tools),user_paths:jx(e.user_paths),tool_timeout_seconds:s}}}function Lx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Rx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function zx(e){let t=e||Cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Rx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Bx(e){return zx(e).length===0}function Vx(e){return(e||[]).length}function Hx(e){return(e||[]).filter(e=>Tx(e)===`connected`).length}function Ux(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Tx(e)===`degraded`).length}function Wx(e,t){return!!e&&Vx(t)>0}function Gx(e){return String(Hx(e))+`/`+String(Vx(e))}function Kx(e){return Ux(e)>0?`is-degraded`:`is-healthy`}function qx(e){let t=Ux(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Vx(e),r=Hx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Jx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Yx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Xx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Zx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Qx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function $x(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function eS(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function tS(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:eS(Number(t))}function nS(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function rS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=nS(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function iS(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=nS(i,n);return a.month+` `+a.day+`, `+a.year}function aS(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function oS(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>rS(e,r,i)),c=aS(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),precision:0,callback:e=>xc(e)}}}}}}function sS(e=Qy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function cS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||sS();return{type:`line`,data:{labels:t.map(e=>rS(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+eS(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),callback:e=>eS(e)}}}}}}var lS=class{#e=j(N(Jb()));get status(){return R(this.#e)}set status(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=j(!1);get loadedOnce(){return R(this.#n)}set loadedOnce(e){M(this.#n,e,!0)}#r=j(!1);get detailsExpanded(){return R(this.#r)}set detailsExpanded(e){M(this.#r,e,!0)}#i=j(N({}));get cardOverrides(){return R(this.#i)}set cardOverrides(e){M(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Yb(xa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Qb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Zb(xa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Xb(xa(),this.detailsExpanded),Zb(xa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await ws(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Jb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Jb();n.summary||=Jb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Es(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Jb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),ix(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Gb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},uS=class{#e=j(N(Jx()));get stats(){return R(this.#e)}set stats(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await ws(`/admin/audit/stats?`+Uc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Jx();return}this.stats=Yx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Jx()}finally{e===this.#n&&(this.loading=!1)}}},dS=class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!1);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}async fetch(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await ws(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},fS=class{#e=j(N([]));get data(){return R(this.#e)}set data(e){M(this.#e,e,!0)}#t=j(`tokens`);get mode(){return R(this.#t)}set mode(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await ws(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(Es(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},pS=new lS,mS=new uS,hS=new dS,gS=new fS,_S=(e,t=f,n=f,r=f,i=f)=>{var a=yS(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=P(c),u=P(l),d=P(u,!0);D(u),Ve(),D(l);var p=I(l,4),m=P(p),h=P(m,!0);D(m),Ve(),D(p);var g=I(p,4),_=P(g,!0);D(g),D(c),D(a),L((e,n,r,i,a,o)=>{H(s,t()),K(l,`title`,e),H(d,n),K(p,`title`,r),H(h,i),K(g,`title`,a),H(_,o)},[()=>Sc(`Input tokens`,n()),()=>xc(n()),()=>Sc(`Output tokens`,r()),()=>xc(r()),()=>Sc(`Total tokens`,i()),()=>xc(i())]),V(e,a)},vS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=SS(),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u);var p=I(u,2),m=e=>{var t=bS(),n=P(t,!0);D(t),L(()=>{K(t,`aria-label`,o().title),K(t,`title`,o().title),H(n,a())}),z(`click`,t,function(...e){o().onclick?.apply(this,e)}),V(e,t)},h=e=>{var t=xS(),n=P(t,!0);D(t),L(()=>H(n,a())),V(e,t)};U(p,e=>{o()?e(m):e(h,-1)}),D(s),L(()=>{G(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),H(l,r()),H(d,i())}),V(e,s)},yS=B(`
            i + o =
            `),bS=B(``),xS=B(` `),SS=B(`
            `),CS=B(`
            Cache Hits
            `),wS=B(`
            Total Requests
            Estimated Cost
            Prompt Cache Rate
            `);function TS(e,t){O(t,!0);let n=A(()=>Yc.summary),r=A(()=>Yc.cacheOverview),i=A(()=>Yc.cacheAnalyticsEnabled()),a=A(()=>pS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=wS(),c=P(s);{let e=A(()=>Cb(R(n)));_S(c,()=>`Tokens`,()=>R(n).total_input_tokens,()=>R(n).total_output_tokens,()=>R(e))}var l=I(c,2),u=I(P(l),2),d=P(u,!0);D(u),D(l);var f=I(l,2),p=e=>{var t=CS(),n=I(P(t),2),i=P(n,!0);D(n),D(t),L(e=>H(i,e),[()=>_c(R(r).summary.total_hits)]),V(e,t)};U(f,e=>{R(i)&&e(p)});var m=I(f,2),h=I(P(m),2),g=P(h,!0);D(h),D(m);var _=I(m,2),v=e=>{{let t=A(()=>Db(R(r)));_S(e,()=>`Local Cache`,()=>R(r).summary.total_input_tokens,()=>R(r).summary.total_output_tokens,()=>R(t))}};U(_,e=>{R(i)&&e(v)});var y=I(_,2),b=I(P(y),2),x=P(b);Hy(x,{build:()=>Hb(Rb(R(n)),Xy(`var(--token-prompt)`),Xy(`var(--bg-surface-hover)`))});var S=I(x,2),C=P(S,!0);D(S),D(b),D(y);var w=I(y,2),T=e=>{{let t=A(()=>$b(R(a))),n=A(()=>tx(R(a))),r=A(()=>rx(R(a))),i=A(()=>nx(R(a))?{title:`View providers overview`,onclick:o}:null);vS(e,()=>`provider-status-overview-card`,()=>R(t),()=>`Provider Status`,()=>R(n),()=>R(r),()=>R(i))}};U(w,e=>{R(a).total>0&&e(T)});var E=I(w,2),ee=e=>{{let t=A(()=>Kx(hS.servers)),n=A(()=>Gx(hS.servers)),r=A(()=>qx(hS.servers));vS(e,()=>`mcp-servers-flag`,()=>R(t),()=>`MCP Servers`,()=>R(n),()=>R(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},te=A(()=>Wx(hS.available,hS.servers));U(E,e=>{R(te)&&e(ee)}),D(s),L((e,t,n,r,i)=>{K(u,`title`,e),H(d,t),H(g,n),K(b,`aria-label`,r),H(C,i)},[()=>Eb(R(n),R(r),R(i)),()=>_c(Tb(R(n),R(r),R(i))),()=>vc(R(n).total_cost),()=>`Prompt cache rate `+Bb(R(n)),()=>Bb(R(n))]),V(e,s),k()}Br([`click`]);var ES=B(` `),DS=B(`
            `),OS=B(`No usage in the selected period yet`),kS=B(`
            `),AS=B(`

            Tokens

            Share of input tokens over the selected period
            `);function jS(e,t){O(t,!0);let n=A(()=>Yc.cacheAnalyticsEnabled()),r=A(()=>jb(Yc.summary,Yc.cacheOverview,R(n))),i=A(()=>Mb(Yc.summary,Yc.cacheOverview,R(n))),a=A(()=>Ab(Yc.summary,Yc.cacheOverview,R(n)));var o=AS(),s=I(P(o),2);let c;var l=P(s);W(l,17,()=>R(i),e=>e.key,(e,t)=>{var n=DS(),r=P(n),i=e=>{var n=ES(),r=P(n);D(n),L(()=>H(r,`${R(t).pct??``}%`)),V(e,n)};U(r,e=>{R(t).pct>=8&&e(i)}),D(n),L(e=>{Bi(n,`width: ${R(t).pct??``}%; background: var(${R(t).colorVar??``})`),K(n,`title`,e)},[()=>Nb(R(t))]),V(e,n)});var u=I(l,2),d=e=>{V(e,OS())};U(u,e=>{R(a)||e(d)}),D(s);var f=I(s,2);W(f,21,()=>R(r),e=>e.key,(e,t)=>{var n=kS(),r=P(n),i=I(r,2),a=P(i,!0);D(i);var o=I(i,2),s=P(o);D(o);var c=I(o,2),l=P(c,!0);D(c),D(n),L((e,i)=>{K(n,`title`,e),Bi(r,`background: var(${R(t).colorVar??``})`),H(a,R(t).label),H(s,`${R(t).pct??``}%`),H(l,i)},[()=>Nb(R(t)),()=>_c(R(t).tokens)]),V(e,n)}),D(f),D(o),L(e=>{c=G(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!R(a)}),K(s,`aria-label`,e)},[()=>Pb(R(i))]),V(e,o),k()}var MS=B(``);function NS(e,t){let n=q(t,`size`,3,16),r=q(t,`label`,3,`Loading`),i=q(t,`class`,3,``);var a=MS();L(()=>{G(a,1,Ni([`spinner`,i()]),`svelte-b54l9o`),Bi(a,`--spinner-size: ${n()??``}px`),K(a,`aria-label`,r())}),V(e,a)}var PS=Jr(` `),FS=Jr(``);function IS(e,t){let n=q(t,`label`,3,`No data`);var r=FS(),i=I(P(r),9),a=e=>{var t=PS(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(i,e=>{n()&&e(a)}),D(r),L(()=>{K(r,`role`,n()?`img`:void 0),K(r,`aria-label`,n()||void 0),K(r,`aria-hidden`,n()?void 0:`true`)}),V(e,r)}var LS=B(`
            `),RS=B(`

            `);function zS(e,t){O(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Uc.interval=e,t.onintervalchange?.()}function i(){let e=Yc.daily;if(e.length===0)return null;let t=Uc.rangeStart(),n=Uc.rangeEnd(),r=Lb(Ib(e,Uc.interval,t,n),Ib(Array.isArray(Yc.cacheOverview.daily)?Yc.cacheOverview.daily:[],Uc.interval,t,n));return Vb(qy(),r,{cacheEnabled:Yc.cacheAnalyticsEnabled(),resolve:Xy})}var a=RS(),o=P(a),s=P(o),c=P(s,!0);D(s);var l=I(s,2);{let e=A(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Gy(l,{ariaLabel:`Usage chart interval`,get options(){return R(e)},get value(){return Uc.interval},onchange:r})}D(o);var u=I(o,2),d=P(u);Hy(d,{build:i});var f=I(d,2),p=e=>{var t=LS();NS(P(t),{size:24,label:`Loading usage`}),D(t),V(e,t)},m=e=>{var t=LS();IS(P(t),{}),D(t),V(e,t)};U(f,e=>{Yc.daily.length===0&&Yc.loading?e(p):Yc.daily.length===0&&!Y.authError&&e(m,1)}),D(u),D(a),L(e=>H(c,e),[()=>Uc.chartTitle()]),V(e,a),k()}var BS=10,VS=.7;function HS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+VS,r=Math.ceil(n*BS);return r<1?1:r>BS?BS:r}function US(){let e=[];for(let t=0;t<=BS;t++)e.push(t);return e}function WS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=as(ss(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);os(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=os(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function GS(e){let t=as(ss(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);os(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),os(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),YS=B(`
            `),XS=B(`
            `),ZS=B(`
            `),QS=B(`
            `),$S=B(`

            Activity

            Mon Wed Fri
            `,1);function eC(e,t){O(t,!0);let n=j(N({show:!1,x:0,y:0,text:``})),r=A(()=>vs.currentDateKey()),i=A(()=>WS(gS.data,gS.mode,R(r))),a=A(()=>GS(R(r)));function o(e,t){t.empty||M(n,{show:!0,x:e.clientX,y:e.clientY,text:qS(t,gS.mode)},!0)}function s(){M(n,{show:!1,x:0,y:0,text:``},!0)}var c=$S(),l=F(c),u=P(l),d=I(P(u),2),f=e=>{NS(e,{size:14,label:`Loading activity`})};U(d,e=>{gS.loading&&gS.data.length===0&&e(f)}),Gy(I(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return gS.mode},onchange:e=>gS.mode=e}),D(u);var p=I(u,2),m=I(P(p),2),h=P(m);W(h,21,()=>R(a),e=>e.key,(e,t)=>{var n=JS(),r=P(n,!0);D(n),L(()=>{Bi(n,`grid-column: ${R(t).col+1} / span ${R(t).span??``}`),H(r,R(t).label)}),V(e,n)}),D(h);var g=I(h,2);W(g,21,()=>R(i),ii,(e,t,n)=>{var r=XS();W(r,23,()=>R(t),(e,t)=>n+`-`+t,(e,t)=>{var n=YS();L(()=>G(n,1,Ni([`contribution-calendar-cell`,R(t).empty?`empty`:`level-${R(t).level}`]),`svelte-3hfxuq`)),zr(`mouseenter`,n,e=>o(e,R(t))),zr(`mouseleave`,n,s),V(e,n)}),D(r),V(e,r)}),D(g),D(m),D(p);var _=I(p,2),v=P(_),y=P(v),b=P(y,!0);D(y),D(v);var x=I(v,2);W(I(P(x),2),16,US,e=>e,(e,t)=>{var n=ZS();L(()=>G(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),V(e,n)}),Ve(2),D(x),D(_),D(l);var S=I(l,2),C=e=>{var t=QS(),r=P(t,!0);D(t),L(()=>{Bi(t,`left: ${R(n).x??``}px; top: ${R(n).y-40}px`),H(r,R(n).text)}),V(e,t)};U(S,e=>{R(n).show&&e(C)}),L(e=>H(b,e),[()=>KS(gS.data,gS.mode)]),V(e,c),k()}var tC=B(``),nC=B(`

            `),rC=B(`
            `);function iC(e,t){O(t,!0);let n=q(t,`label`,3,`help`),r=q(t,`text`,3,``),i=q(t,`open`,15,!1),a=q(t,`external`,3,!1),o=A(()=>!!r()||!!t.help||a());var s=rC(),c=P(s),l=P(c);mi(l,()=>t.title??f);var u=I(l,2),d=e=>{var r=tC();let a;L(()=>{a=G(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),K(r,`aria-label`,(i()?`Hide `:`Show `)+n()),K(r,`aria-expanded`,i()),K(r,`aria-controls`,t.copyId)}),z(`click`,r,()=>i(!i())),V(e,r)};U(u,e=>{R(o)&&e(d)}),mi(I(u,2),()=>t.extra??f),D(c);var p=I(c,2),m=e=>{var n=nC(),i=P(n),a=e=>{var n=Xr();mi(F(n),()=>t.help),V(e,n)},o=e=>{var t=Yr();L(()=>H(t,r())),V(e,t)};U(i,e=>{t.help?e(a):e(o,-1)}),D(n),L(()=>K(n,`id`,t.copyId)),V(e,n)};U(p,e=>{i()&&R(o)&&!a()&&e(m)}),D(s),V(e,s),k()}Br([`click`]);var aC=B(`

            Provider Latency

            `),oC=B(`
            Avg
            `),sC=B(`

            Requests by Status

            Success 2xx 4xx 5xx
            `,1);function cC(e,t){O(t,!0);let n=sS(),r=A(()=>mS.stats);function i(){return{interval:R(r).interval,zone:vs.effectiveTimezone(),resolve:Xy,formatTimestamp:e=>vs.formatTimestamp(e)}}var a=Xr(),o=F(a),s=e=>{var t=sC(),a=F(t),o=P(a),s=I(P(o),2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c);var d=I(c,2),f=I(P(d),4),p=P(f,!0);D(f),D(d);var m=I(d,2),h=I(P(m),4),g=P(h,!0);D(h),D(m);var _=I(m,2),v=I(P(_),4),y=P(v,!0);D(v),D(_),D(s),D(o);var b=I(o,2);Hy(P(b),{build:()=>oS(qy(),R(r).buckets,i())}),D(b),D(a);var x=I(a,2),S=e=>{var t=oC(),a=P(t),o=P(a);iC(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{V(e,aC())},$$slots:{title:!0}});var s=I(o,2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c),D(s),D(a);var d=I(a,2);Hy(P(d),{build:()=>cS(qy(),R(r).buckets,R(r).provider_latency,{...i(),providerColor:n})}),D(d),D(t),L(e=>H(u,e),[()=>tS(R(r))]),V(e,t)},C=A(()=>Zx(R(r)));U(x,e=>{R(C)&&e(S)}),L((e,t,n,r)=>{H(u,e),H(p,t),H(g,n),H(y,r)},[()=>Qx(R(r)),()=>_c($x(R(r),`status_2xx`)),()=>_c($x(R(r),`status_4xx`)),()=>_c($x(R(r),`status_5xx`))]),V(e,t)},c=A(()=>Xx(R(r)));U(o,e=>{R(c)&&e(s)}),V(e,a),k()}var lC=(e,t=f,n=f,r)=>{let i=Et(()=>h(r?.(),!1));var a=fC(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=e=>{var t=uC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)},u=e=>{var t=dC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(c,e=>{R(i)?e(l):e(u,-1)}),D(a),L(()=>H(s,t())),V(e,a)},uC=B(` `),dC=B(` `),fC=B(`
            `),pC=B(`

            `),mC=B(`
            Breaker State
            `),hC=B(`
            `),gC=B(`
            Models (Recent Traffic)
            `),_C=B(`
            `),vC=B(`

            `);function yC(e,t){O(t,!0);let n=A(()=>_x(t.provider)),r=A(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=vC();let a;var o=P(i),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=e=>{var n=pC(),r=P(n,!0);D(n),L(()=>H(r,t.provider.last_error)),V(e,n)};U(l,e=>{t.provider.last_error&&e(u)});var d=I(l,2),f=e=>{var r=_C(),i=P(r);{let e=A(()=>vx(t.provider));lC(i,()=>`Recent Requests`,()=>R(e))}var a=I(i,2),o=e=>{var r=mC(),i=I(P(r),2),a=P(i),o=P(a,!0);D(a),D(i),D(r),L(e=>{G(a,1,Ni([`provider-status-health-state`,R(n)]),`svelte-6y9wjv`),H(o,e)},[()=>gx(t.provider)]),V(e,r)},s=A(()=>hx(t.provider));U(a,e=>{R(s)&&e(o)});var c=I(a,2),l=e=>{var n=gC(),r=I(P(n),2);W(r,21,()=>yx(t.provider),e=>e.model,(e,t)=>{var n=hC();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L((e,i)=>{r=G(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":R(t).flagged}),K(n,`title`,e),H(a,R(t).model),H(s,i)},[()=>xx(R(t)),()=>bx(R(t))]),V(e,n)}),D(r),D(n),V(e,n)},u=A(()=>yx(t.provider).length>0);U(c,e=>{R(u)&&e(l)}),D(r),V(e,r)},p=A(()=>mx(t.provider));U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=P(m);W(h,17,()=>R(r),([e,t])=>e,(e,t)=>{var n=A(()=>g(R(t),2));lC(e,()=>R(n)[0],()=>R(n)[1],()=>!0)});var _=I(h,2);{let e=A(()=>fx(t.provider));lC(_,()=>`Configured Models`,()=>R(e))}var v=I(_,2);{let e=A(()=>ux(t.provider));lC(v,()=>`Retry`,()=>R(e))}var y=I(v,2);{let e=A(()=>dx(t.provider));lC(y,()=>`Circuit Breaker`,()=>R(e))}D(m),D(o),D(i),L(()=>{a=G(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),K(i,`aria-hidden`,!t.expanded),H(c,t.provider.status_reason)}),V(e,i),k()}var bC=B(` `),xC=B(``),SC=B(`

            Models Available
            Last Checked
            `);function CC(e,t){O(t,!0);let n=A(()=>pS.cardExpanded(t.provider)),r=e=>vs.formatTimestamp(e);var i=SC(),a=P(i),o=P(a),s=P(o),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=e=>{var n=bC(),r=P(n);D(n),L(e=>H(r,`(${e??``})`),[()=>cx(t.provider)]),V(e,n)},f=A(()=>cx(t.provider));U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var n=xC();L((e,t,r)=>{K(n,`href`,e),K(n,`aria-label`,t),K(n,`title`,r)},[()=>lx(t.provider),()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`]),V(e,n)},h=A(()=>lx(t.provider));U(p,e=>{R(h)&&e(m)}),D(s),D(o);var g=I(o,2),_=P(g,!0);D(g),D(a);var v=I(a,2),y=P(v),b=I(P(y),2),x=P(b,!0);D(b),D(y);var S=I(y,2),C=I(P(S),2),w=P(C,!0);D(C),D(S),D(v);var T=I(v,2);yC(T,{get provider(){return t.provider},get expanded(){return R(n)}});var E=I(T,2);let ee;J(P(E),{get icon(){return Va},class:`provider-status-card-toggle-icon`}),D(E),D(i),L((e,r,i,a,o)=>{H(l,t.provider.name),G(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),K(g,`title`,r),H(_,t.provider.status_label),H(x,i),K(C,`title`,a),H(w,o),ee=G(E,1,`provider-status-card-toggle svelte-nopjmh`,null,ee,{"is-expanded":R(n)}),K(E,`aria-expanded`,R(n)),K(E,`aria-label`,(R(n)?`Collapse `:`Expand `)+t.provider.name+` details`),K(E,`title`,R(n)?`Collapse details`:`Expand details`)},[()=>ex(t.provider.status),()=>px(t.provider),()=>_c(t.provider.runtime?.discovered_model_count),()=>sx(t.provider,r),()=>ox(t.provider,r)]),z(`click`,E,()=>pS.toggleCard(t.provider)),V(e,i),k()}Br([`click`]);var wC=B(`

            Providers Overview

            `),TC=B(`
            `);function EC(e,t){O(t,!0);let n=A(()=>pS.status.providers);var r=Xr(),i=F(r),a=e=>{var t=wC(),r=P(t),i=I(P(r),2),a=P(i),o=P(a,!0);D(a);var s=I(a,2);let c;D(i),D(r);var l=I(r,2);W(l,21,()=>R(n),e=>e.name,(e,t)=>{CC(e,{get provider(){return R(t)}})}),D(l),D(t),L((e,t)=>{K(i,`aria-checked`,pS.detailsExpanded),K(i,`title`,e),H(o,t),c=G(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":pS.detailsExpanded})},[()=>pS.detailsToggleLabel(),()=>pS.detailsToggleLabel()]),z(`click`,i,()=>pS.toggleDetails()),V(e,t)},o=e=>{var t=TC();NS(P(t),{size:18,label:`Loading provider status`}),D(t),V(e,t)};U(i,e=>{R(n).length>0?e(a):pS.loading&&!pS.loadedOnce&&e(o,1)}),V(e,r),k()}Br([`click`]);var DC=B(`
            `);function OC(e,t){O(t,!0);function n(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch(),pS.fetch(),hS.fetch(),gS.fetch()}function r(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch()}function i(){r(),gS.fetch()}On(()=>{if(Y.refreshTick,Yo.page===`overview`)return wr(()=>{n(),vb.start()}),()=>{vb.stop(),pS.stopPolling()}});var a=DC(),o=P(a);Sb(o,{});var s=I(o,4);fl(P(s),{onchange:i}),D(s);var c=I(s,2);Kc(c,{});var l=I(c,2);TS(l,{});var u=I(l,2);jS(u,{});var d=I(u,2);zS(d,{onintervalchange:r});var f=I(d,2);eC(f,{});var p=I(f,2);cC(p,{}),EC(I(p,2),{}),D(a),V(e,a),k()}var kC=`/admin/live/logs?types=audit,usage`;function AC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function jC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function MC(e){let t=kC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function NC(){return{async consumeLiveLogsBody(e){await tb(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>AC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eAC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1)),session_matching_count:Math.max(1,Number(o.session_matching_count||o.session_count||1))+Math.max(1,Number(e.session_matching_count||e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=Number(i.session_matching_count),s=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1,session_matching_count:(Number.isFinite(o)&&o>0?o:Number.isFinite(a)&&a>0?a:1)+1}),c=[...n];return c.splice(r,1),c.unshift(s),this.auditLog.entries=c,this.prependLiveAuditThreadChild(t,i),s},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!AC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=Number(i.session_matching_count),o=[...n];o.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t),session_matching_count:Math.max(1,(Number.isFinite(a)&&a>0?a:Number(i.session_count||1))-t)}),this.auditLog.entries=o},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!AC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!AC(e,t,n)):[];if(u.length===0){s=!0;return}let d=Math.max(1,Number(e.session_matching_count||c)),f={...u[0],session_id:r,session_count:c-1,session_matching_count:Math.max(1,d-1)};i.push(f),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var PC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},FC=new Set(Object.keys(PC));function IC(e){return String(e&&(e.id||e.request_id)||``).trim()}function LC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:BC(n.data)&&BC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(PC[a]||0)>(PC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&BC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function RC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function zC(e){return FC.has(String(e&&e.eventType||``).trim())}function BC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var VC=200,HC=class{#e=j(N({entries:[],total:0,limit:25,offset:0}));get auditLog(){return R(this.#e)}set auditLog(e){M(this.#e,e,!0)}#t=j(N({entries:[],total:0,limit:50,offset:0}));get usageLog(){return R(this.#t)}set usageLog(e){M(this.#t,e,!0)}#n=j(N({}));get auditRecords(){return R(this.#n)}set auditRecords(e){M(this.#n,e,!0)}#r=j(N([]));get auditRecordChanges(){return R(this.#r)}set auditRecordChanges(e){M(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=j(``);get auditSearch(){return R(this.#i)}set auditSearch(e){M(this.#i,e,!0)}#a=j(``);get auditMethod(){return R(this.#a)}set auditMethod(e){M(this.#a,e,!0)}#o=j(``);get auditStatusCode(){return R(this.#o)}set auditStatusCode(e){M(this.#o,e,!0)}#s=j(``);get auditStream(){return R(this.#s)}set auditStream(e){M(this.#s,e,!0)}#c=j(Sa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return R(this.#c)}set auditGroupSessions(e){M(this.#c,e,!0)}#l=j(N({}));get auditThreadChildren(){return R(this.#l)}set auditThreadChildren(e){M(this.#l,e,!0)}#u=j(``);get usageLogSearch(){return R(this.#u)}set usageLogSearch(e){M(this.#u,e,!0)}#d=j(``);get usageFilterModel(){return R(this.#d)}set usageFilterModel(e){M(this.#d,e,!0)}#f=j(``);get usageFilterProvider(){return R(this.#f)}set usageFilterProvider(e){M(this.#f,e,!0)}#p=j(``);get usageFilterLabel(){return R(this.#p)}set usageFilterLabel(e){M(this.#p,e,!0)}#m=j(``);get usageFilterUserPath(){return R(this.#m)}set usageFilterUserPath(e){M(this.#m,e,!0)}#h=j(!1);get usageLogHideCached(){return R(this.#h)}set usageLogHideCached(e){M(this.#h,e,!0)}#g=j(!1);get liveLogsStreaming(){return R(this.#g)}set liveLogsStreaming(e){M(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=IC(e);if(!n)return e;let r=LC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():IC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=VC)return;let t={...this.auditRecords},n=e.length-VC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Uc.customStartDate}get customEndDate(){return Uc.customEndDate}get followsToday(){return Uc.followsToday}liveLogsEnabled(){return ks.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await ks.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=MC(this.liveLogsLastSeq),r=Y.generation;try{let i=await Ss(n,t);if(i.status===401){if(Y.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await ws(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(HC.prototype,NC());var UC=new HC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!UC.liveLogsController,UC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&UC.ensureLiveLogs()})}var WC=null;An(()=>{On(()=>{let e=Y.refreshTick;if(WC===null){WC=e;return}e!==WC&&(WC=e,wr(()=>{UC.stopLiveLogs(),UC.startLiveLogs()}))})});function GC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function KC(){return{entries:[],total:0,limit:50,offset:0}}function qC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function JC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function YC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function XC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function ZC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function QC(e,t,n){let r=XC(e,t);return r<=0?``:n?_c(r)+` cached requests hidden`:_c(Number(e&&e.total_requests||0))+` to providers + `+_c(r)+` from cache`}function $C(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:vc(t.total_input_cost)+` input + `+vc(t.total_output_cost)+` output`}function ew(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function tw(e){return ew(e)>0}function nw(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function rw(){return`Estimated at 4 net characters removed per token`}function iw(e,t){return t===`costs`?vc(nw(e)):xc(ew(e))}function aw(e,t){let n=t===`costs`,r=n?Number(nw(e)):ew(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function ow(e,t){let n=aw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function sw(e,t){let n=ew(e);if(n<=0)return``;let r=[_c(n)+` estimated prompt token-transmissions removed across provider requests`,rw(),`Savings are summed per provider request; resent conversation history is counted again`],i=nw(e);i!=null&&(r.push(vc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=ow(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` +`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Ix(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Ax(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>wx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Nx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:hc(e.allowed_tools),disallowed_tools:hc(e.disallowed_tools),user_paths:jx(e.user_paths),tool_timeout_seconds:s}}}function Lx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Rx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function zx(e){let t=e||Cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Rx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Bx(e){return zx(e).length===0}function Vx(e){return(e||[]).length}function Hx(e){return(e||[]).filter(e=>Tx(e)===`connected`).length}function Ux(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Tx(e)===`degraded`).length}function Wx(e,t){return!!e&&Vx(t)>0}function Gx(e){return String(Hx(e))+`/`+String(Vx(e))}function Kx(e){return Ux(e)>0?`is-degraded`:`is-healthy`}function qx(e){let t=Ux(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Vx(e),r=Hx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Jx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Yx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Xx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Zx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Qx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function $x(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function eS(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function tS(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:eS(Number(t))}function nS(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function rS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=nS(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function iS(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=nS(i,n);return a.month+` `+a.day+`, `+a.year}function aS(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function oS(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>rS(e,r,i)),c=aS(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),precision:0,callback:e=>xc(e)}}}}}}function sS(e=Qy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function cS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||sS();return{type:`line`,data:{labels:t.map(e=>rS(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(e,{title:e=>e.length?iS(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+eS(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),callback:e=>eS(e)}}}}}}var lS=class{#e=j(N(Jb()));get status(){return R(this.#e)}set status(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=j(!1);get loadedOnce(){return R(this.#n)}set loadedOnce(e){M(this.#n,e,!0)}#r=j(!1);get detailsExpanded(){return R(this.#r)}set detailsExpanded(e){M(this.#r,e,!0)}#i=j(N({}));get cardOverrides(){return R(this.#i)}set cardOverrides(e){M(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Yb(xa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Qb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Zb(xa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Xb(xa(),this.detailsExpanded),Zb(xa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await ws(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Jb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Jb();n.summary||=Jb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Es(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Jb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),ix(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Gb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},uS=class{#e=j(N(Jx()));get stats(){return R(this.#e)}set stats(e){M(this.#e,e,!0)}#t=j(!1);get loading(){return R(this.#t)}set loading(e){M(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await ws(`/admin/audit/stats?`+Uc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Jx();return}this.stats=Yx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Jx()}finally{e===this.#n&&(this.loading=!1)}}},dS=class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!1);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}async fetch(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await ws(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},fS=class{#e=j(N([]));get data(){return R(this.#e)}set data(e){M(this.#e,e,!0)}#t=j(`tokens`);get mode(){return R(this.#t)}set mode(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await ws(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(Es(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},pS=new lS,mS=new uS,hS=new dS,gS=new fS,_S=(e,t=f,n=f,r=f,i=f)=>{var a=yS(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=P(c),u=P(l),d=P(u,!0);D(u),Ve(),D(l);var p=I(l,4),m=P(p),h=P(m,!0);D(m),Ve(),D(p);var g=I(p,4),_=P(g,!0);D(g),D(c),D(a),L((e,n,r,i,a,o)=>{H(s,t()),K(l,`title`,e),H(d,n),K(p,`title`,r),H(h,i),K(g,`title`,a),H(_,o)},[()=>Sc(`Input tokens`,n()),()=>xc(n()),()=>Sc(`Output tokens`,r()),()=>xc(r()),()=>Sc(`Total tokens`,i()),()=>xc(i())]),V(e,a)},vS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=SS(),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u);var p=I(u,2),m=e=>{var t=bS(),n=P(t,!0);D(t),L(()=>{K(t,`aria-label`,o().title),K(t,`title`,o().title),H(n,a())}),z(`click`,t,function(...e){o().onclick?.apply(this,e)}),V(e,t)},h=e=>{var t=xS(),n=P(t,!0);D(t),L(()=>H(n,a())),V(e,t)};U(p,e=>{o()?e(m):e(h,-1)}),D(s),L(()=>{G(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),H(l,r()),H(d,i())}),V(e,s)},yS=B(`
            i + o =
            `),bS=B(``),xS=B(` `),SS=B(`
            `),CS=B(`
            Cache Hits
            `),wS=B(`
            Total Requests
            Estimated Cost
            Prompt Cache Rate
            `);function TS(e,t){O(t,!0);let n=A(()=>Yc.summary),r=A(()=>Yc.cacheOverview),i=A(()=>Yc.cacheAnalyticsEnabled()),a=A(()=>pS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=wS(),c=P(s);{let e=A(()=>Cb(R(n)));_S(c,()=>`Tokens`,()=>R(n).total_input_tokens,()=>R(n).total_output_tokens,()=>R(e))}var l=I(c,2),u=I(P(l),2),d=P(u,!0);D(u),D(l);var f=I(l,2),p=e=>{var t=CS(),n=I(P(t),2),i=P(n,!0);D(n),D(t),L(e=>H(i,e),[()=>_c(R(r).summary.total_hits)]),V(e,t)};U(f,e=>{R(i)&&e(p)});var m=I(f,2),h=I(P(m),2),g=P(h,!0);D(h),D(m);var _=I(m,2),v=e=>{{let t=A(()=>Db(R(r)));_S(e,()=>`Local Cache`,()=>R(r).summary.total_input_tokens,()=>R(r).summary.total_output_tokens,()=>R(t))}};U(_,e=>{R(i)&&e(v)});var y=I(_,2),b=I(P(y),2),x=P(b);Hy(x,{build:()=>Hb(Rb(R(n)),Xy(`var(--token-prompt)`),Xy(`var(--bg-surface-hover)`))});var S=I(x,2),C=P(S,!0);D(S),D(b),D(y);var w=I(y,2),T=e=>{{let t=A(()=>$b(R(a))),n=A(()=>tx(R(a))),r=A(()=>rx(R(a))),i=A(()=>nx(R(a))?{title:`View providers overview`,onclick:o}:null);vS(e,()=>`provider-status-overview-card`,()=>R(t),()=>`Provider Status`,()=>R(n),()=>R(r),()=>R(i))}};U(w,e=>{R(a).total>0&&e(T)});var E=I(w,2),ee=e=>{{let t=A(()=>Kx(hS.servers)),n=A(()=>Gx(hS.servers)),r=A(()=>qx(hS.servers));vS(e,()=>`mcp-servers-flag`,()=>R(t),()=>`MCP Servers`,()=>R(n),()=>R(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},te=A(()=>Wx(hS.available,hS.servers));U(E,e=>{R(te)&&e(ee)}),D(s),L((e,t,n,r,i)=>{K(u,`title`,e),H(d,t),H(g,n),K(b,`aria-label`,r),H(C,i)},[()=>Eb(R(n),R(r),R(i)),()=>_c(Tb(R(n),R(r),R(i))),()=>vc(R(n).total_cost),()=>`Prompt cache rate `+Bb(R(n)),()=>Bb(R(n))]),V(e,s),k()}Br([`click`]);var ES=B(` `),DS=B(`
            `),OS=B(`No usage in the selected period yet`),kS=B(`
            `),AS=B(`

            Tokens

            Share of input tokens over the selected period
            `);function jS(e,t){O(t,!0);let n=A(()=>Yc.cacheAnalyticsEnabled()),r=A(()=>jb(Yc.summary,Yc.cacheOverview,R(n))),i=A(()=>Mb(Yc.summary,Yc.cacheOverview,R(n))),a=A(()=>Ab(Yc.summary,Yc.cacheOverview,R(n)));var o=AS(),s=I(P(o),2);let c;var l=P(s);W(l,17,()=>R(i),e=>e.key,(e,t)=>{var n=DS(),r=P(n),i=e=>{var n=ES(),r=P(n);D(n),L(()=>H(r,`${R(t).pct??``}%`)),V(e,n)};U(r,e=>{R(t).pct>=8&&e(i)}),D(n),L(e=>{Bi(n,`width: ${R(t).pct??``}%; background: var(${R(t).colorVar??``})`),K(n,`title`,e)},[()=>Nb(R(t))]),V(e,n)});var u=I(l,2),d=e=>{V(e,OS())};U(u,e=>{R(a)||e(d)}),D(s);var f=I(s,2);W(f,21,()=>R(r),e=>e.key,(e,t)=>{var n=kS(),r=P(n),i=I(r,2),a=P(i,!0);D(i);var o=I(i,2),s=P(o);D(o);var c=I(o,2),l=P(c,!0);D(c),D(n),L((e,i)=>{K(n,`title`,e),Bi(r,`background: var(${R(t).colorVar??``})`),H(a,R(t).label),H(s,`${R(t).pct??``}%`),H(l,i)},[()=>Nb(R(t)),()=>_c(R(t).tokens)]),V(e,n)}),D(f),D(o),L(e=>{c=G(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!R(a)}),K(s,`aria-label`,e)},[()=>Pb(R(i))]),V(e,o),k()}var MS=B(``);function NS(e,t){let n=q(t,`size`,3,16),r=q(t,`label`,3,`Loading`),i=q(t,`class`,3,``);var a=MS();L(()=>{G(a,1,Ni([`spinner`,i()]),`svelte-b54l9o`),Bi(a,`--spinner-size: ${n()??``}px`),K(a,`aria-label`,r())}),V(e,a)}var PS=Jr(` `),FS=Jr(``);function IS(e,t){let n=q(t,`label`,3,`No data`);var r=FS(),i=I(P(r),9),a=e=>{var t=PS(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(i,e=>{n()&&e(a)}),D(r),L(()=>{K(r,`role`,n()?`img`:void 0),K(r,`aria-label`,n()||void 0),K(r,`aria-hidden`,n()?void 0:`true`)}),V(e,r)}var LS=B(`
            `),RS=B(`

            `);function zS(e,t){O(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Uc.interval=e,t.onintervalchange?.()}function i(){let e=Yc.daily;if(e.length===0)return null;let t=Uc.rangeStart(),n=Uc.rangeEnd(),r=Lb(Ib(e,Uc.interval,t,n),Ib(Array.isArray(Yc.cacheOverview.daily)?Yc.cacheOverview.daily:[],Uc.interval,t,n));return Vb(qy(),r,{cacheEnabled:Yc.cacheAnalyticsEnabled(),resolve:Xy})}var a=RS(),o=P(a),s=P(o),c=P(s,!0);D(s);var l=I(s,2);{let e=A(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Gy(l,{ariaLabel:`Usage chart interval`,get options(){return R(e)},get value(){return Uc.interval},onchange:r})}D(o);var u=I(o,2),d=P(u);Hy(d,{build:i});var f=I(d,2),p=e=>{var t=LS();NS(P(t),{size:24,label:`Loading usage`}),D(t),V(e,t)},m=e=>{var t=LS();IS(P(t),{}),D(t),V(e,t)};U(f,e=>{Yc.daily.length===0&&Yc.loading?e(p):Yc.daily.length===0&&!Y.authError&&e(m,1)}),D(u),D(a),L(e=>H(c,e),[()=>Uc.chartTitle()]),V(e,a),k()}var BS=10,VS=.7;function HS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+VS,r=Math.ceil(n*BS);return r<1?1:r>BS?BS:r}function US(){let e=[];for(let t=0;t<=BS;t++)e.push(t);return e}function WS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=as(ss(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);os(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=os(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function GS(e){let t=as(ss(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);os(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),os(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),YS=B(`
            `),XS=B(`
            `),ZS=B(`
            `),QS=B(`
            `),$S=B(`

            Activity

            Mon Wed Fri
            `,1);function eC(e,t){O(t,!0);let n=j(N({show:!1,x:0,y:0,text:``})),r=A(()=>vs.currentDateKey()),i=A(()=>WS(gS.data,gS.mode,R(r))),a=A(()=>GS(R(r)));function o(e,t){t.empty||M(n,{show:!0,x:e.clientX,y:e.clientY,text:qS(t,gS.mode)},!0)}function s(){M(n,{show:!1,x:0,y:0,text:``},!0)}var c=$S(),l=F(c),u=P(l),d=I(P(u),2),f=e=>{NS(e,{size:14,label:`Loading activity`})};U(d,e=>{gS.loading&&gS.data.length===0&&e(f)}),Gy(I(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return gS.mode},onchange:e=>gS.mode=e}),D(u);var p=I(u,2),m=I(P(p),2),h=P(m);W(h,21,()=>R(a),e=>e.key,(e,t)=>{var n=JS(),r=P(n,!0);D(n),L(()=>{Bi(n,`grid-column: ${R(t).col+1} / span ${R(t).span??``}`),H(r,R(t).label)}),V(e,n)}),D(h);var g=I(h,2);W(g,21,()=>R(i),ii,(e,t,n)=>{var r=XS();W(r,23,()=>R(t),(e,t)=>n+`-`+t,(e,t)=>{var n=YS();L(()=>G(n,1,Ni([`contribution-calendar-cell`,R(t).empty?`empty`:`level-${R(t).level}`]),`svelte-3hfxuq`)),zr(`mouseenter`,n,e=>o(e,R(t))),zr(`mouseleave`,n,s),V(e,n)}),D(r),V(e,r)}),D(g),D(m),D(p);var _=I(p,2),v=P(_),y=P(v),b=P(y,!0);D(y),D(v);var x=I(v,2);W(I(P(x),2),16,US,e=>e,(e,t)=>{var n=ZS();L(()=>G(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),V(e,n)}),Ve(2),D(x),D(_),D(l);var S=I(l,2),C=e=>{var t=QS(),r=P(t,!0);D(t),L(()=>{Bi(t,`left: ${R(n).x??``}px; top: ${R(n).y-40}px`),H(r,R(n).text)}),V(e,t)};U(S,e=>{R(n).show&&e(C)}),L(e=>H(b,e),[()=>KS(gS.data,gS.mode)]),V(e,c),k()}var tC=B(``),nC=B(`

            `),rC=B(`
            `);function iC(e,t){O(t,!0);let n=q(t,`label`,3,`help`),r=q(t,`text`,3,``),i=q(t,`open`,15,!1),a=q(t,`external`,3,!1),o=A(()=>!!r()||!!t.help||a());var s=rC(),c=P(s),l=P(c);mi(l,()=>t.title??f);var u=I(l,2),d=e=>{var r=tC();let a;L(()=>{a=G(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),K(r,`aria-label`,(i()?`Hide `:`Show `)+n()),K(r,`aria-expanded`,i()),K(r,`aria-controls`,t.copyId)}),z(`click`,r,()=>i(!i())),V(e,r)};U(u,e=>{R(o)&&e(d)}),mi(I(u,2),()=>t.extra??f),D(c);var p=I(c,2),m=e=>{var n=nC(),i=P(n),a=e=>{var n=Xr();mi(F(n),()=>t.help),V(e,n)},o=e=>{var t=Yr();L(()=>H(t,r())),V(e,t)};U(i,e=>{t.help?e(a):e(o,-1)}),D(n),L(()=>K(n,`id`,t.copyId)),V(e,n)};U(p,e=>{i()&&R(o)&&!a()&&e(m)}),D(s),V(e,s),k()}Br([`click`]);var aC=B(`

            Provider Latency

            `),oC=B(`
            Avg
            `),sC=B(`

            Requests by Status

            Success 2xx 4xx 5xx
            `,1);function cC(e,t){O(t,!0);let n=sS(),r=A(()=>mS.stats);function i(){return{interval:R(r).interval,zone:vs.effectiveTimezone(),resolve:Xy,formatTimestamp:e=>vs.formatTimestamp(e)}}var a=Xr(),o=F(a),s=e=>{var t=sC(),a=F(t),o=P(a),s=I(P(o),2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c);var d=I(c,2),f=I(P(d),4),p=P(f,!0);D(f),D(d);var m=I(d,2),h=I(P(m),4),g=P(h,!0);D(h),D(m);var _=I(m,2),v=I(P(_),4),y=P(v,!0);D(v),D(_),D(s),D(o);var b=I(o,2);Hy(P(b),{build:()=>oS(qy(),R(r).buckets,i())}),D(b),D(a);var x=I(a,2),S=e=>{var t=oC(),a=P(t),o=P(a);iC(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{V(e,aC())},$$slots:{title:!0}});var s=I(o,2),c=P(s),l=I(P(c),2),u=P(l,!0);D(l),D(c),D(s),D(a);var d=I(a,2);Hy(P(d),{build:()=>cS(qy(),R(r).buckets,R(r).provider_latency,{...i(),providerColor:n})}),D(d),D(t),L(e=>H(u,e),[()=>tS(R(r))]),V(e,t)},C=A(()=>Zx(R(r)));U(x,e=>{R(C)&&e(S)}),L((e,t,n,r)=>{H(u,e),H(p,t),H(g,n),H(y,r)},[()=>Qx(R(r)),()=>_c($x(R(r),`status_2xx`)),()=>_c($x(R(r),`status_4xx`)),()=>_c($x(R(r),`status_5xx`))]),V(e,t)},c=A(()=>Xx(R(r)));U(o,e=>{R(c)&&e(s)}),V(e,a),k()}var lC=(e,t=f,n=f,r)=>{let i=Et(()=>h(r?.(),!1));var a=fC(),o=P(a),s=P(o,!0);D(o);var c=I(o,2),l=e=>{var t=uC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)},u=e=>{var t=dC(),r=P(t,!0);D(t),L(()=>H(r,n())),V(e,t)};U(c,e=>{R(i)?e(l):e(u,-1)}),D(a),L(()=>H(s,t())),V(e,a)},uC=B(` `),dC=B(` `),fC=B(`
            `),pC=B(`

            `),mC=B(`
            Breaker State
            `),hC=B(`
            `),gC=B(`
            Models (Recent Traffic)
            `),_C=B(`
            `),vC=B(`

            `);function yC(e,t){O(t,!0);let n=A(()=>_x(t.provider)),r=A(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=vC();let a;var o=P(i),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=e=>{var n=pC(),r=P(n,!0);D(n),L(()=>H(r,t.provider.last_error)),V(e,n)};U(l,e=>{t.provider.last_error&&e(u)});var d=I(l,2),f=e=>{var r=_C(),i=P(r);{let e=A(()=>vx(t.provider));lC(i,()=>`Recent Requests`,()=>R(e))}var a=I(i,2),o=e=>{var r=mC(),i=I(P(r),2),a=P(i),o=P(a,!0);D(a),D(i),D(r),L(e=>{G(a,1,Ni([`provider-status-health-state`,R(n)]),`svelte-6y9wjv`),H(o,e)},[()=>gx(t.provider)]),V(e,r)},s=A(()=>hx(t.provider));U(a,e=>{R(s)&&e(o)});var c=I(a,2),l=e=>{var n=gC(),r=I(P(n),2);W(r,21,()=>yx(t.provider),e=>e.model,(e,t)=>{var n=hC();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L((e,i)=>{r=G(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":R(t).flagged}),K(n,`title`,e),H(a,R(t).model),H(s,i)},[()=>xx(R(t)),()=>bx(R(t))]),V(e,n)}),D(r),D(n),V(e,n)},u=A(()=>yx(t.provider).length>0);U(c,e=>{R(u)&&e(l)}),D(r),V(e,r)},p=A(()=>mx(t.provider));U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=P(m);W(h,17,()=>R(r),([e,t])=>e,(e,t)=>{var n=A(()=>g(R(t),2));lC(e,()=>R(n)[0],()=>R(n)[1],()=>!0)});var _=I(h,2);{let e=A(()=>fx(t.provider));lC(_,()=>`Configured Models`,()=>R(e))}var v=I(_,2);{let e=A(()=>ux(t.provider));lC(v,()=>`Retry`,()=>R(e))}var y=I(v,2);{let e=A(()=>dx(t.provider));lC(y,()=>`Circuit Breaker`,()=>R(e))}D(m),D(o),D(i),L(()=>{a=G(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),K(i,`aria-hidden`,!t.expanded),H(c,t.provider.status_reason)}),V(e,i),k()}var bC=B(` `),xC=B(``),SC=B(`

            Models Available
            Last Checked
            `);function CC(e,t){O(t,!0);let n=A(()=>pS.cardExpanded(t.provider)),r=e=>vs.formatTimestamp(e);var i=SC(),a=P(i),o=P(a),s=P(o),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=e=>{var n=bC(),r=P(n);D(n),L(e=>H(r,`(${e??``})`),[()=>cx(t.provider)]),V(e,n)},f=A(()=>cx(t.provider));U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var n=xC();L((e,t,r)=>{K(n,`href`,e),K(n,`aria-label`,t),K(n,`title`,r)},[()=>lx(t.provider),()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`]),V(e,n)},h=A(()=>lx(t.provider));U(p,e=>{R(h)&&e(m)}),D(s),D(o);var g=I(o,2),_=P(g,!0);D(g),D(a);var v=I(a,2),y=P(v),b=I(P(y),2),x=P(b,!0);D(b),D(y);var S=I(y,2),C=I(P(S),2),w=P(C,!0);D(C),D(S),D(v);var T=I(v,2);yC(T,{get provider(){return t.provider},get expanded(){return R(n)}});var E=I(T,2);let ee;J(P(E),{get icon(){return Va},class:`provider-status-card-toggle-icon`}),D(E),D(i),L((e,r,i,a,o)=>{H(l,t.provider.name),G(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),K(g,`title`,r),H(_,t.provider.status_label),H(x,i),K(C,`title`,a),H(w,o),ee=G(E,1,`provider-status-card-toggle svelte-nopjmh`,null,ee,{"is-expanded":R(n)}),K(E,`aria-expanded`,R(n)),K(E,`aria-label`,(R(n)?`Collapse `:`Expand `)+t.provider.name+` details`),K(E,`title`,R(n)?`Collapse details`:`Expand details`)},[()=>ex(t.provider.status),()=>px(t.provider),()=>_c(t.provider.runtime?.discovered_model_count),()=>sx(t.provider,r),()=>ox(t.provider,r)]),z(`click`,E,()=>pS.toggleCard(t.provider)),V(e,i),k()}Br([`click`]);var wC=B(`

            Providers Overview

            `),TC=B(`
            `);function EC(e,t){O(t,!0);let n=A(()=>pS.status.providers);var r=Xr(),i=F(r),a=e=>{var t=wC(),r=P(t),i=I(P(r),2),a=P(i),o=P(a,!0);D(a);var s=I(a,2);let c;D(i),D(r);var l=I(r,2);W(l,21,()=>R(n),e=>e.name,(e,t)=>{CC(e,{get provider(){return R(t)}})}),D(l),D(t),L((e,t)=>{K(i,`aria-checked`,pS.detailsExpanded),K(i,`title`,e),H(o,t),c=G(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":pS.detailsExpanded})},[()=>pS.detailsToggleLabel(),()=>pS.detailsToggleLabel()]),z(`click`,i,()=>pS.toggleDetails()),V(e,t)},o=e=>{var t=TC();NS(P(t),{size:18,label:`Loading provider status`}),D(t),V(e,t)};U(i,e=>{R(n).length>0?e(a):pS.loading&&!pS.loadedOnce&&e(o,1)}),V(e,r),k()}Br([`click`]);var DC=B(`
            `);function OC(e,t){O(t,!0);function n(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch(),pS.fetch(),hS.fetch(),gS.fetch()}function r(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch()}function i(){r(),gS.fetch()}On(()=>{if(Y.refreshTick,Yo.page===`overview`)return wr(()=>{n(),vb.start()}),()=>{vb.stop(),pS.stopPolling()}});var a=DC(),o=P(a);Sb(o,{});var s=I(o,4);fl(P(s),{onchange:i}),D(s);var c=I(s,2);Kc(c,{});var l=I(c,2);TS(l,{});var u=I(l,2);jS(u,{});var d=I(u,2);zS(d,{onintervalchange:r});var f=I(d,2);eC(f,{});var p=I(f,2);cC(p,{}),EC(I(p,2),{}),D(a),V(e,a),k()}var kC=`/admin/live/logs?types=audit,usage`;function AC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function jC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function MC(e){let t=kC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function NC(){return{async consumeLiveLogsBody(e){await tb(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>AC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eAC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!AC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!AC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!AC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var PC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},FC=new Set(Object.keys(PC));function IC(e){return String(e&&(e.id||e.request_id)||``).trim()}function LC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:BC(n.data)&&BC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(PC[a]||0)>(PC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&BC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function RC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function zC(e){return FC.has(String(e&&e.eventType||``).trim())}function BC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var VC=200,HC=class{#e=j(N({entries:[],total:0,limit:25,offset:0}));get auditLog(){return R(this.#e)}set auditLog(e){M(this.#e,e,!0)}#t=j(N({entries:[],total:0,limit:50,offset:0}));get usageLog(){return R(this.#t)}set usageLog(e){M(this.#t,e,!0)}#n=j(N({}));get auditRecords(){return R(this.#n)}set auditRecords(e){M(this.#n,e,!0)}#r=j(N([]));get auditRecordChanges(){return R(this.#r)}set auditRecordChanges(e){M(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=j(``);get auditSearch(){return R(this.#i)}set auditSearch(e){M(this.#i,e,!0)}#a=j(``);get auditMethod(){return R(this.#a)}set auditMethod(e){M(this.#a,e,!0)}#o=j(``);get auditStatusCode(){return R(this.#o)}set auditStatusCode(e){M(this.#o,e,!0)}#s=j(``);get auditStream(){return R(this.#s)}set auditStream(e){M(this.#s,e,!0)}#c=j(Sa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return R(this.#c)}set auditGroupSessions(e){M(this.#c,e,!0)}#l=j(N({}));get auditThreadChildren(){return R(this.#l)}set auditThreadChildren(e){M(this.#l,e,!0)}#u=j(``);get usageLogSearch(){return R(this.#u)}set usageLogSearch(e){M(this.#u,e,!0)}#d=j(``);get usageFilterModel(){return R(this.#d)}set usageFilterModel(e){M(this.#d,e,!0)}#f=j(``);get usageFilterProvider(){return R(this.#f)}set usageFilterProvider(e){M(this.#f,e,!0)}#p=j(``);get usageFilterLabel(){return R(this.#p)}set usageFilterLabel(e){M(this.#p,e,!0)}#m=j(``);get usageFilterUserPath(){return R(this.#m)}set usageFilterUserPath(e){M(this.#m,e,!0)}#h=j(!1);get usageLogHideCached(){return R(this.#h)}set usageLogHideCached(e){M(this.#h,e,!0)}#g=j(!1);get liveLogsStreaming(){return R(this.#g)}set liveLogsStreaming(e){M(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=IC(e);if(!n)return e;let r=LC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():IC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=VC)return;let t={...this.auditRecords},n=e.length-VC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Uc.customStartDate}get customEndDate(){return Uc.customEndDate}get followsToday(){return Uc.followsToday}liveLogsEnabled(){return ks.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await ks.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=MC(this.liveLogsLastSeq),r=Y.generation;try{let i=await Ss(n,t);if(i.status===401){if(Y.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await ws(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(HC.prototype,NC());var UC=new HC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!UC.liveLogsController,UC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&UC.ensureLiveLogs()})}var WC=null;An(()=>{On(()=>{let e=Y.refreshTick;if(WC===null){WC=e;return}e!==WC&&(WC=e,wr(()=>{UC.stopLiveLogs(),UC.startLiveLogs()}))})});function GC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function KC(){return{entries:[],total:0,limit:50,offset:0}}function qC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function JC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function YC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function XC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function ZC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function QC(e,t,n){let r=XC(e,t);return r<=0?``:n?_c(r)+` cached requests hidden`:_c(Number(e&&e.total_requests||0))+` to providers + `+_c(r)+` from cache`}function $C(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:vc(t.total_input_cost)+` input + `+vc(t.total_output_cost)+` output`}function ew(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function tw(e){return ew(e)>0}function nw(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function rw(){return`Estimated at 4 net characters removed per token`}function iw(e,t){return t===`costs`?vc(nw(e)):xc(ew(e))}function aw(e,t){let n=t===`costs`,r=n?Number(nw(e)):ew(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function ow(e,t){let n=aw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function sw(e,t){let n=ew(e);if(n<=0)return``;let r=[_c(n)+` estimated prompt token-transmissions removed across provider requests`,rw(),`Savings are summed per provider request; resent conversation history is counted again`],i=nw(e);i!=null&&(r.push(vc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=ow(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` `)}function cw(e){return String(e&&e.cost_source||``).trim()}function lw(e){let t=cw(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function uw(e){switch(cw(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function dw(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function fw(e){let t=dw(e);return t===`exact`||t===`semantic`}function pw(e){let t=dw(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function mw(e,t){let n=t?String(t):``;return fw(e)?n?`Saved by cache — not charged `+n:`Saved by cache — not charged`:n}function hw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function gw(e){return Number(e&&e.cached_input_tokens||0)>0}function _w(e){return gw(e)?(hw(e)*100).toFixed(1)+`%`:``}function vw(e){if(!gw(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[_c(t)+` cached / `+_c(i)+` input tokens`];return r>0&&a.push(_c(r)+` cache write`),a.join(` `)}function yw(e){let t=[];if(uw(e)&&(t.push(uw(e)),t.push(``)),t.push(`Input: `+vc(e.input_cost)),t.push(`Output: `+vc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):_c(r);t.push(e+`: `+i)}}return t.join(` @@ -37,34 +37,34 @@ /team/alpha /non-existing`),D(g);var y=I(g,2);PE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=YA();ut(r),L(()=>r.disabled=n.vmFormManaged),la(r,()=>n.vmForm.description,e=>n.vmForm.description=e),V(e,r)},$$slots:{default:!0}});var b=I(y,2),x=e=>{PE(e,{id:`virtual-model-slowdown`,label:`Slowdown (extra inference time)`,children:(e,t)=>{var r=XA(),i=F(r);ea(i),Ve(2),L(()=>i.disabled=n.vmFormManaged),la(i,()=>n.vmForm.slowdown,e=>n.vmForm.slowdown=e),V(e,r)},$$slots:{default:!0}})},S=A(()=>n.vmFormSupportsSlowdown());U(b,e=>{R(S)&&e(x)});var C=I(b,2),w=P(C),T=e=>{var t=ZA(),r=P(t,!0);D(t),L(()=>H(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),V(e,t)};U(w,e=>{n.vmFormMode===`edit`&&e(T)});var E=I(w,2),ee=P(E);{let e=A(()=>n.vmFormToggleRestricted()),t=A(()=>n.vmFormToggleLabel());PA(ee,{get enabled(){return n.vmForm.enabled},get restricted(){return R(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return R(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}D(E),D(C),L(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),z(`click`,f,()=>n.addVmTarget()),la(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var ej=B(`

            Pricing override

            `,1),tj=B(``),nj=B(``),rj=B(``),ij=B(``),aj=B(`
            `),oj=B(`
            Tiered pricing exists for this override and will be preserved. Tier editing can be added without a database migration.
            `),sj=B(`
            No pricing fields set.
            `),cj=B(`
            `),lj=B(`

            Currency is USD. Saved fields override model registry and config.yaml pricing for this - selector; unset fields continue to inherit.

            Price Type USD Source
            `,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

            Failover mapping

            `,1),fj=B(``),pj=B(`

            This failover mapping is defined in configuration and is read-only here.

            `),mj=B(``),hj=B(`
            `),gj=B(`
            `,1),_j=B(`
            `);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
            `),xj=B(``),Sj=B(`
            `),Cj=B(`

            No failover suggestions were generated.

            `),wj=B(`

            No failover drafts match the filter.

            `),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
            Rate limit management is unavailable.
            `),kj=B(` Add`,1),Aj=B(`

            `),jj=B(`

            No rules.

            `),Mj=B(` Edit`,1),Nj=B(`
            `),Pj=B(`
            `),Fj=B(`

            `),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
            models
            `),Bj=B(`
            Virtual models feature is unavailable.
            `),Vj=B(`
            `),Hj=B(``),Uj=B(`
            `),Wj=B(``),Gj=B(`
            `),Kj=B(`

            No models registered.

            `),qj=B(`

            No models in this category.

            `),Jj=B(`

            No models match your filter.

            `),Yj=B(`
            `);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
            `),LM=B(` `),RM=B(` `),zM=B(`
            `),BM=B(`
            `,1),VM=B(`
            `,1),HM=B(`
            `),UM=B(`
            Async
            `),WM=B(`
            `);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

            `),jN=B(`

            `),MN=B(`
            `),NN=B(`
            `),PN=B(`

            No guardrails configured for this workflow.

            `),FN=B(`

            Guardrails

            `),IN=B(``),LN=B(`

            `);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

            `),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
            No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
            `),$N=B(`
            `),eP=B(`
            `),tP=B(`

            No guardrail steps configured yet.

            `),nP=B(`

            Guardrail Steps

            Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

            `),rP=B(`

            Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

            Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

            If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

            Preview

            Live
            `,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

            Loading workflows...

            `),oP=B(`
            `),sP=B(`

            No active workflows found.

            `),cP=B(`

            No workflows match your filter.

            `),lP=B(`
            `);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
            Workflows feature is unavailable.
            `),pP=B(`
            `),mP=B(`
            `),hP=B(``),gP=B(`
            `);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){let t=Number(e&&e.session_matching_count);return Number.isFinite(t)&&t>0?t:VP(e)}function UP(e){return!!BP(e)&&VP(e)>1}function WP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>{let t=Number(e.matching_count||e.count||1),n=Number.isFinite(t)&&t>0?t:1,r=Number(e.total_count||n),i=Number.isFinite(r)&&r>n?r:n;return{...e.latest,session_id:BP(e.latest)||String(e.session_id||``).trim(),session_count:i,session_matching_count:n}}),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function GP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>YP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!YP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>YP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!YP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function KP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function qP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function JP(e){return String(e&&e.id||``).trim()}function YP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function XP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function ZP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function QP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&ZP(t)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=[];return a.forEach(e=>{let t=YP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function eF(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!QP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>XP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>YP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=YP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]);let a=VP(l[r]),c=HP(l[r]),u=Number(e&&e.session_count),d=Number.isFinite(u)&&u>1?u:null,f=Number(e&&e.session_matching_count),p=d!==null&&Number.isFinite(f)&&f>0?f:d;l[r]={...e,session_count:d===null?a+1:Math.max(a,d),session_matching_count:p===null?c+1:Math.max(c,p)},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function tF(e,t){let n=JP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function nF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>JP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function rF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function iF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function aF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function oF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function sF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function cF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))}function lF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function uF(e){return String(e&&e.kind||``).trim()||`attempt`}function dF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function fF(e){return String(e&&e.model||``).trim()||`-`}function pF(e){let t=sF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function mF(e){return sF(e).length+`×`}function hF(e){let t=sF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function gF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=uF(e);n&&n!==`attempt`&&t.push(n),t.push(lF(e));let r=dF(e);r&&r!==`-`&&t.push(r);let i=fF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function _F(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function vF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function yF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function bF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function xF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=_F(e,t),a=yF(e,t),o=vF(t),s=i!=null&&i!==``,c=uF(t),l=sF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:bF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function SF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function CF(e){return SF(e).filter(e=>!(e&&e.no_change))}function wF(e){return SF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function TF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function EF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=CF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:TF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function DF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function OF(e){let t=DF(e);return Number(t&&t.cached_input_tokens||0)>0}function kF(e){let t=DF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function AF(e){let t=DF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:kF(e).toFixed(1)+`% cached`}function jF(e){return OF(e)?AF(e):``}function MF(e,t){let n=DF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function NF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&aF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:jF(e),promptCacheHighlight:MF(e,t),noChangeSteps:wF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function PF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&aF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&aF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function FF(e,t){let n=[{id:`request`,pane:NF(e,t)}];return CF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:EF(e,t)})}),cF(e)?sF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:xF(e,t)})}):n.push({id:`response`,pane:PF(e)}),n}function IF(e){if(!cF(e))return`response`;let t=sF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function LF(e,t,n){return e&&(Array.isArray(n)?n:FF(t)).some(t=>t.id===e)?e:IF(t)}function RF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var zF=100;function BF(){return{entries:[],total:0,limit:25,offset:0}}var VF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=BF();return}let a=n?WP(i.data):i.data,o=(n?eF:$P)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=qP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=qP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=nF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=BF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=KP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=KP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:zF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=GP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=JP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=tF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>VF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>VF.isAuditEntryExpanded(e);var HF=B(`
            `);function UF(e,t){O(t,!0);let n=Mw(()=>VF.fetchAuditLog(!0));On(()=>n.cancel);var r=HF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return VF.auditSearch},set value(e){VF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>VF.fetchAuditLog(!0)),Ui(o,()=>VF.auditMethod,e=>VF.auditMethod=e),z(`change`,p,()=>VF.fetchAuditLog(!0)),Ui(p,()=>VF.auditStatusCode,e=>VF.auditStatusCode=e),z(`change`,E,()=>VF.fetchAuditLog(!0)),Ui(E,()=>VF.auditStream,e=>VF.auditStream=e),z(`click`,re,()=>VF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var WF=B(`Live stream connecting…`),GF=B(` `),KF=B(`Live`),qF=B(` `);function JF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=qF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,WF())},c=e=>{var t=GF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,KF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var YF=B(` `),XF=B(``);function ZF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:oF(t.entry)&&`failover: `+oF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=XF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=YF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var QF=B(``),$F=B(` `);function eI(e,t){O(t,!0);let n=A(()=>pF(t.entry)),r=A(()=>R(n).length>0?hF(t.entry):``),i=A(()=>R(n).length>0?mF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=$F(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=QF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>gF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var tI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function nI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function rI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:nI(e)).filter(Boolean).join(` -`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function iI(e){return!e||typeof e!=`object`?``:rI(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function aI(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function oI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(oI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...oI(t)]);let t=String(e);return t?[t]:[]}function sI(e){return rL(e).flatMap(e=>[...e.name?[String(e.name)]:[],...oI(e.arguments)])}function cI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?sI([e]):aI(e)):aI(e)}function lI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function uI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function dI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function fI(e){return{characters:(Array.isArray(e)?e:[]).map(dI)}}function pI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function mI(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=rI(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=rI(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function hI(e){return iI(e)}function gI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...aI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...cI(e.content)),t.push(...sI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...sI([e]));return}t.push(...cI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...aI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var _I=e=>rI(e);function vI(e){if(!e||!e.data)return``;let t=OP(e.data.response_body,0,_I);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?OP(EP(e),0,_I)||e:``}return OP(n,0,_I)||rI(n)}function yI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function bI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function xI(e){return e?!!CI(e):!1}function SI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function CI(e){switch(SI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function wI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function TI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function EI(e){let t=CI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||uL(n)!==``}function DI(e,t){let n=String(t||``).trim(),r=CI(e&&e.path),i=wI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=uL(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&TI(o,wI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&TI(o,{role:String(a.role||`assistant`),content:wI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var OI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function kI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||OI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function AI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function jI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=MI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function MI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function NI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function PI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?dL(t,e)>=0?t:e:t,null)}function FI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return PI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function II(e,t){let n=PI(e);return!!n&&String(n.id||``)===String(t||``)}function LI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function RI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function zI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||yI(n.output));return!!(r||i)}function BI(e){return!e||bI(e.path)?!1:xI(e.path)||zI(e)}function VI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function GI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function KI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
            `+WI(t)+``+WI(JI(e[t]))+`
            `);return t.length?``:``}function XI(e){let t=qI(e.content_type),n=WI(t+` · `+KI(e.bytes)),r=YI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
            `+n+`
            `+r+`
            `}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
            `+n+`
            `+WI(i)+`
            `+r+`
            `}function ZI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function QI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function $I(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return WI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+WI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+WI(e.slice(r)):WI(e)}function eL(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=QI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return WI(o);if(!i(e))return o.split(` -`).map(e=>$I(e,a)).join(` + selector; unset fields continue to inherit.

            Price Type USD Source
            `,1);function uj(e,t){O(t,!0);let n=Pk;ME(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=ej(),r=I(F(t),2),i=P(r,!0);D(r),L(()=>H(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),V(e,t)},extraActions:e=>{var t=Xr(),r=F(t),i=e=>{var t=tj();L(()=>t.disabled=n.modelPricingOverrideSubmitting),z(`click`,t,()=>n.deleteModelPricingOverride()),V(e,t)};U(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),V(e,t)},children:(e,t)=>{var r=lj(),i=F(r),a=P(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=nj();ea(r),la(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),V(e,r)},$$slots:{default:!0}});var o=I(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=ij();W(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(r),z(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Ui(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),V(e,r)},$$slots:{default:!0}})};U(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),D(i);var c=I(i,4);W(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=aj(),a=P(i),o=P(a),s=I(o,2);W(s,21,()=>n.availablePricingFieldOptions(R(t)),e=>e.value,(e,t)=>{var n=rj(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).group+` - `+R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(s),D(a);var c=I(a,2),l=P(c),u=I(l,2);ea(u),D(c);var d=I(c,2);{let e=A(()=>`Remove `+n.pricingFieldLabel(R(t).field));OT(d,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(R(t)),children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(i),L(()=>{K(o,`for`,`pricing-type-`+R(t).id),K(s,`id`,`pricing-type-`+R(t).id),K(l,`for`,`pricing-value-`+R(t).id),K(u,`id`,`pricing-value-`+R(t).id)}),Ui(s,()=>R(t).field,e=>R(t).field=e),la(u,()=>R(t).value,e=>R(t).value=e),V(e,i)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l);var d=I(l,2),f=e=>{V(e,oj())};U(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=I(d,2),m=I(P(p),2),h=e=>{V(e,sj())},g=A(()=>n.modelPricingEffectivePreviewRows().length===0);U(m,e=>{R(g)&&e(h)}),W(I(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=cj(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(n),L(e=>{H(i,R(t).label),H(o,e),H(c,R(t).source)},[()=>R(t).value===null||R(t).value===void 0?`-`:bc(Number(R(t).value))]),V(e,n)}),D(p),z(`click`,u,()=>n.addModelPricingOverrideRow()),V(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),k()}Br([`click`,`change`]);var dj=B(`

            Failover mapping

            `,1),fj=B(``),pj=B(`

            This failover mapping is defined in configuration and is read-only here.

            `),mj=B(``),hj=B(`
            `),gj=B(`
            `,1),_j=B(`
            `);function vj(e,t){O(t,!0);{let t=e=>{var t=dj(),n=I(F(t),2),r=P(n,!0);D(n),L(()=>H(r,Q.failoverForm.source||`Failover`)),V(e,t)},n=e=>{var t=Xr(),n=F(t),r=e=>{var t=fj();L(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),z(`click`,t,()=>Q.deleteFailoverRule()),V(e,t)};U(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),V(e,t)},r=A(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return R(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=_j(),r=P(n),i=e=>{V(e,pj())};U(r,e=>{Q.failoverFormManaged&&e(i)});var a=I(r,2);W(a,21,()=>Wc.models,ii,(e,t)=>{var n=mj(),r=P(n,!0);D(n);var i={};L((e,t)=>{H(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(R(t)),()=>pO(R(t))]),V(e,n)}),D(a);var o=I(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=gj(),r=F(n),i=P(r),a=P(i);ea(a);var o=I(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};U(o,e=>{Q.failoverForm.target_model&&e(s)}),D(i),W(I(i,2),17,()=>Q.failoverForm.targets,ii,(e,t,n)=>{var r=hj(),i=P(r);ea(i),OT(I(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),L(()=>i.disabled=Q.failoverFormManaged),la(i,()=>R(t).model,e=>R(t).model=e),V(e,r)}),D(r);var c=I(r,2),l=P(c);J(P(l),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(l);var u=I(l,2),d=P(u);J(d,{get icon(){return Fo},class:`form-action-icon`});var f=I(d,2),p=P(f,!0);D(f),D(u),D(c),L(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,H(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),la(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),z(`click`,l,()=>Q.addFailoverTarget()),z(`click`,u,()=>Q.generateFailoverForForm()),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=P(s);PA(P(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),D(c),D(s),D(n),V(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}k()}Br([`click`]);var yj=B(` `),bj=B(`
            `),xj=B(``),Sj=B(`
            `),Cj=B(`

            No failover suggestions were generated.

            `),wj=B(`

            No failover drafts match the filter.

            `),Tj=B(``),Ej=B(``);function Dj(e,t){O(t,!0),Hs(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Ej(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=yj(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>Q.failoverDraftCountLabel()]),V(e,t)};U(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),Rs(I(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),D(i),D(r);var s=I(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};U(s,e=>{Q.failoverGenerating&&e(c)});var l=I(s,2),u=e=>{var t=bj(),n=P(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=I(n,2),i=P(r);J(i,{get icon(){return Ba},class:`form-action-icon`});var a=I(i,2),o=P(a,!0);D(a),D(r),D(t),L(e=>{r.disabled=Q.failoverDraftSaving,H(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),z(`click`,r,()=>Q.toggleAllFailoverDrafts()),V(e,t)};U(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=I(l,2),f=e=>{var t=Sj();W(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=xj(),r=P(n);ea(r);var i=I(r,2),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s,!0);D(s),D(i),D(n),L((e,t,n,i)=>{na(r,e),r.disabled=Q.failoverDraftSaving,K(r,`aria-label`,t),H(o,n),H(c,i)},[()=>Q.failoverDraftSelected(R(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(R(t)),()=>Q.failoverPrimaryModel(R(t)),()=>Q.failoverTargetLabel(R(t))]),z(`change`,r,e=>Q.setFailoverDraftSelected(R(t),e.currentTarget.checked)),V(e,n)}),D(t),V(e,t)},p=A(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);U(d,e=>{R(p)&&e(f)});var m=I(d,2),h=e=>{V(e,Cj())};U(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=I(m,2),_=e=>{V(e,wj())},v=A(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=Tj(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(y,e=>{Q.failoverError&&e(b)});var x=I(y,2),S=P(x),C=I(S,2),w=P(C);J(w,{get icon(){return _o},class:`form-action-icon`});var T=I(w,2),E=P(T,!0);D(T),D(C),D(x),D(n),L(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,H(E,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),z(`click`,S,()=>Q.closeFailoverDraftsModal()),z(`click`,C,()=>Q.saveSelectedFailoverDrafts()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`,`change`]);var Oj=B(`
            Rate limit management is unavailable.
            `),kj=B(` Add`,1),Aj=B(`

            `),jj=B(`

            No rules.

            `),Mj=B(` Edit`,1),Nj=B(`
            `),Pj=B(`
            `),Fj=B(`

            `),Ij=B(``),Lj=B(``);function Rj(e,t){O(t,!0);function n(){Y.dialogOpen||Z.closeRateLimitInspector()}Hs(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Lj(),r=P(n),i=P(r),a=I(P(i),2),o=P(a),s=P(o,!0);D(o),D(a),D(i),Rs(I(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),D(r);var c=I(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{V(e,Oj())},d=e=>{var t=Xr();W(F(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Fj(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2);{let e=A(()=>`Add `+R(t).title.toLowerCase());OT(o,{get label(){return R(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(R(t).scope,R(t).subject),children:(e,t)=>{var n=kj();J(F(n),{get icon(){return po},class:`table-icon-svg`}),Ve(2),V(e,n)},$$slots:{default:!0}})}D(r);var s=I(r,2),c=e=>{var n=Aj(),r=P(n,!0);D(n),L(()=>H(r,R(t).hint)),V(e,n)};U(s,e=>{R(t).hint&&e(c)});var l=I(s,2),u=e=>{V(e,jj())},d=e=>{var n=Pj();W(n,21,()=>R(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Nj(),r=P(n),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=P(s),l=P(c);{let e=A(()=>Z.rateLimitIsConcurrent(R(t))?ka:ko);J(l,{get icon(){return R(e)},class:`budget-period-icon`})}var u=I(l,2),d=P(u,!0);D(u),D(c),D(s);var f=I(s,2),p=P(f),m=P(p),h=P(m,!0);D(m);var g=I(m,2),_=P(g,!0);D(g),D(p);var v=I(p,2),y=P(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,R(t)),children:(e,t)=>{var n=Mj();J(F(n),{get icon(){return uo},class:`budget-action-icon`}),Ve(2),V(e,n)},$$slots:{default:!0}})},x=A(()=>!Z.rateLimitIsReadOnly(R(t)));U(y,e=>{R(x)&&e(b)}),D(v),D(f),D(i),D(r),D(n),L((e,t,r,i,a,s,c,l)=>{G(n,1,`budget-row ${e??``}`),Bi(n,t),K(n,`title`,r),H(o,i),H(d,a),H(h,s),K(g,`title`,c),H(_,l)},[()=>Z.rateLimitPressureClass(R(t)),()=>Z.rateLimitPressureStyle(R(t)),()=>Z.rateLimitPressurePercent(R(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(R(t)),()=>Z.rateLimitPeriodLabel(R(t)),()=>Z.rateLimitInspectorSummary(R(t)),()=>Z.rateLimitIsReadOnly(R(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(R(t))]),V(e,n)}),D(n),V(e,n)};U(l,e=>{R(t).items.length===0?e(u):e(d,-1)}),D(n),L(()=>H(a,R(t).title)),V(e,n)}),V(e,t)};U(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=I(c,2),p=P(f),m=I(p,2),h=e=>{var t=Ij();z(`click`,t,()=>{Z.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),V(e,t)},g=A(()=>Z.rateLimitsEnabled());U(m,e=>{R(g)&&e(h)}),D(f),D(n),L(()=>H(s,Z.rateLimitInspector.title)),z(`click`,p,()=>Z.closeRateLimitInspector()),V(e,n)},$$slots:{default:!0}}),k()}Br([`click`]);var zj=B(`
            models
            `),Bj=B(`
            Virtual models feature is unavailable.
            `),Vj=B(`
            `),Hj=B(``),Uj=B(`
            `),Wj=B(``),Gj=B(`
            `),Kj=B(`

            No models registered.

            `),qj=B(`

            No models in this category.

            `),Jj=B(`

            No models match your filter.

            `),Yj=B(`
            `);function Xj(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`models`&&(pk.fetchVirtualModels(),Pk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),On(()=>{let e=pk.filteredDisplayModels.length;return wr(()=>pk.restartModelRendering(e)),()=>pk.stopModelRendering()});let n=A(()=>Y.needsAuth);var r=Yj(),i=P(r),a=I(P(i),2),o=e=>{var t=zj(),n=P(t),r=P(n,!0);D(n),Ve(),D(t),L(()=>H(r,Wc.filter?pk.filteredDisplayModels.length+` / `+pk.displayModels.length:pk.displayModels.length)),V(e,t)};U(a,e=>{pk.displayModels.length>0&&e(o)}),D(i);var s=I(i,2);Kc(s,{});var c=I(s,2),l=e=>{V(e,Bj())};U(c,e=>{!pk.virtualModelsAvailable&&!R(n)&&e(l)});var u=I(c,2),d=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,pk.aliasError)),V(e,t)};U(u,e=>{pk.aliasError&&!R(n)&&e(d)});var f=I(u,2),p=e=>{var t=Vj(),n=P(t,!0);D(t),L(()=>H(n,Pk.modelPricingOverrideError)),V(e,t)};U(f,e=>{Pk.modelPricingOverrideError&&!R(n)&&!Pk.modelPricingOverrideFormOpen&&e(p)});var m=I(f,2),h=e=>{var t=Uj();W(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=Hj();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(n),L(()=>{r=G(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===R(t).category}),H(a,R(t).display_name),H(s,R(t).count)}),z(`click`,n,()=>Wc.selectCategory(R(t).category)),V(e,n)}),D(t),V(e,t)};U(m,e=>{Wc.categories.length>0&&e(h)});var g=I(m,2),_=e=>{var t=Gj(),n=P(t);jw(P(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),D(n);var r=I(n,2),i=P(r),a=e=>{var t=Wj();J(P(t),{get icon(){return po},class:`alias-create-icon`}),Ve(2),D(t),z(`click`,t,()=>pk.openVirtualModelCreate()),V(e,t)};U(i,e=>{pk.virtualModelsAvailable&&e(a)}),D(r),D(t),V(e,t)};U(g,e=>{(pk.displayModels.length>0||Wc.filter||pk.virtualModelsAvailable)&&e(_)});var v=I(g,2),y=e=>{{let t=A(()=>pk.modelLoadingText());ET(e,{get label(){return R(t)},class:`models-loading-state`})}},b=A(()=>pk.modelsBusy()&&!R(n));U(v,e=>{R(b)&&e(y)});var x=I(v,2);$A(x,{});var S=I(x,2);uj(S,{});var C=I(S,2),w=e=>{MA(e,{})};U(C,e=>{(pk.displayModels.length>0||Wc.filter)&&e(w)});var T=I(C,2),E=e=>{V(e,Kj())};U(T,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(E)});var ee=I(T,2),te=e=>{V(e,qj())};U(ee,e=>{pk.displayModels.length===0&&!Wc.loading&&!R(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(te)});var ne=I(ee,2),re=e=>{V(e,Jj())};U(ne,e=>{pk.displayModels.length>0&&pk.filteredDisplayModels.length===0&&Wc.filter&&e(re)});var ie=I(ne,2);Rj(ie,{});var ae=I(ie,2);qD(ae,{});var oe=I(ae,2);vj(oe,{}),Dj(I(oe,2),{}),D(r),V(e,r),k()}Br([`click`]);var Zj=`draft-workflow-preview`;function Qj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function $j(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function eM(e){return{ref:``,step:Number.isFinite(e)?e:10}}function tM(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function nM(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function rM(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function iM(e){return{cache:!!nM(e,`cache`,!1),audit:!!nM(e,`audit`,!1),usage:!!nM(e,`usage`,!1),budget:nM(e,`budget`,!0)!==!1,guardrails:!!nM(e,`guardrails`,!1),failover:nM(e,`failover`,!0)!==!1}}function aM(e,t){let n=iM(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function oM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...aM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:iM(n).failover}}function sM(e,t){return oM(e,t).failover?`On`:`Off`}function cM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function lM(e,t){return oM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function uM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function dM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function fM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=dM(e);t&&n.add(t)}),[...n].sort()}function pM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&dM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function mM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function hM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function gM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=hM(e);return n===`global`?`All models`:n}function _M(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function vM(e){if(_M(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function yM(e){let t=e||Qj(),n=String(t.scope_provider||``).trim(),r=vM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function bM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function xM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=vM(e&&e.scope_user_path),i=bM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function SM(e,t){let n=t||$j(),r=uM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=vM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===vM(n.scope_user_path)}function CM(e,t,n){let r=yM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>SM(e,r))||null}function wM(e){return String(e&&e.scope_type||``).trim()!==`global`}function TM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function EM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,uM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function DM(e,t){let n=e||Qj(),r=yM(n),i=iM(n.features||{}),a=aM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?cM(n):[];return{id:Zj,scope_type:bM(r),scope_display:xM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function OM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Qj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=vM(a.scope_user_path),l=iM(a.features||{}),u=aM(l,t),d=CM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=rM(f,`failover`),m=p?nM(f,`failover`,!0)!==!1:null,h=i||$j(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&vM(h.scope_user_path)===vM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function kM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||$j(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!fM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=pM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=_M(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var AM=new class{#e=j(N([]));get workflows(){return R(this.#e)}set workflows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get submitting(){return R(this.#o)}set submitting(e){M(this.#o,e,!0)}#s=j(``);get deactivatingID(){return R(this.#s)}set deactivatingID(e){M(this.#s,e,!0)}#c=j(``);get formError(){return R(this.#c)}set formError(e){M(this.#c,e,!0)}#l=j(!1);get formHydrated(){return R(this.#l)}set formHydrated(e){M(this.#l,e,!0)}#u=j(N($j()));get hydratedScope(){return R(this.#u)}set hydratedScope(e){M(this.#u,e,!0)}#d=j(N([]));get guardrailRefs(){return R(this.#d)}set guardrailRefs(e){M(this.#d,e,!0)}#f=j(N(Qj()));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}#p=null;failoverVisible(){return ks.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return EM(this.workflows,this.filter)}providerOptions(){return fM(Wc.models,this.hydratedScope)}modelOptions(e){return pM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return CM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return DM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?iM(e.workflow_payload.features):oM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:tM(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):cM(e);this.form={scope_provider:uM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=$j(),this.form=Qj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(eM(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return OM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await kT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([ks.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=kM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}lc.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!wM(e))return;let n=gM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await AT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){lc.error(e.error);return}lc.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function jM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function MM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=N({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await jM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var NM=B(``);function PM(e,t){O(t,!0);let n=q(t,`workflowID`,3,``),r=MM({logPrefix:`Failed to copy workflow ID:`});On(()=>{n(),r.reset()});let i=A(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=A(()=>n()?R(i)+` `+n():R(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=NM();let c;var l=I(P(s),4),u=P(l,!0);D(l);var d=I(l,2);J(P(d),{get icon(){return Ja}}),D(d),D(s),L(()=>{c=G(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),K(s,`title`,R(i)),K(s,`aria-label`,R(a)),H(u,n())}),z(`click`,s,o),V(e,s),k()}Br([`click`]);var FM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Et(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=zM(),l=P(c),u=e=>{var t=IM();let r;J(P(t),{get icon(){return n()}}),D(t),L(()=>r=G(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":R(i)===`workflow-node-endpoint`})),V(e,t)};U(l,e=>{n()&&e(u)});var d=I(l,2),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var t=LM(),n=P(t,!0);D(t),L(()=>H(n,s())),V(e,t)};U(p,e=>{s()&&e(m)});var g=I(p,2),_=e=>{var t=RM(),n=P(t,!0);D(t),L(()=>H(n,o())),V(e,t)};U(g,e=>{o()&&e(_)}),D(c),L(()=>{G(c,1,Ni([`workflow-node`,R(i),a()]),`svelte-nbptrg`),H(f,r())}),V(e,c)},IM=B(`
            `),LM=B(` `),RM=B(` `),zM=B(`
            `),BM=B(`
            `,1),VM=B(`
            `,1),HM=B(`
            `),UM=B(`
            Async
            `),WM=B(`
            `);function GM(e,t){O(t,!0);let n=q(t,`chart`,19,()=>({}));var r=WM();let i;var a=P(r),o=e=>{PM(e,{get workflowID(){return n().workflowID}})};U(a,e=>{n().workflowID&&e(o)});var s=I(a,2),c=P(s);FM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=I(c,4);FM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=I(l,2),d=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),V(e,t)};U(u,e=>{n().showCache&&e(d)});var f=I(u,2),p=e=>{var t=VM();FM(I(F(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),V(e,t)};U(f,e=>{n().showBudget&&e(p)});var m=I(f,2),h=e=>{var t=VM();FM(I(F(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),V(e,t)};U(m,e=>{n().showGuardrails&&e(h)});var g=I(m,2),_=I(g,2);FM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=I(_,2),y=e=>{var t=BM(),r=F(t);FM(I(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),L(()=>G(r,1,Ni([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),V(e,t)};U(v,e=>{n().showFailover&&e(y)});var b=I(v,2);FM(I(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),D(s);var x=I(s,2),S=e=>{var t=UM(),r=P(t),i=P(r),a=e=>{FM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};U(i,e=>{n().showUsage&&e(a)});var o=I(i,2),s=e=>{V(e,HM())};U(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=I(o,2),l=e=>{FM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};U(c,e=>{n().showAudit&&e(l)}),D(r),Ve(4),D(t),V(e,t)};U(x,e=>{n().showAsync&&e(S)}),D(r),L(()=>{i=G(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),G(g,1,Ni([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),G(b,1,Ni([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),V(e,r),k()}function KM(e){let t=cM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function qM(e,t){return t&&t.provider?t.provider:uM(e&&e.scope)||`AI`}function JM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function YM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function XM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:iM(t)}function ZM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function QM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return QM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=QM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:QM(e.error,t+1)):``}function $M(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||QM(t.response_body)}function eN(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function tN(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=ZM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=eN(n);if(i)return i;let a=uM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function nN(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=ZM(e),o=tN(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=$M(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function rN(e){return!!(e&&e.cacheHit)}function iN(e){return!!(e&&e.failoverTarget)}function aN(e){return!!(e&&e.budgetExceeded)}function oN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function sN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function cN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function lN(e,t,n,r){return e?aN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function uN(e){return aN(e)?`Exceeded`:null}function dN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function pN(e){return e&&e.failoverTarget?`Redirected`:null}function mN(e){return e&&e.failoverTarget?e.failoverTarget:null}function hN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function gN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function _N(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function vN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function yN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function bN(e){return!e||!e.authMethod?null:e.authMethod}function xN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function SN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function CN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function wN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function TN(e,t){return!e||!e._live||SN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function EN(e,t,n){return!e||!e._live?``:wN(e)?`usage`:TN(e,t)?`audit`:SN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function DN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?iM(i.features):oM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||aN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||iN(t),m=YM(e,i.entry),h=EN(i.entry,t,a),g=wN(i.entry),_=TN(i.entry,t),v=SN(i.entry,s),y=CN(i.entry,s);return{showBudget:c,budgetNodeClass:lN(c,t,s,h===`budget`),budgetStatusLabel:uN(t),showGuardrails:l,guardrailLabel:l?KM(e):``,showCache:!!i.forceCache||!!a.cache||rN(t),cacheNodeClass:oN(t,h===`cache`),cacheConnClass:sN(t),cacheStatusLabel:cN(t),showFailover:p,failoverNodeClass:p?dN(t):``,failoverConnClass:p?fN(t):``,failoverStatusLabel:p?pN(t):null,failoverTargetLabel:p?mN(t):null,aiLabel:qM(e,t),aiSublabel:JM(e,t),aiConnClass:hN(t),aiNodeClass:gN(t,h===`ai`),responseConnClass:hN(t),responseNodeClass:_N(t,h===`response`),responseNodeSublabel:vN(t),authNodeClass:yN(t,h===`auth`),authNodeSublabel:bN(t),usageNodeClass:xN(u,y,g),auditNodeClass:xN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function ON(e,t){return DN(e,null,{forceCache:!1},t)}function kN(e,t,n){return DN(t,nN(e,t),{entry:e,features:XM(e)||(t?oM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var AN=B(`

            `),jN=B(`

            `),MN=B(`
            `),NN=B(`
            `),PN=B(`

            No guardrails configured for this workflow.

            `),FN=B(`

            Guardrails

            `),IN=B(``),LN=B(`

            `);function RN(e,t){O(t,!0);let n=q(t,`preview`,3,!1),r=A(()=>AM.featureCaps()),i=A(()=>gM(t.workflow)),a=A(()=>lM(t.workflow,R(r))),o=A(()=>ON(t.workflow,R(r))),s=A(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=LN();let l;var u=P(c),d=P(u),f=P(d),p=P(f,!0);D(f);var m=I(f,2),h=P(m,!0);D(m),D(d);var g=I(d,2),_=P(g),v=P(_,!0);D(_),D(g),D(u);var y=I(u,2),b=e=>{var n=AN(),r=P(n,!0);D(n),L(()=>H(r,t.workflow.description)),V(e,n)};U(y,e=>{t.workflow.description&&e(b)});var x=I(y,2),S=e=>{var n=jN(),i=P(n);D(n),L(e=>H(i,`Failover: ${e??``}`),[()=>sM(t.workflow,R(r))]),V(e,n)},C=A(()=>AM.failoverVisible());U(x,e=>{R(C)&&e(S)});var w=I(x,2);GM(w,{get chart(){return R(o)}});var T=I(w,2),E=e=>{var t=FN(),n=P(t),r=I(P(n),2),i=P(r,!0);D(r),D(n);var o=I(n,2),c=e=>{var t=NN();W(t,23,()=>R(a),(e,t)=>R(s)+t,(e,t)=>{var n=MN(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=P(a);D(a),D(n),L(()=>{H(i,R(t).ref),H(o,`step ${R(t).step??``}`)}),V(e,n)}),D(t),V(e,t)},l=e=>{V(e,PN())};U(o,e=>{R(a).length>0?e(c):e(l,-1)}),D(t),L(()=>H(i,R(a).length?R(a).length+` steps`:`None`)),V(e,t)},ee=A(()=>ks.guardrailsVisible());U(T,e=>{R(ee)&&e(E)});var te=I(T,2),ne=e=>{var n=IN(),r=P(n),a=P(r),o=P(a,!0);D(a);var s=I(a,2);{let e=A(()=>`Edit workflow `+R(i));OT(s,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AM.openCreate(t.workflow),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(r);var c=I(r,2),l=P(c),u=P(l);D(l);var d=I(l,2),f=P(d);D(d);var p=I(d,2),m=P(p);D(p),D(c),D(n),L((e,n,r,s)=>{a.disabled=e,K(a,`aria-label`,`Deactivate workflow `+R(i)),K(a,`title`,n),H(o,AM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),H(u,`version: v${t.workflow.version??``}`),H(f,`created: ${r??``}`),H(m,`hash: ${s??``}`)},[()=>AM.deactivatingID===t.workflow.id||!wM(t.workflow),()=>wM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>vs.formatTimestamp(t.workflow.created_at),()=>TM(t.workflow.workflow_hash)]),z(`click`,a,()=>AM.deactivate(t.workflow)),V(e,n)};U(te,e=>{n()||e(ne)}),D(c),L((e,t)=>{l=G(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),H(p,e),H(h,R(i)),H(v,t)},[()=>mM(t.workflow),()=>hM(t.workflow)]),V(e,c),k()}Br([`click`]);var zN=B(`

            `),BN=B(``),VN=B(``),HN=B(``),UN=B(``),WN=B(``),GN=B(``),KN=B(``),qN=B(``),JN=B(``),YN=B(``),XN=B(``),ZN=B(``),QN=B(`
            No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
            `),$N=B(`
            `),eP=B(`
            `),tP=B(`

            No guardrail steps configured yet.

            `),nP=B(`

            Guardrail Steps

            Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

            `),rP=B(`

            Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

            Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

            If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

            Preview

            Live
            `,1);function iP(e,t){O(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=zN(),n=P(t,!0);D(t),L(e=>H(n,e),[()=>AM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),V(e,t)},$$slots:{title:!0}})},n=A(()=>AM.submitLabel()),r=A(()=>AM.submittingLabel()),i=A(()=>AM.submitMode()===`create`?po:_o);ME(e,{get open(){return AM.formOpen},ariaLabel:`Workflow editor`,get error(){return AM.formError},get submitting(){return AM.submitting},get submitLabel(){return R(n)},get submittingLabel(){return R(r)},get submitIcon(){return R(i)},dialogClass:`workflow-editor`,onclose:()=>AM.closeForm(),onsubmit:()=>AM.submitForm(),header:t,children:(e,t)=>{var n=rP(),r=F(n),i=P(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=VN(),r=P(n);r.value=r.__value=``,W(I(r),16,()=>AM.providerOptions(),e=>e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(n),z(`change`,n,e=>AM.setProvider(e.currentTarget.value)),Ui(n,()=>AM.form.scope_provider,e=>AM.form.scope_provider=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=HN(),r=P(n);r.value=r.__value=``,W(I(r),17,()=>AM.modelOptions(AM.form.scope_provider),e=>AM.form.scope_provider+`-`+e,(e,t)=>{var n=BN(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t)),i!==(i=R(t))&&(n.value=(n.__value=R(t))??``)}),V(e,n)}),D(n),Ui(n,()=>AM.form.scope_model,e=>AM.form.scope_model=e),V(e,n)},$$slots:{default:!0}})};U(a,e=>{AM.form.scope_provider&&e(o)});var s=I(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=UN();ea(n),la(n,()=>AM.form.name,e=>AM.form.name=e),V(e,n)},$$slots:{default:!0}}),PE(I(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=WN();ea(n),la(n,()=>AM.form.scope_user_path,e=>AM.form.scope_user_path=e),V(e,n)},$$slots:{default:!0}}),D(r);var c=I(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=GN();ut(n),la(n,()=>AM.form.description,e=>AM.form.description=e),V(e,n)},$$slots:{default:!0}});var l=I(c,2),u=P(l),d=e=>{var t=KN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.cache,e=>AM.form.features.cache=e),V(e,t)},f=A(()=>ks.cacheVisible());U(u,e=>{R(f)&&e(d)});var p=I(u,2),m=e=>{var t=qN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.audit,e=>AM.form.features.audit=e),V(e,t)},h=A(()=>ks.auditVisible());U(p,e=>{R(h)&&e(m)});var g=I(p,2),_=e=>{var t=JN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.usage,e=>AM.form.features.usage=e),V(e,t)},v=A(()=>ks.usageVisible());U(g,e=>{R(v)&&e(_)});var y=I(g,2),b=e=>{var t=YN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.budget,e=>AM.form.features.budget=e),V(e,t)},x=A(()=>ks.budgetsVisible());U(y,e=>{R(x)&&e(b)});var S=I(y,2),C=e=>{var t=XN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.guardrails,e=>AM.form.features.guardrails=e),V(e,t)},w=A(()=>ks.guardrailsVisible());U(S,e=>{R(w)&&e(C)});var T=I(S,2),E=e=>{var t=ZN(),n=P(t);ea(n),Ve(2),D(t),ua(n,()=>AM.form.features.failover,e=>AM.form.features.failover=e),V(e,t)},ee=A(()=>AM.failoverVisible());U(T,e=>{R(ee)&&e(E)}),D(l);var te=I(l,2),ne=I(P(te),2);{let e=A(()=>AM.preview());RN(ne,{get workflow(){return R(e)},preview:!0})}D(te);var re=I(te,2),ie=e=>{var t=nP(),n=P(t),r=I(P(n),2);D(n);var i=I(n,2),a=e=>{var t=QN(),n=I(P(t),2);D(t),z(`click`,n,()=>Yo.navigate(`guardrails`)),V(e,t)};U(i,e=>{AM.guardrailRefs.length===0&&e(a)});var o=I(i,2),s=e=>{var t=eP();W(t,21,()=>AM.form.guardrails,ii,(e,t,n)=>{var r=$N(),i=P(r),a=P(i);K(a,`for`,`workflow-guardrail-ref-`+n);var o=I(a,2);ea(o),K(o,`id`,`workflow-guardrail-ref-`+n),K(o,`aria-label`,`Guardrail reference `+(n+1)),D(i);var s=I(i,2),c=P(s);K(c,`for`,`workflow-guardrail-step-`+n);var l=I(c,2);ea(l),K(l,`id`,`workflow-guardrail-step-`+n),K(l,`aria-label`,`Guardrail step `+(n+1)),D(s);var u=I(s,2);D(r),la(o,()=>R(t).ref,e=>R(t).ref=e),la(l,()=>R(t).step,e=>R(t).step=e),z(`click`,u,()=>AM.removeGuardrailStep(n)),V(e,r)}),D(t),V(e,t)},c=e=>{V(e,tP())};U(o,e=>{AM.form.guardrails.length>0?e(s):e(c,-1)}),D(t),z(`click`,r,()=>AM.addGuardrailStep()),V(e,t)},ae=A(()=>AM.form.features.guardrails&&ks.guardrailsVisible());U(re,e=>{R(ae)&&e(ie)}),V(e,n)},$$slots:{header:!0,default:!0}})}k()}Br([`change`,`click`]);var aP=B(`

            Loading workflows...

            `),oP=B(`
            `),sP=B(`

            No active workflows found.

            `),cP=B(`

            No workflows match your filter.

            `),lP=B(`
            `);function uP(e,t){O(t,!0);var n=lP(),r=P(n),i=e=>{var t=aP();NS(P(t),{size:16,label:`Loading workflows`}),Ve(),D(t),V(e,t)};U(r,e=>{AM.loading&&!Y.authError&&e(i)});var a=I(r,2),o=e=>{var t=oP();W(t,21,()=>AM.filteredWorkflows,e=>e.id,(e,t)=>{RN(e,{get workflow(){return R(t)}})}),D(t),V(e,t)};U(a,e=>{AM.filteredWorkflows.length>0&&e(o)});var s=I(a,2),c=e=>{V(e,sP())};U(s,e=>{AM.workflows.length===0&&!AM.loading&&!Y.authError&&AM.available&&e(c)});var l=I(s,2),u=e=>{V(e,cP())};U(l,e=>{AM.workflows.length>0&&AM.filteredWorkflows.length===0&&!AM.loading&&e(u)}),D(n),V(e,n),k()}var dP=B(``),fP=B(`
            Workflows feature is unavailable.
            `),pP=B(`
            `),mP=B(`
            `),hP=B(``),gP=B(`
            `);function _P(e,t){O(t,!0),On(()=>{Y.refreshTick,AM.fetchPage()});var n=gP(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=dP();J(P(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ve(2),D(t),z(`click`,t,()=>AM.openCreate()),V(e,t)};U(a,e=>{AM.available&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,fP())};U(s,e=>{!AM.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=pP(),n=P(t,!0);D(t),L(()=>H(n,AM.error)),V(e,t)};U(l,e=>{AM.error&&!Y.authError&&e(u)});var d=I(l,2),f=e=>{var t=mP(),n=P(t);jw(P(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return AM.filter},set value(e){AM.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i,!0);D(i),D(r),D(t),L(()=>H(a,AM.filteredWorkflows.length+` active scopes`)),V(e,t)};U(d,e=>{AM.available&&e(f)});var p=I(d,2);iP(p,{});var m=I(p,2);uP(m,{});var h=I(m,2);W(h,20,()=>AM.guardrailRefs,e=>e,(e,t)=>{var n=hP(),r={};L(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(h),D(n),V(e,n),k()}Br([`click`]);function vP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=oc}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=yP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function yP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var bP=null;function xP(){return bP===null&&(bP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(bP&&bP.matches)}function SP(e){return xP()?0:e}function CP(e,t){return!t||!t.live?{duration:0}:ic(e,{duration:SP(150)})}var wP=new class{#e=j(N({}));get workflowVersionsByID(){return R(this.#e)}set workflowVersionsByID(e){M(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:ks.cacheVisible(),audit:ks.auditVisible(),usage:ks.usageVisible(),budget:ks.budgetsVisible(),guardrails:ks.guardrailsVisible(),failover:ks.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ws(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},TP=6;function EP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function DP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>TP)return r;let i=EP(r);return i==null?r:OP(i,t+1,n)||n&&n(i)||r}function OP(e,t=0,n=null,r=null){if(e==null||t>TP)return``;if(typeof e==`string`){let i=EP(e.trim());return i==null?``:OP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||jP(t&&t.response_body)}function NP(e){let t=e&&e.data?e.data:null;return t?kP(t.error_message)||(MP(e,t)?OP(t.response_body,0):``):``}function PP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function FP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function IP(e){let t=PP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function LP(e){let t=PP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function RP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function zP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function BP(e){return String(e&&e.session_id||``).trim()}function VP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function HP(e){return!!BP(e)&&VP(e)>1}function UP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_count:Math.max(1,Number(e.request_count)||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function WP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>JP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!JP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>JP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!JP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function GP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function KP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>BP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function qP(e){return String(e&&e.id||``).trim()}function JP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function YP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function XP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function ZP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&XP(t)}function QP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!ZP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>YP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>JP(e))),s=[];return a.forEach(e=>{let t=JP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function $P(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!ZP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>YP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>JP(e))),s=new Map;i.forEach((e,t)=>{let n=BP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=JP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=BP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]);let a=VP(l[r]),c=Number(e&&e.session_count),u=Number.isFinite(c)&&c>1?c:null;l[r]={...e,session_count:u===null?a+1:Math.max(a,u)},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function eF(e,t){let n=qP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function tF(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>qP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function nF(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function rF(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function iF(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function aF(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function oF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function sF(e){let t=oF(e);return t.length>1||t.some(e=>!(e&&e.success))}function cF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function lF(e){return String(e&&e.kind||``).trim()||`attempt`}function uF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function dF(e){return String(e&&e.model||``).trim()||`-`}function fF(e){let t=oF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function pF(e){return oF(e).length+`×`}function mF(e){let t=oF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function hF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=lF(e);n&&n!==`attempt`&&t.push(n),t.push(cF(e));let r=uF(e);r&&r!==`-`&&t.push(r);let i=dF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function gF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function _F(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function vF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function yF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function bF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=gF(e,t),a=vF(e,t),o=_F(t),s=i!=null&&i!==``,c=lF(t),l=oF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:yF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function xF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function SF(e){return xF(e).filter(e=>!(e&&e.no_change))}function CF(e){return xF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function wF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function TF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=SF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:wF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function EF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function DF(e){let t=EF(e);return Number(t&&t.cached_input_tokens||0)>0}function OF(e){let t=EF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function kF(e){let t=EF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:OF(e).toFixed(1)+`% cached`}function AF(e){return DF(e)?kF(e):``}function jF(e,t){let n=EF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function MF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&iF(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:AF(e),promptCacheHighlight:jF(e,t),noChangeSteps:CF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function NF(e){let t=e&&e.data?e.data:null,n=NP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&iF(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&iF(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function PF(e,t){let n=[{id:`request`,pane:MF(e,t)}];return SF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:TF(e,t)})}),sF(e)?oF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:bF(e,t)})}):n.push({id:`response`,pane:NF(e)}),n}function FF(e){if(!sF(e))return`response`;let t=oF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function IF(e,t,n){return e&&(Array.isArray(n)?n:PF(t)).some(t=>t.id===e)?e:FF(t)}function LF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var RF=100;function zF(){return{entries:[],total:0,limit:25,offset:0}}var BF=new class{#e=j(N({}));get auditExpandedEntries(){return R(this.#e)}set auditExpandedEntries(e){M(this.#e,e,!0)}#t=j(N({}));get auditExpandedThreads(){return R(this.#t)}set auditExpandedThreads(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,Ca(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=RP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ws((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=zF();return}let a=n?UP(i.data):i.data,o=(n?$P:QP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=KP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=KP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=tF(this.auditExpandedEntries,s);try{await wP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=zF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=BP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=GP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=BP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=GP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await ws(`/admin/audit/log?`+zP({sessionId:t,limit:RF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>BP(e)===t),o=WP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=qP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=eF(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>BF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>BF.isAuditEntryExpanded(e);var VF=B(`
            `);function HF(e,t){O(t,!0);let n=Mw(()=>BF.fetchAuditLog(!0));On(()=>n.cancel);var r=VF(),i=P(r);jw(P(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return BF.auditSearch},set value(e){BF.auditSearch=e}}),D(i);var a=I(i,2),o=P(a),s=P(o);s.value=s.__value=``;var c=I(s);c.value=c.__value=`GET`;var l=I(c);l.value=l.__value=`POST`;var u=I(l);u.value=u.__value=`PUT`;var d=I(u);d.value=d.__value=`PATCH`;var f=I(d);f.value=f.__value=`DELETE`,D(o);var p=I(o,2),m=P(p);m.value=m.__value=``;var h=I(m);h.value=h.__value=`200`;var g=I(h);g.value=g.__value=`201`;var _=I(g);_.value=_.__value=`400`;var v=I(_);v.value=v.__value=`401`;var y=I(v);y.value=y.__value=`403`;var b=I(y);b.value=b.__value=`404`;var x=I(b);x.value=x.__value=`429`;var S=I(x);S.value=S.__value=`500`;var C=I(S);C.value=C.__value=`502`;var w=I(C);w.value=w.__value=`503`;var T=I(w);T.value=T.__value=`504`,D(p);var E=I(p,2),ee=P(E);ee.value=ee.__value=``;var te=I(ee);te.value=te.__value=`true`;var ne=I(te);ne.value=ne.__value=`false`,D(E);var re=I(E,2);J(P(re),{get icon(){return Lo},class:`table-icon-svg`}),Ve(2),D(re),D(a),D(r),z(`change`,o,()=>BF.fetchAuditLog(!0)),Ui(o,()=>BF.auditMethod,e=>BF.auditMethod=e),z(`change`,p,()=>BF.fetchAuditLog(!0)),Ui(p,()=>BF.auditStatusCode,e=>BF.auditStatusCode=e),z(`change`,E,()=>BF.fetchAuditLog(!0)),Ui(E,()=>BF.auditStream,e=>BF.auditStream=e),z(`click`,re,()=>BF.clearAuditFilters()),V(e,r),k()}Br([`change`,`click`]);var UF=B(`Live stream connecting…`),WF=B(` `),GF=B(`Live`),KF=B(` `);function qF(e,t){O(t,!0);let n=A(()=>UC.auditLivePauseReason()),r=A(()=>UC.liveLogsStreaming&&!R(n));var i=Xr(),a=F(i),o=e=>{var t=KF(),i=P(t);let a;var o=I(i,2),s=e=>{V(e,UF())},c=e=>{var t=WF(),r=P(t,!0);D(t),L(e=>H(r,e),[()=>jC(R(n))]),V(e,t)},l=e=>{V(e,GF())};U(o,e=>{UC.liveLogsStreaming?R(n)?e(c,1):e(l,-1):e(s)}),D(t),L(()=>a=G(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":R(r)})),V(e,t)},s=A(()=>ks.liveLogsVisible());U(a,e=>{R(s)&&e(o)}),V(e,i),k()}var JF=B(` `),YF=B(``);function XF(e,t){O(t,!0);let n=A(()=>[{key:`provider`,text:Dc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Ac(t.entry),mono:!0},{key:`failover`,text:aF(t.entry)&&`failover: `+aF(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=YF(),i=I(P(r),2);W(i,21,()=>R(n),e=>e.key,(e,t)=>{var n=JF(),r=P(n,!0);D(n),L(()=>{G(n,1,Ni([`provider-badge`,R(t).class,{mono:R(t).mono}]),`svelte-hyopt0`),H(r,R(t).text)}),V(e,n)}),D(i),D(r),V(e,r),k()}var ZF=B(``),QF=B(` `);function $F(e,t){O(t,!0);let n=A(()=>fF(t.entry)),r=A(()=>R(n).length>0?mF(t.entry):``),i=A(()=>R(n).length>0?pF(t.entry):``);var a=Xr(),o=F(a),s=e=>{var a=QF(),o=P(a);W(o,21,()=>R(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=ZF();let r;L(e=>{r=G(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(R(t)&&R(t).success),"audit-attempt-error":!(R(t)&&R(t).success)}),K(n,`title`,e)},[()=>hF(R(t))]),V(e,n)}),D(o);var s=I(o,2),c=P(s,!0);D(s),D(a),L(()=>{K(a,`title`,R(r)),K(a,`aria-label`,R(r)),H(c,R(i))}),V(e,a)};U(o,e=>{R(n).length>0&&e(s)}),V(e,a),k()}var eI=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function tI(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function nI(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:tI(e)).filter(Boolean).join(` +`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function rI(e){return!e||typeof e!=`object`?``:nI(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function iI(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function aI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(aI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...aI(t)]);let t=String(e);return t?[t]:[]}function oI(e){return nL(e).flatMap(e=>[...e.name?[String(e.name)]:[],...aI(e.arguments)])}function sI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?oI([e]):iI(e)):iI(e)}function cI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function lI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function uI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function dI(e){return{characters:(Array.isArray(e)?e:[]).map(uI)}}function fI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function pI(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=nI(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=nI(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function mI(e){return rI(e)}function hI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...iI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...sI(e.content)),t.push(...oI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...oI([e]));return}t.push(...sI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...iI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var gI=e=>nI(e);function _I(e){if(!e||!e.data)return``;let t=OP(e.data.response_body,0,gI);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?OP(EP(e),0,gI)||e:``}return OP(n,0,gI)||nI(n)}function vI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function yI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function bI(e){return e?!!SI(e):!1}function xI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function SI(e){switch(xI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function CI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function wI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function TI(e){let t=SI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||lL(n)!==``}function EI(e,t){let n=String(t||``).trim(),r=SI(e&&e.path),i=CI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=lL(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&wI(o,CI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&wI(o,{role:String(a.role||`assistant`),content:CI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var DI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function OI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||DI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function kI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function AI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=jI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function jI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function MI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function NI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?uL(t,e)>=0?t:e:t,null)}function PI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return NI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function FI(e,t){let n=NI(e);return!!n&&String(n.id||``)===String(t||``)}function II(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function LI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function RI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||vI(n.output));return!!(r||i)}function zI(e){return!e||yI(e.path)?!1:bI(e.path)||RI(e)}function BI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function WI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function GI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
            `+UI(t)+``+UI(qI(e[t]))+`
            `);return t.length?``:``}function YI(e){let t=KI(e.content_type),n=UI(t+` · `+GI(e.bytes)),r=JI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
            `+n+`
            `+r+`
            `}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
            `+n+`
            `+UI(i)+`
            `+r+`
            `}function XI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function ZI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function QI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return UI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+UI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+UI(e.slice(r)):UI(e)}function $I(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=ZI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return UI(o);if(!i(e))return o.split(` +`).map(e=>QI(e,a)).join(` `);let s=o.split(` -`),c=[],l=0;for(;l$I(e,a)).join(` -`);c.push(``+o+``),l=r+1;continue}c.push($I(e,a)),l++}return c.join(` -`)}function tL(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function nL(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=tL(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:fI(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function rL(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function iL(e){return Array.isArray(e)?rL(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function aL(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:rI(e.content)})):[]}function oL(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function sL(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&oL(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||oL(e,t,t.name||``)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{t&&oL(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||oL(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||oL(e,t,t.name||``)})}function cL(e){return Array.isArray(e)?`[`+e.map(cL).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+cL(e[t])).join(`,`)+`}`:JSON.stringify(e)}function lL(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(cL)}function uL(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function dL(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function fL(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(dL),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;sL(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName,functionCallID:e.functionCallID});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(e,t)=>uI(e,t),b=e=>fI(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>nL(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=rI(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,aI(g.system))}))}if(g&&g.instructions!==void 0){let e=rI(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,aI(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=rI(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,aI(e.content))}));return}if(t===`assistant`){let n=iI(e),r=[...rL(e.tool_calls),...iL(e.content)];if(n||r.length>0){let a=y(n,aI(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}aL(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=iI(e);n&&i.push(x(t,n,{promptCache:y(n,aI(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:rI(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?aI(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=rL([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=rI(e.content);n&&i.push(x(t,n,{promptCache:y(n,aI(e.content))}))}}}):mI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=aI(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=lL(g),T=w!==null,E=MI(e),ee=!!E&&a.has(E),te=String(g&&g.previous_response_id||``).trim(),ne=uL(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=T&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(T&&!e&&!ee||!T&&!re)return}p&&T&&(l=[...w]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let oe=lI(e);if(g&&oe!==null&&i.splice(0,i.length,...pI(i,oe)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=iI(e.message),r=rL(e.message.tool_calls);if(n||r.length>0){let e=x(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:rL([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=hI(e);if(n){let e=x(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=rI(_.content),n=iL(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let se=vI(e);se&&i.push(x(`error`,se));let ce=String(_&&_.id||``).trim();ce&&o.add(ce)}),{messages:i,entryIDs:[...a]}}function pL(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+hL(e)+`)`}).join(` +`),c=[],l=0;for(;lQI(e,a)).join(` +`);c.push(``+o+``),l=r+1;continue}c.push(QI(e,a)),l++}return c.join(` +`)}function eL(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function tL(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=eL(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:dI(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function nL(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function rL(e){return Array.isArray(e)?nL(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function iL(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:nI(e.content)})):[]}function aL(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function oL(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&aL(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||aL(e,t,t.name||``)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{t&&aL(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||aL(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||aL(e,t,t.name||``)})}function sL(e){return Array.isArray(e)?`[`+e.map(sL).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+sL(e[t])).join(`,`)+`}`:JSON.stringify(e)}function cL(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(sL)}function lL(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function uL(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function dL(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(uL),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;oL(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName,functionCallID:e.functionCallID});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(e,t)=>lI(e,t),b=e=>dI(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>tL(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=nI(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,iI(g.system))}))}if(g&&g.instructions!==void 0){let e=nI(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,iI(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=nI(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,iI(e.content))}));return}if(t===`assistant`){let n=rI(e),r=[...nL(e.tool_calls),...rL(e.content)];if(n||r.length>0){let a=y(n,iI(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}iL(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=rI(e);n&&i.push(x(t,n,{promptCache:y(n,iI(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:nI(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?iI(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=nL([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=nI(e.content);n&&i.push(x(t,n,{promptCache:y(n,iI(e.content))}))}}}):pI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=iI(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=cL(g),T=w!==null,E=jI(e),ee=!!E&&a.has(E),te=String(g&&g.previous_response_id||``).trim(),ne=lL(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=T&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(T&&!e&&!ee||!T&&!re)return}p&&T&&(l=[...w]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let oe=cI(e);if(g&&oe!==null&&i.splice(0,i.length,...fI(i,oe)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=rI(e.message),r=nL(e.message.tool_calls);if(n||r.length>0){let e=x(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:nL([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=mI(e);if(n){let e=x(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=nI(_.content),n=rL(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let se=_I(e);se&&i.push(x(`error`,se));let ce=String(_&&_.id||``).trim();ce&&o.add(ce)}),{messages:i,entryIDs:[...a]}}function fL(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+mL(e)+`)`}).join(` -`):e.text||``}function mL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?pL({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` +`):e.text||``}function pL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?fL({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` -`):``}function hL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var gL=600*1e3,_L=15*1e3,vL=250,yL=class{#e=j(!1);get conversationOpen(){return R(this.#e)}set conversationOpen(e){M(this.#e,e,!0)}#t=j(!1);get conversationLoading(){return R(this.#t)}set conversationLoading(e){M(this.#t,e,!0)}#n=j(``);get conversationError(){return R(this.#n)}set conversationError(e){M(this.#n,e,!0)}#r=j(``);get conversationAnchorID(){return R(this.#r)}set conversationAnchorID(e){M(this.#r,e,!0)}#i=j(N([]));get conversationEntryIDs(){return R(this.#i)}set conversationEntryIDs(e){M(this.#i,e,!0)}#a=j(``);get conversationSessionID(){return R(this.#a)}set conversationSessionID(e){M(this.#a,e,!0)}#o=j(!1);get conversationTruncated(){return R(this.#o)}set conversationTruncated(e){M(this.#o,e,!0)}#s=j(!1);get conversationFollowLatest(){return R(this.#s)}set conversationFollowLatest(e){M(this.#s,e,!0)}#c=j(``);get conversationOpenedFromID(){return R(this.#c)}set conversationOpenedFromID(e){M(this.#c,e,!0)}#l=j(``);get followUpText(){return R(this.#l)}set followUpText(e){M(this.#l,e,!0)}#u=j(!1);get followUpSending(){return R(this.#u)}set followUpSending(e){M(this.#u,e,!0)}#d=j(``);get followUpError(){return R(this.#d)}set followUpError(e){M(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=j(null);get conversationDialogEl(){return R(this.#f)}set conversationDialogEl(e){M(this.#f,e,!0)}#p=j(null);get conversationCloseBtnEl(){return R(this.#p)}set conversationCloseBtnEl(e){M(this.#p,e,!0)}#m=j(null);get conversationThreadEl(){return R(this.#m)}set conversationThreadEl(e){M(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>UC.auditRecord(e)).filter(Boolean)}#h=A(()=>fL(this.conversationEntries,this.conversationAnchorID));get conversationView(){return R(this.#h)}set conversationView(e){M(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],UC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return BI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return gc(e)}renderBodyWithConversationHighlights(e,t,n){return eL(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(UC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof UC.auditEntryLiveDetailPending==`function`&&UC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=fL(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=FI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=jI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),LI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=IC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof UC.liveAuditStateSettled!=`function`||!UC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await ws(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=UC.upsertAuditRecords(s,`conversation.hydrated`),l=RI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=II(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return NI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return EI(e)?CI(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=DI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=xL(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},gL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=kI(e,n,r),o=await Ss(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await bL(o),!UC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Es(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+_L;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function bL(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function xL(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function SL(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var CL=new yL,wL=0;An(()=>{On(()=>{let e=RC(UC.auditRecordChanges,wL);e.length!==0&&(wL=Number(e[e.length-1].version||0),wr(()=>{e.forEach(e=>{if(!zC(e))return;let t=UC.auditRecord(e.key);CL.handleAuditRecordChange(t,e.eventType)})}))})});var TL=B(``),EL=B(` `),DL=B(` `),OL=B(``),kL=B(`
            `);function AL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`expanded`,3,!1),i=q(t,`onactivate`,3,null),a=q(t,`hidePath`,3,!1),o=A(()=>vs.formatTimestamp(t.entry.timestamp)),s=A(()=>R(o)===`-`?R(o):R(o).slice(R(o).lastIndexOf(` `)+1)),c=A(()=>CL.conversationOpen&&String(CL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(){let e=Number(n().count||1),t=Number(n().matchingCount||e);return t{var t=TL(),r=P(t);{let e=A(()=>n().expanded?Va:Ua);J(r,{get icon(){return R(e)},class:`audit-thread-expander-svg`})}var i=I(r,2),a=P(i,!0);D(i),D(t),L((e,r)=>{K(t,`aria-expanded`,n().expanded),K(t,`title`,e),K(t,`aria-label`,r),H(a,n().count)},[()=>d(),()=>d()+`, `+(n().expanded?`collapse`:`expand`)]),z(`click`,t,u),V(e,t)};U(g,e=>{n()&&e(_)});var v=I(g,2),y=P(v),b=P(y,!0);D(y);var x=I(y,2),S=P(x,!0);D(x),D(v);var C=I(v,2),w=e=>{var n=EL(),r=P(n,!0);D(n),L(e=>H(r,e),[()=>jc(t.entry)]),V(e,n)};U(C,e=>{(t.entry.requested_model||t.entry.model)&&e(w)});var T=I(C,2),E=e=>{var n=DL(),r=P(n,!0);D(n),L(()=>H(r,t.entry.path||`-`)),V(e,n)};U(T,e=>{a()||e(E)}),D(h);var ee=I(h,2),te=P(ee);eI(te,{get entry(){return t.entry}});var ne=I(te,2),re=P(ne),ie=P(re,!0);D(re);var ae=I(re,2),oe=P(ae,!0);D(ae),D(ne);var se=I(ne,2),ce=P(se,!0);D(se);var le=I(se,2),ue=e=>{var t=OL();let n;var r=P(t);{let e=A(()=>R(c)?Ha:Ua);J(r,{get icon(){return R(e)},class:`audit-conversation-trigger-svg`})}D(t),L(()=>{n=G(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":R(c)}),K(t,`title`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-label`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-pressed`,R(c))}),z(`click`,t,f),V(e,t)},de=A(()=>CL.canShowConversation(t.entry));U(le,e=>{R(de)&&e(ue)}),D(ee),D(p),L((e,n,i,a)=>{m=G(p,1,`audit-entry-summary svelte-17mysgz`,null,m,e),K(p,`aria-expanded`,r()),G(v,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),K(v,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),K(v,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),H(b,t.entry.status_code||`-`),H(S,t.entry.method||`-`),K(ne,`title`,i),K(ne,`aria-label`,R(o)),H(ie,R(o)),H(oe,R(s)),H(ce,a)},[()=>({"audit-entry-summary-live-in-progress":aF(t.entry),"audit-entry-summary-has-interactions":CL.canShowConversation(t.entry)}),()=>iF(t.entry.status_code),()=>Tc(t.entry.timestamp),()=>rF(t.entry.duration_ns)]),z(`click`,p,l),V(e,p),k()}Br([`click`]);var jL=B(``);function ML(e,t){O(t,!0);let n=q(t,`label`,3,`Copy`),r=q(t,`copiedLabel`,3,`Copied`),i=q(t,`errorLabel`,3,``),a=q(t,`class`,3,`btn`),o=A(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=jL();let c;var l=P(s),u=e=>{J(e,{get icon(){return Ga},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{J(e,{get icon(){return Ja},width:`14`,height:`14`})};U(l,e=>{t.state.copied?e(u):e(d,-1)});var f=I(l,2),p=P(f,!0);D(f),D(s),L(()=>{c=G(s,1,Ni([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),H(p,R(o))}),z(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),V(e,s),k()}Br([`click`]);var NL=B(`
            Error Message
             
            `),PL=B(`
             
            `),FL=B(` `),IL=B(` streaming`),LL=B(`
            Body
            `),RL=B(`

            `),zL=B(`

            `),BL=B(`

            `),VL=B(`
            `);function HL(e,t){O(t,!0);let n=MM({logPrefix:`Failed to copy audit payload:`}),r=MM({logPrefix:`Failed to copy audit payload:`}),i=A(()=>t.pane&&t.pane.showHeaders?gc(t.pane.headers):``),a=A(()=>!t.pane||!t.pane.showBody?``:GI(t.pane.body)?XI(t.pane.body):CL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=A(()=>!!(t.pane&&CL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),CL.handleErrorConversationClick(e,t.pane.entry))}var c=VL();let l;var u=P(c),d=e=>{var n=NL(),r=I(P(n),2);let i;var a=P(r,!0);D(r),D(n),L(()=>{i=G(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":R(o)}),K(r,`role`,R(o)?`button`:null),K(r,`tabindex`,R(o)?0:null),H(a,t.pane.errorMessage)}),z(`mousedown`,r,e=>CL.startBodyInteraction(e)),z(`keydown`,r,s),z(`click`,r,e=>CL.handleErrorConversationClick(e,t.pane.entry)),V(e,n)};U(u,e=>{t.pane.showErrorMessage&&e(d)});var f=I(u,2),p=e=>{var n=PL(),a=P(n),o=P(a),s=P(o,!0);D(o),ML(I(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,gc)}),D(a);var c=I(a,2),l=P(c,!0);D(c),D(n),L(()=>{H(s,t.pane.headersTitle||`Headers`),H(l,R(i))}),V(e,n)};U(f,e=>{t.pane.showHeaders&&e(p)});var m=I(f,2),h=e=>{var r=LL(),i=P(r),o=P(i),s=I(P(o),2),c=e=>{var n=FL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.bodyCacheRatioLabel)),V(e,n)};U(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=I(s,2),u=e=>{V(e,IL())};U(l,e=>{t.pane.streaming&&e(u)}),D(o),ML(I(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,gc)}),D(i);var d=I(i,2);pi(d,()=>R(a),!0),D(d),D(r),z(`mousedown`,d,e=>CL.startBodyInteraction(e)),z(`click`,d,e=>CL.handleBodyConversationClick(e,t.pane.entry)),V(e,r)};U(m,e=>{t.pane.showBody&&e(h)});var g=I(m,2),_=e=>{var n=RL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.emptyMessage)),V(e,n)};U(g,e=>{t.pane.showEmpty&&e(_)});var v=I(g,2),y=e=>{var n=zL(),r=I(P(n),2),i=P(r,!0);D(r),D(n),L(()=>H(i,t.pane.pendingMessage)),V(e,n)};U(v,e=>{t.pane.showPending&&e(y)});var b=I(v,2),x=e=>{var n=BL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.tooLargeMessage)),V(e,n)};U(b,e=>{t.pane.showTooLarge&&e(x)}),D(c),L(()=>l=G(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),V(e,c),k()}Br([`mousedown`,`keydown`,`click`]);var UL=B(` `),WL=B(` `),GL=B(` `),KL=B(` `),qL=B(``),JL=B(`
            `),YL=B(`
            `);function XL(e,t){O(t,!0);let n=q(t,`panes`,19,()=>[]),r=j(null),i=A(()=>LF(R(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=RF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),M(r,a,!0))}var c=YL(),l=P(c);W(l,21,n,e=>e.id,(e,t)=>{var n=qL();let c;var l=P(n),u=P(l),d=e=>{J(e,{get icon(){return Ma}})},f=e=>{J(e,{get icon(){return ja}})};U(u,e=>{R(t).pane.direction===`request`?e(d):R(t).pane.direction===`response`&&e(f,1)}),D(l);var p=I(l,2),m=P(p,!0);D(p);var h=I(p,2),g=e=>{var n=UL(),r=P(n);D(n),L(()=>H(r,`#${R(t).pane.seq??``}`)),V(e,n)};U(h,e=>{R(t).pane.seq&&e(g)});var _=I(h,2),v=e=>{var n=WL(),r=P(n,!0);D(n),L(()=>{G(n,1,`provider-badge audit-pane-kind audit-pane-kind-${R(t).pane.kind??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.kind)}),V(e,n)};U(_,e=>{R(t).pane.kind&&e(v)});var y=I(_,2);W(y,17,()=>R(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=GL(),r=P(n,!0);D(n),L(()=>{K(n,`title`,R(t).title),H(r,R(t).label)}),V(e,n)});var b=I(y,2),x=e=>{var n=KL(),r=P(n,!0);D(n),L(()=>H(r,R(t).pane.savingsLabel)),V(e,n)};U(b,e=>{R(t).pane.savingsLabel&&e(x)});var S=I(b,2),C=e=>{var n=WL(),r=P(n,!0);D(n),L(e=>{G(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.statusCode)},[()=>iF(R(t).pane.statusCode)]),V(e,n)};U(S,e=>{R(t).pane.statusCode&&e(C)}),D(n),L((e,r)=>{c=G(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":R(i)===R(t).id}),K(n,`aria-selected`,R(i)===R(t).id),K(n,`id`,e),K(n,`aria-controls`,r),K(n,`tabindex`,R(i)===R(t).id?0:-1),G(l,1,Ni([`audit-pane-icon`,R(t).pane.direction&&`audit-pane-icon-${R(t).pane.direction}`]),`svelte-1bc5vi5`),H(m,R(t).pane.title)},[()=>a(R(t).id),()=>o(R(t).id)]),z(`keydown`,n,e=>s(e,R(t).id)),z(`click`,n,()=>M(r,R(t).id,!0)),V(e,n)}),D(l),W(I(l,2),17,n,e=>e.id,(e,t)=>{var n=JL();let r;HL(P(n),{get pane(){return R(t).pane}}),D(n),L((e,a)=>{K(n,`id`,e),K(n,`aria-labelledby`,a),r=Bi(n,``,r,{display:R(i)===R(t).id?null:`none`})},[()=>o(R(t).id),()=>a(R(t).id)]),V(e,n)}),D(c),V(e,c),k()}Br([`keydown`,`click`]);var ZL=B(`
            `),QL=B(`
            `);function $L(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`hidePath`,3,!1),i=A(()=>VF.isAuditEntryExpanded(t.entry)),a=A(()=>CL.conversationOpen&&String(CL.conversationAnchorID||``)===String(t.entry.id||``)),o=A(()=>R(i)?FF(t.entry,gI):[]),s=A(()=>R(i)?kN(t.entry,wP.auditEntryWorkflow(t.entry),wP.workflowFeatureCaps()):null);function c(){VF.toggleAuditEntryExpanded(t.entry)}var l=QL();let u;var d=P(l);AL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return R(i)},get hidePath(){return r()},onactivate:c});var f=I(d,2),p=e=>{var n=ZL(),r=P(n),i=e=>{GM(e,{get chart(){return R(s)}})};U(r,e=>{R(s)&&e(i)});var a=I(r,2);XL(a,{get entry(){return t.entry},get panes(){return R(o)}}),ZF(I(a,2),{get entry(){return t.entry}}),D(n),Di(3,n,()=>rc,()=>({y:-6,duration:SP(150)})),V(e,n)};U(f,e=>{R(i)&&e(p)}),D(l),L(()=>u=G(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":R(a)})),V(e,l),k()}var eR=B(`
            `),tR=B(`
            `),nR=B(`

            `),rR=B(`
            `),iR=B(`
            `);function aR(e,t){O(t,!0);let n=A(()=>BP(t.entry)),r=A(()=>VF.isThreadExpanded(R(n))),i=A(()=>VF.threadChildren(R(n))),a=A(()=>R(i)&&!R(i).loading&&Number(R(i).total||0)>R(i).entries.length+1);var o=Xr(),s=F(o),c=e=>{$L(e,{get entry(){return t.entry}})},l=A(()=>!UP(t.entry)),u=e=>{var n=iR(),o=P(n);{let e=A(()=>({count:VP(t.entry),matchingCount:HP(t.entry),expanded:R(r),ontoggle:()=>VF.toggleThread(t.entry)}));$L(o,{get entry(){return t.entry},get thread(){return R(e)}})}var s=I(o,2),c=e=>{var n=rR(),r=P(n),o=e=>{var t=eR();NS(P(t),{size:14,label:`Loading session requests`}),D(t),V(e,t)};U(r,e=>{R(i)&&R(i).loading&&e(o)});var s=I(r,2);W(s,17,()=>R(i)&&R(i).entries||[],e=>e.id,(e,n)=>{var r=tR(),i=P(r);{let e=A(()=>R(n).path===t.entry.path);$L(i,{get entry(){return R(n)},get hidePath(){return R(e)}})}D(r),V(e,r)});var c=I(s,2),l=e=>{var t=nR(),n=P(t);D(t),L(()=>H(n,`Showing the latest ${R(i).entries.length+1} of ${R(i).total??``} - requests in this session.`)),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(n),Di(3,n,()=>ic,()=>({duration:SP(150)})),V(e,n)};U(s,e=>{R(r)&&e(c)}),D(n),V(e,n)};U(s,e=>{R(l)?e(c):e(u,-1)}),V(e,o),k()}var oR=B(`

            .

            `),sR=B(`
            Audit logging is off. Live entries are temporary and disappear after - refresh. Set LOGGING_ENABLED=true to persist them.
            `),cR=B(`

            `),lR=B(`
            `),uR=B(`
            `),dR=B(`
            `),fR=B(`
            `),pR=B(`
            `);function mR(e,t){O(t,!0);let n=A(()=>ks.config&&ks.config.LOGGING_RETENTION_DAYS);On(()=>{if(Y.refreshTick,Yo.page===`audit-logs`)return wr(()=>r())});function r(){let e=!1;return(async()=>{try{await ks.ensureLoaded()}finally{await VF.fetchAuditLog(!0),!e&&ks.liveLogsVisible()&&UC.ensureLiveLogs()}})(),()=>{e=!0,UC.stopLiveLogs()}}var i=pR(),a=P(i),o=P(a),s=I(P(o),2),c=e=>{iC(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=oR(),r=P(t,!0),i=I(r),a=P(i,!0);D(i),Ve(),D(t),L((e,t)=>{H(r,e),H(a,t)},[()=>IP(R(n)),()=>LP(R(n))]),V(e,t)},$$slots:{title:!0}})},l=A(()=>FP(R(n)));U(s,e=>{R(l)&&e(c)}),D(o),D(a);var u=I(a,2);fl(P(u),{onchange:()=>VF.fetchAuditLog(!0)}),D(u);var d=I(u,2);Kc(d,{});var f=I(d,2),p=e=>{V(e,sR())},m=A(()=>ks.loaded&&!ks.auditVisible()&&!Y.needsAuth);U(f,e=>{R(m)&&e(p)});var h=I(f,2),g=P(h);UF(g,{});var _=I(g,2),v=P(_),y=P(v),b=e=>{var t=cR(),n=P(t);D(t),L(e=>H(n,`Showing ${VF.auditLog.offset+1}-${e??``} of ${VF.auditLog.total??``} - ${VF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(VF.auditLog.offset+VF.auditLog.limit,VF.auditLog.total)]),V(e,t)};U(y,e=>{VF.auditLog.total>0&&e(b)});var x=I(y,2),S=P(x);ea(S),Ve(2),D(x),D(v),JF(I(v,2),{}),D(_);var C=I(_,2),w=e=>{var t=lR();NS(P(t),{size:18,label:`Loading audit logs`}),D(t),V(e,t)},T=e=>{var t=dR();W(t,29,()=>VF.auditLog.entries,e=>e.id,(e,t)=>{var n=uR(),r=P(n),i=e=>{aR(e,{get entry(){return R(t)}})},a=e=>{$L(e,{get entry(){return R(t)}})};U(r,e=>{VF.auditGroupSessions?e(i):e(a,-1)}),D(n),Ei(n,()=>vP,()=>({duration:SP(150)})),Di(1,n,()=>CP,()=>({live:R(t)._live})),V(e,n)}),D(t),V(e,t)};U(C,e=>{VF.loading&&VF.auditLog.entries.length===0?e(w):VF.auditLog.entries.length>0&&e(T,1)});var E=I(C,2),ee=e=>{var t=fR();IS(P(t),{}),D(t),V(e,t)};U(E,e=>{VF.auditLog.entries.length===0&&!VF.loading&&!Y.needsAuth&&e(ee)}),oT(I(E,2),{get total(){return VF.auditLog.total},get offset(){return VF.auditLog.offset},get limit(){return VF.auditLog.limit},onprev:()=>VF.auditLogPrevPage(),onnext:()=>VF.auditLogNextPage()}),D(h),D(i),L(()=>na(S,VF.auditGroupSessions)),z(`change`,S,()=>VF.toggleAuditGroupSessions()),V(e,i),k()}Br([`change`]);function hR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function gR(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function _R(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function vR(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function yR(e,t){let n=String(t||``).trim();return n&&_R(e,n)?n:vR(e)}function bR(e,t){let n=_R(e,t);return!n||!n.defaults?{}:hR(n.defaults)}function xR(e,t,n){return{...bR(e,n),...hR(t)}}function SR(e,t){let n=yR(e,t);return{name:``,type:n,description:``,user_path:``,config:bR(e,n)}}function CR(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function wR(e,t){let n=_R(e,t);return n&&n.label?n.label:t||`Unknown`}function TR(e,t){let n=_R(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function ER(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?gR(n):n}function DR(e,t,n){if(!t)return e;let r=hR(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=gR(n):r[t.key]=n;return r}function OR(e,t,n){return ER(e,t).includes(String(n||``).trim())}function kR(e,t,n,r){let i=gR(ER(e,t)),a=String(n||``).trim();return a?DR(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function AR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:hR(e&&e.config)}}var jR=new class{#e=j(N([]));get guardrails(){return R(this.#e)}set guardrails(e){M(this.#e,e,!0)}#t=j(N([]));get types(){return R(this.#t)}set types(e){M(this.#t,e,!0)}#n=j(!0);get available(){return R(this.#n)}set available(e){M(this.#n,e,!0)}#r=j(!1);get loading(){return R(this.#r)}set loading(e){M(this.#r,e,!0)}#i=j(!1);get typesLoading(){return R(this.#i)}set typesLoading(e){M(this.#i,e,!0)}#a=j(``);get error(){return R(this.#a)}set error(e){M(this.#a,e,!0)}#o=j(``);get filter(){return R(this.#o)}set filter(e){M(this.#o,e,!0)}#s=j(!1);get formOpen(){return R(this.#s)}set formOpen(e){M(this.#s,e,!0)}#c=j(!1);get formSubmitting(){return R(this.#c)}set formSubmitting(e){M(this.#c,e,!0)}#l=j(``);get deletingName(){return R(this.#l)}set deletingName(e){M(this.#l,e,!0)}#u=j(`create`);get formMode(){return R(this.#u)}set formMode(e){M(this.#u,e,!0)}#d=j(``);get formOriginalName(){return R(this.#d)}set formOriginalName(e){M(this.#d,e,!0)}#f=j(N({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}get filtered(){return CR(this.guardrails,this.filter)}typeLabel(e){return wR(this.types,e)}typeFields(e){return TR(this.types,e)}fieldValue(e){return ER(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:DR(this.form.config,e,t)}}arrayFieldSelected(e,t){return OR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:kR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=SR(this.types,vR(this.types)),this.formOpen=!0}openEdit(e){let t=yR(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:xR(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=SR(this.types,vR(this.types))}changeType(e){let t=yR(this.types,e);this.form={...this.form,type:t,config:bR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await kT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=yR(this.types,this.form.type);this.form={...this.form,type:t,config:xR(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=AR(this.form);try{let t=await AT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await AT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},MR=B(`
            `),NR=B(`

            Loading guardrails...

            `),PR=B(`
            `),FR=B(`
            `),IR=B(`
            NameTypeUser PathSummaryActions
            `),LR=B(`

            No guardrails defined yet.

            `),RR=B(`

            Instances

            Each instance has a reusable name, a type, an optional user path for +`):``}function mL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var hL=600*1e3,gL=15*1e3,_L=250,vL=class{#e=j(!1);get conversationOpen(){return R(this.#e)}set conversationOpen(e){M(this.#e,e,!0)}#t=j(!1);get conversationLoading(){return R(this.#t)}set conversationLoading(e){M(this.#t,e,!0)}#n=j(``);get conversationError(){return R(this.#n)}set conversationError(e){M(this.#n,e,!0)}#r=j(``);get conversationAnchorID(){return R(this.#r)}set conversationAnchorID(e){M(this.#r,e,!0)}#i=j(N([]));get conversationEntryIDs(){return R(this.#i)}set conversationEntryIDs(e){M(this.#i,e,!0)}#a=j(``);get conversationSessionID(){return R(this.#a)}set conversationSessionID(e){M(this.#a,e,!0)}#o=j(!1);get conversationTruncated(){return R(this.#o)}set conversationTruncated(e){M(this.#o,e,!0)}#s=j(!1);get conversationFollowLatest(){return R(this.#s)}set conversationFollowLatest(e){M(this.#s,e,!0)}#c=j(``);get conversationOpenedFromID(){return R(this.#c)}set conversationOpenedFromID(e){M(this.#c,e,!0)}#l=j(``);get followUpText(){return R(this.#l)}set followUpText(e){M(this.#l,e,!0)}#u=j(!1);get followUpSending(){return R(this.#u)}set followUpSending(e){M(this.#u,e,!0)}#d=j(``);get followUpError(){return R(this.#d)}set followUpError(e){M(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=j(null);get conversationDialogEl(){return R(this.#f)}set conversationDialogEl(e){M(this.#f,e,!0)}#p=j(null);get conversationCloseBtnEl(){return R(this.#p)}set conversationCloseBtnEl(e){M(this.#p,e,!0)}#m=j(null);get conversationThreadEl(){return R(this.#m)}set conversationThreadEl(e){M(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>UC.auditRecord(e)).filter(Boolean)}#h=A(()=>dL(this.conversationEntries,this.conversationAnchorID));get conversationView(){return R(this.#h)}set conversationView(e){M(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],UC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return zI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return gc(e)}renderBodyWithConversationHighlights(e,t,n){return $I(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(UC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof UC.auditEntryLiveDetailPending==`function`&&UC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=dL(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=PI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=AI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),II(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=IC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof UC.liveAuditStateSettled!=`function`||!UC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await ws(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=UC.upsertAuditRecords(s,`conversation.hydrated`),l=LI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=FI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return MI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return TI(e)?SI(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=EI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=bL(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},hL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=OI(e,n,r),o=await Ss(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await yL(o),!UC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Es(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+gL;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function yL(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function bL(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function xL(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var SL=new vL,CL=0;An(()=>{On(()=>{let e=RC(UC.auditRecordChanges,CL);e.length!==0&&(CL=Number(e[e.length-1].version||0),wr(()=>{e.forEach(e=>{if(!zC(e))return;let t=UC.auditRecord(e.key);SL.handleAuditRecordChange(t,e.eventType)})}))})});var wL=B(``),TL=B(` `),EL=B(` `),DL=B(``),OL=B(`

            `);function kL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`expanded`,3,!1),i=q(t,`onactivate`,3,null),a=q(t,`hidePath`,3,!1),o=A(()=>vs.formatTimestamp(t.entry.timestamp)),s=A(()=>R(o)===`-`?R(o):R(o).slice(R(o).lastIndexOf(` `)+1)),c=A(()=>SL.conversationOpen&&String(SL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(){return`Session with `+Number(n().count||1)+` requests`}function f(e){if(e.stopPropagation(),e.preventDefault(),R(c)){SL.closeConversation();return}SL.openConversation(t.entry,e.currentTarget)}var p=OL();let m;var h=P(p),g=P(h),_=e=>{var t=wL(),r=P(t);{let e=A(()=>n().expanded?Va:Ua);J(r,{get icon(){return R(e)},class:`audit-thread-expander-svg`})}var i=I(r,2),a=P(i,!0);D(i),D(t),L((e,r)=>{K(t,`aria-expanded`,n().expanded),K(t,`title`,e),K(t,`aria-label`,r),H(a,n().count)},[()=>d(),()=>d()+`, `+(n().expanded?`collapse`:`expand`)]),z(`click`,t,u),V(e,t)};U(g,e=>{n()&&e(_)});var v=I(g,2),y=P(v),b=P(y,!0);D(y);var x=I(y,2),S=P(x,!0);D(x),D(v);var C=I(v,2),w=e=>{var n=TL(),r=P(n,!0);D(n),L(e=>H(r,e),[()=>jc(t.entry)]),V(e,n)};U(C,e=>{(t.entry.requested_model||t.entry.model)&&e(w)});var T=I(C,2),E=e=>{var n=EL(),r=P(n,!0);D(n),L(()=>H(r,t.entry.path||`-`)),V(e,n)};U(T,e=>{a()||e(E)}),D(h);var ee=I(h,2),te=P(ee);$F(te,{get entry(){return t.entry}});var ne=I(te,2),re=P(ne),ie=P(re,!0);D(re);var ae=I(re,2),oe=P(ae,!0);D(ae),D(ne);var se=I(ne,2),ce=P(se,!0);D(se);var le=I(se,2),ue=e=>{var t=DL();let n;var r=P(t);{let e=A(()=>R(c)?Ha:Ua);J(r,{get icon(){return R(e)},class:`audit-conversation-trigger-svg`})}D(t),L(()=>{n=G(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":R(c)}),K(t,`title`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-label`,R(c)?`Close interactions`:`Open interactions`),K(t,`aria-pressed`,R(c))}),z(`click`,t,f),V(e,t)},de=A(()=>SL.canShowConversation(t.entry));U(le,e=>{R(de)&&e(ue)}),D(ee),D(p),L((e,n,i,a)=>{m=G(p,1,`audit-entry-summary svelte-17mysgz`,null,m,e),K(p,`aria-expanded`,r()),G(v,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),K(v,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),K(v,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),H(b,t.entry.status_code||`-`),H(S,t.entry.method||`-`),K(ne,`title`,i),K(ne,`aria-label`,R(o)),H(ie,R(o)),H(oe,R(s)),H(ce,a)},[()=>({"audit-entry-summary-live-in-progress":iF(t.entry),"audit-entry-summary-has-interactions":SL.canShowConversation(t.entry)}),()=>rF(t.entry.status_code),()=>Tc(t.entry.timestamp),()=>nF(t.entry.duration_ns)]),z(`click`,p,l),V(e,p),k()}Br([`click`]);var AL=B(``);function jL(e,t){O(t,!0);let n=q(t,`label`,3,`Copy`),r=q(t,`copiedLabel`,3,`Copied`),i=q(t,`errorLabel`,3,``),a=q(t,`class`,3,`btn`),o=A(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=AL();let c;var l=P(s),u=e=>{J(e,{get icon(){return Ga},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{J(e,{get icon(){return Ja},width:`14`,height:`14`})};U(l,e=>{t.state.copied?e(u):e(d,-1)});var f=I(l,2),p=P(f,!0);D(f),D(s),L(()=>{c=G(s,1,Ni([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),H(p,R(o))}),z(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),V(e,s),k()}Br([`click`]);var ML=B(`
            Error Message
             
            `),NL=B(`
             
            `),PL=B(` `),FL=B(` streaming`),IL=B(`
            Body
            `),LL=B(`

            `),RL=B(`

            `),zL=B(`

            `),BL=B(`
            `);function VL(e,t){O(t,!0);let n=MM({logPrefix:`Failed to copy audit payload:`}),r=MM({logPrefix:`Failed to copy audit payload:`}),i=A(()=>t.pane&&t.pane.showHeaders?gc(t.pane.headers):``),a=A(()=>!t.pane||!t.pane.showBody?``:WI(t.pane.body)?YI(t.pane.body):SL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=A(()=>!!(t.pane&&SL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),SL.handleErrorConversationClick(e,t.pane.entry))}var c=BL();let l;var u=P(c),d=e=>{var n=ML(),r=I(P(n),2);let i;var a=P(r,!0);D(r),D(n),L(()=>{i=G(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":R(o)}),K(r,`role`,R(o)?`button`:null),K(r,`tabindex`,R(o)?0:null),H(a,t.pane.errorMessage)}),z(`mousedown`,r,e=>SL.startBodyInteraction(e)),z(`keydown`,r,s),z(`click`,r,e=>SL.handleErrorConversationClick(e,t.pane.entry)),V(e,n)};U(u,e=>{t.pane.showErrorMessage&&e(d)});var f=I(u,2),p=e=>{var n=NL(),a=P(n),o=P(a),s=P(o,!0);D(o),jL(I(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,gc)}),D(a);var c=I(a,2),l=P(c,!0);D(c),D(n),L(()=>{H(s,t.pane.headersTitle||`Headers`),H(l,R(i))}),V(e,n)};U(f,e=>{t.pane.showHeaders&&e(p)});var m=I(f,2),h=e=>{var r=IL(),i=P(r),o=P(i),s=I(P(o),2),c=e=>{var n=PL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.bodyCacheRatioLabel)),V(e,n)};U(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=I(s,2),u=e=>{V(e,FL())};U(l,e=>{t.pane.streaming&&e(u)}),D(o),jL(I(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,gc)}),D(i);var d=I(i,2);pi(d,()=>R(a),!0),D(d),D(r),z(`mousedown`,d,e=>SL.startBodyInteraction(e)),z(`click`,d,e=>SL.handleBodyConversationClick(e,t.pane.entry)),V(e,r)};U(m,e=>{t.pane.showBody&&e(h)});var g=I(m,2),_=e=>{var n=LL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.emptyMessage)),V(e,n)};U(g,e=>{t.pane.showEmpty&&e(_)});var v=I(g,2),y=e=>{var n=RL(),r=I(P(n),2),i=P(r,!0);D(r),D(n),L(()=>H(i,t.pane.pendingMessage)),V(e,n)};U(v,e=>{t.pane.showPending&&e(y)});var b=I(v,2),x=e=>{var n=zL(),r=P(n,!0);D(n),L(()=>H(r,t.pane.tooLargeMessage)),V(e,n)};U(b,e=>{t.pane.showTooLarge&&e(x)}),D(c),L(()=>l=G(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),V(e,c),k()}Br([`mousedown`,`keydown`,`click`]);var HL=B(` `),UL=B(` `),WL=B(` `),GL=B(` `),KL=B(``),qL=B(`
            `),JL=B(`
            `);function YL(e,t){O(t,!0);let n=q(t,`panes`,19,()=>[]),r=j(null),i=A(()=>IF(R(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=LF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),M(r,a,!0))}var c=JL(),l=P(c);W(l,21,n,e=>e.id,(e,t)=>{var n=KL();let c;var l=P(n),u=P(l),d=e=>{J(e,{get icon(){return Ma}})},f=e=>{J(e,{get icon(){return ja}})};U(u,e=>{R(t).pane.direction===`request`?e(d):R(t).pane.direction===`response`&&e(f,1)}),D(l);var p=I(l,2),m=P(p,!0);D(p);var h=I(p,2),g=e=>{var n=HL(),r=P(n);D(n),L(()=>H(r,`#${R(t).pane.seq??``}`)),V(e,n)};U(h,e=>{R(t).pane.seq&&e(g)});var _=I(h,2),v=e=>{var n=UL(),r=P(n,!0);D(n),L(()=>{G(n,1,`provider-badge audit-pane-kind audit-pane-kind-${R(t).pane.kind??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.kind)}),V(e,n)};U(_,e=>{R(t).pane.kind&&e(v)});var y=I(_,2);W(y,17,()=>R(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=WL(),r=P(n,!0);D(n),L(()=>{K(n,`title`,R(t).title),H(r,R(t).label)}),V(e,n)});var b=I(y,2),x=e=>{var n=GL(),r=P(n,!0);D(n),L(()=>H(r,R(t).pane.savingsLabel)),V(e,n)};U(b,e=>{R(t).pane.savingsLabel&&e(x)});var S=I(b,2),C=e=>{var n=UL(),r=P(n,!0);D(n),L(e=>{G(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),H(r,R(t).pane.statusCode)},[()=>rF(R(t).pane.statusCode)]),V(e,n)};U(S,e=>{R(t).pane.statusCode&&e(C)}),D(n),L((e,r)=>{c=G(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":R(i)===R(t).id}),K(n,`aria-selected`,R(i)===R(t).id),K(n,`id`,e),K(n,`aria-controls`,r),K(n,`tabindex`,R(i)===R(t).id?0:-1),G(l,1,Ni([`audit-pane-icon`,R(t).pane.direction&&`audit-pane-icon-${R(t).pane.direction}`]),`svelte-1bc5vi5`),H(m,R(t).pane.title)},[()=>a(R(t).id),()=>o(R(t).id)]),z(`keydown`,n,e=>s(e,R(t).id)),z(`click`,n,()=>M(r,R(t).id,!0)),V(e,n)}),D(l),W(I(l,2),17,n,e=>e.id,(e,t)=>{var n=qL();let r;VL(P(n),{get pane(){return R(t).pane}}),D(n),L((e,a)=>{K(n,`id`,e),K(n,`aria-labelledby`,a),r=Bi(n,``,r,{display:R(i)===R(t).id?null:`none`})},[()=>o(R(t).id),()=>a(R(t).id)]),V(e,n)}),D(c),V(e,c),k()}Br([`keydown`,`click`]);var XL=B(`
            `),ZL=B(`
            `);function QL(e,t){O(t,!0);let n=q(t,`thread`,3,null),r=q(t,`hidePath`,3,!1),i=A(()=>BF.isAuditEntryExpanded(t.entry)),a=A(()=>SL.conversationOpen&&String(SL.conversationAnchorID||``)===String(t.entry.id||``)),o=A(()=>R(i)?PF(t.entry,hI):[]),s=A(()=>R(i)?kN(t.entry,wP.auditEntryWorkflow(t.entry),wP.workflowFeatureCaps()):null);function c(){BF.toggleAuditEntryExpanded(t.entry)}var l=ZL();let u;var d=P(l);kL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return R(i)},get hidePath(){return r()},onactivate:c});var f=I(d,2),p=e=>{var n=XL(),r=P(n),i=e=>{GM(e,{get chart(){return R(s)}})};U(r,e=>{R(s)&&e(i)});var a=I(r,2);YL(a,{get entry(){return t.entry},get panes(){return R(o)}}),XF(I(a,2),{get entry(){return t.entry}}),D(n),Di(3,n,()=>rc,()=>({y:-6,duration:SP(150)})),V(e,n)};U(f,e=>{R(i)&&e(p)}),D(l),L(()=>u=G(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":R(a)})),V(e,l),k()}var $L=B(`
            `),eR=B(`
            `),tR=B(`

            `),nR=B(`
            `),rR=B(`
            `);function iR(e,t){O(t,!0);let n=A(()=>BP(t.entry)),r=A(()=>BF.isThreadExpanded(R(n))),i=A(()=>BF.threadChildren(R(n))),a=A(()=>R(i)&&!R(i).loading&&Number(R(i).total||0)>R(i).entries.length+1);var o=Xr(),s=F(o),c=e=>{QL(e,{get entry(){return t.entry}})},l=A(()=>!HP(t.entry)),u=e=>{var n=rR(),o=P(n);{let e=A(()=>({count:VP(t.entry),expanded:R(r),ontoggle:()=>BF.toggleThread(t.entry)}));QL(o,{get entry(){return t.entry},get thread(){return R(e)}})}var s=I(o,2),c=e=>{var n=nR(),r=P(n),o=e=>{var t=$L();NS(P(t),{size:14,label:`Loading session requests`}),D(t),V(e,t)};U(r,e=>{R(i)&&R(i).loading&&e(o)});var s=I(r,2);W(s,17,()=>R(i)&&R(i).entries||[],e=>e.id,(e,n)=>{var r=eR(),i=P(r);{let e=A(()=>R(n).path===t.entry.path);QL(i,{get entry(){return R(n)},get hidePath(){return R(e)}})}D(r),V(e,r)});var c=I(s,2),l=e=>{var t=tR(),n=P(t);D(t),L(()=>H(n,`Showing the latest ${R(i).entries.length+1} of ${R(i).total??``} + requests in this session.`)),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(n),Di(3,n,()=>ic,()=>({duration:SP(150)})),V(e,n)};U(s,e=>{R(r)&&e(c)}),D(n),V(e,n)};U(s,e=>{R(l)?e(c):e(u,-1)}),V(e,o),k()}var aR=B(`

            .

            `),oR=B(`
            Audit logging is off. Live entries are temporary and disappear after + refresh. Set LOGGING_ENABLED=true to persist them.
            `),sR=B(`

            `),cR=B(`
            `),lR=B(`
            `),uR=B(`
            `),dR=B(`
            `),fR=B(`
            `);function pR(e,t){O(t,!0);let n=A(()=>ks.config&&ks.config.LOGGING_RETENTION_DAYS);On(()=>{if(Y.refreshTick,Yo.page===`audit-logs`)return wr(()=>r())});function r(){let e=!1;return(async()=>{try{await ks.ensureLoaded()}finally{await BF.fetchAuditLog(!0),!e&&ks.liveLogsVisible()&&UC.ensureLiveLogs()}})(),()=>{e=!0,UC.stopLiveLogs()}}var i=fR(),a=P(i),o=P(a),s=I(P(o),2),c=e=>{iC(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=aR(),r=P(t,!0),i=I(r),a=P(i,!0);D(i),Ve(),D(t),L((e,t)=>{H(r,e),H(a,t)},[()=>IP(R(n)),()=>LP(R(n))]),V(e,t)},$$slots:{title:!0}})},l=A(()=>FP(R(n)));U(s,e=>{R(l)&&e(c)}),D(o),D(a);var u=I(a,2);fl(P(u),{onchange:()=>BF.fetchAuditLog(!0)}),D(u);var d=I(u,2);Kc(d,{});var f=I(d,2),p=e=>{V(e,oR())},m=A(()=>ks.loaded&&!ks.auditVisible()&&!Y.needsAuth);U(f,e=>{R(m)&&e(p)});var h=I(f,2),g=P(h);HF(g,{});var _=I(g,2),v=P(_),y=P(v),b=e=>{var t=sR(),n=P(t);D(t),L(e=>H(n,`Showing ${BF.auditLog.offset+1}-${e??``} of ${BF.auditLog.total??``} + ${BF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(BF.auditLog.offset+BF.auditLog.limit,BF.auditLog.total)]),V(e,t)};U(y,e=>{BF.auditLog.total>0&&e(b)});var x=I(y,2),S=P(x);ea(S),Ve(2),D(x),D(v),qF(I(v,2),{}),D(_);var C=I(_,2),w=e=>{var t=cR();NS(P(t),{size:18,label:`Loading audit logs`}),D(t),V(e,t)},T=e=>{var t=uR();W(t,29,()=>BF.auditLog.entries,e=>e.id,(e,t)=>{var n=lR(),r=P(n),i=e=>{iR(e,{get entry(){return R(t)}})},a=e=>{QL(e,{get entry(){return R(t)}})};U(r,e=>{BF.auditGroupSessions?e(i):e(a,-1)}),D(n),Ei(n,()=>vP,()=>({duration:SP(150)})),Di(1,n,()=>CP,()=>({live:R(t)._live})),V(e,n)}),D(t),V(e,t)};U(C,e=>{BF.loading&&BF.auditLog.entries.length===0?e(w):BF.auditLog.entries.length>0&&e(T,1)});var E=I(C,2),ee=e=>{var t=dR();IS(P(t),{}),D(t),V(e,t)};U(E,e=>{BF.auditLog.entries.length===0&&!BF.loading&&!Y.needsAuth&&e(ee)}),oT(I(E,2),{get total(){return BF.auditLog.total},get offset(){return BF.auditLog.offset},get limit(){return BF.auditLog.limit},onprev:()=>BF.auditLogPrevPage(),onnext:()=>BF.auditLogNextPage()}),D(h),D(i),L(()=>na(S,BF.auditGroupSessions)),z(`change`,S,()=>BF.toggleAuditGroupSessions()),V(e,i),k()}Br([`change`]);function mR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function hR(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function gR(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function _R(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function vR(e,t){let n=String(t||``).trim();return n&&gR(e,n)?n:_R(e)}function yR(e,t){let n=gR(e,t);return!n||!n.defaults?{}:mR(n.defaults)}function bR(e,t,n){return{...yR(e,n),...mR(t)}}function xR(e,t){let n=vR(e,t);return{name:``,type:n,description:``,user_path:``,config:yR(e,n)}}function SR(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function CR(e,t){let n=gR(e,t);return n&&n.label?n.label:t||`Unknown`}function wR(e,t){let n=gR(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function TR(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?hR(n):n}function ER(e,t,n){if(!t)return e;let r=mR(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=hR(n):r[t.key]=n;return r}function DR(e,t,n){return TR(e,t).includes(String(n||``).trim())}function OR(e,t,n,r){let i=hR(TR(e,t)),a=String(n||``).trim();return a?ER(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function kR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:mR(e&&e.config)}}var AR=new class{#e=j(N([]));get guardrails(){return R(this.#e)}set guardrails(e){M(this.#e,e,!0)}#t=j(N([]));get types(){return R(this.#t)}set types(e){M(this.#t,e,!0)}#n=j(!0);get available(){return R(this.#n)}set available(e){M(this.#n,e,!0)}#r=j(!1);get loading(){return R(this.#r)}set loading(e){M(this.#r,e,!0)}#i=j(!1);get typesLoading(){return R(this.#i)}set typesLoading(e){M(this.#i,e,!0)}#a=j(``);get error(){return R(this.#a)}set error(e){M(this.#a,e,!0)}#o=j(``);get filter(){return R(this.#o)}set filter(e){M(this.#o,e,!0)}#s=j(!1);get formOpen(){return R(this.#s)}set formOpen(e){M(this.#s,e,!0)}#c=j(!1);get formSubmitting(){return R(this.#c)}set formSubmitting(e){M(this.#c,e,!0)}#l=j(``);get deletingName(){return R(this.#l)}set deletingName(e){M(this.#l,e,!0)}#u=j(`create`);get formMode(){return R(this.#u)}set formMode(e){M(this.#u,e,!0)}#d=j(``);get formOriginalName(){return R(this.#d)}set formOriginalName(e){M(this.#d,e,!0)}#f=j(N({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return R(this.#f)}set form(e){M(this.#f,e,!0)}get filtered(){return SR(this.guardrails,this.filter)}typeLabel(e){return CR(this.types,e)}typeFields(e){return wR(this.types,e)}fieldValue(e){return TR(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:ER(this.form.config,e,t)}}arrayFieldSelected(e,t){return DR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:OR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=xR(this.types,_R(this.types)),this.formOpen=!0}openEdit(e){let t=vR(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:bR(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=xR(this.types,_R(this.types))}changeType(e){let t=vR(this.types,e);this.form={...this.form,type:t,config:yR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await kT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=vR(this.types,this.form.type);this.form={...this.form,type:t,config:bR(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=kR(this.form);try{let t=await AT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await AT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},jR=B(`
            `),MR=B(`

            Loading guardrails...

            `),NR=B(`
            `),PR=B(`
            `),FR=B(`
            NameTypeUser PathSummaryActions
            `),IR=B(`

            No guardrails defined yet.

            `),LR=B(`

            Instances

            Each instance has a reusable name, a type, an optional user path for future UI visibility scoping, and a JSON-backed config payload for - that type.

            `);function zR(e,t){O(t,!0);var n=RR(),r=P(n),i=I(P(r),2);J(P(i),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(i),D(r);var a=I(r,2),o=e=>{var t=MR(),n=P(t);jw(P(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return jR.filter},set value(e){jR.filter=e}}),D(n),D(t),V(e,t)};U(a,e=>{jR.available&&e(o)});var s=I(a,2),c=e=>{var t=NR();NS(P(t),{size:16,label:`Loading guardrails`}),Ve(),D(t),V(e,t)};U(s,e=>{jR.loading&&jR.filtered.length===0&&e(c)});var l=I(s,2),u=e=>{var t=IR(),n=P(t),r=I(P(n));W(r,21,()=>jR.filtered,e=>e.name,(e,t)=>{var n=FR(),r=P(n),i=P(r,!0);D(r);var a=I(r),o=P(a),s=P(o,!0);D(o),D(a);var c=I(a),l=P(c,!0);D(c);var u=I(c),d=P(u),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var n=PR(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(p,e=>{R(t).description&&e(m)}),D(u);var h=I(u),g=P(h),_=P(g);{let e=A(()=>`Edit guardrail `+R(t).name);OT(_,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>jR.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=I(_,2);{let e=A(()=>(jR.deletingName===R(t).name?`Deleting guardrail `:`Delete guardrail `)+R(t).name),n=A(()=>jR.deletingName===R(t).name);OT(v,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>jR.deleteGuardrail(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(g),D(h),D(n),L(e=>{H(i,R(t).name),H(s,e),H(l,R(t).user_path||`—`),H(f,R(t).summary||R(t).description||`No summary yet.`)},[()=>jR.typeLabel(R(t).type)]),V(e,n)}),D(r),D(n),D(t),V(e,t)};U(l,e=>{jR.filtered.length>0&&e(u)});var d=I(l,2),f=e=>{V(e,LR())};U(d,e=>{jR.filtered.length===0&&!jR.loading&&jR.available&&!jR.error&&!Y.authError&&e(f)}),D(n),L(()=>i.disabled=jR.typesLoading||jR.formSubmitting||!jR.available),z(`click`,i,()=>jR.openCreate()),V(e,n),k()}Br([`click`]);var BR=B(`

            Workflows reference these names directly, so renames are - intentionally avoided after creation.

            `),VR=B(``),HR=B(``),UR=B(``),WR=B(``),GR=B(``),KR=B(``),qR=B(``),JR=B(``),YR=B(``),XR=B(`
            `),ZR=B(``),QR=B(` `),$R=B(`
            `),ez=B(`
            `);function tz(e,t){O(t,!0);let n=A(()=>jR.formMode===`edit`);{let t=e=>{V(e,BR())},r=A(()=>R(n)?`Edit Guardrail`:`Create Guardrail`);ME(e,{get open(){return jR.formOpen},get title(){return R(r)},ariaLabel:`Guardrail editor`,get error(){return jR.error},get submitting(){return jR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>jR.closeForm(),onsubmit:()=>jR.submitForm(),headerHint:t,children:(e,t)=>{var r=ez(),i=P(r);PE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=VR();ea(r),L(()=>{r.disabled=R(n),K(r,`data-modal-autofocus`,!R(n)||void 0)}),la(r,()=>jR.form.name,e=>jR.form.name=e),V(e,r)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=UR();W(r,21,()=>jR.types,e=>e.type,(e,t)=>{var n=HR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).type)&&(n.value=(n.__value=R(t).type)??``)}),V(e,n)}),D(r);var i;Hi(r),L(()=>{r.disabled=R(n),i!==(i=jR.form.type)&&(r.value=(r.__value=jR.form.type)??``,Vi(r,jR.form.type))}),z(`change`,r,e=>jR.changeType(e.currentTarget.value)),V(e,r)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=WR();ea(r),L(()=>K(r,`data-modal-autofocus`,R(n)?!0:void 0)),la(r,()=>jR.form.description,e=>jR.form.description=e),V(e,r)},$$slots:{default:!0}});var s=I(o,2),c=P(s);iC(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{V(e,GR())},$$slots:{title:!0}});var l=I(c,2);ea(l),D(s),W(I(s,2),17,()=>jR.typeFields(jR.form.type),e=>e.key,(e,t)=>{var n=Xr(),r=F(n),i=e=>{var n=XR(),r=P(n);{let e=e=>{var n=KR(),r=P(n,!0);D(n),L(()=>{K(n,`for`,`guardrail-field-`+R(t).key),H(r,R(t).label)}),V(e,n)},n=A(()=>`guardrail-field-help-`+R(t).key),i=A(()=>R(t).label+` help`),a=A(()=>R(t).help||``);iC(r,{get copyId(){return R(n)},get label(){return R(i)},get text(){return R(a)},title:e,$$slots:{title:!0}})}var i=I(r,2),a=e=>{var n=qR();W(n,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=HR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(n);var r;Hi(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Vi(n,e))},[()=>jR.fieldValue(R(t))]),z(`change`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},o=e=>{var n=JR();ut(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>jR.fieldValue(R(t))]),z(`input`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},s=e=>{var n=YR();ea(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`type`,R(t).input||`text`),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>jR.fieldValue(R(t))]),z(`input`,n,e=>jR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)};U(i,e=>{R(t).input===`select`?e(a):R(t).input===`textarea`?e(o,1):e(s,-1)}),D(n),V(e,n)},a=e=>{var n=$R(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).options||[],e=>R(t).key+`-`+e.value,(e,n)=>{var r=ZR(),i=P(r);ea(i);var a=I(i,2),o=P(a,!0);D(a),D(r),L(e=>{na(i,e),H(o,R(n).label)},[()=>jR.arrayFieldSelected(R(t),R(n).value)]),z(`change`,i,e=>jR.toggleArrayFieldValue(R(t),R(n).value,e.currentTarget.checked)),V(e,r)}),D(a);var o=I(a,2),s=e=>{var n=QR(),r=P(n,!0);D(n),L(()=>{K(n,`id`,`guardrail-field-help-`+R(t).key),H(r,R(t).help)}),V(e,n)};U(o,e=>{R(t).help&&e(s)}),D(n),L(()=>{K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),H(i,R(t).label)}),V(e,n)};U(r,e=>{R(t).input===`checkboxes`?e(a,-1):e(i)}),V(e,n)}),D(r),la(l,()=>jR.form.user_path,e=>jR.form.user_path=e),V(e,r)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var nz=B(`

            Guardrails

            `),rz=B(`
            Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage - definitions here.
            `),iz=B(`
            Guardrails feature is unavailable.
            `),az=B(`
            `),oz=B(`

            Reusable Policy Objects

            Guardrail Library

            Store guardrails in the database, keep them hot in memory, and attach - them to workflows by reference.

            Instances
            Types
            `);function sz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`guardrails`&&(ks.ensureLoaded(),jR.fetchPage())});var n=oz(),r=P(n),i=P(r);iC(P(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{V(e,nz())},$$slots:{title:!0}}),D(i),D(r);var a=I(r,2),o=I(P(a),2),s=P(o),c=I(P(s),2),l=P(c,!0);D(c),D(s);var u=I(s,2),d=I(P(u),2),f=P(d,!0);D(d),D(u),D(o),D(a);var p=I(a,2);Kc(p,{});var m=I(p,2),h=e=>{V(e,rz())},g=A(()=>!ks.guardrailsVisible());U(m,e=>{R(g)&&e(h)});var _=I(m,2),v=e=>{V(e,iz())};U(_,e=>{!Y.authError&&!jR.available&&e(v)});var y=I(_,2),b=e=>{var t=az(),n=P(t,!0);D(t),L(()=>H(n,jR.error)),V(e,t)};U(y,e=>{!Y.authError&&jR.error&&!jR.formOpen&&e(b)});var x=I(y,2);tz(x,{}),zR(I(x,2),{}),D(n),L((e,t)=>{H(l,e),H(f,t)},[()=>_c(jR.guardrails.length),()=>_c(jR.types.length)]),V(e,n),k()}var $=new class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get slugEdited(){return R(this.#c)}set slugEdited(e){M(this.#c,e,!0)}#l=j(!1);get advancedOpen(){return R(this.#l)}set advancedOpen(e){M(this.#l,e,!0)}#u=j(N(Sx()));get form(){return R(this.#u)}set form(e){M(this.#u,e,!0)}#d=j(``);get deletingName(){return R(this.#d)}set deletingName(e){M(this.#d,e,!0)}#f=j(``);get reconnectingName(){return R(this.#f)}set reconnectingName(e){M(this.#f,e,!0)}#p=j(!1);get catalogOpen(){return R(this.#p)}set catalogOpen(e){M(this.#p,e,!0)}#m=j(!1);get catalogLoading(){return R(this.#m)}set catalogLoading(e){M(this.#m,e,!0)}#h=j(``);get catalogError(){return R(this.#h)}set catalogError(e){M(this.#h,e,!0)}#g=j(N(Cx()));get catalog(){return R(this.#g)}set catalog(e){M(this.#g,e,!0)}#_=A(()=>Px(this.servers,this.filter));get filtered(){return R(this.#_)}set filtered(e){M(this.#_,e)}async fetchServers(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await kT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Fx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=Ax(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Ix(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}let r=e.result.data,i=Tx(r);i===`connected`?lc.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?lc.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):lc.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>wx(e)===wx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...Cx(),server:n,status:Tx(e)};try{let e=await ws(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:ys(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Lx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=Cx()}},cz=B(``),lz=B(`

            `),uz=B(`
            `),dz=B(`

            `),fz=B(`
          • `),pz=B(`

              `),mz=B(`

              No tools listed — the server may still be connecting or degraded.

              `),hz=B(` `,1),gz=B(``);function _z(e,t){O(t,!0);let n=A(()=>zx($.catalog));Hs(e,{get open(){return $.catalogOpen},variant:`editor`,onclose:()=>$.closeCatalog(),children:(e,t)=>{var r=gz(),i=P(r),a=P(i),o=I(P(a),2),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=P(l,!0);D(l),D(o),D(a),Rs(I(a,2),{label:`Close MCP server catalog`,onclick:()=>$.closeCatalog()}),D(i);var d=I(i,2),f=e=>{ET(e,{label:`Loading catalog...`})},p=e=>{var t=cz(),n=P(t,!0);D(t),L(()=>H(n,$.catalogError)),V(e,t)},m=e=>{var t=hz(),r=F(t),i=e=>{var t=lz(),n=P(t,!0);D(t),L(()=>H(n,$.catalog.instructions)),V(e,t)};U(r,e=>{$.catalog.instructions&&e(i)});var a=I(r,2);W(a,17,()=>R(n),e=>e.key,(e,t)=>{var n=pz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).items,e=>e.key,(e,t)=>{var n=fz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{var n=uz(),r=P(n,!0);D(n),L(()=>{K(n,`title`,`Exposed on the aggregated /mcp endpoint as `+R(t).aggregated),H(r,R(t).aggregated)}),V(e,n)};U(a,e=>{R(t).aggregated&&e(o)});var s=I(a,2),c=e=>{var n=dz(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(s,e=>{R(t).description&&e(c)}),D(n),L(()=>{K(r,`title`,R(t).aggregated||R(t).name),H(i,R(t).name)}),V(e,n)}),D(a),D(n),L(()=>H(i,R(t).title)),V(e,n)});var o=I(a,2),s=e=>{V(e,mz())},c=A(()=>Bx($.catalog));U(o,e=>{R(c)&&e(s)}),V(e,t)};U(d,e=>{$.catalogLoading?e(f):$.catalogError?e(p,1):e(m,-1)});var h=I(d,2),g=P(h);D(h),D(r),L((e,t)=>{H(c,$.catalog.server),G(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),H(u,t)},[()=>Ex($.catalog),()=>Tx($.catalog)]),z(`click`,g,()=>$.closeCatalog()),V(e,r)},$$slots:{default:!0}}),k()}Br([`click`]);var vz=B(`

              The display name can change. The slug is the stable client-facing identity.

              `),yz=B(` Human-readable and Unicode-friendly. You can change it later.`,1),bz=B(`Derived from the name. You may edit it before saving.`),xz=B(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),Sz=B(` `,1),Cz=B(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),wz=B(``),Tz=B(`
              `),Ez=B(`
              Headers
              Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
              Advanced settings Description, access rules, and timeout
              `,1);function Dz(e,t){O(t,!0);{let t=e=>{V(e,vz())},n=A(()=>$.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);ME(e,{get open(){return $.formOpen},get title(){return R(n)},ariaLabel:`MCP server editor`,get error(){return $.error},get submitting(){return $.formSubmitting},onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var n=Ez(),r=F(n);PE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=yz(),r=F(n);ea(r),Ve(2),z(`input`,r,()=>$.syncSlugFromName()),la(r,()=>$.form.name,e=>$.form.name=e),V(e,n)},$$slots:{default:!0}});var i=I(r,2);PE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=Sz(),r=F(n);ea(r);var i=I(r,2),a=e=>{V(e,bz())},o=e=>{V(e,xz())};U(i,e=>{$.formMode===`create`?e(a):e(o,-1)}),L(()=>r.disabled=$.formMode===`edit`),z(`input`,r,()=>$.markSlugEdited()),la(r,()=>$.form.slug,e=>$.form.slug=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=Cz(),r=F(n),i=P(r);i.value=i.__value=`http`;var a=I(i);a.value=a.__value=`sse`,D(r),Ve(2),Ui(r,()=>$.form.transport,e=>$.form.transport=e),V(e,n)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=wz();ea(n),la(n,()=>$.form.url,e=>$.form.url=e),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=I(P(s),2);W(c,21,()=>$.form.headers,ii,(e,t,n)=>{var r=Tz(),i=P(r);ea(i);var a=I(i,2);ea(a),OT(I(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeHeader(n),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),la(i,()=>R(t).name,e=>R(t).name=e),la(a,()=>R(t).value,e=>R(t).value=e),V(e,r)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l),Ve(2),D(s);var d=I(s,2),f=P(d);PA(P(f),{get enabled(){return $.form.enabled},label:`MCP server`,onclick:()=>$.form.enabled=!$.form.enabled}),D(f),D(d);var p=I(d,2),m=I(P(p),2),h=P(m),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=I(P(y),2);ea(b),D(y);var x=I(y,2),S=I(P(x),2);ut(S),K(S,`placeholder`,`/ -/team/alpha`),D(x);var C=I(x,2),w=I(P(C),2);ea(w),D(C),D(m),D(p),L(()=>p.open=$.advancedOpen),z(`click`,u,()=>$.addHeader()),zr(`toggle`,p,e=>$.advancedOpen=e.currentTarget.open),la(g,()=>$.form.description,e=>$.form.description=e),la(v,()=>$.form.allowed_tools,e=>$.form.allowed_tools=e),la(b,()=>$.form.disallowed_tools,e=>$.form.disallowed_tools=e),la(S,()=>$.form.user_paths,e=>$.form.user_paths=e),la(w,()=>$.form.tool_timeout_seconds,e=>$.form.tool_timeout_seconds=e),V(e,n)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`input`,`click`]);var Oz=B(`Config`),kz=B(`
              `),Az=B(`
              `),jz=B(`
              NameTransportEndpointStatusToolsEnabledActions
              `);function Mz(e,t){O(t,!0);function n(e){return Dx(e,e=>vs.formatTimestamp(e))}var r=jz(),i=P(r),a=I(P(i));W(a,21,()=>$.filtered,e=>wx(e),(e,t)=>{var r=Az(),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=e=>{V(e,Oz())};U(s,e=>{R(t).managed&&e(c)});var l=I(s,2),u=P(l,!0);D(l),D(i);var d=I(i),f=P(d),p=P(f,!0);D(f),D(d);var m=I(d),h=P(m,!0);D(m);var g=I(m),_=P(g),v=P(_,!0);D(_);var y=I(_,2),b=e=>{var n=kz(),r=P(n,!0);D(n),L(()=>H(r,R(t).last_error)),V(e,n)},x=A(()=>Tx(R(t))===`degraded`&&R(t).last_error);U(y,e=>{R(x)&&e(b)}),D(g);var S=I(g),C=P(S),w=P(C,!0);D(C);var T=I(C,2),E=P(T,!0);D(T),D(S);var ee=I(S),te=P(ee),ne=P(te,!0);D(te),D(ee);var re=I(ee),ie=P(re),ae=P(ie),oe=e=>{{let n=A(()=>`Edit MCP server `+R(t).name);OT(e,{get label(){return R(n)},class:`table-icon-btn`,onclick:()=>$.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(ae,e=>{R(t).managed||e(oe)});var se=I(ae,2);{let e=A(()=>`Inspect catalog of MCP server `+R(t).name);OT(se,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.openCatalog(R(t)),children:(e,t)=>{J(e,{get icon(){return ro},class:`form-action-icon`})},$$slots:{default:!0}})}var ce=I(se,2);{let e=A(()=>($.reconnectingName===wx(R(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+R(t).name),n=A(()=>$.reconnectingName===wx(R(t)));OT(ce,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.reconnectServer(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var le=I(ce,2),ue=e=>{{let n=A(()=>($.deletingName===wx(R(t))?`Deleting MCP server `:`Delete MCP server `)+R(t).name),r=A(()=>$.deletingName===wx(R(t)));OT(e,{get label(){return R(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.deleteServer(R(t)),get disabled(){return R(r)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(le,e=>{R(t).managed||e(ue)}),D(ie),D(re),D(r),L((e,n,r,i,a,s,c,l)=>{H(o,R(t).name),H(u,e),H(p,R(t).transport||`http`),K(m,`title`,n),H(h,r),G(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),K(_,`title`,a),H(v,s),H(w,c),H(E,l),G(te,1,Ni([`auth-key-status-badge`,R(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),H(ne,R(t).enabled?`Enabled`:`Disabled`)},[()=>wx(R(t)),()=>Ox(R(t)),()=>Ox(R(t)),()=>Ex(R(t)),()=>n(R(t)),()=>Tx(R(t)),()=>_c(R(t).tool_count||0),()=>kx(R(t))]),V(e,r)}),D(a),D(i),D(r),V(e,r),k()}var Nz=B(`

              MCP Servers

              `),Pz=B(``),Fz=B(`
              MCP server management is unavailable.
              `),Iz=B(``),Lz=B(`
              `),Rz=B(`

              No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

              `),zz=B(`

              No MCP servers match your filter.

              `),Bz=B(`
              `);function Vz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`mcp-servers`&&$.fetchServers()});var n=Bz(),r=P(n),i=P(r);iC(P(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{V(e,Nz())},$$slots:{title:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=Pz();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=$.formSubmitting),z(`click`,t,()=>$.openCreate()),V(e,t)};U(o,e=>{$.available&&!Y.authError&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,Fz())};U(c,e=>{!$.available&&!Y.authError&&e(l)});var u=I(c,2),d=e=>{var t=Iz(),n=P(t,!0);D(t),L(()=>H(n,$.error)),V(e,t)};U(u,e=>{$.error&&!Y.authError&&!$.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading MCP servers...`})};U(f,e=>{$.loading&&!Y.authError&&e(p)});var m=I(f,2),h=e=>{var t=Lz(),n=P(t);jw(P(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return $.filter},set value(e){$.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{($.servers.length>0||$.filter)&&$.available&&!Y.authError&&e(h)});var g=I(m,2);Dz(g,{});var _=I(g,2);_z(_,{});var v=I(_,2),y=e=>{Mz(e,{})};U(v,e=>{$.filtered.length>0&&$.available&&!Y.authError&&e(y)});var b=I(v,2),x=e=>{V(e,Rz())};U(b,e=>{$.servers.length===0&&!$.filter&&!$.loading&&!Y.authError&&!$.error&&$.available&&e(x)});var S=I(b,2),C=e=>{V(e,zz())};U(S,e=>{$.servers.length>0&&$.filtered.length===0&&$.filter&&!$.loading&&!Y.authError&&$.available&&e(C)}),D(n),V(e,n),k()}Br([`click`]);var Hz=`api_keys`,Uz=`session_sticky_keys`,Wz=`base_url`,Gz=`service_account_json`,Kz=`models`,qz={[Hz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[Uz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[Wz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[Gz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[Kz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function Jz(e){return qz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Yz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Xz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Zz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function Qz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function $z(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(qz).map(e=>({name:e,advanced:e!==Hz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...Jz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var eB=new Set([`name`,`type`,`enabled`]);function tB(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Yz(),i={...e};for(let e of Object.keys(r))!eB.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function nB(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function rB(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function iB(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function aB(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function oB(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function sB(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:iB(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function cB(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function lB(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=$z(r);for(let t of[...o,...s]){let n=uB(e,t);n&&(i[t.name]=n)}return i}function uB(e,t){if(t.name===`api_keys`){let n=aB(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!cB(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function dB(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=$z(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=fB(e,t.name));for(let t of Object.keys(qz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=fB(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function fB(e,t){switch(t){case Hz:return aB(e&&e.api_keys);case Kz:return hc(e&&e.models);case Uz:return!!(e&&e.session_sticky_keys);case Gz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var pB=new class{#e=j(N([]));get rows(){return R(this.#e)}set rows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get advancedOpen(){return R(this.#c)}set advancedOpen(e){M(this.#c,e,!0)}#l=j(N(Yz()));get form(){return R(this.#l)}set form(e){M(this.#l,e,!0)}#u=j(N({}));get fieldErrors(){return R(this.#u)}set fieldErrors(e){M(this.#u,e,!0)}#d=j(``);get focusField(){return R(this.#d)}set focusField(e){M(this.#d,e,!0)}#f=j(``);get deletingName(){return R(this.#f)}set deletingName(e){M(this.#f,e,!0)}#p=j(!1);get deleteSubmitting(){return R(this.#p)}set deleteSubmitting(e){M(this.#p,e,!0)}#m=j(N([]));get types(){return R(this.#m)}set types(e){M(this.#m,e,!0)}#h=j(!1);get typesLoaded(){return R(this.#h)}set typesLoaded(e){M(this.#h,e,!0)}#g=null;get filteredRows(){return Xz(this.rows,this.filter)}get schema(){return Qz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return $z(e,e&&e.default_base_url)}async fetchTypes(){let e=await kT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await kT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,Yz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,sB(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Yz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=tB(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=ys(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Wc.fetchModels(),Wc.fetchCategories()}async submitForm(){let e=this.schema,t=lB(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=dB(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await AT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}lc.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await AT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Js.error=t.error;return}if(t.status===`error`){Js.error=t.error;return}lc.success(`Provider "`+e+`" deleted.`),Js.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Js.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},mB=B(`Config`),hB=B(` `,1),gB=B(`
              `),_B=B(`
              NameTypeBase URLAuthModelsEnabledUpdatedActions
              `);function vB(e,t){O(t,!0);var n=_B(),r=P(n),i=I(P(r));W(i,21,()=>pB.filteredRows,e=>e.name,(e,t)=>{var n=gB(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=e=>{V(e,mB())};U(o,e=>{R(t).managed&&e(s)}),D(r);var c=I(r),l=P(c),u=P(l,!0);D(l),D(c);var d=I(c),f=P(d,!0);D(d);var p=I(d),m=P(p,!0);D(p);var h=I(p),g=P(h,!0);D(h);var _=I(h),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x,!0);D(x);var C=I(x),w=P(C),T=P(w),E=e=>{var n=hB(),r=F(n);{let e=A(()=>`Edit provider `+R(t).name);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pB.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>(pB.deletingName===R(t).name?`Deleting provider `:`Delete provider `)+R(t).name),n=A(()=>pB.deletingName===R(t).name);OT(i,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>pB.requestDelete(R(t).name),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)};U(T,e=>{R(t).managed||e(E)}),D(w),D(C),D(n),L((e,n,r)=>{H(a,R(t).name),H(u,R(t).type),K(d,`title`,R(t).base_url||``),H(f,R(t).base_url||`—`),H(m,e),H(g,n),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).enabled,"auth-key-status-inactive":!R(t).enabled}),H(b,R(t).enabled?`Enabled`:`Disabled`),H(S,r)},[()=>nB(R(t)),()=>rB(R(t)),()=>vs.formatTimestamp(R(t).updated_at)]),V(e,n)}),D(i),D(r),D(n),V(e,n),k()}var yB=B(``),bB=B(`
              `),xB=B(`
              `,1),SB=B(``),CB=B(``),wB=B(``),TB=B(``),EB=B(``),DB=B(` `),OB=B(` `),kB=B(`
              `);function AB(e,t){O(t,!0);let n=A(()=>`provider-credential-`+t.field.name),r=A(()=>pB.fieldErrors[t.field.name]||``),i=A(()=>R(r)?R(n)+`-error`:t.field.hint?R(n)+`-hint`:void 0),a=A(()=>{let e=String(pB.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){pB.clearFieldError(t.field.name)}var s=kB(),c=P(s),l=P(c),u=I(l),d=e=>{V(e,yB())};U(u,e=>{t.field.required&&e(d)}),D(c);var f=I(c,2),p=e=>{var t=xB(),a=F(t);W(a,21,()=>pB.form.api_keys,ii,(e,t,a)=>{var s=bB(),c=P(s);ea(c),K(c,`aria-label`,`API key `+(a+1)),OT(I(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>pB.removeApiKeyRow(a),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(s),L(()=>{K(c,`id`,a===0?R(n):R(n)+`-`+a),K(c,`aria-invalid`,R(r)?`true`:void 0),K(c,`aria-describedby`,a===0?R(i):void 0)}),z(`input`,c,o),la(c,()=>R(t).value,e=>R(t).value=e),V(e,s)}),D(a);var s=I(a,2),c=P(s);J(P(c),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(c),D(s),L(()=>K(c,`id`,pB.form.api_keys.length===0?R(n):void 0)),z(`click`,c,()=>pB.addApiKeyRow()),V(e,t)},m=e=>{var s=CB(),c=P(s);c.value=c.__value=``,W(I(c),16,()=>R(a),e=>e,(e,t)=>{var n=SB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(s),L(()=>{K(s,`id`,R(n)),K(s,`aria-invalid`,R(r)?`true`:void 0),K(s,`aria-describedby`,R(i))}),z(`change`,s,o),Ui(s,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,s)},h=e=>{var a=wB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`change`,a,o),ua(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)},g=e=>{var a=TB();ut(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)},_=e=>{var a=EB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>pB.form[t.field.name],e=>pB.form[t.field.name]=e),V(e,a)};U(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=I(f,2),y=e=>{var t=DB(),i=P(t,!0);D(t),L(()=>{K(t,`id`,R(n)+`-error`),H(i,R(r))}),V(e,t)},b=e=>{var r=OB(),i=P(r,!0);D(r),L(()=>{K(r,`id`,R(n)+`-hint`),H(i,t.field.hint)}),V(e,r)};U(v,e=>{R(r)?e(y):t.field.hint&&e(b,1)}),D(s),L(()=>{K(c,`for`,R(n)),H(l,`${t.field.label??``} `)}),V(e,s),k()}Br([`input`,`click`,`change`]);var jB=B(`

              The name is the stable identity used for routing and cannot change once created.

              `),MB=B(``),NB=B(` `),PB=B(`Determines which fields the gateway uses to build requests.`),FB=B(` `),IB=B(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),LB=B(`Immutable once created.`),RB=B(`

              Pick a type to configure its credentials — each provider type asks for different settings.

              `),zB=B(`
              Advanced settings
              `),BB=B(`
              `,1);function VB(e,t){O(t,!0);let n=A(()=>Zz(pB.types,pB.form.type)),r=A(()=>pB.formFields),i=A(()=>pB.fieldErrors.name||``),a=A(()=>pB.fieldErrors.type||``);function o(){pB.selectType(),pB.formMode===`create`&&(pB.form.name=oB(pB.rows,pB.form.type))}On(()=>{let e=pB.focusField;if(!e)return;pB.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{V(e,jB())},s=A(()=>pB.formMode===`edit`?`Edit Provider`:`Add Provider`);ME(e,{get open(){return pB.formOpen},get title(){return R(s)},ariaLabel:`Provider credential editor`,get error(){return pB.error},get submitting(){return pB.formSubmitting},novalidate:!0,onclose:()=>pB.closeForm(),onsubmit:()=>pB.submitForm(),headerHint:t,children:(e,t)=>{var s=BB(),c=F(s),l=I(P(c),2),u=P(l);u.value=u.__value=``,W(I(u),16,()=>R(n),e=>e,(e,t)=>{var n=MB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(l);var d=I(l,2),f=e=>{var t=NB(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)},p=e=>{V(e,PB())};U(d,e=>{R(a)?e(f):e(p,-1)}),D(c);var m=I(c,2),h=I(P(m),2);ea(h);var g=I(h,2),_=e=>{var t=FB(),n=P(t,!0);D(t),L(()=>H(n,R(i))),V(e,t)},v=e=>{V(e,IB())},y=e=>{V(e,LB())};U(g,e=>{R(i)?e(_):pB.formMode===`create`?e(v,1):e(y,-1)}),D(m);var b=I(m,2),x=e=>{V(e,RB())};U(b,e=>{pB.form.type||e(x)});var S=I(b,2);W(S,17,()=>R(r).primary,e=>e.name,(e,t)=>{AB(e,{get field(){return R(t)}})});var C=I(S,2),w=P(C);PA(P(w),{get enabled(){return pB.form.enabled},label:`provider`,onclick:()=>pB.form.enabled=!pB.form.enabled}),D(w),D(C);var T=I(C,2),E=e=>{var t=zB(),n=P(t),i=P(n),a=I(P(i),2),o=P(a,!0);D(a),D(i),D(n);var s=I(n,2);W(s,21,()=>R(r).advanced,e=>e.name,(e,t)=>{AB(e,{get field(){return R(t)}})}),D(s),D(t),L(e=>{t.open=pB.advancedOpen,H(o,e)},[()=>R(r).advanced.map(e=>e.label).join(`, `)]),zr(`toggle`,t,e=>pB.advancedOpen=e.currentTarget.open),V(e,t)};U(T,e=>{R(r).advanced.length>0&&e(E)}),L(()=>{l.disabled=pB.formMode===`edit`,K(l,`aria-invalid`,R(a)?`true`:void 0),K(l,`aria-describedby`,R(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=pB.formMode===`edit`,K(h,`aria-invalid`,R(i)?`true`:void 0),K(h,`aria-describedby`,R(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),z(`change`,l,o),Ui(l,()=>pB.form.type,e=>pB.form.type=e),z(`input`,h,()=>pB.clearFieldError(`name`)),la(h,()=>pB.form.name,e=>pB.form.name=e),V(e,s)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var HB=B(`

              Providers

              `),UB=B(``),WB=B(`
              Provider credential management is unavailable.
              `),GB=B(``),KB=B(`
              `),qB=B(`

              No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

              `),JB=B(`

              No providers match your filter.

              `),YB=B(`
              `);function XB(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`providers-config`&&pB.fetchPage()});var n=YB(),r=P(n),i=P(r);iC(P(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{V(e,HB())},help:e=>{Ve(),V(e,Yr(`Configure LLM provider credentials here instead of setting API keys as + that type.

              `);function RR(e,t){O(t,!0);var n=LR(),r=P(n),i=I(P(r),2);J(P(i),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(i),D(r);var a=I(r,2),o=e=>{var t=jR(),n=P(t);jw(P(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return AR.filter},set value(e){AR.filter=e}}),D(n),D(t),V(e,t)};U(a,e=>{AR.available&&e(o)});var s=I(a,2),c=e=>{var t=MR();NS(P(t),{size:16,label:`Loading guardrails`}),Ve(),D(t),V(e,t)};U(s,e=>{AR.loading&&AR.filtered.length===0&&e(c)});var l=I(s,2),u=e=>{var t=FR(),n=P(t),r=I(P(n));W(r,21,()=>AR.filtered,e=>e.name,(e,t)=>{var n=PR(),r=P(n),i=P(r,!0);D(r);var a=I(r),o=P(a),s=P(o,!0);D(o),D(a);var c=I(a),l=P(c,!0);D(c);var u=I(c),d=P(u),f=P(d,!0);D(d);var p=I(d,2),m=e=>{var n=NR(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(p,e=>{R(t).description&&e(m)}),D(u);var h=I(u),g=P(h),_=P(g);{let e=A(()=>`Edit guardrail `+R(t).name);OT(_,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>AR.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=I(_,2);{let e=A(()=>(AR.deletingName===R(t).name?`Deleting guardrail `:`Delete guardrail `)+R(t).name),n=A(()=>AR.deletingName===R(t).name);OT(v,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>AR.deleteGuardrail(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}D(g),D(h),D(n),L(e=>{H(i,R(t).name),H(s,e),H(l,R(t).user_path||`—`),H(f,R(t).summary||R(t).description||`No summary yet.`)},[()=>AR.typeLabel(R(t).type)]),V(e,n)}),D(r),D(n),D(t),V(e,t)};U(l,e=>{AR.filtered.length>0&&e(u)});var d=I(l,2),f=e=>{V(e,IR())};U(d,e=>{AR.filtered.length===0&&!AR.loading&&AR.available&&!AR.error&&!Y.authError&&e(f)}),D(n),L(()=>i.disabled=AR.typesLoading||AR.formSubmitting||!AR.available),z(`click`,i,()=>AR.openCreate()),V(e,n),k()}Br([`click`]);var zR=B(`

              Workflows reference these names directly, so renames are + intentionally avoided after creation.

              `),BR=B(``),VR=B(``),HR=B(``),UR=B(``),WR=B(``),GR=B(``),KR=B(``),qR=B(``),JR=B(``),YR=B(`
              `),XR=B(``),ZR=B(` `),QR=B(`
              `),$R=B(`
              `);function ez(e,t){O(t,!0);let n=A(()=>AR.formMode===`edit`);{let t=e=>{V(e,zR())},r=A(()=>R(n)?`Edit Guardrail`:`Create Guardrail`);ME(e,{get open(){return AR.formOpen},get title(){return R(r)},ariaLabel:`Guardrail editor`,get error(){return AR.error},get submitting(){return AR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>AR.closeForm(),onsubmit:()=>AR.submitForm(),headerHint:t,children:(e,t)=>{var r=$R(),i=P(r);PE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=BR();ea(r),L(()=>{r.disabled=R(n),K(r,`data-modal-autofocus`,!R(n)||void 0)}),la(r,()=>AR.form.name,e=>AR.form.name=e),V(e,r)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=HR();W(r,21,()=>AR.types,e=>e.type,(e,t)=>{var n=VR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).type)&&(n.value=(n.__value=R(t).type)??``)}),V(e,n)}),D(r);var i;Hi(r),L(()=>{r.disabled=R(n),i!==(i=AR.form.type)&&(r.value=(r.__value=AR.form.type)??``,Vi(r,AR.form.type))}),z(`change`,r,e=>AR.changeType(e.currentTarget.value)),V(e,r)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=UR();ea(r),L(()=>K(r,`data-modal-autofocus`,R(n)?!0:void 0)),la(r,()=>AR.form.description,e=>AR.form.description=e),V(e,r)},$$slots:{default:!0}});var s=I(o,2),c=P(s);iC(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{V(e,WR())},$$slots:{title:!0}});var l=I(c,2);ea(l),D(s),W(I(s,2),17,()=>AR.typeFields(AR.form.type),e=>e.key,(e,t)=>{var n=Xr(),r=F(n),i=e=>{var n=YR(),r=P(n);{let e=e=>{var n=GR(),r=P(n,!0);D(n),L(()=>{K(n,`for`,`guardrail-field-`+R(t).key),H(r,R(t).label)}),V(e,n)},n=A(()=>`guardrail-field-help-`+R(t).key),i=A(()=>R(t).label+` help`),a=A(()=>R(t).help||``);iC(r,{get copyId(){return R(n)},get label(){return R(i)},get text(){return R(a)},title:e,$$slots:{title:!0}})}var i=I(r,2),a=e=>{var n=KR();W(n,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=VR(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(n);var r;Hi(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Vi(n,e))},[()=>AR.fieldValue(R(t))]),z(`change`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},o=e=>{var n=qR();ut(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>AR.fieldValue(R(t))]),z(`input`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)},s=e=>{var n=JR();ea(n),L(e=>{K(n,`id`,`guardrail-field-`+R(t).key),K(n,`type`,R(t).input||`text`),K(n,`placeholder`,R(t).placeholder||``),ta(n,e),K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0)},[()=>AR.fieldValue(R(t))]),z(`input`,n,e=>AR.setFieldValue(R(t),e.currentTarget.value)),V(e,n)};U(i,e=>{R(t).input===`select`?e(a):R(t).input===`textarea`?e(o,1):e(s,-1)}),D(n),V(e,n)},a=e=>{var n=QR(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).options||[],e=>R(t).key+`-`+e.value,(e,n)=>{var r=XR(),i=P(r);ea(i);var a=I(i,2),o=P(a,!0);D(a),D(r),L(e=>{na(i,e),H(o,R(n).label)},[()=>AR.arrayFieldSelected(R(t),R(n).value)]),z(`change`,i,e=>AR.toggleArrayFieldValue(R(t),R(n).value,e.currentTarget.checked)),V(e,r)}),D(a);var o=I(a,2),s=e=>{var n=ZR(),r=P(n,!0);D(n),L(()=>{K(n,`id`,`guardrail-field-help-`+R(t).key),H(r,R(t).help)}),V(e,n)};U(o,e=>{R(t).help&&e(s)}),D(n),L(()=>{K(n,`aria-describedby`,R(t).help?`guardrail-field-help-`+R(t).key:void 0),H(i,R(t).label)}),V(e,n)};U(r,e=>{R(t).input===`checkboxes`?e(a,-1):e(i)}),V(e,n)}),D(r),la(l,()=>AR.form.user_path,e=>AR.form.user_path=e),V(e,r)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var tz=B(`

              Guardrails

              `),nz=B(`
              Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage + definitions here.
              `),rz=B(`
              Guardrails feature is unavailable.
              `),iz=B(`
              `),az=B(`

              Reusable Policy Objects

              Guardrail Library

              Store guardrails in the database, keep them hot in memory, and attach + them to workflows by reference.

              Instances
              Types
              `);function oz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`guardrails`&&(ks.ensureLoaded(),AR.fetchPage())});var n=az(),r=P(n),i=P(r);iC(P(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{V(e,tz())},$$slots:{title:!0}}),D(i),D(r);var a=I(r,2),o=I(P(a),2),s=P(o),c=I(P(s),2),l=P(c,!0);D(c),D(s);var u=I(s,2),d=I(P(u),2),f=P(d,!0);D(d),D(u),D(o),D(a);var p=I(a,2);Kc(p,{});var m=I(p,2),h=e=>{V(e,nz())},g=A(()=>!ks.guardrailsVisible());U(m,e=>{R(g)&&e(h)});var _=I(m,2),v=e=>{V(e,rz())};U(_,e=>{!Y.authError&&!AR.available&&e(v)});var y=I(_,2),b=e=>{var t=iz(),n=P(t,!0);D(t),L(()=>H(n,AR.error)),V(e,t)};U(y,e=>{!Y.authError&&AR.error&&!AR.formOpen&&e(b)});var x=I(y,2);ez(x,{}),RR(I(x,2),{}),D(n),L((e,t)=>{H(l,e),H(f,t)},[()=>_c(AR.guardrails.length),()=>_c(AR.types.length)]),V(e,n),k()}var $=new class{#e=j(N([]));get servers(){return R(this.#e)}set servers(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get slugEdited(){return R(this.#c)}set slugEdited(e){M(this.#c,e,!0)}#l=j(!1);get advancedOpen(){return R(this.#l)}set advancedOpen(e){M(this.#l,e,!0)}#u=j(N(Sx()));get form(){return R(this.#u)}set form(e){M(this.#u,e,!0)}#d=j(``);get deletingName(){return R(this.#d)}set deletingName(e){M(this.#d,e,!0)}#f=j(``);get reconnectingName(){return R(this.#f)}set reconnectingName(e){M(this.#f,e,!0)}#p=j(!1);get catalogOpen(){return R(this.#p)}set catalogOpen(e){M(this.#p,e,!0)}#m=j(!1);get catalogLoading(){return R(this.#m)}set catalogLoading(e){M(this.#m,e,!0)}#h=j(``);get catalogError(){return R(this.#h)}set catalogError(e){M(this.#h,e,!0)}#g=j(N(Cx()));get catalog(){return R(this.#g)}set catalog(e){M(this.#g,e,!0)}#_=A(()=>Px(this.servers,this.filter));get filtered(){return R(this.#_)}set filtered(e){M(this.#_,e)}async fetchServers(){if(await ks.ensureLoaded(),!ks.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await kT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Fx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=Sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=Ax(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Ix(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}lc.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}lc.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await AT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,lc.error(e.error);return}if(e.status===`error`){lc.error(e.error);return}let r=e.result.data,i=Tx(r);i===`connected`?lc.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?lc.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):lc.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>wx(e)===wx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...Cx(),server:n,status:Tx(e)};try{let e=await ws(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:ys(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Lx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=Cx()}},sz=B(``),cz=B(`

              `),lz=B(`
              `),uz=B(`

              `),dz=B(`
            • `),fz=B(`

                `),pz=B(`

                No tools listed — the server may still be connecting or degraded.

                `),mz=B(` `,1),hz=B(``);function gz(e,t){O(t,!0);let n=A(()=>zx($.catalog));Hs(e,{get open(){return $.catalogOpen},variant:`editor`,onclose:()=>$.closeCatalog(),children:(e,t)=>{var r=hz(),i=P(r),a=P(i),o=I(P(a),2),s=P(o),c=P(s,!0);D(s);var l=I(s,2),u=P(l,!0);D(l),D(o),D(a),Rs(I(a,2),{label:`Close MCP server catalog`,onclick:()=>$.closeCatalog()}),D(i);var d=I(i,2),f=e=>{ET(e,{label:`Loading catalog...`})},p=e=>{var t=sz(),n=P(t,!0);D(t),L(()=>H(n,$.catalogError)),V(e,t)},m=e=>{var t=mz(),r=F(t),i=e=>{var t=cz(),n=P(t,!0);D(t),L(()=>H(n,$.catalog.instructions)),V(e,t)};U(r,e=>{$.catalog.instructions&&e(i)});var a=I(r,2);W(a,17,()=>R(n),e=>e.key,(e,t)=>{var n=fz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2);W(a,21,()=>R(t).items,e=>e.key,(e,t)=>{var n=dz(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{var n=lz(),r=P(n,!0);D(n),L(()=>{K(n,`title`,`Exposed on the aggregated /mcp endpoint as `+R(t).aggregated),H(r,R(t).aggregated)}),V(e,n)};U(a,e=>{R(t).aggregated&&e(o)});var s=I(a,2),c=e=>{var n=uz(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(s,e=>{R(t).description&&e(c)}),D(n),L(()=>{K(r,`title`,R(t).aggregated||R(t).name),H(i,R(t).name)}),V(e,n)}),D(a),D(n),L(()=>H(i,R(t).title)),V(e,n)});var o=I(a,2),s=e=>{V(e,pz())},c=A(()=>Bx($.catalog));U(o,e=>{R(c)&&e(s)}),V(e,t)};U(d,e=>{$.catalogLoading?e(f):$.catalogError?e(p,1):e(m,-1)});var h=I(d,2),g=P(h);D(h),D(r),L((e,t)=>{H(c,$.catalog.server),G(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),H(u,t)},[()=>Ex($.catalog),()=>Tx($.catalog)]),z(`click`,g,()=>$.closeCatalog()),V(e,r)},$$slots:{default:!0}}),k()}Br([`click`]);var _z=B(`

                The display name can change. The slug is the stable client-facing identity.

                `),vz=B(` Human-readable and Unicode-friendly. You can change it later.`,1),yz=B(`Derived from the name. You may edit it before saving.`),bz=B(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),xz=B(` `,1),Sz=B(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),Cz=B(``),wz=B(`
                `),Tz=B(`
                Headers
                Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
                Advanced settings Description, access rules, and timeout
                `,1);function Ez(e,t){O(t,!0);{let t=e=>{V(e,_z())},n=A(()=>$.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);ME(e,{get open(){return $.formOpen},get title(){return R(n)},ariaLabel:`MCP server editor`,get error(){return $.error},get submitting(){return $.formSubmitting},onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var n=Tz(),r=F(n);PE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=vz(),r=F(n);ea(r),Ve(2),z(`input`,r,()=>$.syncSlugFromName()),la(r,()=>$.form.name,e=>$.form.name=e),V(e,n)},$$slots:{default:!0}});var i=I(r,2);PE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=xz(),r=F(n);ea(r);var i=I(r,2),a=e=>{V(e,yz())},o=e=>{V(e,bz())};U(i,e=>{$.formMode===`create`?e(a):e(o,-1)}),L(()=>r.disabled=$.formMode===`edit`),z(`input`,r,()=>$.markSlugEdited()),la(r,()=>$.form.slug,e=>$.form.slug=e),V(e,n)},$$slots:{default:!0}});var a=I(i,2);PE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=Sz(),r=F(n),i=P(r);i.value=i.__value=`http`;var a=I(i);a.value=a.__value=`sse`,D(r),Ve(2),Ui(r,()=>$.form.transport,e=>$.form.transport=e),V(e,n)},$$slots:{default:!0}});var o=I(a,2);PE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=Cz();ea(n),la(n,()=>$.form.url,e=>$.form.url=e),V(e,n)},$$slots:{default:!0}});var s=I(o,2),c=I(P(s),2);W(c,21,()=>$.form.headers,ii,(e,t,n)=>{var r=wz(),i=P(r);ea(i);var a=I(i,2);ea(a),OT(I(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeHeader(n),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(r),la(i,()=>R(t).name,e=>R(t).name=e),la(a,()=>R(t).value,e=>R(t).value=e),V(e,r)}),D(c);var l=I(c,2),u=P(l);J(P(u),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(u),D(l),Ve(2),D(s);var d=I(s,2),f=P(d);PA(P(f),{get enabled(){return $.form.enabled},label:`MCP server`,onclick:()=>$.form.enabled=!$.form.enabled}),D(f),D(d);var p=I(d,2),m=I(P(p),2),h=P(m),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=I(P(y),2);ea(b),D(y);var x=I(y,2),S=I(P(x),2);ut(S),K(S,`placeholder`,`/ +/team/alpha`),D(x);var C=I(x,2),w=I(P(C),2);ea(w),D(C),D(m),D(p),L(()=>p.open=$.advancedOpen),z(`click`,u,()=>$.addHeader()),zr(`toggle`,p,e=>$.advancedOpen=e.currentTarget.open),la(g,()=>$.form.description,e=>$.form.description=e),la(v,()=>$.form.allowed_tools,e=>$.form.allowed_tools=e),la(b,()=>$.form.disallowed_tools,e=>$.form.disallowed_tools=e),la(S,()=>$.form.user_paths,e=>$.form.user_paths=e),la(w,()=>$.form.tool_timeout_seconds,e=>$.form.tool_timeout_seconds=e),V(e,n)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`input`,`click`]);var Dz=B(`Config`),Oz=B(`
                `),kz=B(`
                `),Az=B(`
                NameTransportEndpointStatusToolsEnabledActions
                `);function jz(e,t){O(t,!0);function n(e){return Dx(e,e=>vs.formatTimestamp(e))}var r=Az(),i=P(r),a=I(P(i));W(a,21,()=>$.filtered,e=>wx(e),(e,t)=>{var r=kz(),i=P(r),a=P(i),o=P(a,!0);D(a);var s=I(a,2),c=e=>{V(e,Dz())};U(s,e=>{R(t).managed&&e(c)});var l=I(s,2),u=P(l,!0);D(l),D(i);var d=I(i),f=P(d),p=P(f,!0);D(f),D(d);var m=I(d),h=P(m,!0);D(m);var g=I(m),_=P(g),v=P(_,!0);D(_);var y=I(_,2),b=e=>{var n=Oz(),r=P(n,!0);D(n),L(()=>H(r,R(t).last_error)),V(e,n)},x=A(()=>Tx(R(t))===`degraded`&&R(t).last_error);U(y,e=>{R(x)&&e(b)}),D(g);var S=I(g),C=P(S),w=P(C,!0);D(C);var T=I(C,2),E=P(T,!0);D(T),D(S);var ee=I(S),te=P(ee),ne=P(te,!0);D(te),D(ee);var re=I(ee),ie=P(re),ae=P(ie),oe=e=>{{let n=A(()=>`Edit MCP server `+R(t).name);OT(e,{get label(){return R(n)},class:`table-icon-btn`,onclick:()=>$.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(ae,e=>{R(t).managed||e(oe)});var se=I(ae,2);{let e=A(()=>`Inspect catalog of MCP server `+R(t).name);OT(se,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.openCatalog(R(t)),children:(e,t)=>{J(e,{get icon(){return ro},class:`form-action-icon`})},$$slots:{default:!0}})}var ce=I(se,2);{let e=A(()=>($.reconnectingName===wx(R(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+R(t).name),n=A(()=>$.reconnectingName===wx(R(t)));OT(ce,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>$.reconnectServer(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var le=I(ce,2),ue=e=>{{let n=A(()=>($.deletingName===wx(R(t))?`Deleting MCP server `:`Delete MCP server `)+R(t).name),r=A(()=>$.deletingName===wx(R(t)));OT(e,{get label(){return R(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.deleteServer(R(t)),get disabled(){return R(r)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}};U(le,e=>{R(t).managed||e(ue)}),D(ie),D(re),D(r),L((e,n,r,i,a,s,c,l)=>{H(o,R(t).name),H(u,e),H(p,R(t).transport||`http`),K(m,`title`,n),H(h,r),G(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),K(_,`title`,a),H(v,s),H(w,c),H(E,l),G(te,1,Ni([`auth-key-status-badge`,R(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),H(ne,R(t).enabled?`Enabled`:`Disabled`)},[()=>wx(R(t)),()=>Ox(R(t)),()=>Ox(R(t)),()=>Ex(R(t)),()=>n(R(t)),()=>Tx(R(t)),()=>_c(R(t).tool_count||0),()=>kx(R(t))]),V(e,r)}),D(a),D(i),D(r),V(e,r),k()}var Mz=B(`

                MCP Servers

                `),Nz=B(``),Pz=B(`
                MCP server management is unavailable.
                `),Fz=B(``),Iz=B(`
                `),Lz=B(`

                No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

                `),Rz=B(`

                No MCP servers match your filter.

                `),zz=B(`
                `);function Bz(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`mcp-servers`&&$.fetchServers()});var n=zz(),r=P(n),i=P(r);iC(P(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{V(e,Mz())},$$slots:{title:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=Nz();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=$.formSubmitting),z(`click`,t,()=>$.openCreate()),V(e,t)};U(o,e=>{$.available&&!Y.authError&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,Pz())};U(c,e=>{!$.available&&!Y.authError&&e(l)});var u=I(c,2),d=e=>{var t=Fz(),n=P(t,!0);D(t),L(()=>H(n,$.error)),V(e,t)};U(u,e=>{$.error&&!Y.authError&&!$.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading MCP servers...`})};U(f,e=>{$.loading&&!Y.authError&&e(p)});var m=I(f,2),h=e=>{var t=Iz(),n=P(t);jw(P(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return $.filter},set value(e){$.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{($.servers.length>0||$.filter)&&$.available&&!Y.authError&&e(h)});var g=I(m,2);Ez(g,{});var _=I(g,2);gz(_,{});var v=I(_,2),y=e=>{jz(e,{})};U(v,e=>{$.filtered.length>0&&$.available&&!Y.authError&&e(y)});var b=I(v,2),x=e=>{V(e,Lz())};U(b,e=>{$.servers.length===0&&!$.filter&&!$.loading&&!Y.authError&&!$.error&&$.available&&e(x)});var S=I(b,2),C=e=>{V(e,Rz())};U(S,e=>{$.servers.length>0&&$.filtered.length===0&&$.filter&&!$.loading&&!Y.authError&&$.available&&e(C)}),D(n),V(e,n),k()}Br([`click`]);var Vz=`api_keys`,Hz=`session_sticky_keys`,Uz=`base_url`,Wz=`service_account_json`,Gz=`models`,Kz={[Vz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[Hz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[Uz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[Wz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[Gz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function qz(e){return Kz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Jz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Yz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Xz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function Zz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Qz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(Kz).map(e=>({name:e,advanced:e!==Vz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...qz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var $z=new Set([`name`,`type`,`enabled`]);function eB(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Jz(),i={...e};for(let e of Object.keys(r))!$z.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function tB(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function nB(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function rB(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function iB(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function aB(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function oB(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:rB(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function sB(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function cB(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=Qz(r);for(let t of[...o,...s]){let n=lB(e,t);n&&(i[t.name]=n)}return i}function lB(e,t){if(t.name===`api_keys`){let n=iB(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!sB(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function uB(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Qz(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=dB(e,t.name));for(let t of Object.keys(Kz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=dB(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function dB(e,t){switch(t){case Vz:return iB(e&&e.api_keys);case Gz:return hc(e&&e.models);case Hz:return!!(e&&e.session_sticky_keys);case Wz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var fB=new class{#e=j(N([]));get rows(){return R(this.#e)}set rows(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get formOpen(){return R(this.#a)}set formOpen(e){M(this.#a,e,!0)}#o=j(!1);get formSubmitting(){return R(this.#o)}set formSubmitting(e){M(this.#o,e,!0)}#s=j(`create`);get formMode(){return R(this.#s)}set formMode(e){M(this.#s,e,!0)}#c=j(!1);get advancedOpen(){return R(this.#c)}set advancedOpen(e){M(this.#c,e,!0)}#l=j(N(Jz()));get form(){return R(this.#l)}set form(e){M(this.#l,e,!0)}#u=j(N({}));get fieldErrors(){return R(this.#u)}set fieldErrors(e){M(this.#u,e,!0)}#d=j(``);get focusField(){return R(this.#d)}set focusField(e){M(this.#d,e,!0)}#f=j(``);get deletingName(){return R(this.#f)}set deletingName(e){M(this.#f,e,!0)}#p=j(!1);get deleteSubmitting(){return R(this.#p)}set deleteSubmitting(e){M(this.#p,e,!0)}#m=j(N([]));get types(){return R(this.#m)}set types(e){M(this.#m,e,!0)}#h=j(!1);get typesLoaded(){return R(this.#h)}set typesLoaded(e){M(this.#h,e,!0)}#g=null;get filteredRows(){return Yz(this.rows,this.filter)}get schema(){return Zz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Qz(e,e&&e.default_base_url)}async fetchTypes(){let e=await kT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await kT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,Jz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,oB(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Jz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=eB(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=ys(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Wc.fetchModels(),Wc.fetchCategories()}async submitForm(){let e=this.schema,t=cB(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=uB(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await AT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}lc.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await AT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Js.error=t.error;return}if(t.status===`error`){Js.error=t.error;return}lc.success(`Provider "`+e+`" deleted.`),Js.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Js.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},pB=B(`Config`),mB=B(` `,1),hB=B(`
                `),gB=B(`
                NameTypeBase URLAuthModelsEnabledUpdatedActions
                `);function _B(e,t){O(t,!0);var n=gB(),r=P(n),i=I(P(r));W(i,21,()=>fB.filteredRows,e=>e.name,(e,t)=>{var n=hB(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=e=>{V(e,pB())};U(o,e=>{R(t).managed&&e(s)}),D(r);var c=I(r),l=P(c),u=P(l,!0);D(l),D(c);var d=I(c),f=P(d,!0);D(d);var p=I(d),m=P(p,!0);D(p);var h=I(p),g=P(h,!0);D(h);var _=I(h),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x,!0);D(x);var C=I(x),w=P(C),T=P(w),E=e=>{var n=mB(),r=F(n);{let e=A(()=>`Edit provider `+R(t).name);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fB.openEdit(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>(fB.deletingName===R(t).name?`Deleting provider `:`Delete provider `)+R(t).name),n=A(()=>fB.deletingName===R(t).name);OT(i,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>fB.requestDelete(R(t).name),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)};U(T,e=>{R(t).managed||e(E)}),D(w),D(C),D(n),L((e,n,r)=>{H(a,R(t).name),H(u,R(t).type),K(d,`title`,R(t).base_url||``),H(f,R(t).base_url||`—`),H(m,e),H(g,n),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).enabled,"auth-key-status-inactive":!R(t).enabled}),H(b,R(t).enabled?`Enabled`:`Disabled`),H(S,r)},[()=>tB(R(t)),()=>nB(R(t)),()=>vs.formatTimestamp(R(t).updated_at)]),V(e,n)}),D(i),D(r),D(n),V(e,n),k()}var vB=B(``),yB=B(`
                `),bB=B(`
                `,1),xB=B(``),SB=B(``),CB=B(``),wB=B(``),TB=B(``),EB=B(` `),DB=B(` `),OB=B(`
                `);function kB(e,t){O(t,!0);let n=A(()=>`provider-credential-`+t.field.name),r=A(()=>fB.fieldErrors[t.field.name]||``),i=A(()=>R(r)?R(n)+`-error`:t.field.hint?R(n)+`-hint`:void 0),a=A(()=>{let e=String(fB.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){fB.clearFieldError(t.field.name)}var s=OB(),c=P(s),l=P(c),u=I(l),d=e=>{V(e,vB())};U(u,e=>{t.field.required&&e(d)}),D(c);var f=I(c,2),p=e=>{var t=bB(),a=F(t);W(a,21,()=>fB.form.api_keys,ii,(e,t,a)=>{var s=yB(),c=P(s);ea(c),K(c,`aria-label`,`API key `+(a+1)),OT(I(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>fB.removeApiKeyRow(a),children:(e,t)=>{J(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),D(s),L(()=>{K(c,`id`,a===0?R(n):R(n)+`-`+a),K(c,`aria-invalid`,R(r)?`true`:void 0),K(c,`aria-describedby`,a===0?R(i):void 0)}),z(`input`,c,o),la(c,()=>R(t).value,e=>R(t).value=e),V(e,s)}),D(a);var s=I(a,2),c=P(s);J(P(c),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(c),D(s),L(()=>K(c,`id`,fB.form.api_keys.length===0?R(n):void 0)),z(`click`,c,()=>fB.addApiKeyRow()),V(e,t)},m=e=>{var s=SB(),c=P(s);c.value=c.__value=``,W(I(c),16,()=>R(a),e=>e,(e,t)=>{var n=xB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(s),L(()=>{K(s,`id`,R(n)),K(s,`aria-invalid`,R(r)?`true`:void 0),K(s,`aria-describedby`,R(i))}),z(`change`,s,o),Ui(s,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,s)},h=e=>{var a=CB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`change`,a,o),ua(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)},g=e=>{var a=wB();ut(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)},_=e=>{var a=TB();ea(a),L(()=>{K(a,`id`,R(n)),K(a,`placeholder`,t.field.placeholder||``),K(a,`aria-invalid`,R(r)?`true`:void 0),K(a,`aria-describedby`,R(i))}),z(`input`,a,o),la(a,()=>fB.form[t.field.name],e=>fB.form[t.field.name]=e),V(e,a)};U(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=I(f,2),y=e=>{var t=EB(),i=P(t,!0);D(t),L(()=>{K(t,`id`,R(n)+`-error`),H(i,R(r))}),V(e,t)},b=e=>{var r=DB(),i=P(r,!0);D(r),L(()=>{K(r,`id`,R(n)+`-hint`),H(i,t.field.hint)}),V(e,r)};U(v,e=>{R(r)?e(y):t.field.hint&&e(b,1)}),D(s),L(()=>{K(c,`for`,R(n)),H(l,`${t.field.label??``} `)}),V(e,s),k()}Br([`input`,`click`,`change`]);var AB=B(`

                The name is the stable identity used for routing and cannot change once created.

                `),jB=B(``),MB=B(` `),NB=B(`Determines which fields the gateway uses to build requests.`),PB=B(` `),FB=B(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),IB=B(`Immutable once created.`),LB=B(`

                Pick a type to configure its credentials — each provider type asks for different settings.

                `),RB=B(`
                Advanced settings
                `),zB=B(`
                `,1);function BB(e,t){O(t,!0);let n=A(()=>Xz(fB.types,fB.form.type)),r=A(()=>fB.formFields),i=A(()=>fB.fieldErrors.name||``),a=A(()=>fB.fieldErrors.type||``);function o(){fB.selectType(),fB.formMode===`create`&&(fB.form.name=aB(fB.rows,fB.form.type))}On(()=>{let e=fB.focusField;if(!e)return;fB.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{V(e,AB())},s=A(()=>fB.formMode===`edit`?`Edit Provider`:`Add Provider`);ME(e,{get open(){return fB.formOpen},get title(){return R(s)},ariaLabel:`Provider credential editor`,get error(){return fB.error},get submitting(){return fB.formSubmitting},novalidate:!0,onclose:()=>fB.closeForm(),onsubmit:()=>fB.submitForm(),headerHint:t,children:(e,t)=>{var s=zB(),c=F(s),l=I(P(c),2),u=P(l);u.value=u.__value=``,W(I(u),16,()=>R(n),e=>e,(e,t)=>{var n=jB(),r=P(n,!0);D(n);var i={};L(()=>{H(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),V(e,n)}),D(l);var d=I(l,2),f=e=>{var t=MB(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)},p=e=>{V(e,NB())};U(d,e=>{R(a)?e(f):e(p,-1)}),D(c);var m=I(c,2),h=I(P(m),2);ea(h);var g=I(h,2),_=e=>{var t=PB(),n=P(t,!0);D(t),L(()=>H(n,R(i))),V(e,t)},v=e=>{V(e,FB())},y=e=>{V(e,IB())};U(g,e=>{R(i)?e(_):fB.formMode===`create`?e(v,1):e(y,-1)}),D(m);var b=I(m,2),x=e=>{V(e,LB())};U(b,e=>{fB.form.type||e(x)});var S=I(b,2);W(S,17,()=>R(r).primary,e=>e.name,(e,t)=>{kB(e,{get field(){return R(t)}})});var C=I(S,2),w=P(C);PA(P(w),{get enabled(){return fB.form.enabled},label:`provider`,onclick:()=>fB.form.enabled=!fB.form.enabled}),D(w),D(C);var T=I(C,2),E=e=>{var t=RB(),n=P(t),i=P(n),a=I(P(i),2),o=P(a,!0);D(a),D(i),D(n);var s=I(n,2);W(s,21,()=>R(r).advanced,e=>e.name,(e,t)=>{kB(e,{get field(){return R(t)}})}),D(s),D(t),L(e=>{t.open=fB.advancedOpen,H(o,e)},[()=>R(r).advanced.map(e=>e.label).join(`, `)]),zr(`toggle`,t,e=>fB.advancedOpen=e.currentTarget.open),V(e,t)};U(T,e=>{R(r).advanced.length>0&&e(E)}),L(()=>{l.disabled=fB.formMode===`edit`,K(l,`aria-invalid`,R(a)?`true`:void 0),K(l,`aria-describedby`,R(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=fB.formMode===`edit`,K(h,`aria-invalid`,R(i)?`true`:void 0),K(h,`aria-describedby`,R(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),z(`change`,l,o),Ui(l,()=>fB.form.type,e=>fB.form.type=e),z(`input`,h,()=>fB.clearFieldError(`name`)),la(h,()=>fB.form.name,e=>fB.form.name=e),V(e,s)},$$slots:{headerHint:!0,default:!0}})}k()}Br([`change`,`input`]);var VB=B(`

                Providers

                `),HB=B(``),UB=B(`
                Provider credential management is unavailable.
                `),WB=B(``),GB=B(`
                `),KB=B(`

                No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

                `),qB=B(`

                No providers match your filter.

                `),JB=B(`
                `);function YB(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`providers-config`&&fB.fetchPage()});var n=JB(),r=P(n),i=P(r);iC(P(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{V(e,VB())},help:e=>{Ve(),V(e,Yr(`Configure LLM provider credentials here instead of setting API keys as environment variables. Providers declared in config.yaml or env vars are read-only (Config badge) and cannot be edited or deleted from the - dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=UB();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=pB.formSubmitting),z(`click`,t,()=>pB.openCreate()),V(e,t)};U(o,e=>{pB.available&&!Y.needsAuth&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,WB())};U(c,e=>{!pB.available&&!Y.needsAuth&&e(l)});var u=I(c,2),d=e=>{var t=GB(),n=P(t,!0);D(t),L(()=>H(n,pB.error)),V(e,t)};U(u,e=>{pB.error&&!Y.needsAuth&&!pB.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading providers...`})};U(f,e=>{pB.loading&&!Y.needsAuth&&e(p)});var m=I(f,2),h=e=>{var t=KB(),n=P(t);jw(P(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return pB.filter},set value(e){pB.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{(pB.rows.length>0||pB.filter)&&pB.available&&!Y.needsAuth&&e(h)});var g=I(m,2);VB(g,{});var _=I(g,2),v=e=>{vB(e,{})};U(_,e=>{pB.filteredRows.length>0&&pB.available&&!Y.needsAuth&&e(v)});var y=I(_,2),b=e=>{V(e,qB())};U(y,e=>{pB.rows.length===0&&!pB.filter&&!pB.loading&&!Y.needsAuth&&!pB.error&&pB.available&&e(b)});var x=I(y,2),S=e=>{V(e,JB())};U(x,e=>{pB.rows.length>0&&pB.filteredRows.length===0&&pB.filter&&!pB.loading&&!Y.needsAuth&&pB.available&&e(S)}),D(n),V(e,n),k()}Br([`click`]);function ZB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function QB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function $B(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function eV(e){if($B(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function tV(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=$B(t.user_path);if(r)return{error:r};let i=eV(t.user_path),a=QB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function nV(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function rV(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function iV(e,t=Date.now()){return!e||e.active===!1||rV(e)?!1:!nV(e,t)}function aV(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function oV(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!iV(e,i)?!1:!a||aV(e).includes(a))}function sV(e,t){return rV(e)?2:+!iV(e,t)}function cV(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function lV(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function uV(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=sV(e,t),i=sV(n,t);if(r!==i)return r-i;let[a,o]=r===2?[lV(e),lV(n)]:[cV(e),cV(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function dV(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!iV(n,t),0)}function fV(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var pV=new class{#e=j(N([]));get keys(){return R(this.#e)}set keys(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get showInactive(){return R(this.#a)}set showInactive(e){M(this.#a,e,!0)}#o=A(()=>uV(oV(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return R(this.#o)}set visibleKeys(e){M(this.#o,e)}#s=A(()=>dV(this.keys));get inactiveCount(){return R(this.#s)}set inactiveCount(e){M(this.#s,e)}#c=j(!1);get formOpen(){return R(this.#c)}set formOpen(e){M(this.#c,e,!0)}#l=j(!1);get formSubmitting(){return R(this.#l)}set formSubmitting(e){M(this.#l,e,!0)}#u=j(``);get issuedValue(){return R(this.#u)}set issuedValue(e){M(this.#u,e,!0)}#d=j(``);get deactivatingID(){return R(this.#d)}set deactivatingID(e){M(this.#d,e,!0)}#f=j(``);get dashboardAccessID(){return R(this.#f)}set dashboardAccessID(e){M(this.#f,e,!0)}#p=j(N(ZB()));get form(){return R(this.#p)}set form(e){M(this.#p,e,!0)}#m=j(N(fV()));get labelsEditor(){return R(this.#m)}set labelsEditor(e){M(this.#m,e,!0)}copyState=MM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=ZB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=ZB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=ZB()}async submitForm(){let e=tV(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=ZB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=fV())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:QB(e.value)};try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}lc.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,lc.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),lc.error(n.error);return}lc.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,lc.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),lc.error(t.error);return}lc.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},mV=B(``),hV=B(`

                Store this key securely — it won’t be shown again.

                `),gV=B(``),_V=B(``),vV=B(``),yV=B(``),bV=B(`
                `);function xV(e,t){O(t,!0);{let t=A(()=>pV.issuedValue?``:pV.error),n=A(()=>pV.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=A(()=>pV.issuedValue?Ba:po);ME(e,{get open(){return pV.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return R(t)},get submitting(){return pV.formSubmitting},get submitLabel(){return R(n)},submittingLabel:`Creating...`,get submitIcon(){return R(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>pV.closeForm(),onsubmit:()=>pV.issuedValue?pV.dismissIssuedKey():pV.submitForm(),children:(e,t)=>{var n=Xr(),r=F(n),i=e=>{var t=hV(),n=I(P(t),2),r=P(n),i=P(r,!0);D(r),ML(I(r,2),{get state(){return pV.copyState},onclick:()=>pV.copyIssuedValue()}),D(n);var a=I(n,2),o=e=>{V(e,mV())};U(a,e=>{pV.copyState.error&&e(o)}),D(t),L(()=>H(i,pV.issuedValue)),V(e,t)},a=e=>{var t=bV(),n=P(t),r=P(n),i=I(P(r),2);ea(i),D(r);var a=I(r,2),o=I(P(a),2);ea(o),D(a),D(n);var s=I(n,2),c=P(s);iC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{V(e,gV())},help:e=>{Ve(),V(e,Yr(`When set, this key overrides the configured user path request - header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=I(c,2);ea(l),D(s);var u=I(s,2),d=P(u);iC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{V(e,_V())},help:e=>{Ve(),V(e,Yr(`Every request authenticated with this key gets these labels, in + dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),D(i);var a=I(i,2),o=P(a),s=e=>{var t=HB();J(P(t),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(t),L(()=>t.disabled=fB.formSubmitting),z(`click`,t,()=>fB.openCreate()),V(e,t)};U(o,e=>{fB.available&&!Y.needsAuth&&e(s)}),D(a),D(r);var c=I(r,2),l=e=>{V(e,UB())};U(c,e=>{!fB.available&&!Y.needsAuth&&e(l)});var u=I(c,2),d=e=>{var t=WB(),n=P(t,!0);D(t),L(()=>H(n,fB.error)),V(e,t)};U(u,e=>{fB.error&&!Y.needsAuth&&!fB.formOpen&&e(d)});var f=I(u,2),p=e=>{ET(e,{label:`Loading providers...`})};U(f,e=>{fB.loading&&!Y.needsAuth&&e(p)});var m=I(f,2),h=e=>{var t=GB(),n=P(t);jw(P(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return fB.filter},set value(e){fB.filter=e}}),D(n),D(t),V(e,t)};U(m,e=>{(fB.rows.length>0||fB.filter)&&fB.available&&!Y.needsAuth&&e(h)});var g=I(m,2);BB(g,{});var _=I(g,2),v=e=>{_B(e,{})};U(_,e=>{fB.filteredRows.length>0&&fB.available&&!Y.needsAuth&&e(v)});var y=I(_,2),b=e=>{V(e,KB())};U(y,e=>{fB.rows.length===0&&!fB.filter&&!fB.loading&&!Y.needsAuth&&!fB.error&&fB.available&&e(b)});var x=I(y,2),S=e=>{V(e,qB())};U(x,e=>{fB.rows.length>0&&fB.filteredRows.length===0&&fB.filter&&!fB.loading&&!Y.needsAuth&&fB.available&&e(S)}),D(n),V(e,n),k()}Br([`click`]);function XB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function ZB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function QB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function $B(e){if(QB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function eV(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=QB(t.user_path);if(r)return{error:r};let i=$B(t.user_path),a=ZB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function tV(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function nV(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function rV(e,t=Date.now()){return!e||e.active===!1||nV(e)?!1:!tV(e,t)}function iV(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function aV(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!rV(e,i)?!1:!a||iV(e).includes(a))}function oV(e,t){return nV(e)?2:+!rV(e,t)}function sV(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function cV(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function lV(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=oV(e,t),i=oV(n,t);if(r!==i)return r-i;let[a,o]=r===2?[cV(e),cV(n)]:[sV(e),sV(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function uV(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!rV(n,t),0)}function dV(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var fV=new class{#e=j(N([]));get keys(){return R(this.#e)}set keys(e){M(this.#e,e,!0)}#t=j(!0);get available(){return R(this.#t)}set available(e){M(this.#t,e,!0)}#n=j(!1);get loading(){return R(this.#n)}set loading(e){M(this.#n,e,!0)}#r=j(``);get error(){return R(this.#r)}set error(e){M(this.#r,e,!0)}#i=j(``);get filter(){return R(this.#i)}set filter(e){M(this.#i,e,!0)}#a=j(!1);get showInactive(){return R(this.#a)}set showInactive(e){M(this.#a,e,!0)}#o=A(()=>lV(aV(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return R(this.#o)}set visibleKeys(e){M(this.#o,e)}#s=A(()=>uV(this.keys));get inactiveCount(){return R(this.#s)}set inactiveCount(e){M(this.#s,e)}#c=j(!1);get formOpen(){return R(this.#c)}set formOpen(e){M(this.#c,e,!0)}#l=j(!1);get formSubmitting(){return R(this.#l)}set formSubmitting(e){M(this.#l,e,!0)}#u=j(``);get issuedValue(){return R(this.#u)}set issuedValue(e){M(this.#u,e,!0)}#d=j(``);get deactivatingID(){return R(this.#d)}set deactivatingID(e){M(this.#d,e,!0)}#f=j(``);get dashboardAccessID(){return R(this.#f)}set dashboardAccessID(e){M(this.#f,e,!0)}#p=j(N(XB()));get form(){return R(this.#p)}set form(e){M(this.#p,e,!0)}#m=j(N(dV()));get labelsEditor(){return R(this.#m)}set labelsEditor(e){M(this.#m,e,!0)}copyState=MM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await kT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=XB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=XB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=XB()}async submitForm(){let e=eV(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=XB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=dV())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:ZB(e.value)};try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}lc.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,lc.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),lc.error(n.error);return}lc.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await AT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,lc.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),lc.error(t.error);return}lc.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},pV=B(``),mV=B(`

                Store this key securely — it won’t be shown again.

                `),hV=B(``),gV=B(``),_V=B(``),vV=B(``),yV=B(`
                `);function bV(e,t){O(t,!0);{let t=A(()=>fV.issuedValue?``:fV.error),n=A(()=>fV.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=A(()=>fV.issuedValue?Ba:po);ME(e,{get open(){return fV.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return R(t)},get submitting(){return fV.formSubmitting},get submitLabel(){return R(n)},submittingLabel:`Creating...`,get submitIcon(){return R(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>fV.closeForm(),onsubmit:()=>fV.issuedValue?fV.dismissIssuedKey():fV.submitForm(),children:(e,t)=>{var n=Xr(),r=F(n),i=e=>{var t=mV(),n=I(P(t),2),r=P(n),i=P(r,!0);D(r),jL(I(r,2),{get state(){return fV.copyState},onclick:()=>fV.copyIssuedValue()}),D(n);var a=I(n,2),o=e=>{V(e,pV())};U(a,e=>{fV.copyState.error&&e(o)}),D(t),L(()=>H(i,fV.issuedValue)),V(e,t)},a=e=>{var t=yV(),n=P(t),r=P(n),i=I(P(r),2);ea(i),D(r);var a=I(r,2),o=I(P(a),2);ea(o),D(a),D(n);var s=I(n,2),c=P(s);iC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{V(e,hV())},help:e=>{Ve(),V(e,Yr(`When set, this key overrides the configured user path request + header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=I(c,2);ea(l),D(s);var u=I(s,2),d=P(u);iC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{V(e,gV())},help:e=>{Ve(),V(e,Yr(`Every request authenticated with this key gets these labels, in addition to any labels from tagging headers. Labels show up in - usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=I(d,2);ea(f),D(u);var p=I(u,2),m=P(p);iC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{V(e,vV())},help:e=>{Ve(),V(e,Yr(`When off, this key is denied the dashboard and every /admin API + usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=I(d,2);ea(f),D(u);var p=I(u,2),m=P(p);iC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{V(e,_V())},help:e=>{Ve(),V(e,Yr(`When off, this key is denied the dashboard and every /admin API endpoint. Model endpoints and GET /v1/usage stay available to - the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=I(m,2),g=P(h);ea(g),Ve(2),D(h),D(p),PE(I(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=yV();ut(n),la(n,()=>pV.form.description,e=>pV.form.description=e),V(e,n)},$$slots:{default:!0}}),D(t),la(i,()=>pV.form.name,e=>pV.form.name=e),la(o,()=>pV.form.expires_at,e=>pV.form.expires_at=e),la(l,()=>pV.form.user_path,e=>pV.form.user_path=e),la(f,()=>pV.form.labels,e=>pV.form.labels=e),ua(g,()=>pV.form.dashboard_access,e=>pV.form.dashboard_access=e),V(e,t)};U(r,e=>{pV.issuedValue?e(i):e(a,-1)}),V(e,n)},$$slots:{default:!0}})}k()}var SV=B(`

                `),CV=B(`

                Applies to new requests made with this key. Leave empty to remove all labels.

                `,1);function wV(e,t){O(t,!0),ME(e,{get open(){return pV.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return pV.labelsEditor.error},get submitting(){return pV.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>pV.closeLabelsEditor(),onsubmit:()=>pV.submitLabelsEditor(),headerHint:e=>{var t=SV(),n=P(t,!0);D(t),L(()=>H(n,pV.labelsEditor.name)),V(e,t)},children:(e,t)=>{PE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=CV(),r=F(n);ea(r),Ve(2),la(r,()=>pV.labelsEditor.value,e=>pV.labelsEditor.value=e),V(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),k()}var TV=B(` `),EV=B(`
                `),DV=B(``),OV=B(`Expired`),kV=B(` `),AV=B(` `,1),jV=B(`Deactivated`),MV=B(`
                `),NV=B(`
                NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
                `);function PV(e,t){O(t,!0);var n=NV(),r=P(n),i=P(r),a=P(i),o=I(P(a),5),s=P(o);J(I(P(s)),{get icon(){return eo},width:`13`,height:`13`}),D(s),D(o),Ve(3),D(a),D(i);var c=I(i);W(c,21,()=>pV.visibleKeys,e=>e.id,(e,t)=>{var n=MV();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i),s=P(o,!0);D(o);var c=I(o),l=P(c,!0);D(c);var u=I(c),d=P(u),f=e=>{var n=EV();W(n,20,()=>R(t).labels||[],e=>e,(e,t)=>{var n=TV(),r=P(n,!0);D(n),L(e=>{Bi(n,e),H(r,t)},[()=>eb(t)]),V(e,n)}),D(n),V(e,n)},p=e=>{V(e,DV())};U(d,e=>{(R(t).labels||[]).length>0?e(f):e(p,-1)}),D(u);var m=I(u),h=P(m),g=P(h,!0);D(h),D(m);var _=I(m),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x),C=e=>{var n=kV(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{V(e,OV())},s=A(()=>nV(R(t)));U(a,e=>{R(s)&&e(o)}),D(n),L(e=>H(i,e),[()=>wc(R(t).expires_at)]),V(e,n)},w=e=>{V(e,Yr(`—`))};U(S,e=>{R(t).expires_at?e(C):e(w,-1)}),D(x);var T=I(x),E=P(T,!0);D(T);var ee=I(T),te=P(ee),ne=P(te),re=e=>{var n=AV(),r=F(n);{let e=A(()=>(R(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+R(t).name),n=A(()=>!!pV.dashboardAccessID);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pV.toggleDashboardAccess(R(t)),get disabled(){return R(n)},children:(e,n)=>{{let n=A(()=>R(t).dashboard_access?wo:Co);J(e,{get icon(){return R(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>`Edit labels for API key `+R(t).name);OT(i,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>pV.openLabelsEditor(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=I(i,2);{let e=A(()=>(pV.deactivatingID===R(t).id?`Deactivating API key `:`Deactivate API key `)+R(t).name),n=A(()=>pV.deactivatingID===R(t).id);OT(a,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>pV.deactivateKey(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)},ie=e=>{var n=jV();L(e=>K(n,`title`,e),[()=>R(t).deactivated_at?`Deactivated on `+Tc(R(t).deactivated_at):`Deactivated`]),V(e,n)},ae=A(()=>rV(R(t)));U(ne,e=>{R(t).active?e(re):R(ae)&&e(ie,1)}),D(te),D(ee),D(n),L((e,i,o)=>{r=G(n,1,`svelte-nf0ldb`,null,r,e),H(a,R(t).name),H(s,R(t).description||`—`),H(l,R(t).user_path||`—`),H(g,R(t).redacted_value),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).dashboard_access,"auth-key-status-inactive":!R(t).dashboard_access}),H(b,R(t).dashboard_access?`Allowed`:`Denied`),K(x,`title`,i),H(E,o)},[()=>({"auth-key-row-deactivated":rV(R(t))}),()=>R(t).expires_at?Tc(R(t).expires_at):``,()=>vs.formatTimestamp(R(t).created_at)]),V(e,n)}),D(c),D(r),D(n),V(e,n),k()}var FV=B(``),IV=B(`
                API key management is unavailable.
                `),LV=B(``),RV=B(`

                Managed API keys authenticate requests to the gateway. Deactivation is - permanent — create a new key if access needs to be restored.

                `),zV=B(`
                `),BV=B(`
                `),VV=B(`

                `),HV=B(`

                No API keys yet. Issue a key to get started.

                `),UV=B(`
                `);function WV(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`auth-keys`&&pV.fetchKeys()});var n=UV(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=FV();J(P(t),{get icon(){return po},class:`table-icon-svg`}),Ve(2),D(t),L(()=>t.disabled=pV.formSubmitting),z(`click`,t,()=>{pV.formSubmitting||pV.openForm()}),V(e,t)};U(a,e=>{pV.available&&!Y.authError&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,IV())};U(s,e=>{!pV.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=LV(),n=P(t,!0);D(t),L(()=>H(n,pV.error)),V(e,t)};U(l,e=>{pV.error&&!Y.authError&&!pV.formOpen&&e(u)});var d=I(l,2),f=e=>{V(e,RV())};U(d,e=>{pV.available&&!Y.authError&&e(f)});var p=I(d,2);xV(p,{});var m=I(p,2);wV(m,{});var h=I(m,2),g=e=>{var t=zV();NS(P(t),{size:18,label:`Loading API keys`}),D(t),V(e,t)};U(h,e=>{pV.loading&&pV.keys.length===0&&e(g)});var _=I(h,2),v=e=>{var t=BV(),n=P(t);jw(P(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return pV.filter},set value(e){pV.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i);ea(a);var o=I(a,2),s=I(P(o)),c=e=>{var t=Yr();L(()=>H(t,`(${pV.inactiveCount??``})`)),V(e,t)};U(s,e=>{pV.inactiveCount>0&&e(c)}),D(o),D(i),D(r),D(t),ua(a,()=>pV.showInactive,e=>pV.showInactive=e),V(e,t)};U(_,e=>{pV.keys.length>0&&pV.available&&e(v)});var y=I(_,2),b=e=>{PV(e,{})};U(y,e=>{pV.visibleKeys.length>0&&pV.available&&e(b)});var x=I(y,2),S=e=>{var t=VV(),n=P(t);D(t),L(()=>H(n,`No API keys match the current filter.${pV.inactiveCount>0&&!pV.showInactive?` `+pV.inactiveCount+` inactive `+(pV.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),V(e,t)};U(x,e=>{pV.keys.length>0&&pV.visibleKeys.length===0&&pV.available&&e(S)});var C=I(x,2),w=e=>{V(e,HV())};U(C,e=>{pV.keys.length===0&&!pV.loading&&!Y.authError&&!pV.error&&pV.available&&e(w)}),D(n),V(e,n),k()}Br([`click`]);var GV=B(`

                Timezone

                `),KV=B(``),qV=B(``),JV=B(`
                `,1);function YV(e,t){O(t,!0);function n(){vs.saveOverride(),Y.refresh()}function r(){vs.clearOverride(),Y.refresh()}var i=JV(),a=F(i);iC(P(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{V(e,GV())},$$slots:{title:!0}}),D(a);var o=I(a,2),s=P(o),c=I(P(s),2),l=P(c),u=P(l);D(l),l.value=l.__value=``,W(I(l),17,()=>vs.options,e=>e.value,(e,t)=>{var n=KV(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(c),D(s),D(o);var d=I(o,2),f=P(d),p=e=>{var t=qV();z(`click`,t,r),V(e,t)};U(f,e=>{vs.override&&e(p)}),D(d),L(e=>H(u,`Automatic (${e??``})`),[()=>vs.detectedTimeZoneLabel()]),zr(`focus`,c,()=>vs.ensureOptions()),z(`change`,c,n),Ui(c,()=>vs.override,e=>vs.override=e),V(e,i),k()}Br([`change`,`click`]);var XV=B(``),ZV=B(`

                Failover

                `,1);function QV(e,t){O(t,!0);let n=A(()=>Q.failoverSaving||Q.failoverGenerating||Q.failoverDraftSaving||!Q.failoverAvailable||!Q.failoverEnabled());var r=ZV(),i=F(r),a=I(P(i),2),o=P(a),s=P(o);J(s,{get icon(){return Fo},class:`form-action-icon`});var c=I(s,2),l=P(c,!0);D(c),D(o);var u=I(o,2);J(P(u),{get icon(){return Ao},class:`form-action-icon`}),Ve(2),D(u),D(a),D(i);var d=I(i,2),f=P(d),p=e=>{var t=XV(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(f,e=>{Q.failoverError&&e(p)}),D(d),Dj(I(d,2),{}),L(()=>{o.disabled=R(n),H(l,Q.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=R(n)}),z(`click`,o,()=>Q.generateFailoverRules()),z(`click`,u,()=>Q.openFailoverResetDialog()),V(e,r),k()}Br([`click`]);function $V(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function eH(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function tH(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var nH=B(`

                Budget Resets

                `),rH=B(``),iH=B(`

                If the selected day does not exist in a month, the reset runs on - the last day of that month.

                `),aH=B(``),oH=B(``),sH=B(`
                Monthly
                Weekly
                Daily
                `,1);function cH(e,t){O(t,!0);let n=j(N($V())),r=j(!1),i=j(!1),a=j(``),o=j(!1),s=A(()=>ks.budgetsVisible());async function c(){if(await ks.ensureLoaded(),!ks.budgetsVisible()){M(a,``);return}M(r,!0),M(a,``);try{let e=await ws(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load budget settings.`);return}M(n,eH(e.data,R(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),M(a,`Unable to load budget settings.`)}finally{M(r,!1)}}async function l(){if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/budgets/settings`,`PUT`,eH(R(n),R(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){lc.error(`Unable to save budget settings.`);return}M(n,eH(e.data,R(n)),!0),M(a,``),lc.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),lc.error(`Unable to save budget settings.`)}finally{M(i,!1)}}}On(()=>{Y.refreshTick,c()});var u=Xr(),d=F(u),f=e=>{var t=sH(),s=F(t),c=P(s);iC(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{V(e,nH())},$$slots:{title:!0}});var u=I(c,2),d=P(u),f=I(P(d),2),p=P(f);iC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return R(o)},set open(e){M(o,e,!0)},title:e=>{V(e,rH())},$$slots:{title:!0}});var m=I(p,2);ea(m),D(f);var h=I(f,2),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=P(y),x=e=>{V(e,iH())};U(b,e=>{R(o)&&e(x)}),D(y),D(d);var S=I(d,2),C=I(P(S),2),w=I(P(C),2);W(w,21,tH,e=>e.value,(e,t)=>{var n=aH(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(w),D(C);var T=I(C,2),E=I(P(T),2);ea(E),D(T);var ee=I(T,2),te=I(P(ee),2);ea(te),D(ee),Ve(2),D(S);var ne=I(S,2),re=I(P(ne),4),ie=I(P(re),2);ea(ie),D(re);var ae=I(re,2),oe=I(P(ae),2);ea(oe),D(ae),Ve(2),D(ne),D(u);var se=I(u,2),ce=P(se);J(P(ce),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(ce);var le=I(ce,2),ue=e=>{NS(e,{size:16,label:`Loading budget settings`})};U(le,e=>{R(r)&&e(ue)}),D(se),D(s);var de=I(s,2),fe=P(de),pe=e=>{var t=oH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(fe,e=>{R(a)&&e(pe)}),D(de),L(()=>{ce.disabled=R(i)||R(r),K(ce,`aria-busy`,R(i)?`true`:`false`)}),la(m,()=>R(n).monthly_reset_day,e=>R(n).monthly_reset_day=e),la(g,()=>R(n).monthly_reset_hour,e=>R(n).monthly_reset_hour=e),la(v,()=>R(n).monthly_reset_minute,e=>R(n).monthly_reset_minute=e),Ui(w,()=>R(n).weekly_reset_weekday,e=>R(n).weekly_reset_weekday=e),la(E,()=>R(n).weekly_reset_hour,e=>R(n).weekly_reset_hour=e),la(te,()=>R(n).weekly_reset_minute,e=>R(n).weekly_reset_minute=e),la(ie,()=>R(n).daily_reset_hour,e=>R(n).daily_reset_hour=e),la(oe,()=>R(n).daily_reset_minute,e=>R(n).daily_reset_minute=e),z(`click`,ce,l),V(e,t)};U(d,e=>{R(s)&&e(f)}),V(e,u),k()}Br([`click`]);var lH=B(`

                Reset All Budgets

                Start new budget periods for every configured budget without changing - the limits.

                `);function uH(e,t){O(t,!0);var n=Xr(),r=F(n),i=e=>{var t=lH(),n=I(P(t),2),r=P(n);J(P(r),{get icon(){return go},class:`form-action-icon`}),Ve(2),D(r),D(n),D(t),L(()=>r.disabled=X.resetAllLoading),z(`click`,r,()=>X.openResetDialog()),V(e,t)},a=A(()=>ks.budgetsVisible());U(r,e=>{R(a)&&e(i)}),V(e,n),k()}Br([`click`]);function dH(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function fH(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function pH(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function mH(e){return e&&e.error&&e.error.message?e.error.message:``}var hH=B(`

                Tagging based on headers

                `),gH=B(`config`),_H=B(``),vH=B(`
                `),yH=B(`

                No tagging headers configured. Requests are not labelled.

                `),bH=B(``),xH=B(`
                `,1);function SH(e,t){O(t,!0);let n=j(N([])),r=j(!0),i=j(!1),a=j(!1),o=j(``);function s(){R(n).push(dH())}function c(e){let t=R(n)[e];!t||t.managed||R(n).splice(e,1)}async function l(){M(i,!0),M(o,``);try{let e=await ws(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){M(o,`Unable to load tagging settings.`);return}M(n,fH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),M(o,`Unable to load tagging settings.`)}finally{M(i,!1)}}async function u(){if(!(R(a)||!R(r))){M(a,!0);try{let e=await Ts(`/admin/tagging/settings`,`PUT`,pH(R(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){lc.error(e.status!==401&&mH(e.data)||`Unable to save tagging settings.`);return}M(n,fH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0),M(o,``),lc.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),lc.error(`Unable to save tagging settings.`)}finally{M(a,!1)}}}On(()=>{Y.refreshTick,l()});var d=xH(),f=F(d),p=P(f);iC(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{V(e,hH())},$$slots:{title:!0}});var m=I(p,2),h=P(m);W(h,17,()=>R(n),ii,(e,t,n)=>{var i=vH(),a=P(i),o=P(a);K(o,`for`,`tagging-header-`+n);var s=I(o,2);ea(s),K(s,`id`,`tagging-header-`+n),D(a);var l=I(a,2),u=P(l);K(u,`for`,`tagging-prefix-`+n);var d=I(u,2);ea(d),K(d,`id`,`tagging-prefix-`+n),D(l);var f=I(l,2),p=P(f);K(p,`for`,`tagging-delimiter-`+n);var m=I(p,2);ea(m),K(m,`id`,`tagging-delimiter-`+n),D(f);var h=I(f,2),g=P(h);ea(g),Ve(2),D(h);var _=I(h,2),v=P(_),y=e=>{V(e,gH())},b=e=>{var i=_H();L(()=>{i.disabled=!R(r),K(i,`aria-label`,`Remove tagging header `+(R(t).header||n+1))}),z(`click`,i,()=>c(n)),V(e,i)};U(v,e=>{R(t).managed?e(y):e(b,-1)}),D(_),D(i),L(()=>{s.disabled=R(t).managed||!R(r),d.disabled=R(t).managed||!R(r),m.disabled=R(t).managed||!R(r),g.disabled=R(t).managed||!R(r)}),la(s,()=>R(t).header,e=>R(t).header=e),la(d,()=>R(t).prefix,e=>R(t).prefix=e),la(m,()=>R(t).delimiter,e=>R(t).delimiter=e),ua(g,()=>R(t).do_not_pass,e=>R(t).do_not_pass=e),V(e,i)});var g=I(h,2),_=e=>{NS(e,{size:16,label:`Loading tagging settings`})};U(g,e=>{R(i)&&e(_)});var v=I(g,2),y=e=>{V(e,yH())};U(v,e=>{!R(i)&&R(n).length===0&&e(y)}),D(m);var b=I(m,2),x=P(b);J(P(x),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(x);var S=I(x,2);J(P(S),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(S),D(b),D(f);var C=I(f,2),w=P(C),T=e=>{var t=bH(),n=P(t,!0);D(t),L(()=>H(n,R(o))),V(e,t)};U(w,e=>{R(o)&&e(T)}),D(C),L(()=>{x.disabled=!R(r)||R(a)||R(i),S.disabled=!R(r)||R(a)||R(i),K(S,`aria-busy`,R(a)?`true`:`false`)}),z(`click`,x,s),z(`click`,S,u),V(e,d),k()}Br([`click`]);function CH(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?Cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?Cc(r):``}}function wH(e,t,n,r){return{...CH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function TH(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var EH=B(`

                Usage Pricing Recalculation

                `),DH=B(`
                `);function OH(e,t){O(t,!0);let n=j(``),r=j(``),i=j(!1),a=A(()=>ks.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}R(i)||Js.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Fa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/usage/recalculate-pricing`,`POST`,wH({selectedPreset:Uc.selectedPreset,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate,today:vs.todayDate()},R(n),R(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Js.error=`Unable to recalculate pricing.`;return}Js.close(),lc.success(TH(e.data)),Yc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Js.error=`Unable to recalculate pricing.`}finally{M(i,!1)}}}var c=Xr(),l=F(c),u=e=>{var t=DH(),s=P(t);iC(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{V(e,EH())},$$slots:{title:!0}});var c=I(s,2),l=P(c),u=I(P(l),2);fl(P(u),{}),D(u),D(l);var d=I(l,2),f=I(P(d),2);ea(f),D(d);var p=I(d,2),m=I(P(p),2);ea(m),D(p),D(c);var h=I(c,2),g=P(h);J(P(g),{get icon(){return Fa},class:`form-action-icon`}),Ve(2),D(g),D(h),D(t),L(()=>{g.disabled=R(i)||!R(a),K(g,`aria-busy`,R(i)?`true`:`false`)}),la(f,()=>R(n),e=>M(n,e)),la(m,()=>R(r),e=>M(r,e)),z(`click`,g,o),V(e,t)};U(l,e=>{R(a)&&e(u)}),V(e,c),k()}Br([`click`]);function kH(e){return String(e&&e.status||`ok`).toLowerCase()}function AH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=kH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function jH(e){return!!e&&kH(e)===`ok`}function MH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function NH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var PH=B(`

                Runtime Refresh

                `),FH=B(`
              • `),IH=B(`
                  `),LH=B(`
                  `,1);function RH(e,t){O(t,!0);let n=j(!1),r=j(null);async function i(){if(!R(n)){M(n,!0),M(r,null);try{let e=await Ts(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){lc.error(`Runtime refresh failed.`);return}M(r,e.data&&typeof e.data==`object`?e.data:null,!0),jH(R(r))?lc.success(AH(R(r))):lc.error(AH(R(r))),Y.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),lc.error(`Runtime refresh failed.`)}finally{M(n,!1)}}}var a=LH(),o=F(a),s=P(o);iC(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{V(e,PH())},$$slots:{title:!0}});var c=I(s,2),l=P(c);let u;J(P(l),{get icon(){return ho},class:`settings-refresh-icon`}),Ve(2),D(l),D(c),D(o);var d=I(o,2),f=P(d),p=e=>{var t=IH();W(t,21,()=>MH(R(r)),e=>e.name,(e,t)=>{var n=FH(),r=P(n,!0);D(n),L(e=>{G(n,1,`runtime-refresh-step is-${R(t).status??``}`,`svelte-yeq2mp`),H(r,e)},[()=>NH(R(t))]),V(e,n)}),D(t),V(e,t)},m=A(()=>MH(R(r)).length>0);U(f,e=>{R(m)&&e(p)}),D(d),L(()=>{u=G(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":R(n)}),l.disabled=R(n),K(l,`aria-busy`,R(n)?`true`:`false`)}),z(`click`,l,i),V(e,a),k()}Br([`click`]);var zH=B(``),BH=B(`

                  `),VH=B(`

                  `),HH=B(``),UH=B(`
                  `),WH=B(`

                  AI Processing

                  `);function GH(e,t){O(t,!0);let n=j(N([])),r=j(!1),i=j(``),a=j(``);async function o(){M(r,!0),M(a,``);try{let e=await ws(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load runtime settings.`);return}M(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),M(a,`Unable to load runtime settings.`)}finally{M(r,!1)}}async function s(e,t,r){if(!(e.locked||R(i))){M(i,e.key,!0);try{let i=await Ts(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,lc.error(`Unable to save ${e.label}.`);return}M(n,R(n).map(t=>t.key===e.key?i.data:t),!0),lc.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),lc.error(`Unable to save ${e.label}.`)}finally{M(i,``)}}}On(()=>{Y.refreshTick,o()});var c=Xr(),l=F(c),u=e=>{var t=WH(),o=P(t),c=I(P(o),2),l=e=>{var t=zH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(o);var u=I(o,2);W(u,21,()=>R(n),e=>e.key,(e,t)=>{var n=UH(),r=P(n),a=P(r),o=P(a,!0);D(a);var c=I(a,2),l=e=>{var n=BH(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(c,e=>{R(t).description&&e(l)});var u=I(c,2),d=e=>{var n=VH(),r=P(n);D(n),L(()=>H(r,`Managed by ${(R(t).managed_by||`environment`)??``}`)),V(e,n)};U(u,e=>{R(t).locked&&e(d)}),D(r);var f=I(r,2);W(f,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=HH(),r=P(n,!0);D(n);var i={};L(()=>{K(n,`title`,R(t).description||``),H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(f);var p;Hi(f),D(n),L(()=>{K(a,`for`,`runtime-setting-${R(t).key}`),H(o,R(t).label),K(f,`id`,`runtime-setting-${R(t).key}`),f.disabled=R(t).locked||R(i)!==``,p!==(p=R(t).value)&&(f.value=(f.__value=R(t).value)??``,Vi(f,R(t).value))}),z(`change`,f,e=>s(R(t),e.currentTarget.value,e.currentTarget)),V(e,n)}),D(u),D(t),L(()=>K(u,`aria-busy`,R(r)?`true`:`false`)),V(e,t)};U(l,e=>{(R(n).length>0||R(a))&&e(u)}),V(e,c),k()}Br([`change`]);var KH=B(`
                  `);function qH(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`settings`&&(vs.ensureOptions(),ks.ensureLoaded())});var n=KH(),r=I(P(n),2),i=P(r);YV(i,{});var a=I(i,2);QV(a,{});var o=I(a,2);cH(o,{});var s=I(o,2);uH(s,{});var c=I(s,2);SH(c,{});var l=I(c,2);GH(l,{});var u=I(l,2);OH(u,{}),RH(I(u,2),{}),D(r);var d=I(r,2),f=P(d,!0);D(d),D(n),L(e=>H(f,e),[()=>Wo()]),V(e,n),k()}var JH=B(`
                  `),YH=B(`
                   
                  `),XH=B(`
                   
                  `),ZH=B(`
                   
                  `),QH=B(`
                  `),$H=B(`
                  `,1),eU=B(`
                  `);function tU(e,t){O(t,!0);let n=q(t,`showPromptCache`,3,!0),r=MM({logPrefix:`Failed to copy interaction message:`}),i=A(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=eU();let l;var u=P(c),d=e=>{var r=YH(),i=P(r),a=P(i),c=P(a,!0);D(a);var l=I(a,2),u=P(l,!0);D(l);var d=I(l,2),f=P(d,!0);D(d),D(i);var p=I(i,2),m=e=>{var n=JH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${t.msg.functionCallID??``}`)),V(e,n)};U(p,e=>{t.msg.functionCallID&&e(m)});var h=I(p,2),g=e=>{var n=Xr();W(F(n),17,()=>t.msg.toolCalls,ii,(e,n)=>{var r=Xr(),i=F(r),a=e=>{var r=JH(),i=P(r);D(r),L(()=>H(i,`Call ID${t.msg.toolCalls.length>1?` (`+R(n).name+`)`:``}: ${R(n).id??``}`)),V(e,r)};U(i,e=>{R(n).id&&e(a)}),V(e,r)}),V(e,n)};U(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=I(h,2),v=P(_,!0);D(_),D(r),L((e,n,i,a)=>{K(r,`title`,e),H(c,t.msg.roleLabel),H(u,n),H(f,i),H(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>vs.formatTimestamp(t.msg.timestamp),()=>pL(t.msg)]),V(e,r)},f=e=>{var r=$H(),i=F(r),a=P(i),s=P(a,!0);D(a);var c=I(a,2),l=P(c,!0);D(c),D(i);var u=I(i,2),d=e=>{var r=XH(),i=P(r,!0);D(r),L(e=>{K(r,`title`,e),H(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),V(e,r)};U(u,e=>{t.msg.text&&e(d)});var f=I(u,2),p=e=>{var n=QH();W(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=ZH(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(r);var c=I(r,2),l=e=>{var n=JH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${R(t).id??``}`)),V(e,n)};U(c,e=>{R(t).id&&e(l)});var u=I(c,2),d=P(u,!0);D(u),D(n),L((e,n)=>{H(a,R(t).name+`()`),H(s,e),H(d,n)},[()=>hL(R(t))||`No arguments`,()=>hL(R(t))||`No arguments`]),V(e,n)}),D(n),V(e,n)};U(f,e=>{t.msg.toolCalls&&e(p)}),L((e,n)=>{K(i,`title`,e),H(s,t.msg.roleLabel),H(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>vs.formatTimestamp(t.msg.timestamp)]),V(e,r)};U(u,e=>{R(i)?e(d):e(f,-1)});var p=I(u,2);let m;var h=P(p);{let e=A(()=>r.copied?Ga:Ja);J(h,{get icon(){return R(e)},width:`14`,height:`14`})}D(p),D(c),L(e=>{G(c,1,Ni([R(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),K(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),K(c,`data-entry-id`,t.msg.entryID),l=Bi(c,``,l,e),m=G(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),K(p,`aria-label`,r.copied?`Message copied`:`Copy message`),K(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),z(`click`,p,e=>{e.stopPropagation(),r.copy(mL(t.msg))}),V(e,c),k()}Br([`click`]);function nU(e,t=0){let n=Math.max(0,oU(e)-Math.max(0,oU(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function rU(e,t,n=0){let r=nU(t,n),i=oU(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function iU(e,t,n=0){return rU(oU(t)-oU(e),t,n)}function aU(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=oU(t),a=0;e.forEach((e,t)=>{oU(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=oU(e[c])0&&s===c&&l?`end`:`start`}}function oU(e){let t=Number(e);return Number.isFinite(t)?t:0}var sU=B(`
                  `),cU=B(`
                  `),lU=B(`

                  Loading interactions...

                  `),uU=B(`

                  No interaction data available for this entry.

                  `),dU=B(``),fU=B(`
                  `,1),pU=B(`

                  Showing the newest part of this session and the selected log.

                  `),mU=B(`
                  `),hU=B(``),gU=B(``),_U=B(``);function vU(e,t){O(t,!0);let n=CL,r=Number(Sa(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=j(N(a)),s=j(320),c=j(760),l=j(!1),u=j(!1),d=j(Sa(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=SP(180);return t?rc(e,{x:R(o),duration:r,easing:oc}):n?{duration:0}:ic(e,{axis:`x`,duration:r,easing:oc})}async function m(e){if(e===R(l))return;let t=R(l)&&!e;M(u,t,!0),M(l,e,!0),t&&(await xr(),M(u,!1))}function h(){M(d,!R(d)),Ca(i,R(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=nU(window.innerWidth,e);M(s,t.min,!0),M(c,t.max,!0),M(o,rU(a,window.innerWidth,e),!0)}function v(e){M(o,iU(e,window.innerWidth,g()),!0),a=R(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),Ca(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=R(o)+(e.key===`ArrowLeft`?24:-24),_(),a=R(o),Ca(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=aU(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:SP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}On(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Oa.anyOpen&&(R(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),On(()=>{n.conversationOpen||M(l,!1)}),On(()=>{if(!R(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),On(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var T=Xr(),E=F(T),ee=e=>{var t=Xr();W(F(t),16,()=>[R(l)],e=>e,(e,t)=>{var r=_U();let i,a;var l=P(r),f=I(l,2),g=P(f),_=I(P(g),2),v=P(_);let w;D(_),D(g);var T=I(g,2),E=P(T),ee=P(E);{let e=A(()=>t?so:oo);J(ee,{get icon(){return R(e)},class:`table-icon-svg`})}D(E),Rs(I(E,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),D(T),D(f);var te=I(f,2),ne=P(te),re=e=>{var t=sU(),n=P(t);J(P(n),{get icon(){return Na},width:`14`,height:`14`}),D(n);var r=I(n,2);J(P(r),{get icon(){return Aa},width:`14`,height:`14`}),D(r),D(t),z(`click`,n,()=>C(-1)),z(`click`,r,()=>C(1)),V(e,t)};U(ne,e=>{n.conversationMessages.length>1&&e(re)});var ie=I(ne,2),ae=e=>{var t=cU(),r=P(t,!0);D(t),L(()=>H(r,n.conversationError)),V(e,t)};U(ie,e=>{n.conversationError&&e(ae)});var oe=I(ie,2),se=e=>{V(e,lU())};U(oe,e=>{n.conversationLoading&&e(se)});var ce=I(oe,2),le=e=>{V(e,uU())},ue=A(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());U(ce,e=>{R(ue)&&e(le)});var de=I(ce,2),fe=e=>{var t=fU(),r=F(t),i=e=>{var t=dU(),n=P(t);let r;Ve(2),D(t),L(()=>{K(t,`aria-checked`,R(d)),K(t,`title`,(R(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=G(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":R(d)})}),z(`click`,t,h),V(e,t)},a=A(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));U(r,e=>{R(a)&&e(i)});var o=I(r,2);W(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{tU(e,{get msg(){return R(t)},get showPromptCache(){return R(d)}})}),D(o),ma(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),V(e,t)};U(de,e=>{n.conversationMessages.length>0&&e(fe)});var pe=I(de,2),me=e=>{V(e,pU())};U(pe,e=>{n.conversationTruncated&&e(me)});var he=I(pe,2),ge=e=>{var t=mU(),r=I(P(t),2),i=P(r,!0);D(r),D(t),L(e=>H(i,e),[()=>n.conversationLiveStatusText()]),V(e,t)},_e=A(()=>n.conversationLiveWaiting());U(he,e=>{R(_e)&&e(ge)}),D(te);var ve=I(te,2),ye=e=>{var t=gU(),r=P(t),i=P(r);ut(i);var a=I(i,2),o=e=>{var t=hU(),r=P(t,!0);D(t),L(()=>H(r,n.followUpError)),V(e,t)};U(a,e=>{n.followUpError&&e(o)});var s=I(a,2),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u),D(s),D(r),D(t),L((e,t,r)=>{i.disabled=e,H(l,t),u.disabled=r,H(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),zr(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),la(i,()=>n.followUpText,e=>n.followUpText=e),V(e,t)},be=A(()=>n.conversationAnchorID&&n.followUpKind());U(ve,e=>{R(be)&&e(ye)}),D(r),ma(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),L(()=>{i=G(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),K(r,`role`,t?`dialog`:void 0),K(r,`aria-modal`,t?`true`:void 0),a=Bi(r,``,a,{"--conversation-panel-width":R(o)+`px`}),K(l,`aria-valuemin`,R(s)),K(l,`aria-valuemax`,R(c)),K(l,`aria-valuenow`,R(o)),K(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),K(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=G(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),K(E,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),K(E,`title`,t?`Exit fullscreen`:`Fullscreen`),K(E,`aria-pressed`,t)}),z(`pointerdown`,l,y),z(`pointermove`,l,b),z(`pointerup`,l,x),zr(`pointercancel`,l,x),zr(`lostpointercapture`,l,x),z(`keydown`,l,S),z(`click`,E,()=>m(!t)),Di(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&R(u)})),V(e,r)}),V(e,t)};U(E,e=>{n.conversationOpen&&e(ee)}),V(e,T),k()}Br([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var yU=B(`
                  `,1);function bU(e,t){O(t,!0);let n={overview:OC,usage:wT,budgets:eD,"rate-limits":dO,models:Xj,workflows:_P,"audit-logs":mR,guardrails:sz,"mcp-servers":Vz,"providers-config":XB,"auth-keys":WV,settings:qH};vs.init(),Uc.init(),Y.init(),Ea.init(),Da.init(),Yo.init(),On(()=>{Y.refreshTick,ks.fetch(),Wc.fetchModels(),Wc.fetchCategories()}),On(()=>{document.body.classList.toggle(`dashboard-modal-open`,Oa.anyOpen)});let r=A(()=>n[Yo.page]||OC);var i=yU(),a=F(i);Is(a,{});var o=I(a,2);let s;var c=P(o);mc(c,{}),hi(I(c,2),()=>R(r),(e,t)=>{t(e,{})}),D(o);var l=I(o,2);vU(l,{});var u=I(l,2);Ks(u,{});var d=I(u,2);Qs(d,{}),fc(I(d,2),{}),L(()=>s=G(o,1,`content`,null,s,{"interactions-open":CL.conversationOpen})),V(e,i),k()}$r(bU,{target:document.getElementById(`app`)}); \ No newline at end of file + the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=I(m,2),g=P(h);ea(g),Ve(2),D(h),D(p),PE(I(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=vV();ut(n),la(n,()=>fV.form.description,e=>fV.form.description=e),V(e,n)},$$slots:{default:!0}}),D(t),la(i,()=>fV.form.name,e=>fV.form.name=e),la(o,()=>fV.form.expires_at,e=>fV.form.expires_at=e),la(l,()=>fV.form.user_path,e=>fV.form.user_path=e),la(f,()=>fV.form.labels,e=>fV.form.labels=e),ua(g,()=>fV.form.dashboard_access,e=>fV.form.dashboard_access=e),V(e,t)};U(r,e=>{fV.issuedValue?e(i):e(a,-1)}),V(e,n)},$$slots:{default:!0}})}k()}var xV=B(`

                  `),SV=B(`

                  Applies to new requests made with this key. Leave empty to remove all labels.

                  `,1);function CV(e,t){O(t,!0),ME(e,{get open(){return fV.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return fV.labelsEditor.error},get submitting(){return fV.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>fV.closeLabelsEditor(),onsubmit:()=>fV.submitLabelsEditor(),headerHint:e=>{var t=xV(),n=P(t,!0);D(t),L(()=>H(n,fV.labelsEditor.name)),V(e,t)},children:(e,t)=>{PE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=SV(),r=F(n);ea(r),Ve(2),la(r,()=>fV.labelsEditor.value,e=>fV.labelsEditor.value=e),V(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),k()}var wV=B(` `),TV=B(`
                  `),EV=B(``),DV=B(`Expired`),OV=B(` `),kV=B(` `,1),AV=B(`Deactivated`),jV=B(`
                  `),MV=B(`
                  NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
                  `);function NV(e,t){O(t,!0);var n=MV(),r=P(n),i=P(r),a=P(i),o=I(P(a),5),s=P(o);J(I(P(s)),{get icon(){return eo},width:`13`,height:`13`}),D(s),D(o),Ve(3),D(a),D(i);var c=I(i);W(c,21,()=>fV.visibleKeys,e=>e.id,(e,t)=>{var n=jV();let r;var i=P(n),a=P(i,!0);D(i);var o=I(i),s=P(o,!0);D(o);var c=I(o),l=P(c,!0);D(c);var u=I(c),d=P(u),f=e=>{var n=TV();W(n,20,()=>R(t).labels||[],e=>e,(e,t)=>{var n=wV(),r=P(n,!0);D(n),L(e=>{Bi(n,e),H(r,t)},[()=>eb(t)]),V(e,n)}),D(n),V(e,n)},p=e=>{V(e,EV())};U(d,e=>{(R(t).labels||[]).length>0?e(f):e(p,-1)}),D(u);var m=I(u),h=P(m),g=P(h,!0);D(h),D(m);var _=I(m),v=P(_);let y;var b=P(v,!0);D(v),D(_);var x=I(_),S=P(x),C=e=>{var n=OV(),r=P(n),i=P(r,!0);D(r);var a=I(r,2),o=e=>{V(e,DV())},s=A(()=>tV(R(t)));U(a,e=>{R(s)&&e(o)}),D(n),L(e=>H(i,e),[()=>wc(R(t).expires_at)]),V(e,n)},w=e=>{V(e,Yr(`—`))};U(S,e=>{R(t).expires_at?e(C):e(w,-1)}),D(x);var T=I(x),E=P(T,!0);D(T);var ee=I(T),te=P(ee),ne=P(te),re=e=>{var n=kV(),r=F(n);{let e=A(()=>(R(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+R(t).name),n=A(()=>!!fV.dashboardAccessID);OT(r,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fV.toggleDashboardAccess(R(t)),get disabled(){return R(n)},children:(e,n)=>{{let n=A(()=>R(t).dashboard_access?wo:Co);J(e,{get icon(){return R(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=I(r,2);{let e=A(()=>`Edit labels for API key `+R(t).name);OT(i,{get label(){return R(e)},class:`table-icon-btn`,onclick:()=>fV.openLabelsEditor(R(t)),children:(e,t)=>{J(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=I(i,2);{let e=A(()=>(fV.deactivatingID===R(t).id?`Deactivating API key `:`Deactivate API key `)+R(t).name),n=A(()=>fV.deactivatingID===R(t).id);OT(a,{get label(){return R(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>fV.deactivateKey(R(t)),get disabled(){return R(n)},children:(e,t)=>{J(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}V(e,n)},ie=e=>{var n=AV();L(e=>K(n,`title`,e),[()=>R(t).deactivated_at?`Deactivated on `+Tc(R(t).deactivated_at):`Deactivated`]),V(e,n)},ae=A(()=>nV(R(t)));U(ne,e=>{R(t).active?e(re):R(ae)&&e(ie,1)}),D(te),D(ee),D(n),L((e,i,o)=>{r=G(n,1,`svelte-nf0ldb`,null,r,e),H(a,R(t).name),H(s,R(t).description||`—`),H(l,R(t).user_path||`—`),H(g,R(t).redacted_value),y=G(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":R(t).dashboard_access,"auth-key-status-inactive":!R(t).dashboard_access}),H(b,R(t).dashboard_access?`Allowed`:`Denied`),K(x,`title`,i),H(E,o)},[()=>({"auth-key-row-deactivated":nV(R(t))}),()=>R(t).expires_at?Tc(R(t).expires_at):``,()=>vs.formatTimestamp(R(t).created_at)]),V(e,n)}),D(c),D(r),D(n),V(e,n),k()}var PV=B(``),FV=B(`
                  API key management is unavailable.
                  `),IV=B(``),LV=B(`

                  Managed API keys authenticate requests to the gateway. Deactivation is + permanent — create a new key if access needs to be restored.

                  `),RV=B(`
                  `),zV=B(`
                  `),BV=B(`

                  `),VV=B(`

                  No API keys yet. Issue a key to get started.

                  `),HV=B(`
                  `);function UV(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`auth-keys`&&fV.fetchKeys()});var n=HV(),r=P(n),i=I(P(r),2),a=P(i),o=e=>{var t=PV();J(P(t),{get icon(){return po},class:`table-icon-svg`}),Ve(2),D(t),L(()=>t.disabled=fV.formSubmitting),z(`click`,t,()=>{fV.formSubmitting||fV.openForm()}),V(e,t)};U(a,e=>{fV.available&&!Y.authError&&e(o)}),D(i),D(r);var s=I(r,2),c=e=>{V(e,FV())};U(s,e=>{!fV.available&&!Y.authError&&e(c)});var l=I(s,2),u=e=>{var t=IV(),n=P(t,!0);D(t),L(()=>H(n,fV.error)),V(e,t)};U(l,e=>{fV.error&&!Y.authError&&!fV.formOpen&&e(u)});var d=I(l,2),f=e=>{V(e,LV())};U(d,e=>{fV.available&&!Y.authError&&e(f)});var p=I(d,2);bV(p,{});var m=I(p,2);CV(m,{});var h=I(m,2),g=e=>{var t=RV();NS(P(t),{size:18,label:`Loading API keys`}),D(t),V(e,t)};U(h,e=>{fV.loading&&fV.keys.length===0&&e(g)});var _=I(h,2),v=e=>{var t=zV(),n=P(t);jw(P(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return fV.filter},set value(e){fV.filter=e}}),D(n);var r=I(n,2),i=P(r),a=P(i);ea(a);var o=I(a,2),s=I(P(o)),c=e=>{var t=Yr();L(()=>H(t,`(${fV.inactiveCount??``})`)),V(e,t)};U(s,e=>{fV.inactiveCount>0&&e(c)}),D(o),D(i),D(r),D(t),ua(a,()=>fV.showInactive,e=>fV.showInactive=e),V(e,t)};U(_,e=>{fV.keys.length>0&&fV.available&&e(v)});var y=I(_,2),b=e=>{NV(e,{})};U(y,e=>{fV.visibleKeys.length>0&&fV.available&&e(b)});var x=I(y,2),S=e=>{var t=BV(),n=P(t);D(t),L(()=>H(n,`No API keys match the current filter.${fV.inactiveCount>0&&!fV.showInactive?` `+fV.inactiveCount+` inactive `+(fV.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),V(e,t)};U(x,e=>{fV.keys.length>0&&fV.visibleKeys.length===0&&fV.available&&e(S)});var C=I(x,2),w=e=>{V(e,VV())};U(C,e=>{fV.keys.length===0&&!fV.loading&&!Y.authError&&!fV.error&&fV.available&&e(w)}),D(n),V(e,n),k()}Br([`click`]);var WV=B(`

                  Timezone

                  `),GV=B(``),KV=B(``),qV=B(`
                  `,1);function JV(e,t){O(t,!0);function n(){vs.saveOverride(),Y.refresh()}function r(){vs.clearOverride(),Y.refresh()}var i=qV(),a=F(i);iC(P(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{V(e,WV())},$$slots:{title:!0}}),D(a);var o=I(a,2),s=P(o),c=I(P(s),2),l=P(c),u=P(l);D(l),l.value=l.__value=``,W(I(l),17,()=>vs.options,e=>e.value,(e,t)=>{var n=GV(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(c),D(s),D(o);var d=I(o,2),f=P(d),p=e=>{var t=KV();z(`click`,t,r),V(e,t)};U(f,e=>{vs.override&&e(p)}),D(d),L(e=>H(u,`Automatic (${e??``})`),[()=>vs.detectedTimeZoneLabel()]),zr(`focus`,c,()=>vs.ensureOptions()),z(`change`,c,n),Ui(c,()=>vs.override,e=>vs.override=e),V(e,i),k()}Br([`change`,`click`]);var YV=B(``),XV=B(`

                  Failover

                  `,1);function ZV(e,t){O(t,!0);let n=A(()=>Q.failoverSaving||Q.failoverGenerating||Q.failoverDraftSaving||!Q.failoverAvailable||!Q.failoverEnabled());var r=XV(),i=F(r),a=I(P(i),2),o=P(a),s=P(o);J(s,{get icon(){return Fo},class:`form-action-icon`});var c=I(s,2),l=P(c,!0);D(c),D(o);var u=I(o,2);J(P(u),{get icon(){return Ao},class:`form-action-icon`}),Ve(2),D(u),D(a),D(i);var d=I(i,2),f=P(d),p=e=>{var t=YV(),n=P(t,!0);D(t),L(()=>H(n,Q.failoverError)),V(e,t)};U(f,e=>{Q.failoverError&&e(p)}),D(d),Dj(I(d,2),{}),L(()=>{o.disabled=R(n),H(l,Q.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=R(n)}),z(`click`,o,()=>Q.generateFailoverRules()),z(`click`,u,()=>Q.openFailoverResetDialog()),V(e,r),k()}Br([`click`]);function QV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function $V(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function eH(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var tH=B(`

                  Budget Resets

                  `),nH=B(``),rH=B(`

                  If the selected day does not exist in a month, the reset runs on + the last day of that month.

                  `),iH=B(``),aH=B(``),oH=B(`
                  Monthly
                  Weekly
                  Daily
                  `,1);function sH(e,t){O(t,!0);let n=j(N(QV())),r=j(!1),i=j(!1),a=j(``),o=j(!1),s=A(()=>ks.budgetsVisible());async function c(){if(await ks.ensureLoaded(),!ks.budgetsVisible()){M(a,``);return}M(r,!0),M(a,``);try{let e=await ws(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load budget settings.`);return}M(n,$V(e.data,R(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),M(a,`Unable to load budget settings.`)}finally{M(r,!1)}}async function l(){if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/budgets/settings`,`PUT`,$V(R(n),R(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){lc.error(`Unable to save budget settings.`);return}M(n,$V(e.data,R(n)),!0),M(a,``),lc.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),lc.error(`Unable to save budget settings.`)}finally{M(i,!1)}}}On(()=>{Y.refreshTick,c()});var u=Xr(),d=F(u),f=e=>{var t=oH(),s=F(t),c=P(s);iC(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{V(e,tH())},$$slots:{title:!0}});var u=I(c,2),d=P(u),f=I(P(d),2),p=P(f);iC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return R(o)},set open(e){M(o,e,!0)},title:e=>{V(e,nH())},$$slots:{title:!0}});var m=I(p,2);ea(m),D(f);var h=I(f,2),g=I(P(h),2);ea(g),D(h);var _=I(h,2),v=I(P(_),2);ea(v),D(_);var y=I(_,2),b=P(y),x=e=>{V(e,rH())};U(b,e=>{R(o)&&e(x)}),D(y),D(d);var S=I(d,2),C=I(P(S),2),w=I(P(C),2);W(w,21,eH,e=>e.value,(e,t)=>{var n=iH(),r=P(n,!0);D(n);var i={};L(()=>{H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(w),D(C);var T=I(C,2),E=I(P(T),2);ea(E),D(T);var ee=I(T,2),te=I(P(ee),2);ea(te),D(ee),Ve(2),D(S);var ne=I(S,2),re=I(P(ne),4),ie=I(P(re),2);ea(ie),D(re);var ae=I(re,2),oe=I(P(ae),2);ea(oe),D(ae),Ve(2),D(ne),D(u);var se=I(u,2),ce=P(se);J(P(ce),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(ce);var le=I(ce,2),ue=e=>{NS(e,{size:16,label:`Loading budget settings`})};U(le,e=>{R(r)&&e(ue)}),D(se),D(s);var de=I(s,2),fe=P(de),pe=e=>{var t=aH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(fe,e=>{R(a)&&e(pe)}),D(de),L(()=>{ce.disabled=R(i)||R(r),K(ce,`aria-busy`,R(i)?`true`:`false`)}),la(m,()=>R(n).monthly_reset_day,e=>R(n).monthly_reset_day=e),la(g,()=>R(n).monthly_reset_hour,e=>R(n).monthly_reset_hour=e),la(v,()=>R(n).monthly_reset_minute,e=>R(n).monthly_reset_minute=e),Ui(w,()=>R(n).weekly_reset_weekday,e=>R(n).weekly_reset_weekday=e),la(E,()=>R(n).weekly_reset_hour,e=>R(n).weekly_reset_hour=e),la(te,()=>R(n).weekly_reset_minute,e=>R(n).weekly_reset_minute=e),la(ie,()=>R(n).daily_reset_hour,e=>R(n).daily_reset_hour=e),la(oe,()=>R(n).daily_reset_minute,e=>R(n).daily_reset_minute=e),z(`click`,ce,l),V(e,t)};U(d,e=>{R(s)&&e(f)}),V(e,u),k()}Br([`click`]);var cH=B(`

                  Reset All Budgets

                  Start new budget periods for every configured budget without changing + the limits.

                  `);function lH(e,t){O(t,!0);var n=Xr(),r=F(n),i=e=>{var t=cH(),n=I(P(t),2),r=P(n);J(P(r),{get icon(){return go},class:`form-action-icon`}),Ve(2),D(r),D(n),D(t),L(()=>r.disabled=X.resetAllLoading),z(`click`,r,()=>X.openResetDialog()),V(e,t)},a=A(()=>ks.budgetsVisible());U(r,e=>{R(a)&&e(i)}),V(e,n),k()}Br([`click`]);function uH(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function dH(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function fH(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function pH(e){return e&&e.error&&e.error.message?e.error.message:``}var mH=B(`

                  Tagging based on headers

                  `),hH=B(`config`),gH=B(``),_H=B(`
                  `),vH=B(`

                  No tagging headers configured. Requests are not labelled.

                  `),yH=B(``),bH=B(`
                  `,1);function xH(e,t){O(t,!0);let n=j(N([])),r=j(!0),i=j(!1),a=j(!1),o=j(``);function s(){R(n).push(uH())}function c(e){let t=R(n)[e];!t||t.managed||R(n).splice(e,1)}async function l(){M(i,!0),M(o,``);try{let e=await ws(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){M(o,`Unable to load tagging settings.`);return}M(n,dH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),M(o,`Unable to load tagging settings.`)}finally{M(i,!1)}}async function u(){if(!(R(a)||!R(r))){M(a,!0);try{let e=await Ts(`/admin/tagging/settings`,`PUT`,fH(R(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){lc.error(e.status!==401&&pH(e.data)||`Unable to save tagging settings.`);return}M(n,dH(e.data),!0),M(r,e.data&&e.data.editable!==!1,!0),M(o,``),lc.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),lc.error(`Unable to save tagging settings.`)}finally{M(a,!1)}}}On(()=>{Y.refreshTick,l()});var d=bH(),f=F(d),p=P(f);iC(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{V(e,mH())},$$slots:{title:!0}});var m=I(p,2),h=P(m);W(h,17,()=>R(n),ii,(e,t,n)=>{var i=_H(),a=P(i),o=P(a);K(o,`for`,`tagging-header-`+n);var s=I(o,2);ea(s),K(s,`id`,`tagging-header-`+n),D(a);var l=I(a,2),u=P(l);K(u,`for`,`tagging-prefix-`+n);var d=I(u,2);ea(d),K(d,`id`,`tagging-prefix-`+n),D(l);var f=I(l,2),p=P(f);K(p,`for`,`tagging-delimiter-`+n);var m=I(p,2);ea(m),K(m,`id`,`tagging-delimiter-`+n),D(f);var h=I(f,2),g=P(h);ea(g),Ve(2),D(h);var _=I(h,2),v=P(_),y=e=>{V(e,hH())},b=e=>{var i=gH();L(()=>{i.disabled=!R(r),K(i,`aria-label`,`Remove tagging header `+(R(t).header||n+1))}),z(`click`,i,()=>c(n)),V(e,i)};U(v,e=>{R(t).managed?e(y):e(b,-1)}),D(_),D(i),L(()=>{s.disabled=R(t).managed||!R(r),d.disabled=R(t).managed||!R(r),m.disabled=R(t).managed||!R(r),g.disabled=R(t).managed||!R(r)}),la(s,()=>R(t).header,e=>R(t).header=e),la(d,()=>R(t).prefix,e=>R(t).prefix=e),la(m,()=>R(t).delimiter,e=>R(t).delimiter=e),ua(g,()=>R(t).do_not_pass,e=>R(t).do_not_pass=e),V(e,i)});var g=I(h,2),_=e=>{NS(e,{size:16,label:`Loading tagging settings`})};U(g,e=>{R(i)&&e(_)});var v=I(g,2),y=e=>{V(e,vH())};U(v,e=>{!R(i)&&R(n).length===0&&e(y)}),D(m);var b=I(m,2),x=P(b);J(P(x),{get icon(){return po},class:`form-action-icon`}),Ve(2),D(x);var S=I(x,2);J(P(S),{get icon(){return _o},class:`form-action-icon`}),Ve(2),D(S),D(b),D(f);var C=I(f,2),w=P(C),T=e=>{var t=yH(),n=P(t,!0);D(t),L(()=>H(n,R(o))),V(e,t)};U(w,e=>{R(o)&&e(T)}),D(C),L(()=>{x.disabled=!R(r)||R(a)||R(i),S.disabled=!R(r)||R(a)||R(i),K(S,`aria-busy`,R(a)?`true`:`false`)}),z(`click`,x,s),z(`click`,S,u),V(e,d),k()}Br([`click`]);function SH(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?Cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?Cc(r):``}}function CH(e,t,n,r){return{...SH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function wH(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var TH=B(`

                  Usage Pricing Recalculation

                  `),EH=B(`
                  `);function DH(e,t){O(t,!0);let n=j(``),r=j(``),i=j(!1),a=A(()=>ks.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}R(i)||Js.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Fa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!R(a)){lc.error(`Usage pricing recalculation is unavailable.`);return}if(!R(i)){M(i,!0);try{let e=await Ts(`/admin/usage/recalculate-pricing`,`POST`,CH({selectedPreset:Uc.selectedPreset,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate,today:vs.todayDate()},R(n),R(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Js.error=`Unable to recalculate pricing.`;return}Js.close(),lc.success(wH(e.data)),Yc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Js.error=`Unable to recalculate pricing.`}finally{M(i,!1)}}}var c=Xr(),l=F(c),u=e=>{var t=EH(),s=P(t);iC(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{V(e,TH())},$$slots:{title:!0}});var c=I(s,2),l=P(c),u=I(P(l),2);fl(P(u),{}),D(u),D(l);var d=I(l,2),f=I(P(d),2);ea(f),D(d);var p=I(d,2),m=I(P(p),2);ea(m),D(p),D(c);var h=I(c,2),g=P(h);J(P(g),{get icon(){return Fa},class:`form-action-icon`}),Ve(2),D(g),D(h),D(t),L(()=>{g.disabled=R(i)||!R(a),K(g,`aria-busy`,R(i)?`true`:`false`)}),la(f,()=>R(n),e=>M(n,e)),la(m,()=>R(r),e=>M(r,e)),z(`click`,g,o),V(e,t)};U(l,e=>{R(a)&&e(u)}),V(e,c),k()}Br([`click`]);function OH(e){return String(e&&e.status||`ok`).toLowerCase()}function kH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=OH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function AH(e){return!!e&&OH(e)===`ok`}function jH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function MH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var NH=B(`

                  Runtime Refresh

                  `),PH=B(`
                • `),FH=B(`
                    `),IH=B(`
                    `,1);function LH(e,t){O(t,!0);let n=j(!1),r=j(null);async function i(){if(!R(n)){M(n,!0),M(r,null);try{let e=await Ts(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){lc.error(`Runtime refresh failed.`);return}M(r,e.data&&typeof e.data==`object`?e.data:null,!0),AH(R(r))?lc.success(kH(R(r))):lc.error(kH(R(r))),Y.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),lc.error(`Runtime refresh failed.`)}finally{M(n,!1)}}}var a=IH(),o=F(a),s=P(o);iC(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{V(e,NH())},$$slots:{title:!0}});var c=I(s,2),l=P(c);let u;J(P(l),{get icon(){return ho},class:`settings-refresh-icon`}),Ve(2),D(l),D(c),D(o);var d=I(o,2),f=P(d),p=e=>{var t=FH();W(t,21,()=>jH(R(r)),e=>e.name,(e,t)=>{var n=PH(),r=P(n,!0);D(n),L(e=>{G(n,1,`runtime-refresh-step is-${R(t).status??``}`,`svelte-yeq2mp`),H(r,e)},[()=>MH(R(t))]),V(e,n)}),D(t),V(e,t)},m=A(()=>jH(R(r)).length>0);U(f,e=>{R(m)&&e(p)}),D(d),L(()=>{u=G(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":R(n)}),l.disabled=R(n),K(l,`aria-busy`,R(n)?`true`:`false`)}),z(`click`,l,i),V(e,a),k()}Br([`click`]);var RH=B(``),zH=B(`

                    `),BH=B(`

                    `),VH=B(``),HH=B(`
                    `),UH=B(`

                    AI Processing

                    `);function WH(e,t){O(t,!0);let n=j(N([])),r=j(!1),i=j(``),a=j(``);async function o(){M(r,!0),M(a,``);try{let e=await ws(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){M(a,`Unable to load runtime settings.`);return}M(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),M(a,`Unable to load runtime settings.`)}finally{M(r,!1)}}async function s(e,t,r){if(!(e.locked||R(i))){M(i,e.key,!0);try{let i=await Ts(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,lc.error(`Unable to save ${e.label}.`);return}M(n,R(n).map(t=>t.key===e.key?i.data:t),!0),lc.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),lc.error(`Unable to save ${e.label}.`)}finally{M(i,``)}}}On(()=>{Y.refreshTick,o()});var c=Xr(),l=F(c),u=e=>{var t=UH(),o=P(t),c=I(P(o),2),l=e=>{var t=RH(),n=P(t,!0);D(t),L(()=>H(n,R(a))),V(e,t)};U(c,e=>{R(a)&&e(l)}),D(o);var u=I(o,2);W(u,21,()=>R(n),e=>e.key,(e,t)=>{var n=HH(),r=P(n),a=P(r),o=P(a,!0);D(a);var c=I(a,2),l=e=>{var n=zH(),r=P(n,!0);D(n),L(()=>H(r,R(t).description)),V(e,n)};U(c,e=>{R(t).description&&e(l)});var u=I(c,2),d=e=>{var n=BH(),r=P(n);D(n),L(()=>H(r,`Managed by ${(R(t).managed_by||`environment`)??``}`)),V(e,n)};U(u,e=>{R(t).locked&&e(d)}),D(r);var f=I(r,2);W(f,21,()=>R(t).options||[],e=>e.value,(e,t)=>{var n=VH(),r=P(n,!0);D(n);var i={};L(()=>{K(n,`title`,R(t).description||``),H(r,R(t).label),i!==(i=R(t).value)&&(n.value=(n.__value=R(t).value)??``)}),V(e,n)}),D(f);var p;Hi(f),D(n),L(()=>{K(a,`for`,`runtime-setting-${R(t).key}`),H(o,R(t).label),K(f,`id`,`runtime-setting-${R(t).key}`),f.disabled=R(t).locked||R(i)!==``,p!==(p=R(t).value)&&(f.value=(f.__value=R(t).value)??``,Vi(f,R(t).value))}),z(`change`,f,e=>s(R(t),e.currentTarget.value,e.currentTarget)),V(e,n)}),D(u),D(t),L(()=>K(u,`aria-busy`,R(r)?`true`:`false`)),V(e,t)};U(l,e=>{(R(n).length>0||R(a))&&e(u)}),V(e,c),k()}Br([`change`]);var GH=B(`
                    `);function KH(e,t){O(t,!0),On(()=>{Y.refreshTick,Yo.page===`settings`&&(vs.ensureOptions(),ks.ensureLoaded())});var n=GH(),r=I(P(n),2),i=P(r);JV(i,{});var a=I(i,2);ZV(a,{});var o=I(a,2);sH(o,{});var s=I(o,2);lH(s,{});var c=I(s,2);xH(c,{});var l=I(c,2);WH(l,{});var u=I(l,2);DH(u,{}),LH(I(u,2),{}),D(r);var d=I(r,2),f=P(d,!0);D(d),D(n),L(e=>H(f,e),[()=>Wo()]),V(e,n),k()}var qH=B(`
                    `),JH=B(`
                     
                    `),YH=B(`
                     
                    `),XH=B(`
                     
                    `),ZH=B(`
                    `),QH=B(`
                    `,1),$H=B(`
                    `);function eU(e,t){O(t,!0);let n=q(t,`showPromptCache`,3,!0),r=MM({logPrefix:`Failed to copy interaction message:`}),i=A(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=$H();let l;var u=P(c),d=e=>{var r=JH(),i=P(r),a=P(i),c=P(a,!0);D(a);var l=I(a,2),u=P(l,!0);D(l);var d=I(l,2),f=P(d,!0);D(d),D(i);var p=I(i,2),m=e=>{var n=qH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${t.msg.functionCallID??``}`)),V(e,n)};U(p,e=>{t.msg.functionCallID&&e(m)});var h=I(p,2),g=e=>{var n=Xr();W(F(n),17,()=>t.msg.toolCalls,ii,(e,n)=>{var r=Xr(),i=F(r),a=e=>{var r=qH(),i=P(r);D(r),L(()=>H(i,`Call ID${t.msg.toolCalls.length>1?` (`+R(n).name+`)`:``}: ${R(n).id??``}`)),V(e,r)};U(i,e=>{R(n).id&&e(a)}),V(e,r)}),V(e,n)};U(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=I(h,2),v=P(_,!0);D(_),D(r),L((e,n,i,a)=>{K(r,`title`,e),H(c,t.msg.roleLabel),H(u,n),H(f,i),H(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>vs.formatTimestamp(t.msg.timestamp),()=>fL(t.msg)]),V(e,r)},f=e=>{var r=QH(),i=F(r),a=P(i),s=P(a,!0);D(a);var c=I(a,2),l=P(c,!0);D(c),D(i);var u=I(i,2),d=e=>{var r=YH(),i=P(r,!0);D(r),L(e=>{K(r,`title`,e),H(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),V(e,r)};U(u,e=>{t.msg.text&&e(d)});var f=I(u,2),p=e=>{var n=ZH();W(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=XH(),r=P(n),i=P(r),a=P(i,!0);D(i);var o=I(i,2),s=P(o,!0);D(o),D(r);var c=I(r,2),l=e=>{var n=qH(),r=P(n);D(n),L(()=>H(r,`Call ID: ${R(t).id??``}`)),V(e,n)};U(c,e=>{R(t).id&&e(l)});var u=I(c,2),d=P(u,!0);D(u),D(n),L((e,n)=>{H(a,R(t).name+`()`),H(s,e),H(d,n)},[()=>mL(R(t))||`No arguments`,()=>mL(R(t))||`No arguments`]),V(e,n)}),D(n),V(e,n)};U(f,e=>{t.msg.toolCalls&&e(p)}),L((e,n)=>{K(i,`title`,e),H(s,t.msg.roleLabel),H(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>vs.formatTimestamp(t.msg.timestamp)]),V(e,r)};U(u,e=>{R(i)?e(d):e(f,-1)});var p=I(u,2);let m;var h=P(p);{let e=A(()=>r.copied?Ga:Ja);J(h,{get icon(){return R(e)},width:`14`,height:`14`})}D(p),D(c),L(e=>{G(c,1,Ni([R(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),K(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),K(c,`data-entry-id`,t.msg.entryID),l=Bi(c,``,l,e),m=G(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),K(p,`aria-label`,r.copied?`Message copied`:`Copy message`),K(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),z(`click`,p,e=>{e.stopPropagation(),r.copy(pL(t.msg))}),V(e,c),k()}Br([`click`]);function tU(e,t=0){let n=Math.max(0,aU(e)-Math.max(0,aU(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function nU(e,t,n=0){let r=tU(t,n),i=aU(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function rU(e,t,n=0){return nU(aU(t)-aU(e),t,n)}function iU(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=aU(t),a=0;e.forEach((e,t)=>{aU(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=aU(e[c])0&&s===c&&l?`end`:`start`}}function aU(e){let t=Number(e);return Number.isFinite(t)?t:0}var oU=B(`
                    `),sU=B(`
                    `),cU=B(`

                    Loading interactions...

                    `),lU=B(`

                    No interaction data available for this entry.

                    `),uU=B(``),dU=B(`
                    `,1),fU=B(`

                    Showing the newest part of this session and the selected log.

                    `),pU=B(`
                    `),mU=B(``),hU=B(``),gU=B(``);function _U(e,t){O(t,!0);let n=SL,r=Number(Sa(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=j(N(a)),s=j(320),c=j(760),l=j(!1),u=j(!1),d=j(Sa(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=SP(180);return t?rc(e,{x:R(o),duration:r,easing:oc}):n?{duration:0}:ic(e,{axis:`x`,duration:r,easing:oc})}async function m(e){if(e===R(l))return;let t=R(l)&&!e;M(u,t,!0),M(l,e,!0),t&&(await xr(),M(u,!1))}function h(){M(d,!R(d)),Ca(i,R(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=tU(window.innerWidth,e);M(s,t.min,!0),M(c,t.max,!0),M(o,nU(a,window.innerWidth,e),!0)}function v(e){M(o,rU(e,window.innerWidth,g()),!0),a=R(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),Ca(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=R(o)+(e.key===`ArrowLeft`?24:-24),_(),a=R(o),Ca(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=iU(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:SP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}On(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Oa.anyOpen&&(R(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),On(()=>{n.conversationOpen||M(l,!1)}),On(()=>{if(!R(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),On(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var T=Xr(),E=F(T),ee=e=>{var t=Xr();W(F(t),16,()=>[R(l)],e=>e,(e,t)=>{var r=gU();let i,a;var l=P(r),f=I(l,2),g=P(f),_=I(P(g),2),v=P(_);let w;D(_),D(g);var T=I(g,2),E=P(T),ee=P(E);{let e=A(()=>t?so:oo);J(ee,{get icon(){return R(e)},class:`table-icon-svg`})}D(E),Rs(I(E,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),D(T),D(f);var te=I(f,2),ne=P(te),re=e=>{var t=oU(),n=P(t);J(P(n),{get icon(){return Na},width:`14`,height:`14`}),D(n);var r=I(n,2);J(P(r),{get icon(){return Aa},width:`14`,height:`14`}),D(r),D(t),z(`click`,n,()=>C(-1)),z(`click`,r,()=>C(1)),V(e,t)};U(ne,e=>{n.conversationMessages.length>1&&e(re)});var ie=I(ne,2),ae=e=>{var t=sU(),r=P(t,!0);D(t),L(()=>H(r,n.conversationError)),V(e,t)};U(ie,e=>{n.conversationError&&e(ae)});var oe=I(ie,2),se=e=>{V(e,cU())};U(oe,e=>{n.conversationLoading&&e(se)});var ce=I(oe,2),le=e=>{V(e,lU())},ue=A(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());U(ce,e=>{R(ue)&&e(le)});var de=I(ce,2),fe=e=>{var t=dU(),r=F(t),i=e=>{var t=uU(),n=P(t);let r;Ve(2),D(t),L(()=>{K(t,`aria-checked`,R(d)),K(t,`title`,(R(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=G(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":R(d)})}),z(`click`,t,h),V(e,t)},a=A(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));U(r,e=>{R(a)&&e(i)});var o=I(r,2);W(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{eU(e,{get msg(){return R(t)},get showPromptCache(){return R(d)}})}),D(o),ma(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),V(e,t)};U(de,e=>{n.conversationMessages.length>0&&e(fe)});var pe=I(de,2),me=e=>{V(e,fU())};U(pe,e=>{n.conversationTruncated&&e(me)});var he=I(pe,2),ge=e=>{var t=pU(),r=I(P(t),2),i=P(r,!0);D(r),D(t),L(e=>H(i,e),[()=>n.conversationLiveStatusText()]),V(e,t)},_e=A(()=>n.conversationLiveWaiting());U(he,e=>{R(_e)&&e(ge)}),D(te);var ve=I(te,2),ye=e=>{var t=hU(),r=P(t),i=P(r);ut(i);var a=I(i,2),o=e=>{var t=mU(),r=P(t,!0);D(t),L(()=>H(r,n.followUpError)),V(e,t)};U(a,e=>{n.followUpError&&e(o)});var s=I(a,2),c=P(s),l=P(c,!0);D(c);var u=I(c,2),d=P(u,!0);D(u),D(s),D(r),D(t),L((e,t,r)=>{i.disabled=e,H(l,t),u.disabled=r,H(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),zr(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),la(i,()=>n.followUpText,e=>n.followUpText=e),V(e,t)},be=A(()=>n.conversationAnchorID&&n.followUpKind());U(ve,e=>{R(be)&&e(ye)}),D(r),ma(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),L(()=>{i=G(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),K(r,`role`,t?`dialog`:void 0),K(r,`aria-modal`,t?`true`:void 0),a=Bi(r,``,a,{"--conversation-panel-width":R(o)+`px`}),K(l,`aria-valuemin`,R(s)),K(l,`aria-valuemax`,R(c)),K(l,`aria-valuenow`,R(o)),K(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),K(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=G(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),K(E,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),K(E,`title`,t?`Exit fullscreen`:`Fullscreen`),K(E,`aria-pressed`,t)}),z(`pointerdown`,l,y),z(`pointermove`,l,b),z(`pointerup`,l,x),zr(`pointercancel`,l,x),zr(`lostpointercapture`,l,x),z(`keydown`,l,S),z(`click`,E,()=>m(!t)),Di(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&R(u)})),V(e,r)}),V(e,t)};U(E,e=>{n.conversationOpen&&e(ee)}),V(e,T),k()}Br([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var vU=B(`
                    `,1);function yU(e,t){O(t,!0);let n={overview:OC,usage:wT,budgets:eD,"rate-limits":dO,models:Xj,workflows:_P,"audit-logs":pR,guardrails:oz,"mcp-servers":Bz,"providers-config":YB,"auth-keys":UV,settings:KH};vs.init(),Uc.init(),Y.init(),Ea.init(),Da.init(),Yo.init(),On(()=>{Y.refreshTick,ks.fetch(),Wc.fetchModels(),Wc.fetchCategories()}),On(()=>{document.body.classList.toggle(`dashboard-modal-open`,Oa.anyOpen)});let r=A(()=>n[Yo.page]||OC);var i=vU(),a=F(i);Is(a,{});var o=I(a,2);let s;var c=P(o);mc(c,{}),hi(I(c,2),()=>R(r),(e,t)=>{t(e,{})}),D(o);var l=I(o,2);_U(l,{});var u=I(l,2);Ks(u,{});var d=I(u,2);Qs(d,{}),fc(I(d,2),{}),L(()=>s=G(o,1,`content`,null,s,{"interactions-open":SL.conversationOpen})),V(e,i),k()}$r(yU,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index e10d2144c..6ca55e55f 100644 --- a/internal/admin/dashboard/static/dist/index.html +++ b/internal/admin/dashboard/static/dist/index.html @@ -7,7 +7,7 @@ GoModel Dashboard - + diff --git a/internal/admin/handler.go b/internal/admin/handler.go index 9facdf965..7d80b4534 100644 --- a/internal/admin/handler.go +++ b/internal/admin/handler.go @@ -169,17 +169,8 @@ type auditConversationResponse struct { } type auditSessionResponse struct { - SessionID string `json:"session_id,omitempty"` - // Count is the number of requests matching the active filters. - // Deprecated: use MatchingCount. - Count int `json:"count" extensions:"x-deprecated"` - // MatchingCount is the number of requests matching the active filters. - MatchingCount int `json:"matching_count"` - // TotalCount is the number of requests in the complete session. - TotalCount int `json:"total_count"` - FirstTimestamp time.Time `json:"first_timestamp"` - LastTimestamp time.Time `json:"last_timestamp"` - Latest auditLogEntryResponse `json:"latest"` + RequestCount int `json:"request_count"` + Latest auditLogEntryResponse `json:"latest"` } type auditSessionsListResponse struct { diff --git a/internal/admin/handler_audit.go b/internal/admin/handler_audit.go index f93f1eb07..4fa28b16d 100644 --- a/internal/admin/handler_audit.go +++ b/internal/admin/handler_audit.go @@ -192,8 +192,8 @@ func parseAuditLogQueryParams(c *echo.Context) (auditlog.LogQueryParams, error) // // @Summary Get paginated audit sessions (threads) // @Description Groups audit log entries by session id into threads and returns -// @Description one summary per thread — its latest entry, entry count, and time -// @Description span — ordered by latest activity. Entries without a session id +// @Description one summary per thread — its latest matching entry and complete +// @Description request count — ordered by latest activity. Entries without a session id // @Description appear as single-entry threads. Filters apply to entries before // @Description grouping. // @Tags admin @@ -263,15 +263,9 @@ func (h *Handler) AuditSessions(c *echo.Context) error { // Session heads are list rows too. Keep the default grouped view on the // same slim payload contract as /admin/audit/log. slimAuditListEntry(&enriched.Entries[i]) - totalCount := max(session.Count, session.TotalCount) response.Sessions[i] = auditSessionResponse{ - SessionID: session.SessionID, - Count: session.Count, - MatchingCount: session.Count, - TotalCount: totalCount, - FirstTimestamp: session.FirstTimestamp, - LastTimestamp: session.LastTimestamp, - Latest: enriched.Entries[i], + RequestCount: session.RequestCount, + Latest: enriched.Entries[i], } } return c.JSON(http.StatusOK, response) diff --git a/internal/admin/handler_audit_sessions_test.go b/internal/admin/handler_audit_sessions_test.go index d48a80bd2..c7e5451a2 100644 --- a/internal/admin/handler_audit_sessions_test.go +++ b/internal/admin/handler_audit_sessions_test.go @@ -38,11 +38,8 @@ func TestAuditSessions_Success(t *testing.T) { sessionsResult: &auditlog.SessionListResult{ Sessions: []auditlog.SessionSummary{ { - SessionID: "sess-a", - Count: 3, - TotalCount: 6, - FirstTimestamp: now.Add(-time.Minute), - LastTimestamp: now, + SessionID: "sess-a", + RequestCount: 6, Latest: auditlog.LogEntry{ ID: "log-3", Timestamp: now, @@ -52,9 +49,7 @@ func TestAuditSessions_Success(t *testing.T) { }, }, { - Count: 1, - FirstTimestamp: now.Add(-time.Hour), - LastTimestamp: now.Add(-time.Hour), + RequestCount: 1, Latest: auditlog.LogEntry{ ID: "log-1", Timestamp: now.Add(-time.Hour), @@ -84,11 +79,8 @@ func TestAuditSessions_Success(t *testing.T) { var result struct { Sessions []struct { - SessionID string `json:"session_id"` - Count int `json:"count"` - MatchingCount int `json:"matching_count"` - TotalCount int `json:"total_count"` - Latest *auditlog.LogEntry `json:"latest"` + RequestCount int `json:"request_count"` + Latest *auditlog.LogEntry `json:"latest"` } `json:"sessions"` Total int `json:"total"` } @@ -98,13 +90,13 @@ func TestAuditSessions_Success(t *testing.T) { if result.Total != 2 || len(result.Sessions) != 2 { t.Fatalf("total=%d sessions=%d, want 2/2", result.Total, len(result.Sessions)) } - if result.Sessions[0].SessionID != "sess-a" || result.Sessions[0].Count != 3 || result.Sessions[0].MatchingCount != 3 || result.Sessions[0].TotalCount != 6 { + if result.Sessions[0].RequestCount != 6 { t.Errorf("first session = %+v", result.Sessions[0]) } if result.Sessions[0].Latest == nil || result.Sessions[0].Latest.ID != "log-3" { t.Errorf("latest entry not embedded: %+v", result.Sessions[0].Latest) } - if result.Sessions[1].SessionID != "" || result.Sessions[1].Count != 1 || result.Sessions[1].MatchingCount != 1 || result.Sessions[1].TotalCount != 1 { + if result.Sessions[1].RequestCount != 1 { t.Errorf("singleton thread = %+v", result.Sessions[1]) } } @@ -115,11 +107,9 @@ func TestAuditSessions_SlimsLatestEntries(t *testing.T) { reader := &mockAuditReader{ sessionsResult: &auditlog.SessionListResult{ Sessions: []auditlog.SessionSummary{{ - SessionID: "sess-a", - Count: 2, - FirstTimestamp: entry.Timestamp.Add(-time.Minute), - LastTimestamp: entry.Timestamp, - Latest: entry, + SessionID: "sess-a", + RequestCount: 2, + Latest: entry, }}, Total: 1, Limit: 25, diff --git a/internal/auditlog/reader.go b/internal/auditlog/reader.go index f515b429d..1a0f65175 100644 --- a/internal/auditlog/reader.go +++ b/internal/auditlog/reader.go @@ -44,19 +44,13 @@ type LogListResult struct { Offset int `json:"offset"` } -// SessionSummary describes one session (thread) of audit log entries: its -// latest matching entry plus aggregate span and counts. Count reflects the -// active filters; TotalCount covers the complete session. Entries without a -// session id form singleton threads whose SessionID is empty. +// SessionSummary describes one session (thread) of audit log entries. Filters +// choose the latest matching entry; RequestCount covers the complete session. +// Entries without a session id form singleton threads. type SessionSummary struct { - SessionID string `json:"session_id,omitempty"` - // Count is retained as the internal matching count for compatibility. - // Public API consumers should use the explicitly named matching_count field. - Count int `json:"count"` - TotalCount int `json:"total_count"` - FirstTimestamp time.Time `json:"first_timestamp"` - LastTimestamp time.Time `json:"last_timestamp"` - Latest LogEntry `json:"latest"` + SessionID string `json:"session_id,omitempty"` + RequestCount int `json:"request_count"` + Latest LogEntry `json:"latest"` } // SessionListResult holds a paginated list of session summaries ordered by @@ -93,8 +87,7 @@ type Reader interface { // GetSessions returns a paginated list of audit sessions (threads): one // summary per distinct session id, plus singleton threads for entries // without one, ordered by latest activity. Filters apply to entries before - // grouping, so a thread's Latest, Count and span reflect the matching - // entries. TotalCount reflects the complete session. + // grouping. RequestCount reflects the complete session. GetSessions(ctx context.Context, params LogQueryParams) (*SessionListResult, error) // GetLogByID returns a single audit log entry by ID. diff --git a/internal/auditlog/reader_sessions_mongodb.go b/internal/auditlog/reader_sessions_mongodb.go index b49bab2ce..1da3495dd 100644 --- a/internal/auditlog/reader_sessions_mongodb.go +++ b/internal/auditlog/reader_sessions_mongodb.go @@ -3,7 +3,6 @@ package auditlog import ( "context" "fmt" - "time" "go.mongodb.org/mongo-driver/v2/bson" ) @@ -54,9 +53,7 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) bson.D{{Key: "$group", Value: bson.D{ {Key: "_id", Value: mongoThreadKeyExpr}, {Key: "latest_id", Value: bson.D{{Key: "$first", Value: "$_id"}}}, - {Key: "count", Value: bson.D{{Key: "$sum", Value: 1}}}, - {Key: "first_ts", Value: bson.D{{Key: "$min", Value: "$timestamp"}}}, - {Key: "last_ts", Value: bson.D{{Key: "$max", Value: "$timestamp"}}}, + {Key: "last_ts", Value: bson.D{{Key: "$first", Value: "$timestamp"}}}, }}}, bson.D{{Key: "$sort", Value: bson.D{{Key: "last_ts", Value: -1}, {Key: "_id", Value: -1}}}}, bson.D{{Key: "$facet", Value: bson.D{ @@ -74,7 +71,7 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) // known. Deliberately omit the active filters to mirror the // dashboard's unfiltered session_id expansion. Sessionless rows // remain singletons and skip this match via the non-empty sid guard. - mongoSessionTotalLookup(r.collection.Name()), + mongoRequestCountLookup(r.collection.Name()), }}, {Key: "total", Value: bson.A{ bson.D{{Key: "$count", Value: "count"}}, @@ -91,12 +88,9 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) var facetResult struct { Data []struct { Latest mongoLogRow `bson:"latest"` - Count int `bson:"count"` - SessionTotal []struct { + RequestCount []struct { Count int `bson:"count"` - } `bson:"session_total"` - FirstTS time.Time `bson:"first_ts"` - LastTS time.Time `bson:"last_ts"` + } `bson:"request_count"` } `bson:"data"` Total []struct { Count int `bson:"count"` @@ -122,29 +116,23 @@ func (r *MongoDBReader) GetSessions(ctx context.Context, params LogQueryParams) if entry == nil { continue } - totalCount := 1 - if entry.SessionID != "" { - totalCount = row.Count - if len(row.SessionTotal) > 0 && row.SessionTotal[0].Count > totalCount { - totalCount = row.SessionTotal[0].Count - } + requestCount := 1 + if entry.SessionID != "" && len(row.RequestCount) > 0 { + requestCount = max(1, row.RequestCount[0].Count) } sessions = append(sessions, SessionSummary{ - SessionID: entry.SessionID, - Count: row.Count, - TotalCount: totalCount, - FirstTimestamp: row.FirstTS, - LastTimestamp: row.LastTS, - Latest: *entry, + SessionID: entry.SessionID, + RequestCount: requestCount, + Latest: *entry, }) } return &SessionListResult{Sessions: sessions, Total: total, Limit: limit, Offset: offset}, nil } -// mongoSessionTotalLookup builds the filter-independent count used by session +// mongoRequestCountLookup builds the filter-independent count used by session // summaries. Keeping it separate makes the aggregation contract testable // without a running MongoDB service. -func mongoSessionTotalLookup(collectionName string) bson.D { +func mongoRequestCountLookup(collectionName string) bson.D { return bson.D{{Key: "$lookup", Value: bson.D{ {Key: "from", Value: collectionName}, {Key: "let", Value: bson.D{{Key: "sid", Value: bson.D{{Key: "$ifNull", Value: bson.A{"$latest.session_id", ""}}}}}}, @@ -155,6 +143,6 @@ func mongoSessionTotalLookup(collectionName string) bson.D { }}}}}}}, bson.D{{Key: "$count", Value: "count"}}, }}, - {Key: "as", Value: "session_total"}, + {Key: "as", Value: "request_count"}, }}} } diff --git a/internal/auditlog/reader_sessions_mongodb_test.go b/internal/auditlog/reader_sessions_mongodb_test.go index ca85ccc42..c9e66c8f3 100644 --- a/internal/auditlog/reader_sessions_mongodb_test.go +++ b/internal/auditlog/reader_sessions_mongodb_test.go @@ -12,10 +12,10 @@ import ( "github.com/enterpilot/gomodel/internal/storage/mongotest" ) -func TestMongoSessionTotalLookup(t *testing.T) { - stage, err := bson.MarshalExtJSON(mongoSessionTotalLookup("custom_audit_logs"), false, false) +func TestMongoRequestCountLookup(t *testing.T) { + stage, err := bson.MarshalExtJSON(mongoRequestCountLookup("custom_audit_logs"), false, false) if err != nil { - t.Fatalf("marshal session total lookup: %v", err) + t.Fatalf("marshal request count lookup: %v", err) } encoded := string(stage) for _, want := range []string{ @@ -24,10 +24,10 @@ func TestMongoSessionTotalLookup(t *testing.T) { `"$ne":["$$sid",""]`, `"$eq":["$session_id","$$sid"]`, `"$count":"count"`, - `"as":"session_total"`, + `"as":"request_count"`, } { if !strings.Contains(encoded, want) { - t.Fatalf("session total lookup = %s, want fragment %s", encoded, want) + t.Fatalf("request count lookup = %s, want fragment %s", encoded, want) } } } @@ -65,12 +65,9 @@ func TestMongoDBReader_GetSessions(t *testing.T) { t.Fatalf("sessions[0].Latest.ID = %q, want solo", got) } threadA := result.Sessions[1] - if threadA.SessionID != "sess-a" || threadA.Count != 2 || threadA.TotalCount != 2 || threadA.Latest.ID != "a-2" { + if threadA.SessionID != "sess-a" || threadA.RequestCount != 2 || threadA.Latest.ID != "a-2" { t.Fatalf("sess-a summary = %+v", threadA) } - if !threadA.FirstTimestamp.Equal(base.Add(-24*time.Hour)) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { - t.Fatalf("sess-a span = %v..%v", threadA.FirstTimestamp, threadA.LastTimestamp) - } if result.Sessions[2].SessionID != "sess-b" { t.Fatalf("sessions[2] = %+v", result.Sessions[2]) } diff --git a/internal/auditlog/reader_sessions_sql.go b/internal/auditlog/reader_sessions_sql.go index a3712a83a..754c000f3 100644 --- a/internal/auditlog/reader_sessions_sql.go +++ b/internal/auditlog/reader_sessions_sql.go @@ -18,19 +18,11 @@ const auditThreadKey = `COALESCE(NULLIF(session_id, ''), CAST(id AS TEXT))` // GetSessions returns a paginated list of audit sessions ordered by latest // activity. Works identically on SQLite and PostgreSQL. // -// The window pass ranks and aggregates threads over ID AND TIMESTAMP ONLY — +// The window pass ranks threads over ID AND TIMESTAMP ONLY — // carrying the full entry (its `data` blob above all) through the partition // sort meant every audit body in the window got materialized and sorted just // to discard all but one row per thread. The outer join re-reads the complete // rows for the page's 25 winners, by primary key. -// -// All four window functions share one named window so the partition is sorted -// once rather than per aggregate. The explicit full frame is what lets the -// aggregates share the ranking window's ORDER BY: without it they would be -// running totals over the frame ending at the current row. ROW_NUMBER ignores -// the frame, as specified. And since the partition is ordered by timestamp -// DESC, the ranked row IS its thread's newest entry, so its own timestamp is -// the thread's last_ts and no MAX() window is needed. func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*SessionListResult, error) { limit, offset := clampLimitOffset(params.Limit, params.Offset) @@ -52,26 +44,21 @@ func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*Se // operations describe the same complete session. query := `WITH ranked AS ( SELECT id, timestamp AS last_ts, - ROW_NUMBER() OVER thread AS rn, - COUNT(*) OVER thread AS entry_count, - MIN(timestamp) OVER thread AS first_ts + ROW_NUMBER() OVER ( + PARTITION BY ` + auditThreadKey + ` + ORDER BY timestamp DESC, id DESC + ) AS rn FROM audit_logs` + where + ` - WINDOW thread AS ( - PARTITION BY ` + auditThreadKey + ` - ORDER BY timestamp DESC, id DESC - ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING - ) ), heads AS ( - SELECT id, entry_count, first_ts, last_ts + SELECT id, last_ts FROM ranked WHERE rn = 1 ORDER BY last_ts DESC, id DESC LIMIT ? OFFSET ? ) - SELECT ` + qualifiedLogColumns("l") + `, h.entry_count, + SELECT ` + qualifiedLogColumns("l") + `, CASE WHEN NULLIF(l.session_id, '') IS NULL THEN 1 ELSE ( SELECT COUNT(*) FROM audit_logs session_entries WHERE session_entries.session_id = l.session_id - ) END AS total_count, - h.first_ts, h.last_ts + ) END AS request_count FROM heads h JOIN audit_logs l ON l.id = h.id ORDER BY h.last_ts DESC, h.id DESC` @@ -96,35 +83,26 @@ func (r *SQLReader) GetSessions(ctx context.Context, params LogQueryParams) (*Se } // sessionSummaryScanner adapts a session row to the log-entry scanner: the -// leading columns are exactly a log entry, followed by the three aggregates. +// leading columns are exactly a log entry, followed by the request count. type sessionSummaryScanner struct { - row sqlx.Row - count *int - total *int - firstTS *sqlx.Timestamp - lastTS *sqlx.Timestamp + row sqlx.Row + requestCount *int } func (s sessionSummaryScanner) Scan(dest ...any) error { - return s.row.Scan(append(dest, s.count, s.total, s.firstTS, s.lastTS)...) + return s.row.Scan(append(dest, s.requestCount)...) } func scanSQLSessionSummary(row sqlx.Row) (*SessionSummary, error) { var summary SessionSummary - var firstTS, lastTS sqlx.Timestamp entry, err := scanSQLLogEntry(sessionSummaryScanner{ - row: row, - count: &summary.Count, - total: &summary.TotalCount, - firstTS: &firstTS, - lastTS: &lastTS, + row: row, + requestCount: &summary.RequestCount, }) if err != nil { return nil, fmt.Errorf("failed to scan audit session row: %w", err) } summary.SessionID = entry.SessionID - summary.FirstTimestamp = firstTS.Time - summary.LastTimestamp = lastTS.Time summary.Latest = *entry return &summary, nil } diff --git a/internal/auditlog/session_id_test.go b/internal/auditlog/session_id_test.go index 116b020dc..ca31cb9ee 100644 --- a/internal/auditlog/session_id_test.go +++ b/internal/auditlog/session_id_test.go @@ -271,21 +271,17 @@ func TestSQLReader_GetSessions(t *testing.T) { if got := result.Sessions[0].Latest.ID; got != "solo" { t.Fatalf("sessions[0].Latest.ID = %q, want solo", got) } - if result.Sessions[0].SessionID != "" || result.Sessions[0].Count != 1 || result.Sessions[0].TotalCount != 1 { + if result.Sessions[0].SessionID != "" || result.Sessions[0].RequestCount != 1 { t.Fatalf("singleton thread = %+v", result.Sessions[0]) } threadA := result.Sessions[1] - if threadA.SessionID != "sess-a" || threadA.Count != 2 || threadA.TotalCount != 2 { + if threadA.SessionID != "sess-a" || threadA.RequestCount != 2 { t.Fatalf("sess-a summary = %+v", threadA) } if threadA.Latest.ID != "a-2" { t.Fatalf("sess-a latest = %q, want a-2", threadA.Latest.ID) } - if !threadA.FirstTimestamp.Equal(base.Add(-24*time.Hour)) || !threadA.LastTimestamp.Equal(base.Add(2*time.Minute)) { - t.Fatalf("sess-a span = %v..%v", threadA.FirstTimestamp, threadA.LastTimestamp) - } - if result.Sessions[2].SessionID != "sess-b" { t.Fatalf("sessions[2] = %+v", result.Sessions[2]) } @@ -388,18 +384,18 @@ func TestSQLReader_GetSessionsOnLegacyUUIDSchema(t *testing.T) { t.Fatalf("total=%d sessions=%d, want 2/2", result.Total, len(result.Sessions)) } want := []struct { - latestID string - sessionID string - count int + latestID string + sessionID string + requestCount int }{ {"b32d7a52-0000-4000-8000-000000000003", "", 1}, {"b32d7a52-0000-4000-8000-000000000002", "sess-a", 2}, } for i, tt := range want { got := result.Sessions[i] - if got.Latest.ID != tt.latestID || got.SessionID != tt.sessionID || got.Count != tt.count { + if got.Latest.ID != tt.latestID || got.SessionID != tt.sessionID || got.RequestCount != tt.requestCount { t.Fatalf("sessions[%d] = %+v, want latest %q session %q count %d", - i, got, tt.latestID, tt.sessionID, tt.count) + i, got, tt.latestID, tt.sessionID, tt.requestCount) } } }) @@ -474,50 +470,45 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { t.Helper() status := 500 tests := []struct { - name string - params LogQueryParams - wantSessionID string - wantCount int - wantTotal int - wantLatestID string + name string + params LogQueryParams + wantSessionID string + wantRequestCount int + wantLatestID string }{ { - name: "status filter keeps only the thread with a 500", - params: LogQueryParams{StatusCode: &status, Limit: 10}, - wantSessionID: "sess-b", - wantCount: 1, - wantTotal: 1, - wantLatestID: "b-1", + name: "status filter keeps only the thread with a 500", + params: LogQueryParams{StatusCode: &status, Limit: 10}, + wantSessionID: "sess-b", + wantRequestCount: 1, + wantLatestID: "b-1", }, { - name: "session filter narrows the grouped view to one thread", - params: LogQueryParams{SessionID: "sess-a", Limit: 10}, - wantSessionID: "sess-a", - wantCount: 2, - wantTotal: 2, - wantLatestID: "a-2", + name: "session filter narrows the grouped view to one thread", + params: LogQueryParams{SessionID: "sess-a", Limit: 10}, + wantSessionID: "sess-a", + wantRequestCount: 2, + wantLatestID: "a-2", }, { - name: "user path filter reports matching and complete session counts", + name: "user path filter keeps the complete session count", params: LogQueryParams{ UserPath: "/tenants/b", ExactUserPath: true, SessionID: "sess-a", Limit: 10, }, - wantSessionID: "sess-a", - wantCount: 1, - wantTotal: 2, - wantLatestID: "a-2", + wantSessionID: "sess-a", + wantRequestCount: 2, + wantLatestID: "a-2", }, { - name: "date filter reports matching and complete session counts", + name: "date filter keeps the complete session count", params: LogQueryParams{ QueryParams: QueryParams{StartDate: time.Date(2026, 7, 27, 0, 0, 0, 0, time.UTC), EndDate: time.Date(2026, 7, 27, 0, 0, 0, 0, time.UTC)}, SessionID: "sess-a", Limit: 10, }, - wantSessionID: "sess-a", - wantCount: 1, - wantTotal: 2, - wantLatestID: "a-2", + wantSessionID: "sess-a", + wantRequestCount: 2, + wantLatestID: "a-2", }, } for _, tt := range tests { @@ -530,9 +521,9 @@ func assertGetSessionsFilters(t *testing.T, reader Reader) { t.Fatalf("result = %+v, want exactly one thread", result) } got := result.Sessions[0] - if got.SessionID != tt.wantSessionID || got.Count != tt.wantCount || got.TotalCount != tt.wantTotal || got.Latest.ID != tt.wantLatestID { - t.Fatalf("thread = %+v, want session %q count %d total %d latest %q", - got, tt.wantSessionID, tt.wantCount, tt.wantTotal, tt.wantLatestID) + if got.SessionID != tt.wantSessionID || got.RequestCount != tt.wantRequestCount || got.Latest.ID != tt.wantLatestID { + t.Fatalf("thread = %+v, want session %q request count %d latest %q", + got, tt.wantSessionID, tt.wantRequestCount, tt.wantLatestID) } }) } diff --git a/tools/openapi-postprocess.mjs b/tools/openapi-postprocess.mjs index 48db21e9a..43fb3ab68 100644 --- a/tools/openapi-postprocess.mjs +++ b/tools/openapi-postprocess.mjs @@ -47,19 +47,6 @@ function schema(name) { return result; } -// Swagger 2 has no standard property-level deprecation keyword. Response -// structs mark compatibility fields with x-deprecated, which survives the -// Swagger-to-OpenAPI conversion; normalize it for OpenAPI SDK generators. -function normalizeDeprecatedProperties() { - for (const target of Object.values(spec.components?.schemas || {})) { - for (const property of Object.values(target?.properties || {})) { - if (property?.["x-deprecated"] !== true) continue; - property.deprecated = true; - delete property["x-deprecated"]; - } - } -} - function applyResponseInputOneOf(name) { const properties = schema(name).properties; if (!properties?.input) { @@ -477,7 +464,6 @@ applyStringArrayPropertyBounds("admin.upsertVirtualModelRequest", "user_paths", applySlowdownSchemaConstraints(); applyPricingSchemaConstraints(); applyPathSidebarTitles(); -normalizeDeprecatedProperties(); // Bound the registry-backed admin model listing so OpenAPI consumers (and // security scanners like CKV_OPENAPI_21) see an explicit upper limit. The diff --git a/tools/seed-demo-data.sh b/tools/seed-demo-data.sh index c86db6012..0eef12637 100755 --- a/tools/seed-demo-data.sh +++ b/tools/seed-demo-data.sh @@ -982,7 +982,8 @@ SELECT strftime('%Y-%m-%dT%H:%M:%fZ', day || ' 00:00:00', '+' || (second_of_day + 1) || ' seconds'), 80000000 + (token_noise % 110000000) FROM demo_generated -WHERE abs(token_noise / 131) % 1000 >= 994; +WHERE abs(token_noise / 131) % 1000 >= 994 + AND (day != date(${seed_utc_epoch}, 'unixepoch') OR second_of_day < ${current_utc_second}); INSERT INTO audit_log_attempts ( audit_log_id, seq, kind, provider_type, provider_name, model, @@ -1003,7 +1004,10 @@ SELECT strftime('%Y-%m-%dT%H:%M:%fZ', day || ' 00:00:00', '+' || (second_of_day + 1) || ' seconds'), 90000000 + (token_noise % 200000000) FROM demo_generated -WHERE abs(token_noise / 131) % 1000 < 985 AND cache_type IS NULL AND token_noise % 37 = 0; +WHERE abs(token_noise / 131) % 1000 < 985 + AND cache_type IS NULL + AND token_noise % 37 = 0 + AND (day != date(${seed_utc_epoch}, 'unixepoch') OR second_of_day < ${current_utc_second}); DROP TABLE IF EXISTS temp.demo_budget_paths; CREATE TEMP TABLE demo_budget_paths(user_path TEXT, daily_amount REAL, weekly_amount REAL, monthly_amount REAL); @@ -1036,9 +1040,12 @@ SELECT period_seconds, amount, '${prefix}', - strftime('%s', date(CASE WHEN '${end_date}' = '' THEN 'now' ELSE '${end_date}' END)), - strftime('%s', 'now'), - strftime('%s', 'now') + strftime('%s', CASE + WHEN '${end_date}' = '' THEN date(${seed_utc_epoch}, 'unixepoch') + ELSE date('${end_date}') + END), + ${seed_utc_epoch}, + ${seed_utc_epoch} FROM budget_rows WHERE true ON CONFLICT(user_path, period_seconds) DO UPDATE SET diff --git a/web/dashboard/src/pages/audit-logs/AuditEntrySummary.svelte b/web/dashboard/src/pages/audit-logs/AuditEntrySummary.svelte index ae9d19a13..b8c1d2cb0 100644 --- a/web/dashboard/src/pages/audit-logs/AuditEntrySummary.svelte +++ b/web/dashboard/src/pages/audit-logs/AuditEntrySummary.svelte @@ -14,7 +14,7 @@ import { ChevronDown, ChevronLeft, ChevronRight } from "lucide"; // `thread` marks a session-thread head row (grouped mode): - // { count, matchingCount, expanded, ontoggle }. `expanded`/`onactivate` wire the + // { count, expanded, ontoggle }. `expanded`/`onactivate` wire the // Svelte-controlled row expansion: the click is intercepted (the parent //
                    stays open so the close can animate) and the state lives in // auditList. @@ -50,18 +50,7 @@ } function threadDescription() { - const total = Number(thread.count || 1); - const matching = Number(thread.matchingCount || total); - if (matching < total) { - return ( - "Session with " + - total + - " requests; " + - matching + - " match selected filters" - ); - } - return "Session with " + total + " requests"; + return "Session with " + Number(thread.count || 1) + " requests"; } function openConversation(event) { diff --git a/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte b/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte index b9fa2bb2d..7a0cc515b 100644 --- a/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte +++ b/web/dashboard/src/pages/audit-logs/AuditThreadGroup.svelte @@ -11,7 +11,6 @@ import { auditIsThreadHead, auditSessionCount, - auditSessionMatchingCount, auditSessionId, } from "./audit-logic.js"; @@ -35,7 +34,6 @@ {entry} thread={{ count: auditSessionCount(entry), - matchingCount: auditSessionMatchingCount(entry), expanded, ontoggle: () => auditList.toggleThread(entry), }} diff --git a/web/dashboard/src/pages/audit-logs/audit-logic.js b/web/dashboard/src/pages/audit-logs/audit-logic.js index 3f3329b4d..66bb283c8 100644 --- a/web/dashboard/src/pages/audit-logs/audit-logic.js +++ b/web/dashboard/src/pages/audit-logs/audit-logic.js @@ -161,14 +161,6 @@ export function auditSessionCount(entry) { return Number.isFinite(count) && count > 1 ? count : 1; } -// The matching count is the part of a complete session that satisfied the -// active date/search filters. Older servers only provide one count, so use the -// complete count as a backwards-compatible fallback. -export function auditSessionMatchingCount(entry) { - const count = Number(entry && entry.session_matching_count); - return Number.isFinite(count) && count > 0 ? count : auditSessionCount(entry); -} - // auditIsThreadHead reports whether a row gets the expander: it belongs to a // session with more entries than itself. export function auditIsThreadHead(entry) { @@ -184,28 +176,10 @@ export function auditLogFromSessions(payload) { return { entries: sessions .filter((session) => session && session.latest) - .map((session) => { - const matchingValue = Number( - session.matching_count || session.count || 1, - ); - const matchingCount = - Number.isFinite(matchingValue) && matchingValue > 0 - ? matchingValue - : 1; - const totalValue = Number(session.total_count || matchingCount); - const totalCount = - Number.isFinite(totalValue) && totalValue > matchingCount - ? totalValue - : matchingCount; - return { - ...session.latest, - session_id: - auditSessionId(session.latest) || - String(session.session_id || "").trim(), - session_count: totalCount, - session_matching_count: matchingCount, - }; - }), + .map((session) => ({ + ...session.latest, + session_count: Math.max(1, Number(session.request_count) || 1), + })), total: Number((payload && payload.total) || 0), limit: Number((payload && payload.limit) || 25), offset: Number((payload && payload.offset) || 0), @@ -406,35 +380,21 @@ export function auditGroupedLogWithLiveEntries(payload, currentEntries, filters) // Fold into the fetched thread: the pending preview is newer than the // persisted head, so it becomes the head. Counts already accumulated by // the live grouping path are authoritative; otherwise this distinct - // request increments the fetched counts. + // request increments the fetched count. const index = headBySession.get(sid); if (merged === entries) merged = [...entries]; - const previousTotal = auditSessionCount(merged[index]); - const previousMatching = auditSessionMatchingCount(merged[index]); - const incomingTotalValue = Number(entry && entry.session_count); - const incomingTotal = - Number.isFinite(incomingTotalValue) && incomingTotalValue > 1 - ? incomingTotalValue + const previousCount = auditSessionCount(merged[index]); + const incomingValue = Number(entry && entry.session_count); + const incomingCount = + Number.isFinite(incomingValue) && incomingValue > 1 + ? incomingValue : null; - const incomingMatchingValue = Number( - entry && entry.session_matching_count, - ); - const incomingMatching = - incomingTotal !== null && - Number.isFinite(incomingMatchingValue) && - incomingMatchingValue > 0 - ? incomingMatchingValue - : incomingTotal; merged[index] = { ...entry, session_count: - incomingTotal === null - ? previousTotal + 1 - : Math.max(previousTotal, incomingTotal), - session_matching_count: - incomingMatching === null - ? previousMatching + 1 - : Math.max(previousMatching, incomingMatching), + incomingCount === null + ? previousCount + 1 + : Math.max(previousCount, incomingCount), }; keys.forEach((key) => persistedKeys.add(key)); return; diff --git a/web/dashboard/src/pages/audit-logs/live-logs-logic.js b/web/dashboard/src/pages/audit-logs/live-logs-logic.js index a9743c1b1..e14fa5d78 100644 --- a/web/dashboard/src/pages/audit-logs/live-logs-logic.js +++ b/web/dashboard/src/pages/audit-logs/live-logs-logic.js @@ -262,10 +262,7 @@ export function liveLogsMethods() { ...head, session_count: Math.max(1, Number(other.session_count || 1)) + - Math.max(1, Number(entry.session_count || 1)), - session_matching_count: - Math.max(1, Number(other.session_matching_count || other.session_count || 1)) + - Math.max(1, Number(entry.session_matching_count || entry.session_count || 1)) + Math.max(1, Number(entry.session_count || 1)) }; const next = entries.filter((_, index) => index !== myIndex && index !== otherIndex); next.unshift(merged); @@ -287,16 +284,9 @@ export function liveLogsMethods() { if (headIndex < 0) return null; const oldHead = entries[headIndex]; const oldCount = Number(oldHead.session_count); - const oldMatchingCount = Number(oldHead.session_matching_count); const newHead = this.mergeLiveAuditUsagePatch({ ...patch, - session_count: (Number.isFinite(oldCount) && oldCount > 0 ? oldCount : 1) + 1, - session_matching_count: - (Number.isFinite(oldMatchingCount) && oldMatchingCount > 0 - ? oldMatchingCount - : Number.isFinite(oldCount) && oldCount > 0 - ? oldCount - : 1) + 1 + session_count: (Number.isFinite(oldCount) && oldCount > 0 ? oldCount : 1) + 1 }); const next = [...entries]; next.splice(headIndex, 1); @@ -349,17 +339,10 @@ export function liveLogsMethods() { const index = entries.findIndex((entry) => String(entry.session_id || '').trim() === sessionId); if (index < 0) return; const head = entries[index]; - const matchingCount = Number(head.session_matching_count); const next = [...entries]; next.splice(index, 1, { ...head, - session_count: Math.max(1, Number(head.session_count || 1) - count), - session_matching_count: Math.max( - 1, - (Number.isFinite(matchingCount) && matchingCount > 0 - ? matchingCount - : Number(head.session_count || 1)) - count - ) + session_count: Math.max(1, Number(head.session_count || 1) - count) }); this.auditLog.entries = next; }, @@ -479,15 +462,10 @@ export function liveLogsMethods() { reloadGroupedList = true; return; } - const matchingCount = Math.max( - 1, - Number(entry.session_matching_count || sessionCount) - ); const promoted = { ...children[0], session_id: sessionId, - session_count: sessionCount - 1, - session_matching_count: Math.max(1, matchingCount - 1) + session_count: sessionCount - 1 }; next.push(promoted); this.auditThreadChildren = { diff --git a/web/dashboard/tests/audit-list.test.js b/web/dashboard/tests/audit-list.test.js index 41c44d22b..7b90193e9 100644 --- a/web/dashboard/tests/audit-list.test.js +++ b/web/dashboard/tests/audit-list.test.js @@ -30,7 +30,6 @@ import { auditIsThreadHead, auditLogFromSessions, auditSessionCount, - auditSessionMatchingCount, auditSessionId, auditTabKeydownTarget, buildAuditLogQuery, @@ -718,11 +717,6 @@ test("session head helpers handle missing ids and counts", () => { assert.equal(auditSessionCount({ session_count: 5 }), 5); assert.equal(auditSessionCount({ session_count: 0 }), 1); assert.equal(auditSessionCount({}), 1); - assert.equal( - auditSessionMatchingCount({ session_count: 6, session_matching_count: 3 }), - 3, - ); - assert.equal(auditSessionMatchingCount({ session_count: 6 }), 6); assert.equal(auditIsThreadHead({ session_id: "s-1", session_count: 2 }), true); assert.equal(auditIsThreadHead({ session_id: "s-1", session_count: 1 }), false); assert.equal(auditIsThreadHead({ session_count: 3 }), false); @@ -732,14 +726,11 @@ test("auditLogFromSessions maps thread summaries into head entries", () => { const payload = { sessions: [ { - session_id: "s-1", - count: 3, - matching_count: 3, - total_count: 6, + request_count: 6, latest: { id: "log-3", session_id: "s-1", status_code: 200 }, }, - { count: 1, latest: { id: "solo", status_code: 200 } }, - { count: 2 }, // no latest: dropped + { request_count: 1, latest: { id: "solo", status_code: 200 } }, + { request_count: 2 }, // no latest: dropped ], total: 12, limit: 25, @@ -749,7 +740,6 @@ test("auditLogFromSessions maps thread summaries into head entries", () => { assert.equal(mapped.entries.length, 2); assert.equal(mapped.entries[0].id, "log-3"); assert.equal(mapped.entries[0].session_count, 6); - assert.equal(mapped.entries[0].session_matching_count, 3); assert.equal(mapped.entries[1].id, "solo"); assert.equal(mapped.entries[1].session_count, 1); assert.equal(mapped.total, 12); @@ -891,7 +881,6 @@ test("auditGroupedLogWithLiveEntries increments counts for a new singleton previ id: "head-a", session_id: "s-a", session_count: 6, - session_matching_count: 3, }, ], total: 1, @@ -910,7 +899,6 @@ test("auditGroupedLogWithLiveEntries increments counts for a new singleton previ assert.deepEqual(next.entries.map((entry) => entry.id), ["live-1"]); assert.equal(next.entries[0].session_count, 7); - assert.equal(next.entries[0].session_matching_count, 4); assert.equal(next.total, 1); });