@atoms-tech/atoms-mcp 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +30 -18
- package/dist/apps/register.d.ts +36 -0
- package/dist/apps/register.js +65 -0
- package/dist/apps/src/apps/coverage/coverage-app.html +237 -0
- package/dist/apps/src/apps/import/import-app.html +239 -0
- package/dist/apps/src/apps/mermaid/mermaid-app.html +112 -0
- package/dist/apps/src/apps/summary/summary-app.html +279 -0
- package/dist/apps/src/apps/trace/trace-app.html +171 -0
- package/dist/auth/login.d.ts +0 -1
- package/dist/auth/login.js +0 -1
- package/dist/auth/refresh.d.ts +0 -1
- package/dist/auth/refresh.js +0 -1
- package/dist/auth/token-store.d.ts +0 -1
- package/dist/auth/token-store.js +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.js +0 -1
- package/dist/db/client.d.ts +0 -1
- package/dist/db/client.js +0 -1
- package/dist/db/graph.d.ts +0 -1
- package/dist/db/graph.js +0 -1
- package/dist/db/queries.d.ts +0 -1
- package/dist/db/queries.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/middleware/audit.d.ts +0 -1
- package/dist/middleware/audit.js +0 -1
- package/dist/middleware/rate-limiter.d.ts +0 -1
- package/dist/middleware/rate-limiter.js +0 -1
- package/dist/middleware/validator.d.ts +0 -1
- package/dist/middleware/validator.js +0 -1
- package/dist/server.d.ts +3 -3
- package/dist/server.js +70 -28
- package/dist/tools/_base.d.ts +0 -1
- package/dist/tools/_base.js +0 -1
- package/dist/tools/bulk-import.d.ts +0 -1
- package/dist/tools/bulk-import.js +0 -1
- package/dist/tools/create-item.d.ts +0 -1
- package/dist/tools/create-item.js +0 -1
- package/dist/tools/delete-item.d.ts +0 -1
- package/dist/tools/delete-item.js +0 -1
- package/dist/tools/export-mermaid.d.ts +0 -1
- package/dist/tools/export-mermaid.js +0 -1
- package/dist/tools/get-coverage.d.ts +0 -1
- package/dist/tools/get-coverage.js +0 -1
- package/dist/tools/get-history.d.ts +0 -1
- package/dist/tools/get-history.js +0 -1
- package/dist/tools/get-item.d.ts +0 -1
- package/dist/tools/get-item.js +0 -1
- package/dist/tools/link-items.d.ts +1 -2
- package/dist/tools/link-items.js +0 -1
- package/dist/tools/list-items.d.ts +0 -1
- package/dist/tools/list-items.js +0 -1
- package/dist/tools/list-projects.d.ts +0 -1
- package/dist/tools/list-projects.js +0 -1
- package/dist/tools/project-summary.d.ts +0 -1
- package/dist/tools/project-summary.js +0 -1
- package/dist/tools/record-test-result.d.ts +0 -1
- package/dist/tools/record-test-result.js +0 -1
- package/dist/tools/search.d.ts +0 -1
- package/dist/tools/search.js +0 -1
- package/dist/tools/trace.d.ts +0 -1
- package/dist/tools/trace.js +0 -1
- package/dist/tools/update-item.d.ts +0 -1
- package/dist/tools/update-item.js +0 -1
- package/dist/types/responses.d.ts +0 -1
- package/dist/types/responses.js +0 -1
- package/dist/types/work-item.d.ts +0 -1
- package/dist/types/work-item.js +0 -1
- package/package.json +11 -4
- package/dist/auth/login.d.ts.map +0 -1
- package/dist/auth/login.js.map +0 -1
- package/dist/auth/refresh.d.ts.map +0 -1
- package/dist/auth/refresh.js.map +0 -1
- package/dist/auth/token-store.d.ts.map +0 -1
- package/dist/auth/token-store.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/db/client.d.ts.map +0 -1
- package/dist/db/client.js.map +0 -1
- package/dist/db/graph.d.ts.map +0 -1
- package/dist/db/graph.js.map +0 -1
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/middleware/audit.d.ts.map +0 -1
- package/dist/middleware/audit.js.map +0 -1
- package/dist/middleware/rate-limiter.d.ts.map +0 -1
- package/dist/middleware/rate-limiter.js.map +0 -1
- package/dist/middleware/validator.d.ts.map +0 -1
- package/dist/middleware/validator.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/tools/_base.d.ts.map +0 -1
- package/dist/tools/_base.js.map +0 -1
- package/dist/tools/bulk-import.d.ts.map +0 -1
- package/dist/tools/bulk-import.js.map +0 -1
- package/dist/tools/create-item.d.ts.map +0 -1
- package/dist/tools/create-item.js.map +0 -1
- package/dist/tools/delete-item.d.ts.map +0 -1
- package/dist/tools/delete-item.js.map +0 -1
- package/dist/tools/export-mermaid.d.ts.map +0 -1
- package/dist/tools/export-mermaid.js.map +0 -1
- package/dist/tools/get-coverage.d.ts.map +0 -1
- package/dist/tools/get-coverage.js.map +0 -1
- package/dist/tools/get-history.d.ts.map +0 -1
- package/dist/tools/get-history.js.map +0 -1
- package/dist/tools/get-item.d.ts.map +0 -1
- package/dist/tools/get-item.js.map +0 -1
- package/dist/tools/link-items.d.ts.map +0 -1
- package/dist/tools/link-items.js.map +0 -1
- package/dist/tools/list-items.d.ts.map +0 -1
- package/dist/tools/list-items.js.map +0 -1
- package/dist/tools/list-projects.d.ts.map +0 -1
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/project-summary.d.ts.map +0 -1
- package/dist/tools/project-summary.js.map +0 -1
- package/dist/tools/record-test-result.d.ts.map +0 -1
- package/dist/tools/record-test-result.js.map +0 -1
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/trace.d.ts.map +0 -1
- package/dist/tools/trace.js.map +0 -1
- package/dist/tools/update-item.d.ts.map +0 -1
- package/dist/tools/update-item.js.map +0 -1
- package/dist/types/responses.d.ts.map +0 -1
- package/dist/types/responses.js.map +0 -1
- package/dist/types/work-item.d.ts.map +0 -1
- package/dist/types/work-item.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>ATOMS Trace Graph</title>
|
|
7
|
+
<script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function o(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(s){if(s.ep)return;s.ep=!0;const r=o(s);fetch(s.href,r)}})();function d(e,t,o){function n(a,p){var h;Object.defineProperty(a,"_zod",{value:a._zod??{},enumerable:!1}),(h=a._zod).traits??(h.traits=new Set),a._zod.traits.add(e),t(a,p);for(const f in i.prototype)f in a||Object.defineProperty(a,f,{value:i.prototype[f].bind(a)});a._zod.constr=i,a._zod.def=p}const s=o?.Parent??Object;class r extends s{}Object.defineProperty(r,"name",{value:e});function i(a){var p;const h=o?.Parent?new r:this;n(h,a),(p=h._zod).deferred??(p.deferred=[]);for(const f of h._zod.deferred)f();return h}return Object.defineProperty(i,"init",{value:n}),Object.defineProperty(i,Symbol.hasInstance,{value:a=>o?.Parent&&a instanceof o.Parent?!0:a?._zod?.traits?.has(e)}),Object.defineProperty(i,"name",{value:e}),i}class de extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}const Xt={};function K(e){return Xt}function Xo(e){const t=Object.values(e).filter(n=>typeof n=="number");return Object.entries(e).filter(([n,s])=>t.indexOf(+n)===-1).map(([n,s])=>s)}function en(e,t){return typeof t=="bigint"?t.toString():t}function Ye(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function Xe(e){return e==null}function et(e){const t=e.startsWith("^")?1:0,o=e.endsWith("$")?e.length-1:e.length;return e.slice(t,o)}function tn(e,t){const o=(e.toString().split(".")[1]||"").length,n=(t.toString().split(".")[1]||"").length,s=o>n?o:n,r=Number.parseInt(e.toFixed(s).replace(".","")),i=Number.parseInt(t.toFixed(s).replace(".",""));return r%i/10**s}function P(e,t,o){Object.defineProperty(e,t,{get(){{const n=o();return e[t]=n,n}},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function Ae(e,t,o){Object.defineProperty(e,t,{value:o,writable:!0,enumerable:!0,configurable:!0})}function ae(e){return JSON.stringify(e)}const eo=Error.captureStackTrace?Error.captureStackTrace:(...e)=>{};function Pe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const on=Ye(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const e=Function;return new e(""),!0}catch{return!1}});function Ze(e){if(Pe(e)===!1)return!1;const t=e.constructor;if(t===void 0)return!0;const o=t.prototype;return!(Pe(o)===!1||Object.prototype.hasOwnProperty.call(o,"isPrototypeOf")===!1)}const nn=new Set(["string","number","symbol"]);function me(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ne(e,t,o){const n=new e._zod.constr(t??e._zod.def);return(!t||o?.parent)&&(n._zod.parent=e),n}function g(e){const t=e;if(!t)return{};if(typeof t=="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error=="string"?{...t,error:()=>t.error}:t}function sn(e){return Object.keys(e).filter(t=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}const rn={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function an(e,t){const o={},n=e._zod.def;for(const s in t){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);t[s]&&(o[s]=n.shape[s])}return ne(e,{...e._zod.def,shape:o,checks:[]})}function cn(e,t){const o={...e._zod.def.shape},n=e._zod.def;for(const s in t){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);t[s]&&delete o[s]}return ne(e,{...e._zod.def,shape:o,checks:[]})}function un(e,t){if(!Ze(t))throw new Error("Invalid input to extend: expected a plain object");const o={...e._zod.def,get shape(){const n={...e._zod.def.shape,...t};return Ae(this,"shape",n),n},checks:[]};return ne(e,o)}function ln(e,t){return ne(e,{...e._zod.def,get shape(){const o={...e._zod.def.shape,...t._zod.def.shape};return Ae(this,"shape",o),o},catchall:t._zod.def.catchall,checks:[]})}function dn(e,t,o){const n=t._zod.def.shape,s={...n};if(o)for(const r in o){if(!(r in n))throw new Error(`Unrecognized key: "${r}"`);o[r]&&(s[r]=e?new e({type:"optional",innerType:n[r]}):n[r])}else for(const r in n)s[r]=e?new e({type:"optional",innerType:n[r]}):n[r];return ne(t,{...t._zod.def,shape:s,checks:[]})}function pn(e,t,o){const n=t._zod.def.shape,s={...n};if(o)for(const r in o){if(!(r in s))throw new Error(`Unrecognized key: "${r}"`);o[r]&&(s[r]=new e({type:"nonoptional",innerType:n[r]}))}else for(const r in n)s[r]=new e({type:"nonoptional",innerType:n[r]});return ne(t,{...t._zod.def,shape:s,checks:[]})}function ue(e,t=0){for(let o=t;o<e.issues.length;o++)if(e.issues[o]?.continue!==!0)return!0;return!1}function te(e,t){return t.map(o=>{var n;return(n=o).path??(n.path=[]),o.path.unshift(e),o})}function Te(e){return typeof e=="string"?e:e?.message}function Q(e,t,o){const n={...e,path:e.path??[]};if(!e.message){const s=Te(e.inst?._zod.def?.error?.(e))??Te(t?.error?.(e))??Te(o.customError?.(e))??Te(o.localeError?.(e))??"Invalid input";n.message=s}return delete n.inst,delete n.continue,t?.reportInput||delete n.input,n}function tt(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function pe(...e){const[t,o,n]=e;return typeof t=="string"?{message:t,code:"custom",input:o,inst:n}:{...t}}const to=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),Object.defineProperty(e,"message",{get(){return JSON.stringify(t,en,2)},enumerable:!0}),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},oo=d("$ZodError",to),no=d("$ZodError",to,{Parent:Error});function hn(e,t=o=>o.message){const o={},n=[];for(const s of e.issues)s.path.length>0?(o[s.path[0]]=o[s.path[0]]||[],o[s.path[0]].push(t(s))):n.push(t(s));return{formErrors:n,fieldErrors:o}}function mn(e,t){const o=t||function(r){return r.message},n={_errors:[]},s=r=>{for(const i of r.issues)if(i.code==="invalid_union"&&i.errors.length)i.errors.map(a=>s({issues:a}));else if(i.code==="invalid_key")s({issues:i.issues});else if(i.code==="invalid_element")s({issues:i.issues});else if(i.path.length===0)n._errors.push(o(i));else{let a=n,p=0;for(;p<i.path.length;){const h=i.path[p];p===i.path.length-1?(a[h]=a[h]||{_errors:[]},a[h]._errors.push(o(i))):a[h]=a[h]||{_errors:[]},a=a[h],p++}}};return s(e),n}const fn=e=>(t,o,n,s)=>{const r=n?Object.assign(n,{async:!1}):{async:!1},i=t._zod.run({value:o,issues:[]},r);if(i instanceof Promise)throw new de;if(i.issues.length){const a=new(s?.Err??e)(i.issues.map(p=>Q(p,r,K())));throw eo(a,s?.callee),a}return i.value},gn=e=>async(t,o,n,s)=>{const r=n?Object.assign(n,{async:!0}):{async:!0};let i=t._zod.run({value:o,issues:[]},r);if(i instanceof Promise&&(i=await i),i.issues.length){const a=new(s?.Err??e)(i.issues.map(p=>Q(p,r,K())));throw eo(a,s?.callee),a}return i.value},so=e=>(t,o,n)=>{const s=n?{...n,async:!1}:{async:!1},r=t._zod.run({value:o,issues:[]},s);if(r instanceof Promise)throw new de;return r.issues.length?{success:!1,error:new(e??oo)(r.issues.map(i=>Q(i,s,K())))}:{success:!0,data:r.value}},ro=so(no),io=e=>async(t,o,n)=>{const s=n?Object.assign(n,{async:!0}):{async:!0};let r=t._zod.run({value:o,issues:[]},s);return r instanceof Promise&&(r=await r),r.issues.length?{success:!1,error:new e(r.issues.map(i=>Q(i,s,K())))}:{success:!0,data:r.value}},_n=io(no),vn=/^[cC][^\s-]{8,}$/,bn=/^[0-9a-z]+$/,yn=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,wn=/^[0-9a-vA-V]{20}$/,kn=/^[A-Za-z0-9]{27}$/,Sn=/^[a-zA-Z0-9_-]{21}$/,xn=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Tn=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Pt=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/,zn=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Rn="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function In(){return new RegExp(Rn,"u")}const $n=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Pn=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,Zn=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,En=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Cn=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,ao=/^[A-Za-z0-9_-]*$/,Nn=/^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/,qn=/^\+(?:[0-9]){6,14}[0-9]$/,co="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",Mn=new RegExp(`^${co}$`);function uo(e){const t="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof e.precision=="number"?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function An(e){return new RegExp(`^${uo(e)}$`)}function On(e){const t=uo({precision:e.precision}),o=["Z"];e.local&&o.push(""),e.offset&&o.push("([+-]\\d{2}:\\d{2})");const n=`${t}(?:${o.join("|")})`;return new RegExp(`^${co}T(?:${n})$`)}const Dn=e=>{const t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},Un=/^\d+$/,Ln=/^-?\d+(?:\.\d+)?/i,jn=/true|false/i,Hn=/null/i,Fn=/undefined/i,Bn=/^[^A-Z]*$/,Vn=/^[^a-z]*$/,H=d("$ZodCheck",(e,t)=>{var o;e._zod??(e._zod={}),e._zod.def=t,(o=e._zod).onattach??(o.onattach=[])}),lo={number:"number",bigint:"bigint",object:"date"},po=d("$ZodCheckLessThan",(e,t)=>{H.init(e,t);const o=lo[typeof t.value];e._zod.onattach.push(n=>{const s=n._zod.bag,r=(t.inclusive?s.maximum:s.exclusiveMaximum)??Number.POSITIVE_INFINITY;t.value<r&&(t.inclusive?s.maximum=t.value:s.exclusiveMaximum=t.value)}),e._zod.check=n=>{(t.inclusive?n.value<=t.value:n.value<t.value)||n.issues.push({origin:o,code:"too_big",maximum:t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),ho=d("$ZodCheckGreaterThan",(e,t)=>{H.init(e,t);const o=lo[typeof t.value];e._zod.onattach.push(n=>{const s=n._zod.bag,r=(t.inclusive?s.minimum:s.exclusiveMinimum)??Number.NEGATIVE_INFINITY;t.value>r&&(t.inclusive?s.minimum=t.value:s.exclusiveMinimum=t.value)}),e._zod.check=n=>{(t.inclusive?n.value>=t.value:n.value>t.value)||n.issues.push({origin:o,code:"too_small",minimum:t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Wn=d("$ZodCheckMultipleOf",(e,t)=>{H.init(e,t),e._zod.onattach.push(o=>{var n;(n=o._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=o=>{if(typeof o.value!=typeof t.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof o.value=="bigint"?o.value%t.value===BigInt(0):tn(o.value,t.value)===0)||o.issues.push({origin:typeof o.value,code:"not_multiple_of",divisor:t.value,input:o.value,inst:e,continue:!t.abort})}}),Gn=d("$ZodCheckNumberFormat",(e,t)=>{H.init(e,t),t.format=t.format||"float64";const o=t.format?.includes("int"),n=o?"int":"number",[s,r]=rn[t.format];e._zod.onattach.push(i=>{const a=i._zod.bag;a.format=t.format,a.minimum=s,a.maximum=r,o&&(a.pattern=Un)}),e._zod.check=i=>{const a=i.value;if(o){if(!Number.isInteger(a)){i.issues.push({expected:n,format:t.format,code:"invalid_type",input:a,inst:e});return}if(!Number.isSafeInteger(a)){a>0?i.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,continue:!t.abort}):i.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,continue:!t.abort});return}}a<s&&i.issues.push({origin:"number",input:a,code:"too_small",minimum:s,inclusive:!0,inst:e,continue:!t.abort}),a>r&&i.issues.push({origin:"number",input:a,code:"too_big",maximum:r,inst:e})}}),Jn=d("$ZodCheckMaxLength",(e,t)=>{var o;H.init(e,t),(o=e._zod.def).when??(o.when=n=>{const s=n.value;return!Xe(s)&&s.length!==void 0}),e._zod.onattach.push(n=>{const s=n._zod.bag.maximum??Number.POSITIVE_INFINITY;t.maximum<s&&(n._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{const s=n.value;if(s.length<=t.maximum)return;const i=tt(s);n.issues.push({origin:i,code:"too_big",maximum:t.maximum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),Kn=d("$ZodCheckMinLength",(e,t)=>{var o;H.init(e,t),(o=e._zod.def).when??(o.when=n=>{const s=n.value;return!Xe(s)&&s.length!==void 0}),e._zod.onattach.push(n=>{const s=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;t.minimum>s&&(n._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{const s=n.value;if(s.length>=t.minimum)return;const i=tt(s);n.issues.push({origin:i,code:"too_small",minimum:t.minimum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),Qn=d("$ZodCheckLengthEquals",(e,t)=>{var o;H.init(e,t),(o=e._zod.def).when??(o.when=n=>{const s=n.value;return!Xe(s)&&s.length!==void 0}),e._zod.onattach.push(n=>{const s=n._zod.bag;s.minimum=t.length,s.maximum=t.length,s.length=t.length}),e._zod.check=n=>{const s=n.value,r=s.length;if(r===t.length)return;const i=tt(s),a=r>t.length;n.issues.push({origin:i,...a?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Oe=d("$ZodCheckStringFormat",(e,t)=>{var o,n;H.init(e,t),e._zod.onattach.push(s=>{const r=s._zod.bag;r.format=t.format,t.pattern&&(r.patterns??(r.patterns=new Set),r.patterns.add(t.pattern))}),t.pattern?(o=e._zod).check??(o.check=s=>{t.pattern.lastIndex=0,!t.pattern.test(s.value)&&s.issues.push({origin:"string",code:"invalid_format",format:t.format,input:s.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(n=e._zod).check??(n.check=()=>{})}),Yn=d("$ZodCheckRegex",(e,t)=>{Oe.init(e,t),e._zod.check=o=>{t.pattern.lastIndex=0,!t.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:"regex",input:o.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Xn=d("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=Bn),Oe.init(e,t)}),es=d("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=Vn),Oe.init(e,t)}),ts=d("$ZodCheckIncludes",(e,t)=>{H.init(e,t);const o=me(t.includes),n=new RegExp(typeof t.position=="number"?`^.{${t.position}}${o}`:o);t.pattern=n,e._zod.onattach.push(s=>{const r=s._zod.bag;r.patterns??(r.patterns=new Set),r.patterns.add(n)}),e._zod.check=s=>{s.value.includes(t.includes,t.position)||s.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:s.value,inst:e,continue:!t.abort})}}),os=d("$ZodCheckStartsWith",(e,t)=>{H.init(e,t);const o=new RegExp(`^${me(t.prefix)}.*`);t.pattern??(t.pattern=o),e._zod.onattach.push(n=>{const s=n._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(o)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),ns=d("$ZodCheckEndsWith",(e,t)=>{H.init(e,t);const o=new RegExp(`.*${me(t.suffix)}$`);t.pattern??(t.pattern=o),e._zod.onattach.push(n=>{const s=n._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(o)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),ss=d("$ZodCheckOverwrite",(e,t)=>{H.init(e,t),e._zod.check=o=>{o.value=t.tx(o.value)}});class rs{constructor(t=[]){this.content=[],this.indent=0,this&&(this.args=t)}indented(t){this.indent+=1,t(this),this.indent-=1}write(t){if(typeof t=="function"){t(this,{execution:"sync"}),t(this,{execution:"async"});return}const n=t.split(`
|
|
8
|
+
`).filter(i=>i),s=Math.min(...n.map(i=>i.length-i.trimStart().length)),r=n.map(i=>i.slice(s)).map(i=>" ".repeat(this.indent*2)+i);for(const i of r)this.content.push(i)}compile(){const t=Function,o=this?.args,s=[...(this?.content??[""]).map(r=>` ${r}`)];return new t(...o,s.join(`
|
|
9
|
+
`))}}const is={major:4,minor:0,patch:0},$=d("$ZodType",(e,t)=>{var o;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=is;const n=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&n.unshift(e);for(const s of n)for(const r of s._zod.onattach)r(e);if(n.length===0)(o=e._zod).deferred??(o.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const s=(r,i,a)=>{let p=ue(r),h;for(const f of i){if(f._zod.def.when){if(!f._zod.def.when(r))continue}else if(p)continue;const m=r.issues.length,_=f._zod.check(r);if(_ instanceof Promise&&a?.async===!1)throw new de;if(h||_ instanceof Promise)h=(h??Promise.resolve()).then(async()=>{await _,r.issues.length!==m&&(p||(p=ue(r,m)))});else{if(r.issues.length===m)continue;p||(p=ue(r,m))}}return h?h.then(()=>r):r};e._zod.run=(r,i)=>{const a=e._zod.parse(r,i);if(a instanceof Promise){if(i.async===!1)throw new de;return a.then(p=>s(p,n,i))}return s(a,n,i)}}e["~standard"]={validate:s=>{try{const r=ro(e,s);return r.success?{value:r.data}:{issues:r.error?.issues}}catch{return _n(e,s).then(i=>i.success?{value:i.data}:{issues:i.error?.issues})}},vendor:"zod",version:1}}),ot=d("$ZodString",(e,t)=>{$.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Dn(e._zod.bag),e._zod.parse=(o,n)=>{if(t.coerce)try{o.value=String(o.value)}catch{}return typeof o.value=="string"||o.issues.push({expected:"string",code:"invalid_type",input:o.value,inst:e}),o}}),E=d("$ZodStringFormat",(e,t)=>{Oe.init(e,t),ot.init(e,t)}),as=d("$ZodGUID",(e,t)=>{t.pattern??(t.pattern=Tn),E.init(e,t)}),cs=d("$ZodUUID",(e,t)=>{if(t.version){const n={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(n===void 0)throw new Error(`Invalid UUID version: "${t.version}"`);t.pattern??(t.pattern=Pt(n))}else t.pattern??(t.pattern=Pt());E.init(e,t)}),us=d("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=zn),E.init(e,t)}),ls=d("$ZodURL",(e,t)=>{E.init(e,t),e._zod.check=o=>{try{const n=o.value,s=new URL(n),r=s.href;t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(s.hostname)||o.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:Nn.source,input:o.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(s.protocol.endsWith(":")?s.protocol.slice(0,-1):s.protocol)||o.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:o.value,inst:e,continue:!t.abort})),!n.endsWith("/")&&r.endsWith("/")?o.value=r.slice(0,-1):o.value=r;return}catch{o.issues.push({code:"invalid_format",format:"url",input:o.value,inst:e,continue:!t.abort})}}}),ds=d("$ZodEmoji",(e,t)=>{t.pattern??(t.pattern=In()),E.init(e,t)}),ps=d("$ZodNanoID",(e,t)=>{t.pattern??(t.pattern=Sn),E.init(e,t)}),hs=d("$ZodCUID",(e,t)=>{t.pattern??(t.pattern=vn),E.init(e,t)}),ms=d("$ZodCUID2",(e,t)=>{t.pattern??(t.pattern=bn),E.init(e,t)}),fs=d("$ZodULID",(e,t)=>{t.pattern??(t.pattern=yn),E.init(e,t)}),gs=d("$ZodXID",(e,t)=>{t.pattern??(t.pattern=wn),E.init(e,t)}),_s=d("$ZodKSUID",(e,t)=>{t.pattern??(t.pattern=kn),E.init(e,t)}),vs=d("$ZodISODateTime",(e,t)=>{t.pattern??(t.pattern=On(t)),E.init(e,t)}),bs=d("$ZodISODate",(e,t)=>{t.pattern??(t.pattern=Mn),E.init(e,t)}),ys=d("$ZodISOTime",(e,t)=>{t.pattern??(t.pattern=An(t)),E.init(e,t)}),ws=d("$ZodISODuration",(e,t)=>{t.pattern??(t.pattern=xn),E.init(e,t)}),ks=d("$ZodIPv4",(e,t)=>{t.pattern??(t.pattern=$n),E.init(e,t),e._zod.onattach.push(o=>{const n=o._zod.bag;n.format="ipv4"})}),Ss=d("$ZodIPv6",(e,t)=>{t.pattern??(t.pattern=Pn),E.init(e,t),e._zod.onattach.push(o=>{const n=o._zod.bag;n.format="ipv6"}),e._zod.check=o=>{try{new URL(`http://[${o.value}]`)}catch{o.issues.push({code:"invalid_format",format:"ipv6",input:o.value,inst:e,continue:!t.abort})}}}),xs=d("$ZodCIDRv4",(e,t)=>{t.pattern??(t.pattern=Zn),E.init(e,t)}),Ts=d("$ZodCIDRv6",(e,t)=>{t.pattern??(t.pattern=En),E.init(e,t),e._zod.check=o=>{const[n,s]=o.value.split("/");try{if(!s)throw new Error;const r=Number(s);if(`${r}`!==s)throw new Error;if(r<0||r>128)throw new Error;new URL(`http://[${n}]`)}catch{o.issues.push({code:"invalid_format",format:"cidrv6",input:o.value,inst:e,continue:!t.abort})}}});function mo(e){if(e==="")return!0;if(e.length%4!==0)return!1;try{return atob(e),!0}catch{return!1}}const zs=d("$ZodBase64",(e,t)=>{t.pattern??(t.pattern=Cn),E.init(e,t),e._zod.onattach.push(o=>{o._zod.bag.contentEncoding="base64"}),e._zod.check=o=>{mo(o.value)||o.issues.push({code:"invalid_format",format:"base64",input:o.value,inst:e,continue:!t.abort})}});function Rs(e){if(!ao.test(e))return!1;const t=e.replace(/[-_]/g,n=>n==="-"?"+":"/"),o=t.padEnd(Math.ceil(t.length/4)*4,"=");return mo(o)}const Is=d("$ZodBase64URL",(e,t)=>{t.pattern??(t.pattern=ao),E.init(e,t),e._zod.onattach.push(o=>{o._zod.bag.contentEncoding="base64url"}),e._zod.check=o=>{Rs(o.value)||o.issues.push({code:"invalid_format",format:"base64url",input:o.value,inst:e,continue:!t.abort})}}),$s=d("$ZodE164",(e,t)=>{t.pattern??(t.pattern=qn),E.init(e,t)});function Ps(e,t=null){try{const o=e.split(".");if(o.length!==3)return!1;const[n]=o;if(!n)return!1;const s=JSON.parse(atob(n));return!("typ"in s&&s?.typ!=="JWT"||!s.alg||t&&(!("alg"in s)||s.alg!==t))}catch{return!1}}const Zs=d("$ZodJWT",(e,t)=>{E.init(e,t),e._zod.check=o=>{Ps(o.value,t.alg)||o.issues.push({code:"invalid_format",format:"jwt",input:o.value,inst:e,continue:!t.abort})}}),fo=d("$ZodNumber",(e,t)=>{$.init(e,t),e._zod.pattern=e._zod.bag.pattern??Ln,e._zod.parse=(o,n)=>{if(t.coerce)try{o.value=Number(o.value)}catch{}const s=o.value;if(typeof s=="number"&&!Number.isNaN(s)&&Number.isFinite(s))return o;const r=typeof s=="number"?Number.isNaN(s)?"NaN":Number.isFinite(s)?void 0:"Infinity":void 0;return o.issues.push({expected:"number",code:"invalid_type",input:s,inst:e,...r?{received:r}:{}}),o}}),Es=d("$ZodNumber",(e,t)=>{Gn.init(e,t),fo.init(e,t)}),Cs=d("$ZodBoolean",(e,t)=>{$.init(e,t),e._zod.pattern=jn,e._zod.parse=(o,n)=>{if(t.coerce)try{o.value=!!o.value}catch{}const s=o.value;return typeof s=="boolean"||o.issues.push({expected:"boolean",code:"invalid_type",input:s,inst:e}),o}}),Ns=d("$ZodUndefined",(e,t)=>{$.init(e,t),e._zod.pattern=Fn,e._zod.values=new Set([void 0]),e._zod.optin="optional",e._zod.optout="optional",e._zod.parse=(o,n)=>{const s=o.value;return typeof s>"u"||o.issues.push({expected:"undefined",code:"invalid_type",input:s,inst:e}),o}}),qs=d("$ZodNull",(e,t)=>{$.init(e,t),e._zod.pattern=Hn,e._zod.values=new Set([null]),e._zod.parse=(o,n)=>{const s=o.value;return s===null||o.issues.push({expected:"null",code:"invalid_type",input:s,inst:e}),o}}),Ms=d("$ZodUnknown",(e,t)=>{$.init(e,t),e._zod.parse=o=>o}),As=d("$ZodNever",(e,t)=>{$.init(e,t),e._zod.parse=(o,n)=>(o.issues.push({expected:"never",code:"invalid_type",input:o.value,inst:e}),o)});function Zt(e,t,o){e.issues.length&&t.issues.push(...te(o,e.issues)),t.value[o]=e.value}const Os=d("$ZodArray",(e,t)=>{$.init(e,t),e._zod.parse=(o,n)=>{const s=o.value;if(!Array.isArray(s))return o.issues.push({expected:"array",code:"invalid_type",input:s,inst:e}),o;o.value=Array(s.length);const r=[];for(let i=0;i<s.length;i++){const a=s[i],p=t.element._zod.run({value:a,issues:[]},n);p instanceof Promise?r.push(p.then(h=>Zt(h,o,i))):Zt(p,o,i)}return r.length?Promise.all(r).then(()=>o):o}});function ze(e,t,o){e.issues.length&&t.issues.push(...te(o,e.issues)),t.value[o]=e.value}function Et(e,t,o,n){e.issues.length?n[o]===void 0?o in n?t.value[o]=void 0:t.value[o]=e.value:t.issues.push(...te(o,e.issues)):e.value===void 0?o in n&&(t.value[o]=void 0):t.value[o]=e.value}const Ds=d("$ZodObject",(e,t)=>{$.init(e,t);const o=Ye(()=>{const m=Object.keys(t.shape);for(const b of m)if(!(t.shape[b]instanceof $))throw new Error(`Invalid element at key "${b}": expected a Zod schema`);const _=sn(t.shape);return{shape:t.shape,keys:m,keySet:new Set(m),numKeys:m.length,optionalKeys:new Set(_)}});P(e._zod,"propValues",()=>{const m=t.shape,_={};for(const b in m){const M=m[b]._zod;if(M.values){_[b]??(_[b]=new Set);for(const L of M.values)_[b].add(L)}}return _});const n=m=>{const _=new rs(["shape","payload","ctx"]),b=o.value,M=S=>{const k=ae(S);return`shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`};_.write("const input = payload.value;");const L=Object.create(null);let G=0;for(const S of b.keys)L[S]=`key_${G++}`;_.write("const newResult = {}");for(const S of b.keys)if(b.optionalKeys.has(S)){const k=L[S];_.write(`const ${k} = ${M(S)};`);const Z=ae(S);_.write(`
|
|
10
|
+
if (${k}.issues.length) {
|
|
11
|
+
if (input[${Z}] === undefined) {
|
|
12
|
+
if (${Z} in input) {
|
|
13
|
+
newResult[${Z}] = undefined;
|
|
14
|
+
}
|
|
15
|
+
} else {
|
|
16
|
+
payload.issues = payload.issues.concat(
|
|
17
|
+
${k}.issues.map((iss) => ({
|
|
18
|
+
...iss,
|
|
19
|
+
path: iss.path ? [${Z}, ...iss.path] : [${Z}],
|
|
20
|
+
}))
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
} else if (${k}.value === undefined) {
|
|
24
|
+
if (${Z} in input) newResult[${Z}] = undefined;
|
|
25
|
+
} else {
|
|
26
|
+
newResult[${Z}] = ${k}.value;
|
|
27
|
+
}
|
|
28
|
+
`)}else{const k=L[S];_.write(`const ${k} = ${M(S)};`),_.write(`
|
|
29
|
+
if (${k}.issues.length) payload.issues = payload.issues.concat(${k}.issues.map(iss => ({
|
|
30
|
+
...iss,
|
|
31
|
+
path: iss.path ? [${ae(S)}, ...iss.path] : [${ae(S)}]
|
|
32
|
+
})));`),_.write(`newResult[${ae(S)}] = ${k}.value`)}_.write("payload.value = newResult;"),_.write("return payload;");const Y=_.compile();return(S,k)=>Y(m,S,k)};let s;const r=Pe,i=!Xt.jitless,p=i&&on.value,h=t.catchall;let f;e._zod.parse=(m,_)=>{f??(f=o.value);const b=m.value;if(!r(b))return m.issues.push({expected:"object",code:"invalid_type",input:b,inst:e}),m;const M=[];if(i&&p&&_?.async===!1&&_.jitless!==!0)s||(s=n(t.shape)),m=s(m,_);else{m.value={};const k=f.shape;for(const Z of f.keys){const ie=k[Z],xe=ie._zod.run({value:b[Z],issues:[]},_),It=ie._zod.optin==="optional"&&ie._zod.optout==="optional";xe instanceof Promise?M.push(xe.then($t=>It?Et($t,m,Z,b):ze($t,m,Z))):It?Et(xe,m,Z,b):ze(xe,m,Z)}}if(!h)return M.length?Promise.all(M).then(()=>m):m;const L=[],G=f.keySet,Y=h._zod,S=Y.def.type;for(const k of Object.keys(b)){if(G.has(k))continue;if(S==="never"){L.push(k);continue}const Z=Y.run({value:b[k],issues:[]},_);Z instanceof Promise?M.push(Z.then(ie=>ze(ie,m,k))):ze(Z,m,k)}return L.length&&m.issues.push({code:"unrecognized_keys",keys:L,input:b,inst:e}),M.length?Promise.all(M).then(()=>m):m}});function Ct(e,t,o,n){for(const s of e)if(s.issues.length===0)return t.value=s.value,t;return t.issues.push({code:"invalid_union",input:t.value,inst:o,errors:e.map(s=>s.issues.map(r=>Q(r,n,K())))}),t}const go=d("$ZodUnion",(e,t)=>{$.init(e,t),P(e._zod,"optin",()=>t.options.some(o=>o._zod.optin==="optional")?"optional":void 0),P(e._zod,"optout",()=>t.options.some(o=>o._zod.optout==="optional")?"optional":void 0),P(e._zod,"values",()=>{if(t.options.every(o=>o._zod.values))return new Set(t.options.flatMap(o=>Array.from(o._zod.values)))}),P(e._zod,"pattern",()=>{if(t.options.every(o=>o._zod.pattern)){const o=t.options.map(n=>n._zod.pattern);return new RegExp(`^(${o.map(n=>et(n.source)).join("|")})$`)}}),e._zod.parse=(o,n)=>{let s=!1;const r=[];for(const i of t.options){const a=i._zod.run({value:o.value,issues:[]},n);if(a instanceof Promise)r.push(a),s=!0;else{if(a.issues.length===0)return a;r.push(a)}}return s?Promise.all(r).then(i=>Ct(i,o,e,n)):Ct(r,o,e,n)}}),Us=d("$ZodDiscriminatedUnion",(e,t)=>{go.init(e,t);const o=e._zod.parse;P(e._zod,"propValues",()=>{const s={};for(const r of t.options){const i=r._zod.propValues;if(!i||Object.keys(i).length===0)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(const[a,p]of Object.entries(i)){s[a]||(s[a]=new Set);for(const h of p)s[a].add(h)}}return s});const n=Ye(()=>{const s=t.options,r=new Map;for(const i of s){const a=i._zod.propValues[t.discriminator];if(!a||a.size===0)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(i)}"`);for(const p of a){if(r.has(p))throw new Error(`Duplicate discriminator value "${String(p)}"`);r.set(p,i)}}return r});e._zod.parse=(s,r)=>{const i=s.value;if(!Pe(i))return s.issues.push({code:"invalid_type",expected:"object",input:i,inst:e}),s;const a=n.value.get(i?.[t.discriminator]);return a?a._zod.run(s,r):t.unionFallback?o(s,r):(s.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",input:i,path:[t.discriminator],inst:e}),s)}}),Ls=d("$ZodIntersection",(e,t)=>{$.init(e,t),e._zod.parse=(o,n)=>{const s=o.value,r=t.left._zod.run({value:s,issues:[]},n),i=t.right._zod.run({value:s,issues:[]},n);return r instanceof Promise||i instanceof Promise?Promise.all([r,i]).then(([p,h])=>Nt(o,p,h)):Nt(o,r,i)}});function Ge(e,t){if(e===t)return{valid:!0,data:e};if(e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(Ze(e)&&Ze(t)){const o=Object.keys(t),n=Object.keys(e).filter(r=>o.indexOf(r)!==-1),s={...e,...t};for(const r of n){const i=Ge(e[r],t[r]);if(!i.valid)return{valid:!1,mergeErrorPath:[r,...i.mergeErrorPath]};s[r]=i.data}return{valid:!0,data:s}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};const o=[];for(let n=0;n<e.length;n++){const s=e[n],r=t[n],i=Ge(s,r);if(!i.valid)return{valid:!1,mergeErrorPath:[n,...i.mergeErrorPath]};o.push(i.data)}return{valid:!0,data:o}}return{valid:!1,mergeErrorPath:[]}}function Nt(e,t,o){if(t.issues.length&&e.issues.push(...t.issues),o.issues.length&&e.issues.push(...o.issues),ue(e))return e;const n=Ge(t.value,o.value);if(!n.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(n.mergeErrorPath)}`);return e.value=n.data,e}const js=d("$ZodRecord",(e,t)=>{$.init(e,t),e._zod.parse=(o,n)=>{const s=o.value;if(!Ze(s))return o.issues.push({expected:"record",code:"invalid_type",input:s,inst:e}),o;const r=[];if(t.keyType._zod.values){const i=t.keyType._zod.values;o.value={};for(const p of i)if(typeof p=="string"||typeof p=="number"||typeof p=="symbol"){const h=t.valueType._zod.run({value:s[p],issues:[]},n);h instanceof Promise?r.push(h.then(f=>{f.issues.length&&o.issues.push(...te(p,f.issues)),o.value[p]=f.value})):(h.issues.length&&o.issues.push(...te(p,h.issues)),o.value[p]=h.value)}let a;for(const p in s)i.has(p)||(a=a??[],a.push(p));a&&a.length>0&&o.issues.push({code:"unrecognized_keys",input:s,inst:e,keys:a})}else{o.value={};for(const i of Reflect.ownKeys(s)){if(i==="__proto__")continue;const a=t.keyType._zod.run({value:i,issues:[]},n);if(a instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(a.issues.length){o.issues.push({origin:"record",code:"invalid_key",issues:a.issues.map(h=>Q(h,n,K())),input:i,path:[i],inst:e}),o.value[a.value]=a.value;continue}const p=t.valueType._zod.run({value:s[i],issues:[]},n);p instanceof Promise?r.push(p.then(h=>{h.issues.length&&o.issues.push(...te(i,h.issues)),o.value[a.value]=h.value})):(p.issues.length&&o.issues.push(...te(i,p.issues)),o.value[a.value]=p.value)}}return r.length?Promise.all(r).then(()=>o):o}}),Hs=d("$ZodEnum",(e,t)=>{$.init(e,t);const o=Xo(t.entries);e._zod.values=new Set(o),e._zod.pattern=new RegExp(`^(${o.filter(n=>nn.has(typeof n)).map(n=>typeof n=="string"?me(n):n.toString()).join("|")})$`),e._zod.parse=(n,s)=>{const r=n.value;return e._zod.values.has(r)||n.issues.push({code:"invalid_value",values:o,input:r,inst:e}),n}}),Fs=d("$ZodLiteral",(e,t)=>{$.init(e,t),e._zod.values=new Set(t.values),e._zod.pattern=new RegExp(`^(${t.values.map(o=>typeof o=="string"?me(o):o?o.toString():String(o)).join("|")})$`),e._zod.parse=(o,n)=>{const s=o.value;return e._zod.values.has(s)||o.issues.push({code:"invalid_value",values:t.values,input:s,inst:e}),o}}),Bs=d("$ZodTransform",(e,t)=>{$.init(e,t),e._zod.parse=(o,n)=>{const s=t.transform(o.value,o);if(n.async)return(s instanceof Promise?s:Promise.resolve(s)).then(i=>(o.value=i,o));if(s instanceof Promise)throw new de;return o.value=s,o}}),Vs=d("$ZodOptional",(e,t)=>{$.init(e,t),e._zod.optin="optional",e._zod.optout="optional",P(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),P(e._zod,"pattern",()=>{const o=t.innerType._zod.pattern;return o?new RegExp(`^(${et(o.source)})?$`):void 0}),e._zod.parse=(o,n)=>t.innerType._zod.optin==="optional"?t.innerType._zod.run(o,n):o.value===void 0?o:t.innerType._zod.run(o,n)}),Ws=d("$ZodNullable",(e,t)=>{$.init(e,t),P(e._zod,"optin",()=>t.innerType._zod.optin),P(e._zod,"optout",()=>t.innerType._zod.optout),P(e._zod,"pattern",()=>{const o=t.innerType._zod.pattern;return o?new RegExp(`^(${et(o.source)}|null)$`):void 0}),P(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(o,n)=>o.value===null?o:t.innerType._zod.run(o,n)}),Gs=d("$ZodDefault",(e,t)=>{$.init(e,t),e._zod.optin="optional",P(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(o,n)=>{if(o.value===void 0)return o.value=t.defaultValue,o;const s=t.innerType._zod.run(o,n);return s instanceof Promise?s.then(r=>qt(r,t)):qt(s,t)}});function qt(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}const Js=d("$ZodPrefault",(e,t)=>{$.init(e,t),e._zod.optin="optional",P(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(o,n)=>(o.value===void 0&&(o.value=t.defaultValue),t.innerType._zod.run(o,n))}),Ks=d("$ZodNonOptional",(e,t)=>{$.init(e,t),P(e._zod,"values",()=>{const o=t.innerType._zod.values;return o?new Set([...o].filter(n=>n!==void 0)):void 0}),e._zod.parse=(o,n)=>{const s=t.innerType._zod.run(o,n);return s instanceof Promise?s.then(r=>Mt(r,e)):Mt(s,e)}});function Mt(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t}),e}const Qs=d("$ZodCatch",(e,t)=>{$.init(e,t),e._zod.optin="optional",P(e._zod,"optout",()=>t.innerType._zod.optout),P(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(o,n)=>{const s=t.innerType._zod.run(o,n);return s instanceof Promise?s.then(r=>(o.value=r.value,r.issues.length&&(o.value=t.catchValue({...o,error:{issues:r.issues.map(i=>Q(i,n,K()))},input:o.value}),o.issues=[]),o)):(o.value=s.value,s.issues.length&&(o.value=t.catchValue({...o,error:{issues:s.issues.map(r=>Q(r,n,K()))},input:o.value}),o.issues=[]),o)}}),Ys=d("$ZodPipe",(e,t)=>{$.init(e,t),P(e._zod,"values",()=>t.in._zod.values),P(e._zod,"optin",()=>t.in._zod.optin),P(e._zod,"optout",()=>t.out._zod.optout),e._zod.parse=(o,n)=>{const s=t.in._zod.run(o,n);return s instanceof Promise?s.then(r=>At(r,t,n)):At(s,t,n)}});function At(e,t,o){return ue(e)?e:t.out._zod.run({value:e.value,issues:e.issues},o)}const Xs=d("$ZodReadonly",(e,t)=>{$.init(e,t),P(e._zod,"propValues",()=>t.innerType._zod.propValues),P(e._zod,"values",()=>t.innerType._zod.values),P(e._zod,"optin",()=>t.innerType._zod.optin),P(e._zod,"optout",()=>t.innerType._zod.optout),e._zod.parse=(o,n)=>{const s=t.innerType._zod.run(o,n);return s instanceof Promise?s.then(Ot):Ot(s)}});function Ot(e){return e.value=Object.freeze(e.value),e}const er=d("$ZodCustom",(e,t)=>{H.init(e,t),$.init(e,t),e._zod.parse=(o,n)=>o,e._zod.check=o=>{const n=o.value,s=t.fn(n);if(s instanceof Promise)return s.then(r=>Dt(r,o,n,e));Dt(s,o,n,e)}});function Dt(e,t,o,n){if(!e){const s={code:"custom",input:o,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};n._zod.def.params&&(s.params=n._zod.def.params),t.issues.push(pe(s))}}class tr{constructor(){this._map=new Map,this._idmap=new Map}add(t,...o){const n=o[0];if(this._map.set(t,n),n&&typeof n=="object"&&"id"in n){if(this._idmap.has(n.id))throw new Error(`ID ${n.id} already exists in the registry`);this._idmap.set(n.id,t)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(t){const o=this._map.get(t);return o&&typeof o=="object"&&"id"in o&&this._idmap.delete(o.id),this._map.delete(t),this}get(t){const o=t._zod.parent;if(o){const n={...this.get(o)??{}};return delete n.id,{...n,...this._map.get(t)}}return this._map.get(t)}has(t){return this._map.has(t)}}function or(){return new tr}const Re=or();function nr(e,t){return new e({type:"string",...g(t)})}function sr(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...g(t)})}function Ut(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...g(t)})}function rr(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...g(t)})}function ir(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...g(t)})}function ar(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...g(t)})}function cr(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...g(t)})}function ur(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...g(t)})}function lr(e,t){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...g(t)})}function dr(e,t){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...g(t)})}function pr(e,t){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...g(t)})}function hr(e,t){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...g(t)})}function mr(e,t){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...g(t)})}function fr(e,t){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...g(t)})}function gr(e,t){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...g(t)})}function _r(e,t){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...g(t)})}function vr(e,t){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...g(t)})}function br(e,t){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...g(t)})}function yr(e,t){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...g(t)})}function wr(e,t){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...g(t)})}function kr(e,t){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...g(t)})}function Sr(e,t){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...g(t)})}function xr(e,t){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...g(t)})}function Tr(e,t){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...g(t)})}function zr(e,t){return new e({type:"string",format:"date",check:"string_format",...g(t)})}function Rr(e,t){return new e({type:"string",format:"time",check:"string_format",precision:null,...g(t)})}function Ir(e,t){return new e({type:"string",format:"duration",check:"string_format",...g(t)})}function $r(e,t){return new e({type:"number",checks:[],...g(t)})}function Pr(e,t){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...g(t)})}function Zr(e,t){return new e({type:"boolean",...g(t)})}function Er(e,t){return new e({type:"undefined",...g(t)})}function Cr(e,t){return new e({type:"null",...g(t)})}function Nr(e){return new e({type:"unknown"})}function qr(e,t){return new e({type:"never",...g(t)})}function Lt(e,t){return new po({check:"less_than",...g(t),value:e,inclusive:!1})}function Fe(e,t){return new po({check:"less_than",...g(t),value:e,inclusive:!0})}function jt(e,t){return new ho({check:"greater_than",...g(t),value:e,inclusive:!1})}function Be(e,t){return new ho({check:"greater_than",...g(t),value:e,inclusive:!0})}function Ht(e,t){return new Wn({check:"multiple_of",...g(t),value:e})}function _o(e,t){return new Jn({check:"max_length",...g(t),maximum:e})}function Ee(e,t){return new Kn({check:"min_length",...g(t),minimum:e})}function vo(e,t){return new Qn({check:"length_equals",...g(t),length:e})}function Mr(e,t){return new Yn({check:"string_format",format:"regex",...g(t),pattern:e})}function Ar(e){return new Xn({check:"string_format",format:"lowercase",...g(e)})}function Or(e){return new es({check:"string_format",format:"uppercase",...g(e)})}function Dr(e,t){return new ts({check:"string_format",format:"includes",...g(t),includes:e})}function Ur(e,t){return new os({check:"string_format",format:"starts_with",...g(t),prefix:e})}function Lr(e,t){return new ns({check:"string_format",format:"ends_with",...g(t),suffix:e})}function fe(e){return new ss({check:"overwrite",tx:e})}function jr(e){return fe(t=>t.normalize(e))}function Hr(){return fe(e=>e.trim())}function Fr(){return fe(e=>e.toLowerCase())}function Br(){return fe(e=>e.toUpperCase())}function Vr(e,t,o){return new e({type:"array",element:t,...g(o)})}function Wr(e,t,o){const n=g(o);return n.abort??(n.abort=!0),new e({type:"custom",check:"custom",fn:t,...n})}function Gr(e,t,o){return new e({type:"custom",check:"custom",fn:t,...g(o)})}function nt(e){return!!e._zod}function bo(e,t){return nt(e)?ro(e,t):e.safeParse(t)}function Jr(e){if(!e)return;let t;if(nt(e)?t=e._zod?.def?.shape:t=e.shape,!!t){if(typeof t=="function")try{return t()}catch{return}return t}}function Kr(e){if(nt(e)){const r=e._zod?.def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}}const o=e._def;if(o){if(o.value!==void 0)return o.value;if(Array.isArray(o.values)&&o.values.length>0)return o.values[0]}const n=e.value;if(n!==void 0)return n}const Qr=d("ZodISODateTime",(e,t)=>{vs.init(e,t),N.init(e,t)});function yo(e){return Tr(Qr,e)}const Yr=d("ZodISODate",(e,t)=>{bs.init(e,t),N.init(e,t)});function Xr(e){return zr(Yr,e)}const ei=d("ZodISOTime",(e,t)=>{ys.init(e,t),N.init(e,t)});function ti(e){return Rr(ei,e)}const oi=d("ZodISODuration",(e,t)=>{ws.init(e,t),N.init(e,t)});function ni(e){return Ir(oi,e)}const si=(e,t)=>{oo.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{value:o=>mn(e,o)},flatten:{value:o=>hn(e,o)},addIssue:{value:o=>e.issues.push(o)},addIssues:{value:o=>e.issues.push(...o)},isEmpty:{get(){return e.issues.length===0}}})},De=d("ZodError",si,{Parent:Error}),ri=fn(De),ii=gn(De),ai=so(De),ci=io(De),C=d("ZodType",(e,t)=>($.init(e,t),e.def=t,Object.defineProperty(e,"_def",{value:t}),e.check=(...o)=>e.clone({...t,checks:[...t.checks??[],...o.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),e.clone=(o,n)=>ne(e,o,n),e.brand=()=>e,e.register=((o,n)=>(o.add(e,n),e)),e.parse=(o,n)=>ri(e,o,n,{callee:e.parse}),e.safeParse=(o,n)=>ai(e,o,n),e.parseAsync=async(o,n)=>ii(e,o,n,{callee:e.parseAsync}),e.safeParseAsync=async(o,n)=>ci(e,o,n),e.spa=e.safeParseAsync,e.refine=(o,n)=>e.check(Xi(o,n)),e.superRefine=o=>e.check(ea(o)),e.overwrite=o=>e.check(fe(o)),e.optional=()=>q(e),e.nullable=()=>Vt(e),e.nullish=()=>q(Vt(e)),e.nonoptional=o=>Bi(e,o),e.array=()=>v(e),e.or=o=>w([e,o]),e.and=o=>st(e,o),e.transform=o=>Qe(e,Ro(o)),e.default=o=>ji(e,o),e.prefault=o=>Fi(e,o),e.catch=o=>Wi(e,o),e.pipe=o=>Qe(e,o),e.readonly=()=>Ki(e),e.describe=o=>{const n=e.clone();return Re.add(n,{description:o}),n},Object.defineProperty(e,"description",{get(){return Re.get(e)?.description},configurable:!0}),e.meta=(...o)=>{if(o.length===0)return Re.get(e);const n=e.clone();return Re.add(n,o[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e)),wo=d("_ZodString",(e,t)=>{ot.init(e,t),C.init(e,t);const o=e._zod.bag;e.format=o.format??null,e.minLength=o.minimum??null,e.maxLength=o.maximum??null,e.regex=(...n)=>e.check(Mr(...n)),e.includes=(...n)=>e.check(Dr(...n)),e.startsWith=(...n)=>e.check(Ur(...n)),e.endsWith=(...n)=>e.check(Lr(...n)),e.min=(...n)=>e.check(Ee(...n)),e.max=(...n)=>e.check(_o(...n)),e.length=(...n)=>e.check(vo(...n)),e.nonempty=(...n)=>e.check(Ee(1,...n)),e.lowercase=n=>e.check(Ar(n)),e.uppercase=n=>e.check(Or(n)),e.trim=()=>e.check(Hr()),e.normalize=(...n)=>e.check(jr(...n)),e.toLowerCase=()=>e.check(Fr()),e.toUpperCase=()=>e.check(Br())}),ui=d("ZodString",(e,t)=>{ot.init(e,t),wo.init(e,t),e.email=o=>e.check(sr(li,o)),e.url=o=>e.check(ur(di,o)),e.jwt=o=>e.check(xr(zi,o)),e.emoji=o=>e.check(lr(pi,o)),e.guid=o=>e.check(Ut(Ft,o)),e.uuid=o=>e.check(rr(Ie,o)),e.uuidv4=o=>e.check(ir(Ie,o)),e.uuidv6=o=>e.check(ar(Ie,o)),e.uuidv7=o=>e.check(cr(Ie,o)),e.nanoid=o=>e.check(dr(hi,o)),e.guid=o=>e.check(Ut(Ft,o)),e.cuid=o=>e.check(pr(mi,o)),e.cuid2=o=>e.check(hr(fi,o)),e.ulid=o=>e.check(mr(gi,o)),e.base64=o=>e.check(wr(Si,o)),e.base64url=o=>e.check(kr(xi,o)),e.xid=o=>e.check(fr(_i,o)),e.ksuid=o=>e.check(gr(vi,o)),e.ipv4=o=>e.check(_r(bi,o)),e.ipv6=o=>e.check(vr(yi,o)),e.cidrv4=o=>e.check(br(wi,o)),e.cidrv6=o=>e.check(yr(ki,o)),e.e164=o=>e.check(Sr(Ti,o)),e.datetime=o=>e.check(yo(o)),e.date=o=>e.check(Xr(o)),e.time=o=>e.check(ti(o)),e.duration=o=>e.check(ni(o))});function u(e){return nr(ui,e)}const N=d("ZodStringFormat",(e,t)=>{E.init(e,t),wo.init(e,t)}),li=d("ZodEmail",(e,t)=>{us.init(e,t),N.init(e,t)}),Ft=d("ZodGUID",(e,t)=>{as.init(e,t),N.init(e,t)}),Ie=d("ZodUUID",(e,t)=>{cs.init(e,t),N.init(e,t)}),di=d("ZodURL",(e,t)=>{ls.init(e,t),N.init(e,t)}),pi=d("ZodEmoji",(e,t)=>{ds.init(e,t),N.init(e,t)}),hi=d("ZodNanoID",(e,t)=>{ps.init(e,t),N.init(e,t)}),mi=d("ZodCUID",(e,t)=>{hs.init(e,t),N.init(e,t)}),fi=d("ZodCUID2",(e,t)=>{ms.init(e,t),N.init(e,t)}),gi=d("ZodULID",(e,t)=>{fs.init(e,t),N.init(e,t)}),_i=d("ZodXID",(e,t)=>{gs.init(e,t),N.init(e,t)}),vi=d("ZodKSUID",(e,t)=>{_s.init(e,t),N.init(e,t)}),bi=d("ZodIPv4",(e,t)=>{ks.init(e,t),N.init(e,t)}),yi=d("ZodIPv6",(e,t)=>{Ss.init(e,t),N.init(e,t)}),wi=d("ZodCIDRv4",(e,t)=>{xs.init(e,t),N.init(e,t)}),ki=d("ZodCIDRv6",(e,t)=>{Ts.init(e,t),N.init(e,t)}),Si=d("ZodBase64",(e,t)=>{zs.init(e,t),N.init(e,t)}),xi=d("ZodBase64URL",(e,t)=>{Is.init(e,t),N.init(e,t)}),Ti=d("ZodE164",(e,t)=>{$s.init(e,t),N.init(e,t)}),zi=d("ZodJWT",(e,t)=>{Zs.init(e,t),N.init(e,t)}),ko=d("ZodNumber",(e,t)=>{fo.init(e,t),C.init(e,t),e.gt=(n,s)=>e.check(jt(n,s)),e.gte=(n,s)=>e.check(Be(n,s)),e.min=(n,s)=>e.check(Be(n,s)),e.lt=(n,s)=>e.check(Lt(n,s)),e.lte=(n,s)=>e.check(Fe(n,s)),e.max=(n,s)=>e.check(Fe(n,s)),e.int=n=>e.check(Bt(n)),e.safe=n=>e.check(Bt(n)),e.positive=n=>e.check(jt(0,n)),e.nonnegative=n=>e.check(Be(0,n)),e.negative=n=>e.check(Lt(0,n)),e.nonpositive=n=>e.check(Fe(0,n)),e.multipleOf=(n,s)=>e.check(Ht(n,s)),e.step=(n,s)=>e.check(Ht(n,s)),e.finite=()=>e;const o=e._zod.bag;e.minValue=Math.max(o.minimum??Number.NEGATIVE_INFINITY,o.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(o.maximum??Number.POSITIVE_INFINITY,o.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(o.format??"").includes("int")||Number.isSafeInteger(o.multipleOf??.5),e.isFinite=!0,e.format=o.format??null});function y(e){return $r(ko,e)}const Ri=d("ZodNumberFormat",(e,t)=>{Es.init(e,t),ko.init(e,t)});function Bt(e){return Pr(Ri,e)}const Ii=d("ZodBoolean",(e,t)=>{Cs.init(e,t),C.init(e,t)});function I(e){return Zr(Ii,e)}const $i=d("ZodUndefined",(e,t)=>{Ns.init(e,t),C.init(e,t)});function Je(e){return Er($i,e)}const Pi=d("ZodNull",(e,t)=>{qs.init(e,t),C.init(e,t)});function So(e){return Cr(Pi,e)}const Zi=d("ZodUnknown",(e,t)=>{Ms.init(e,t),C.init(e,t)});function R(){return Nr(Zi)}const Ei=d("ZodNever",(e,t)=>{As.init(e,t),C.init(e,t)});function Ci(e){return qr(Ei,e)}const Ni=d("ZodArray",(e,t)=>{Os.init(e,t),C.init(e,t),e.element=t.element,e.min=(o,n)=>e.check(Ee(o,n)),e.nonempty=o=>e.check(Ee(1,o)),e.max=(o,n)=>e.check(_o(o,n)),e.length=(o,n)=>e.check(vo(o,n)),e.unwrap=()=>e.element});function v(e,t){return Vr(Ni,e,t)}const xo=d("ZodObject",(e,t)=>{Ds.init(e,t),C.init(e,t),P(e,"shape",()=>t.shape),e.keyof=()=>F(Object.keys(e._zod.def.shape)),e.catchall=o=>e.clone({...e._zod.def,catchall:o}),e.passthrough=()=>e.clone({...e._zod.def,catchall:R()}),e.loose=()=>e.clone({...e._zod.def,catchall:R()}),e.strict=()=>e.clone({...e._zod.def,catchall:Ci()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=o=>un(e,o),e.merge=o=>ln(e,o),e.pick=o=>an(e,o),e.omit=o=>cn(e,o),e.partial=(...o)=>dn(Io,e,o[0]),e.required=(...o)=>pn($o,e,o[0])});function l(e,t){const o={type:"object",get shape(){return Ae(this,"shape",{...e}),this.shape},...g(t)};return new xo(o)}function j(e,t){return new xo({type:"object",get shape(){return Ae(this,"shape",{...e}),this.shape},catchall:R(),...g(t)})}const To=d("ZodUnion",(e,t)=>{go.init(e,t),C.init(e,t),e.options=t.options});function w(e,t){return new To({type:"union",options:e,...g(t)})}const qi=d("ZodDiscriminatedUnion",(e,t)=>{To.init(e,t),Us.init(e,t)});function zo(e,t,o){return new qi({type:"union",options:t,discriminator:e,...g(o)})}const Mi=d("ZodIntersection",(e,t)=>{Ls.init(e,t),C.init(e,t)});function st(e,t){return new Mi({type:"intersection",left:e,right:t})}const Ai=d("ZodRecord",(e,t)=>{js.init(e,t),C.init(e,t),e.keyType=t.keyType,e.valueType=t.valueType});function z(e,t,o){return new Ai({type:"record",keyType:e,valueType:t,...g(o)})}const Ke=d("ZodEnum",(e,t)=>{Hs.init(e,t),C.init(e,t),e.enum=t.entries,e.options=Object.values(t.entries);const o=new Set(Object.keys(t.entries));e.extract=(n,s)=>{const r={};for(const i of n)if(o.has(i))r[i]=t.entries[i];else throw new Error(`Key ${i} not found in enum`);return new Ke({...t,checks:[],...g(s),entries:r})},e.exclude=(n,s)=>{const r={...t.entries};for(const i of n)if(o.has(i))delete r[i];else throw new Error(`Key ${i} not found in enum`);return new Ke({...t,checks:[],...g(s),entries:r})}});function F(e,t){const o=Array.isArray(e)?Object.fromEntries(e.map(n=>[n,n])):e;return new Ke({type:"enum",entries:o,...g(t)})}const Oi=d("ZodLiteral",(e,t)=>{Fs.init(e,t),C.init(e,t),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function c(e,t){return new Oi({type:"literal",values:Array.isArray(e)?e:[e],...g(t)})}const Di=d("ZodTransform",(e,t)=>{Bs.init(e,t),C.init(e,t),e._zod.parse=(o,n)=>{o.addIssue=r=>{if(typeof r=="string")o.issues.push(pe(r,o.value,t));else{const i=r;i.fatal&&(i.continue=!1),i.code??(i.code="custom"),i.input??(i.input=o.value),i.inst??(i.inst=e),i.continue??(i.continue=!0),o.issues.push(pe(i))}};const s=t.transform(o.value,o);return s instanceof Promise?s.then(r=>(o.value=r,o)):(o.value=s,o)}});function Ro(e){return new Di({type:"transform",transform:e})}const Io=d("ZodOptional",(e,t)=>{Vs.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType});function q(e){return new Io({type:"optional",innerType:e})}const Ui=d("ZodNullable",(e,t)=>{Ws.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType});function Vt(e){return new Ui({type:"nullable",innerType:e})}const Li=d("ZodDefault",(e,t)=>{Gs.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function ji(e,t){return new Li({type:"default",innerType:e,get defaultValue(){return typeof t=="function"?t():t}})}const Hi=d("ZodPrefault",(e,t)=>{Js.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType});function Fi(e,t){return new Hi({type:"prefault",innerType:e,get defaultValue(){return typeof t=="function"?t():t}})}const $o=d("ZodNonOptional",(e,t)=>{Ks.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType});function Bi(e,t){return new $o({type:"nonoptional",innerType:e,...g(t)})}const Vi=d("ZodCatch",(e,t)=>{Qs.init(e,t),C.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Wi(e,t){return new Vi({type:"catch",innerType:e,catchValue:typeof t=="function"?t:()=>t})}const Gi=d("ZodPipe",(e,t)=>{Ys.init(e,t),C.init(e,t),e.in=t.in,e.out=t.out});function Qe(e,t){return new Gi({type:"pipe",in:e,out:t})}const Ji=d("ZodReadonly",(e,t)=>{Xs.init(e,t),C.init(e,t)});function Ki(e){return new Ji({type:"readonly",innerType:e})}const Po=d("ZodCustom",(e,t)=>{er.init(e,t),C.init(e,t)});function Qi(e){const t=new H({check:"custom"});return t._zod.check=e,t}function Yi(e,t){return Wr(Po,e??(()=>!0),t)}function Xi(e,t={}){return Gr(Po,e,t)}function ea(e){const t=Qi(o=>(o.addIssue=n=>{if(typeof n=="string")o.issues.push(pe(n,o.value,t._zod.def));else{const s=n;s.fatal&&(s.continue=!1),s.code??(s.code="custom"),s.input??(s.input=o.value),s.inst??(s.inst=t),s.continue??(s.continue=!t._zod.def.abort),o.issues.push(pe(s))}},e(o.value,o)));return t}function Zo(e,t){return Qe(Ro(e),t)}const ee="io.modelcontextprotocol/related-task",Ue="2.0",A=Yi(e=>e!==null&&(typeof e=="object"||typeof e=="function")),Eo=w([u(),y().int()]),Co=u();j({ttl:w([y(),So()]).optional(),pollInterval:y().optional()});const ta=l({ttl:y().optional()}),oa=l({taskId:u()}),rt=j({progressToken:Eo.optional(),[ee]:oa.optional()}),B=l({_meta:rt.optional()}),ge=B.extend({task:ta.optional()}),na=e=>ge.safeParse(e).success,O=l({method:u(),params:B.loose().optional()}),V=l({_meta:rt.optional()}),W=l({method:u(),params:V.loose().optional()}),D=j({_meta:rt.optional()}),_e=w([u(),y().int()]),No=l({jsonrpc:c(Ue),id:_e,...O.shape}).strict(),Wt=e=>No.safeParse(e).success,qo=l({jsonrpc:c(Ue),...W.shape}).strict(),sa=e=>qo.safeParse(e).success,it=l({jsonrpc:c(Ue),id:_e,result:D}).strict(),$e=e=>it.safeParse(e).success;var T;(function(e){e[e.ConnectionClosed=-32e3]="ConnectionClosed",e[e.RequestTimeout=-32001]="RequestTimeout",e[e.ParseError=-32700]="ParseError",e[e.InvalidRequest=-32600]="InvalidRequest",e[e.MethodNotFound=-32601]="MethodNotFound",e[e.InvalidParams=-32602]="InvalidParams",e[e.InternalError=-32603]="InternalError",e[e.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(T||(T={}));const at=l({jsonrpc:c(Ue),id:_e.optional(),error:l({code:y().int(),message:u(),data:R().optional()})}).strict(),ra=e=>at.safeParse(e).success,ia=w([No,qo,it,at]);w([it,at]);const ct=D.strict(),aa=V.extend({requestId:_e.optional(),reason:u().optional()}),ut=W.extend({method:c("notifications/cancelled"),params:aa}),ca=l({src:u(),mimeType:u().optional(),sizes:v(u()).optional(),theme:F(["light","dark"]).optional()}),ve=l({icons:v(ca).optional()}),se=l({name:u(),title:u().optional()}),Le=se.extend({...se.shape,...ve.shape,version:u(),websiteUrl:u().optional(),description:u().optional()}),ua=st(l({applyDefaults:I().optional()}),z(u(),R())),la=Zo(e=>e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0?{form:{}}:e,st(l({form:ua.optional(),url:A.optional()}),z(u(),R()).optional())),da=j({list:A.optional(),cancel:A.optional(),requests:j({sampling:j({createMessage:A.optional()}).optional(),elicitation:j({create:A.optional()}).optional()}).optional()}),pa=j({list:A.optional(),cancel:A.optional(),requests:j({tools:j({call:A.optional()}).optional()}).optional()}),ha=l({experimental:z(u(),A).optional(),sampling:l({context:A.optional(),tools:A.optional()}).optional(),elicitation:la.optional(),roots:l({listChanged:I().optional()}).optional(),tasks:da.optional()}),ma=B.extend({protocolVersion:u(),capabilities:ha,clientInfo:Le}),fa=O.extend({method:c("initialize"),params:ma}),ga=l({experimental:z(u(),A).optional(),logging:A.optional(),completions:A.optional(),prompts:l({listChanged:I().optional()}).optional(),resources:l({subscribe:I().optional(),listChanged:I().optional()}).optional(),tools:l({listChanged:I().optional()}).optional(),tasks:pa.optional()}),_a=D.extend({protocolVersion:u(),capabilities:ga,serverInfo:Le,instructions:u().optional()}),va=W.extend({method:c("notifications/initialized"),params:V.optional()}),je=O.extend({method:c("ping"),params:B.optional()}),ba=l({progress:y(),total:q(y()),message:q(u())}),ya=l({...V.shape,...ba.shape,progressToken:Eo}),lt=W.extend({method:c("notifications/progress"),params:ya}),wa=B.extend({cursor:Co.optional()}),be=O.extend({params:wa.optional()}),ye=D.extend({nextCursor:Co.optional()}),ka=F(["working","input_required","completed","failed","cancelled"]),we=l({taskId:u(),status:ka,ttl:w([y(),So()]),createdAt:u(),lastUpdatedAt:u(),pollInterval:q(y()),statusMessage:q(u())}),dt=D.extend({task:we}),Sa=V.merge(we),Ce=W.extend({method:c("notifications/tasks/status"),params:Sa}),pt=O.extend({method:c("tasks/get"),params:B.extend({taskId:u()})}),ht=D.merge(we),mt=O.extend({method:c("tasks/result"),params:B.extend({taskId:u()})});D.loose();const ft=be.extend({method:c("tasks/list")}),gt=ye.extend({tasks:v(we)}),_t=O.extend({method:c("tasks/cancel"),params:B.extend({taskId:u()})}),xa=D.merge(we),Mo=l({uri:u(),mimeType:q(u()),_meta:z(u(),R()).optional()}),Ao=Mo.extend({text:u()}),vt=u().refine(e=>{try{return atob(e),!0}catch{return!1}},{message:"Invalid Base64 string"}),Oo=Mo.extend({blob:vt}),ke=F(["user","assistant"]),re=l({audience:v(ke).optional(),priority:y().min(0).max(1).optional(),lastModified:yo({offset:!0}).optional()}),Do=l({...se.shape,...ve.shape,uri:u(),description:q(u()),mimeType:q(u()),annotations:re.optional(),_meta:q(j({}))}),Ta=l({...se.shape,...ve.shape,uriTemplate:u(),description:q(u()),mimeType:q(u()),annotations:re.optional(),_meta:q(j({}))}),za=be.extend({method:c("resources/list")}),Uo=ye.extend({resources:v(Do)}),Ra=be.extend({method:c("resources/templates/list")}),Ia=ye.extend({resourceTemplates:v(Ta)}),bt=B.extend({uri:u()}),$a=bt,Pa=O.extend({method:c("resources/read"),params:$a}),Lo=D.extend({contents:v(w([Ao,Oo]))}),Za=W.extend({method:c("notifications/resources/list_changed"),params:V.optional()}),Ea=bt,Ca=O.extend({method:c("resources/subscribe"),params:Ea}),Na=bt,qa=O.extend({method:c("resources/unsubscribe"),params:Na}),Ma=V.extend({uri:u()}),Aa=W.extend({method:c("notifications/resources/updated"),params:Ma}),Oa=l({name:u(),description:q(u()),required:q(I())}),Da=l({...se.shape,...ve.shape,description:q(u()),arguments:q(v(Oa)),_meta:q(j({}))}),Ua=be.extend({method:c("prompts/list")}),La=ye.extend({prompts:v(Da)}),ja=B.extend({name:u(),arguments:z(u(),u()).optional()}),Ha=O.extend({method:c("prompts/get"),params:ja}),yt=l({type:c("text"),text:u(),annotations:re.optional(),_meta:z(u(),R()).optional()}),wt=l({type:c("image"),data:vt,mimeType:u(),annotations:re.optional(),_meta:z(u(),R()).optional()}),kt=l({type:c("audio"),data:vt,mimeType:u(),annotations:re.optional(),_meta:z(u(),R()).optional()}),Fa=l({type:c("tool_use"),name:u(),id:u(),input:z(u(),R()),_meta:z(u(),R()).optional()}),jo=l({type:c("resource"),resource:w([Ao,Oo]),annotations:re.optional(),_meta:z(u(),R()).optional()}),Ho=Do.extend({type:c("resource_link")}),Se=w([yt,wt,kt,Ho,jo]),Ba=l({role:ke,content:Se}),Va=D.extend({description:u().optional(),messages:v(Ba)}),Wa=W.extend({method:c("notifications/prompts/list_changed"),params:V.optional()}),Ga=l({title:u().optional(),readOnlyHint:I().optional(),destructiveHint:I().optional(),idempotentHint:I().optional(),openWorldHint:I().optional()}),Ja=l({taskSupport:F(["required","optional","forbidden"]).optional()}),St=l({...se.shape,...ve.shape,description:u().optional(),inputSchema:l({type:c("object"),properties:z(u(),A).optional(),required:v(u()).optional()}).catchall(R()),outputSchema:l({type:c("object"),properties:z(u(),A).optional(),required:v(u()).optional()}).catchall(R()).optional(),annotations:Ga.optional(),execution:Ja.optional(),_meta:z(u(),R()).optional()}),Fo=be.extend({method:c("tools/list")}),Ka=ye.extend({tools:v(St)}),He=D.extend({content:v(Se).default([]),structuredContent:z(u(),R()).optional(),isError:I().optional()});He.or(D.extend({toolResult:R()}));const Qa=ge.extend({name:u(),arguments:z(u(),R()).optional()}),Bo=O.extend({method:c("tools/call"),params:Qa}),Ya=W.extend({method:c("notifications/tools/list_changed"),params:V.optional()});l({autoRefresh:I().default(!0),debounceMs:y().int().nonnegative().default(300)});const Vo=F(["debug","info","notice","warning","error","critical","alert","emergency"]),Xa=B.extend({level:Vo}),ec=O.extend({method:c("logging/setLevel"),params:Xa}),tc=V.extend({level:Vo,logger:u().optional(),data:R()}),oc=W.extend({method:c("notifications/message"),params:tc}),nc=l({name:u().optional()}),sc=l({hints:v(nc).optional(),costPriority:y().min(0).max(1).optional(),speedPriority:y().min(0).max(1).optional(),intelligencePriority:y().min(0).max(1).optional()}),rc=l({mode:F(["auto","required","none"]).optional()}),ic=l({type:c("tool_result"),toolUseId:u().describe("The unique identifier for the corresponding tool call."),content:v(Se).default([]),structuredContent:l({}).loose().optional(),isError:I().optional(),_meta:z(u(),R()).optional()}),ac=zo("type",[yt,wt,kt]),Ne=zo("type",[yt,wt,kt,Fa,ic]),cc=l({role:ke,content:w([Ne,v(Ne)]),_meta:z(u(),R()).optional()}),uc=ge.extend({messages:v(cc),modelPreferences:sc.optional(),systemPrompt:u().optional(),includeContext:F(["none","thisServer","allServers"]).optional(),temperature:y().optional(),maxTokens:y().int(),stopSequences:v(u()).optional(),metadata:A.optional(),tools:v(St).optional(),toolChoice:rc.optional()}),lc=O.extend({method:c("sampling/createMessage"),params:uc}),dc=D.extend({model:u(),stopReason:q(F(["endTurn","stopSequence","maxTokens"]).or(u())),role:ke,content:ac}),pc=D.extend({model:u(),stopReason:q(F(["endTurn","stopSequence","maxTokens","toolUse"]).or(u())),role:ke,content:w([Ne,v(Ne)])}),hc=l({type:c("boolean"),title:u().optional(),description:u().optional(),default:I().optional()}),mc=l({type:c("string"),title:u().optional(),description:u().optional(),minLength:y().optional(),maxLength:y().optional(),format:F(["email","uri","date","date-time"]).optional(),default:u().optional()}),fc=l({type:F(["number","integer"]),title:u().optional(),description:u().optional(),minimum:y().optional(),maximum:y().optional(),default:y().optional()}),gc=l({type:c("string"),title:u().optional(),description:u().optional(),enum:v(u()),default:u().optional()}),_c=l({type:c("string"),title:u().optional(),description:u().optional(),oneOf:v(l({const:u(),title:u()})),default:u().optional()}),vc=l({type:c("string"),title:u().optional(),description:u().optional(),enum:v(u()),enumNames:v(u()).optional(),default:u().optional()}),bc=w([gc,_c]),yc=l({type:c("array"),title:u().optional(),description:u().optional(),minItems:y().optional(),maxItems:y().optional(),items:l({type:c("string"),enum:v(u())}),default:v(u()).optional()}),wc=l({type:c("array"),title:u().optional(),description:u().optional(),minItems:y().optional(),maxItems:y().optional(),items:l({anyOf:v(l({const:u(),title:u()}))}),default:v(u()).optional()}),kc=w([yc,wc]),Sc=w([vc,bc,kc]),xc=w([Sc,hc,mc,fc]),Tc=ge.extend({mode:c("form").optional(),message:u(),requestedSchema:l({type:c("object"),properties:z(u(),xc),required:v(u()).optional()})}),zc=ge.extend({mode:c("url"),message:u(),elicitationId:u(),url:u().url()}),Rc=w([Tc,zc]),Ic=O.extend({method:c("elicitation/create"),params:Rc}),$c=V.extend({elicitationId:u()}),Pc=W.extend({method:c("notifications/elicitation/complete"),params:$c}),Zc=D.extend({action:F(["accept","decline","cancel"]),content:Zo(e=>e===null?void 0:e,z(u(),w([u(),y(),I(),v(u())])).optional())}),Ec=l({type:c("ref/resource"),uri:u()}),Cc=l({type:c("ref/prompt"),name:u()}),Nc=B.extend({ref:w([Cc,Ec]),argument:l({name:u(),value:u()}),context:l({arguments:z(u(),u()).optional()}).optional()}),qc=O.extend({method:c("completion/complete"),params:Nc}),Mc=D.extend({completion:j({values:v(u()).max(100),total:q(y().int()),hasMore:q(I())})}),Ac=l({uri:u().startsWith("file://"),name:u().optional(),_meta:z(u(),R()).optional()}),Oc=O.extend({method:c("roots/list"),params:B.optional()}),Dc=D.extend({roots:v(Ac)}),Uc=W.extend({method:c("notifications/roots/list_changed"),params:V.optional()});w([je,fa,qc,ec,Ha,Ua,za,Ra,Pa,Ca,qa,Bo,Fo,pt,mt,ft,_t]);w([ut,lt,va,Uc,Ce]);w([ct,dc,pc,Zc,Dc,ht,gt,dt]);w([je,lc,Ic,Oc,pt,mt,ft,_t]);w([ut,lt,oc,Aa,Za,Ya,Wa,Ce,Pc]);w([ct,_a,Mc,Va,La,Uo,Ia,Lo,He,Ka,ht,gt,dt]);class x extends Error{constructor(t,o,n){super(`MCP error ${t}: ${o}`),this.code=t,this.data=n,this.name="McpError"}static fromError(t,o,n){if(t===T.UrlElicitationRequired&&n){const s=n;if(s.elicitations)return new Lc(s.elicitations,o)}return new x(t,o,n)}}class Lc extends x{constructor(t,o=`URL elicitation${t.length>1?"s":""} required`){super(T.UrlElicitationRequired,o,{elicitations:t})}get elicitations(){return this.data?.elicitations??[]}}function X(e){return e==="completed"||e==="failed"||e==="cancelled"}new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Gt(e){const o=Jr(e)?.method;if(!o)throw new Error("Schema is missing a method literal");const n=Kr(o);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function Jt(e,t){const o=bo(e,t);if(!o.success)throw o.error;return o.data}const jc=6e4;class Hc{constructor(t){this._options=t,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(ut,o=>{this._oncancel(o)}),this.setNotificationHandler(lt,o=>{this._onprogress(o)}),this.setRequestHandler(je,o=>({})),this._taskStore=t?.taskStore,this._taskMessageQueue=t?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(pt,async(o,n)=>{const s=await this._taskStore.getTask(o.params.taskId,n.sessionId);if(!s)throw new x(T.InvalidParams,"Failed to retrieve task: Task not found");return{...s}}),this.setRequestHandler(mt,async(o,n)=>{const s=async()=>{const r=o.params.taskId;if(this._taskMessageQueue){let a;for(;a=await this._taskMessageQueue.dequeue(r,n.sessionId);){if(a.type==="response"||a.type==="error"){const p=a.message,h=p.id,f=this._requestResolvers.get(h);if(f)if(this._requestResolvers.delete(h),a.type==="response")f(p);else{const m=p,_=new x(m.error.code,m.error.message,m.error.data);f(_)}else{const m=a.type==="response"?"Response":"Error";this._onerror(new Error(`${m} handler missing for request ${h}`))}continue}await this._transport?.send(a.message,{relatedRequestId:n.requestId})}}const i=await this._taskStore.getTask(r,n.sessionId);if(!i)throw new x(T.InvalidParams,`Task not found: ${r}`);if(!X(i.status))return await this._waitForTaskUpdate(r,n.signal),await s();if(X(i.status)){const a=await this._taskStore.getTaskResult(r,n.sessionId);return this._clearTaskQueue(r),{...a,_meta:{...a._meta,[ee]:{taskId:r}}}}return await s()};return await s()}),this.setRequestHandler(ft,async(o,n)=>{try{const{tasks:s,nextCursor:r}=await this._taskStore.listTasks(o.params?.cursor,n.sessionId);return{tasks:s,nextCursor:r,_meta:{}}}catch(s){throw new x(T.InvalidParams,`Failed to list tasks: ${s instanceof Error?s.message:String(s)}`)}}),this.setRequestHandler(_t,async(o,n)=>{try{const s=await this._taskStore.getTask(o.params.taskId,n.sessionId);if(!s)throw new x(T.InvalidParams,`Task not found: ${o.params.taskId}`);if(X(s.status))throw new x(T.InvalidParams,`Cannot cancel task in terminal status: ${s.status}`);await this._taskStore.updateTaskStatus(o.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(o.params.taskId);const r=await this._taskStore.getTask(o.params.taskId,n.sessionId);if(!r)throw new x(T.InvalidParams,`Task not found after cancellation: ${o.params.taskId}`);return{_meta:{},...r}}catch(s){throw s instanceof x?s:new x(T.InvalidRequest,`Failed to cancel task: ${s instanceof Error?s.message:String(s)}`)}}))}async _oncancel(t){if(!t.params.requestId)return;this._requestHandlerAbortControllers.get(t.params.requestId)?.abort(t.params.reason)}_setupTimeout(t,o,n,s,r=!1){this._timeoutInfo.set(t,{timeoutId:setTimeout(s,o),startTime:Date.now(),timeout:o,maxTotalTimeout:n,resetTimeoutOnProgress:r,onTimeout:s})}_resetTimeout(t){const o=this._timeoutInfo.get(t);if(!o)return!1;const n=Date.now()-o.startTime;if(o.maxTotalTimeout&&n>=o.maxTotalTimeout)throw this._timeoutInfo.delete(t),x.fromError(T.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:o.maxTotalTimeout,totalElapsed:n});return clearTimeout(o.timeoutId),o.timeoutId=setTimeout(o.onTimeout,o.timeout),!0}_cleanupTimeout(t){const o=this._timeoutInfo.get(t);o&&(clearTimeout(o.timeoutId),this._timeoutInfo.delete(t))}async connect(t){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=t;const o=this.transport?.onclose;this._transport.onclose=()=>{o?.(),this._onclose()};const n=this.transport?.onerror;this._transport.onerror=r=>{n?.(r),this._onerror(r)};const s=this._transport?.onmessage;this._transport.onmessage=(r,i)=>{s?.(r,i),$e(r)||ra(r)?this._onresponse(r):Wt(r)?this._onrequest(r,i):sa(r)?this._onnotification(r):this._onerror(new Error(`Unknown message type: ${JSON.stringify(r)}`))},await this._transport.start()}_onclose(){const t=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(const n of this._requestHandlerAbortControllers.values())n.abort();this._requestHandlerAbortControllers.clear();const o=x.fromError(T.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(const n of t.values())n(o)}_onerror(t){this.onerror?.(t)}_onnotification(t){const o=this._notificationHandlers.get(t.method)??this.fallbackNotificationHandler;o!==void 0&&Promise.resolve().then(()=>o(t)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(t,o){const n=this._requestHandlers.get(t.method)??this.fallbackRequestHandler,s=this._transport,r=t.params?._meta?.[ee]?.taskId;if(n===void 0){const f={jsonrpc:"2.0",id:t.id,error:{code:T.MethodNotFound,message:"Method not found"}};r&&this._taskMessageQueue?this._enqueueTaskMessage(r,{type:"error",message:f,timestamp:Date.now()},s?.sessionId).catch(m=>this._onerror(new Error(`Failed to enqueue error response: ${m}`))):s?.send(f).catch(m=>this._onerror(new Error(`Failed to send an error response: ${m}`)));return}const i=new AbortController;this._requestHandlerAbortControllers.set(t.id,i);const a=na(t.params)?t.params.task:void 0,p=this._taskStore?this.requestTaskStore(t,s?.sessionId):void 0,h={signal:i.signal,sessionId:s?.sessionId,_meta:t.params?._meta,sendNotification:async f=>{if(i.signal.aborted)return;const m={relatedRequestId:t.id};r&&(m.relatedTask={taskId:r}),await this.notification(f,m)},sendRequest:async(f,m,_)=>{if(i.signal.aborted)throw new x(T.ConnectionClosed,"Request was cancelled");const b={..._,relatedRequestId:t.id};r&&!b.relatedTask&&(b.relatedTask={taskId:r});const M=b.relatedTask?.taskId??r;return M&&p&&await p.updateTaskStatus(M,"input_required"),await this.request(f,m,b)},authInfo:o?.authInfo,requestId:t.id,requestInfo:o?.requestInfo,taskId:r,taskStore:p,taskRequestedTtl:a?.ttl,closeSSEStream:o?.closeSSEStream,closeStandaloneSSEStream:o?.closeStandaloneSSEStream};Promise.resolve().then(()=>{a&&this.assertTaskHandlerCapability(t.method)}).then(()=>n(t,h)).then(async f=>{if(i.signal.aborted)return;const m={result:f,jsonrpc:"2.0",id:t.id};r&&this._taskMessageQueue?await this._enqueueTaskMessage(r,{type:"response",message:m,timestamp:Date.now()},s?.sessionId):await s?.send(m)},async f=>{if(i.signal.aborted)return;const m={jsonrpc:"2.0",id:t.id,error:{code:Number.isSafeInteger(f.code)?f.code:T.InternalError,message:f.message??"Internal error",...f.data!==void 0&&{data:f.data}}};r&&this._taskMessageQueue?await this._enqueueTaskMessage(r,{type:"error",message:m,timestamp:Date.now()},s?.sessionId):await s?.send(m)}).catch(f=>this._onerror(new Error(`Failed to send response: ${f}`))).finally(()=>{this._requestHandlerAbortControllers.delete(t.id)})}_onprogress(t){const{progressToken:o,...n}=t.params,s=Number(o),r=this._progressHandlers.get(s);if(!r){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(t)}`));return}const i=this._responseHandlers.get(s),a=this._timeoutInfo.get(s);if(a&&i&&a.resetTimeoutOnProgress)try{this._resetTimeout(s)}catch(p){this._responseHandlers.delete(s),this._progressHandlers.delete(s),this._cleanupTimeout(s),i(p);return}r(n)}_onresponse(t){const o=Number(t.id),n=this._requestResolvers.get(o);if(n){if(this._requestResolvers.delete(o),$e(t))n(t);else{const i=new x(t.error.code,t.error.message,t.error.data);n(i)}return}const s=this._responseHandlers.get(o);if(s===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(t)}`));return}this._responseHandlers.delete(o),this._cleanupTimeout(o);let r=!1;if($e(t)&&t.result&&typeof t.result=="object"){const i=t.result;if(i.task&&typeof i.task=="object"){const a=i.task;typeof a.taskId=="string"&&(r=!0,this._taskProgressTokens.set(a.taskId,o))}}if(r||this._progressHandlers.delete(o),$e(t))s(t);else{const i=x.fromError(t.error.code,t.error.message,t.error.data);s(i)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(t,o,n){const{task:s}=n??{};if(!s){try{yield{type:"result",result:await this.request(t,o,n)}}catch(i){yield{type:"error",error:i instanceof x?i:new x(T.InternalError,String(i))}}return}let r;try{const i=await this.request(t,dt,n);if(i.task)r=i.task.taskId,yield{type:"taskCreated",task:i.task};else throw new x(T.InternalError,"Task creation did not return a task");for(;;){const a=await this.getTask({taskId:r},n);if(yield{type:"taskStatus",task:a},X(a.status)){a.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:r},o,n)}:a.status==="failed"?yield{type:"error",error:new x(T.InternalError,`Task ${r} failed`)}:a.status==="cancelled"&&(yield{type:"error",error:new x(T.InternalError,`Task ${r} was cancelled`)});return}if(a.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:r},o,n)};return}const p=a.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(h=>setTimeout(h,p)),n?.signal?.throwIfAborted()}}catch(i){yield{type:"error",error:i instanceof x?i:new x(T.InternalError,String(i))}}}request(t,o,n){const{relatedRequestId:s,resumptionToken:r,onresumptiontoken:i,task:a,relatedTask:p}=n??{};return new Promise((h,f)=>{const m=S=>{f(S)};if(!this._transport){m(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(t.method),a&&this.assertTaskCapability(t.method)}catch(S){m(S);return}n?.signal?.throwIfAborted();const _=this._requestMessageId++,b={...t,jsonrpc:"2.0",id:_};n?.onprogress&&(this._progressHandlers.set(_,n.onprogress),b.params={...t.params,_meta:{...t.params?._meta||{},progressToken:_}}),a&&(b.params={...b.params,task:a}),p&&(b.params={...b.params,_meta:{...b.params?._meta||{},[ee]:p}});const M=S=>{this._responseHandlers.delete(_),this._progressHandlers.delete(_),this._cleanupTimeout(_),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:_,reason:String(S)}},{relatedRequestId:s,resumptionToken:r,onresumptiontoken:i}).catch(Z=>this._onerror(new Error(`Failed to send cancellation: ${Z}`)));const k=S instanceof x?S:new x(T.RequestTimeout,String(S));f(k)};this._responseHandlers.set(_,S=>{if(!n?.signal?.aborted){if(S instanceof Error)return f(S);try{const k=bo(o,S.result);k.success?h(k.data):f(k.error)}catch(k){f(k)}}}),n?.signal?.addEventListener("abort",()=>{M(n?.signal?.reason)});const L=n?.timeout??jc,G=()=>M(x.fromError(T.RequestTimeout,"Request timed out",{timeout:L}));this._setupTimeout(_,L,n?.maxTotalTimeout,G,n?.resetTimeoutOnProgress??!1);const Y=p?.taskId;if(Y){const S=k=>{const Z=this._responseHandlers.get(_);Z?Z(k):this._onerror(new Error(`Response handler missing for side-channeled request ${_}`))};this._requestResolvers.set(_,S),this._enqueueTaskMessage(Y,{type:"request",message:b,timestamp:Date.now()}).catch(k=>{this._cleanupTimeout(_),f(k)})}else this._transport.send(b,{relatedRequestId:s,resumptionToken:r,onresumptiontoken:i}).catch(S=>{this._cleanupTimeout(_),f(S)})})}async getTask(t,o){return this.request({method:"tasks/get",params:t},ht,o)}async getTaskResult(t,o,n){return this.request({method:"tasks/result",params:t},o,n)}async listTasks(t,o){return this.request({method:"tasks/list",params:t},gt,o)}async cancelTask(t,o){return this.request({method:"tasks/cancel",params:t},xa,o)}async notification(t,o){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(t.method);const n=o?.relatedTask?.taskId;if(n){const a={...t,jsonrpc:"2.0",params:{...t.params,_meta:{...t.params?._meta||{},[ee]:o.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:a,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(t.method)&&!t.params&&!o?.relatedRequestId&&!o?.relatedTask){if(this._pendingDebouncedNotifications.has(t.method))return;this._pendingDebouncedNotifications.add(t.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(t.method),!this._transport)return;let a={...t,jsonrpc:"2.0"};o?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[ee]:o.relatedTask}}}),this._transport?.send(a,o).catch(p=>this._onerror(p))});return}let i={...t,jsonrpc:"2.0"};o?.relatedTask&&(i={...i,params:{...i.params,_meta:{...i.params?._meta||{},[ee]:o.relatedTask}}}),await this._transport.send(i,o)}setRequestHandler(t,o){const n=Gt(t);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(s,r)=>{const i=Jt(t,s);return Promise.resolve(o(i,r))})}removeRequestHandler(t){this._requestHandlers.delete(t)}assertCanSetRequestHandler(t){if(this._requestHandlers.has(t))throw new Error(`A request handler for ${t} already exists, which would be overridden`)}setNotificationHandler(t,o){const n=Gt(t);this._notificationHandlers.set(n,s=>{const r=Jt(t,s);return Promise.resolve(o(r))})}removeNotificationHandler(t){this._notificationHandlers.delete(t)}_cleanupTaskProgressHandler(t){const o=this._taskProgressTokens.get(t);o!==void 0&&(this._progressHandlers.delete(o),this._taskProgressTokens.delete(t))}async _enqueueTaskMessage(t,o,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");const s=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(t,o,n,s)}async _clearTaskQueue(t,o){if(this._taskMessageQueue){const n=await this._taskMessageQueue.dequeueAll(t,o);for(const s of n)if(s.type==="request"&&Wt(s.message)){const r=s.message.id,i=this._requestResolvers.get(r);i?(i(new x(T.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(r)):this._onerror(new Error(`Resolver missing for request ${r} during task ${t} cleanup`))}}}async _waitForTaskUpdate(t,o){let n=this._options?.defaultTaskPollInterval??1e3;try{const s=await this._taskStore?.getTask(t);s?.pollInterval&&(n=s.pollInterval)}catch{}return new Promise((s,r)=>{if(o.aborted){r(new x(T.InvalidRequest,"Request cancelled"));return}const i=setTimeout(s,n);o.addEventListener("abort",()=>{clearTimeout(i),r(new x(T.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(t,o){const n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async s=>{if(!t)throw new Error("No request provided");return await n.createTask(s,t.id,{method:t.method,params:t.params},o)},getTask:async s=>{const r=await n.getTask(s,o);if(!r)throw new x(T.InvalidParams,"Failed to retrieve task: Task not found");return r},storeTaskResult:async(s,r,i)=>{await n.storeTaskResult(s,r,i,o);const a=await n.getTask(s,o);if(a){const p=Ce.parse({method:"notifications/tasks/status",params:a});await this.notification(p),X(a.status)&&this._cleanupTaskProgressHandler(s)}},getTaskResult:s=>n.getTaskResult(s,o),updateTaskStatus:async(s,r,i)=>{const a=await n.getTask(s,o);if(!a)throw new x(T.InvalidParams,`Task "${s}" not found - it may have been cleaned up`);if(X(a.status))throw new x(T.InvalidParams,`Cannot update task "${s}" from terminal status "${a.status}" to "${r}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(s,r,i,o);const p=await n.getTask(s,o);if(p){const h=Ce.parse({method:"notifications/tasks/status",params:p});await this.notification(h),X(p.status)&&this._cleanupTaskProgressHandler(s)}},listTasks:s=>n.listTasks(s,o)}}}var Fc="2026-01-26",Bc="ui/notifications/tool-input-partial";class Wo{eventTarget;eventSource;messageListener;constructor(t=window.parent,o){this.eventTarget=t,this.eventSource=o,this.messageListener=n=>{if(o&&n.source!==this.eventSource){console.debug("Ignoring message from unknown source",n);return}let s=ia.safeParse(n.data);s.success?(console.debug("Parsed message",s.data),this.onmessage?.(s.data)):n.data?.jsonrpc!=="2.0"?console.debug("Ignoring non-JSON-RPC message",s.error.message,n):(console.error("Failed to parse message",s.error.message,n),this.onerror?.(Error("Invalid JSON-RPC message received: "+s.error.message)))}}async start(){window.addEventListener("message",this.messageListener)}async send(t,o){t.method!==Bc&&console.debug("Sending message",t),this.eventTarget.postMessage(t,"*")}async close(){window.removeEventListener("message",this.messageListener),this.onclose?.()}onclose;onerror;onmessage;sessionId;setProtocolVersion}var Vc=w([c("light"),c("dark")]).describe("Color theme preference for the host environment."),he=w([c("inline"),c("fullscreen"),c("pip")]).describe("Display mode for UI presentation."),Wc=w([c("--color-background-primary"),c("--color-background-secondary"),c("--color-background-tertiary"),c("--color-background-inverse"),c("--color-background-ghost"),c("--color-background-info"),c("--color-background-danger"),c("--color-background-success"),c("--color-background-warning"),c("--color-background-disabled"),c("--color-text-primary"),c("--color-text-secondary"),c("--color-text-tertiary"),c("--color-text-inverse"),c("--color-text-ghost"),c("--color-text-info"),c("--color-text-danger"),c("--color-text-success"),c("--color-text-warning"),c("--color-text-disabled"),c("--color-border-primary"),c("--color-border-secondary"),c("--color-border-tertiary"),c("--color-border-inverse"),c("--color-border-ghost"),c("--color-border-info"),c("--color-border-danger"),c("--color-border-success"),c("--color-border-warning"),c("--color-border-disabled"),c("--color-ring-primary"),c("--color-ring-secondary"),c("--color-ring-inverse"),c("--color-ring-info"),c("--color-ring-danger"),c("--color-ring-success"),c("--color-ring-warning"),c("--font-sans"),c("--font-mono"),c("--font-weight-normal"),c("--font-weight-medium"),c("--font-weight-semibold"),c("--font-weight-bold"),c("--font-text-xs-size"),c("--font-text-sm-size"),c("--font-text-md-size"),c("--font-text-lg-size"),c("--font-heading-xs-size"),c("--font-heading-sm-size"),c("--font-heading-md-size"),c("--font-heading-lg-size"),c("--font-heading-xl-size"),c("--font-heading-2xl-size"),c("--font-heading-3xl-size"),c("--font-text-xs-line-height"),c("--font-text-sm-line-height"),c("--font-text-md-line-height"),c("--font-text-lg-line-height"),c("--font-heading-xs-line-height"),c("--font-heading-sm-line-height"),c("--font-heading-md-line-height"),c("--font-heading-lg-line-height"),c("--font-heading-xl-line-height"),c("--font-heading-2xl-line-height"),c("--font-heading-3xl-line-height"),c("--border-radius-xs"),c("--border-radius-sm"),c("--border-radius-md"),c("--border-radius-lg"),c("--border-radius-xl"),c("--border-radius-full"),c("--border-width-regular"),c("--shadow-hairline"),c("--shadow-sm"),c("--shadow-md"),c("--shadow-lg")]).describe("CSS variable keys available to MCP apps for theming."),Gc=z(Wc.describe(`Style variables for theming MCP apps.
|
|
33
|
+
|
|
34
|
+
Individual style keys are optional - hosts may provide any subset of these values.
|
|
35
|
+
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
|
|
36
|
+
|
|
37
|
+
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
|
|
38
|
+
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`),w([u(),Je()]).describe(`Style variables for theming MCP apps.
|
|
39
|
+
|
|
40
|
+
Individual style keys are optional - hosts may provide any subset of these values.
|
|
41
|
+
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
|
|
42
|
+
|
|
43
|
+
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
|
|
44
|
+
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`)).describe(`Style variables for theming MCP apps.
|
|
45
|
+
|
|
46
|
+
Individual style keys are optional - hosts may provide any subset of these values.
|
|
47
|
+
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
|
|
48
|
+
|
|
49
|
+
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
|
|
50
|
+
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`);l({method:c("ui/open-link"),params:l({url:u().describe("URL to open in the host's browser")})});var Jc=l({isError:I().optional().describe("True if the host failed to open the URL (e.g., due to security policy).")}).passthrough(),Kc=l({isError:I().optional().describe("True if the download failed (e.g., user cancelled or host denied).")}).passthrough(),Qc=l({isError:I().optional().describe("True if the host rejected or failed to deliver the message.")}).passthrough();l({method:c("ui/notifications/sandbox-proxy-ready"),params:l({})});var xt=l({connectDomains:v(u()).optional().describe(`Origins for network requests (fetch/XHR/WebSocket).
|
|
51
|
+
|
|
52
|
+
- Maps to CSP \`connect-src\` directive
|
|
53
|
+
- Empty or omitted → no network connections (secure default)`),resourceDomains:v(u()).optional().describe("Origins for static resources (images, scripts, stylesheets, fonts, media).\n\n- Maps to CSP `img-src`, `script-src`, `style-src`, `font-src`, `media-src` directives\n- Wildcard subdomains supported: `https://*.example.com`\n- Empty or omitted → no network resources (secure default)"),frameDomains:v(u()).optional().describe("Origins for nested iframes.\n\n- Maps to CSP `frame-src` directive\n- Empty or omitted → no nested iframes allowed (`frame-src 'none'`)"),baseUriDomains:v(u()).optional().describe("Allowed base URIs for the document.\n\n- Maps to CSP `base-uri` directive\n- Empty or omitted → only same origin allowed (`base-uri 'self'`)")}),Tt=l({camera:l({}).optional().describe("Request camera access.\n\nMaps to Permission Policy `camera` feature."),microphone:l({}).optional().describe("Request microphone access.\n\nMaps to Permission Policy `microphone` feature."),geolocation:l({}).optional().describe("Request geolocation access.\n\nMaps to Permission Policy `geolocation` feature."),clipboardWrite:l({}).optional().describe("Request clipboard write access.\n\nMaps to Permission Policy `clipboard-write` feature.")});l({method:c("ui/notifications/size-changed"),params:l({width:y().optional().describe("New width in pixels."),height:y().optional().describe("New height in pixels.")})});var Yc=l({method:c("ui/notifications/tool-input"),params:l({arguments:z(u(),R().describe("Complete tool call arguments as key-value pairs.")).optional().describe("Complete tool call arguments as key-value pairs.")})}),Xc=l({method:c("ui/notifications/tool-input-partial"),params:l({arguments:z(u(),R().describe("Partial tool call arguments (incomplete, may change).")).optional().describe("Partial tool call arguments (incomplete, may change).")})}),eu=l({method:c("ui/notifications/tool-cancelled"),params:l({reason:u().optional().describe('Optional reason for the cancellation (e.g., "user action", "timeout").')})}),tu=l({fonts:u().optional()}),ou=l({variables:Gc.optional().describe("CSS variables for theming the app."),css:tu.optional().describe("CSS blocks that apps can inject.")}),nu=l({method:c("ui/resource-teardown"),params:l({})});z(u(),R());var Kt=l({text:l({}).optional().describe("Host supports text content blocks."),image:l({}).optional().describe("Host supports image content blocks."),audio:l({}).optional().describe("Host supports audio content blocks."),resource:l({}).optional().describe("Host supports resource content blocks."),resourceLink:l({}).optional().describe("Host supports resource link content blocks."),structuredContent:l({}).optional().describe("Host supports structured content.")});l({method:c("ui/notifications/request-teardown"),params:l({}).optional()});var su=l({experimental:l({}).optional().describe("Experimental features (structure TBD)."),openLinks:l({}).optional().describe("Host supports opening external URLs."),downloadFile:l({}).optional().describe("Host supports file downloads via ui/download-file."),serverTools:l({listChanged:I().optional().describe("Host supports tools/list_changed notifications.")}).optional().describe("Host can proxy tool calls to the MCP server."),serverResources:l({listChanged:I().optional().describe("Host supports resources/list_changed notifications.")}).optional().describe("Host can proxy resource reads to the MCP server."),logging:l({}).optional().describe("Host accepts log messages."),sandbox:l({permissions:Tt.optional().describe("Permissions granted by the host (camera, microphone, geolocation)."),csp:xt.optional().describe("CSP domains approved by the host.")}).optional().describe("Sandbox configuration applied by the host."),updateModelContext:Kt.optional().describe("Host accepts context updates (ui/update-model-context) to be included in the model's context for future turns."),message:Kt.optional().describe("Host supports receiving content messages (ui/message) from the view.")}),ru=l({experimental:l({}).optional().describe("Experimental features (structure TBD)."),tools:l({listChanged:I().optional().describe("App supports tools/list_changed notifications.")}).optional().describe("App exposes MCP-style tools that the host can call."),availableDisplayModes:v(he).optional().describe("Display modes the app supports.")});l({method:c("ui/notifications/initialized"),params:l({}).optional()});l({csp:xt.optional().describe("Content Security Policy configuration for UI resources."),permissions:Tt.optional().describe("Sandbox permissions requested by the UI resource."),domain:u().optional().describe(`Dedicated origin for view sandbox.
|
|
54
|
+
|
|
55
|
+
Useful when views need stable, dedicated origins for OAuth callbacks, CORS policies, or API key allowlists.
|
|
56
|
+
|
|
57
|
+
**Host-dependent:** The format and validation rules for this field are determined by each host. Servers MUST consult host-specific documentation for the expected domain format. Common patterns include:
|
|
58
|
+
- Hash-based subdomains (e.g., \`{hash}.claudemcpcontent.com\`)
|
|
59
|
+
- URL-derived subdomains (e.g., \`www-example-com.oaiusercontent.com\`)
|
|
60
|
+
|
|
61
|
+
If omitted, host uses default sandbox origin (typically per-conversation).`),prefersBorder:I().optional().describe(`Visual boundary preference - true if view prefers a visible border.
|
|
62
|
+
|
|
63
|
+
Boolean requesting whether a visible border and background is provided by the host. Specifying an explicit value for this is recommended because hosts' defaults may vary.
|
|
64
|
+
|
|
65
|
+
- \`true\`: request visible border + background
|
|
66
|
+
- \`false\`: request no visible border + background
|
|
67
|
+
- omitted: host decides border`)});l({method:c("ui/request-display-mode"),params:l({mode:he.describe("The display mode being requested.")})});var iu=l({mode:he.describe("The display mode that was actually set. May differ from requested if not supported.")}).passthrough(),au=w([c("model"),c("app")]).describe("Tool visibility scope - who can access the tool.");l({resourceUri:u().optional(),visibility:v(au).optional().describe(`Who can access this tool. Default: ["model", "app"]
|
|
68
|
+
- "model": Tool visible to and callable by the agent
|
|
69
|
+
- "app": Tool callable by the app from this server only`)});l({mimeTypes:v(u()).optional().describe('Array of supported MIME types for UI resources.\nMust include `"text/html;profile=mcp-app"` for MCP Apps support.')});l({method:c("ui/download-file"),params:l({contents:v(w([jo,Ho])).describe("Resource contents to download — embedded (inline data) or linked (host fetches). Uses standard MCP resource types.")})});l({method:c("ui/message"),params:l({role:c("user").describe('Message role, currently only "user" is supported.'),content:v(Se).describe("Message content blocks (text, image, etc.).")})});l({method:c("ui/notifications/sandbox-resource-ready"),params:l({html:u().describe("HTML content to load into the inner iframe."),sandbox:u().optional().describe("Optional override for the inner iframe's sandbox attribute."),csp:xt.optional().describe("CSP configuration from resource metadata."),permissions:Tt.optional().describe("Sandbox permissions from resource metadata.")})});var cu=l({method:c("ui/notifications/tool-result"),params:He.describe("Standard MCP tool execution result.")}),Go=l({toolInfo:l({id:_e.optional().describe("JSON-RPC id of the tools/call request."),tool:St.describe("Tool definition including name, inputSchema, etc.")}).optional().describe("Metadata of the tool call that instantiated this App."),theme:Vc.optional().describe("Current color theme preference."),styles:ou.optional().describe("Style configuration for theming the app."),displayMode:he.optional().describe("How the UI is currently displayed."),availableDisplayModes:v(he).optional().describe("Display modes the host supports."),containerDimensions:w([l({height:y().describe("Fixed container height in pixels.")}),l({maxHeight:w([y(),Je()]).optional().describe("Maximum container height in pixels.")})]).and(w([l({width:y().describe("Fixed container width in pixels.")}),l({maxWidth:w([y(),Je()]).optional().describe("Maximum container width in pixels.")})])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other
|
|
70
|
+
container holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:u().optional().describe("User's language and region preference in BCP 47 format."),timeZone:u().optional().describe("User's timezone in IANA format."),userAgent:u().optional().describe("Host application identifier."),platform:w([c("web"),c("desktop"),c("mobile")]).optional().describe("Platform type for responsive design decisions."),deviceCapabilities:l({touch:I().optional().describe("Whether the device supports touch input."),hover:I().optional().describe("Whether the device supports hover interactions.")}).optional().describe("Device input capabilities."),safeAreaInsets:l({top:y().describe("Top safe area inset in pixels."),right:y().describe("Right safe area inset in pixels."),bottom:y().describe("Bottom safe area inset in pixels."),left:y().describe("Left safe area inset in pixels.")}).optional().describe("Mobile safe area boundaries in pixels.")}).passthrough(),uu=l({method:c("ui/notifications/host-context-changed"),params:Go.describe("Partial context update containing only changed fields.")});l({method:c("ui/update-model-context"),params:l({content:v(Se).optional().describe("Context content blocks (text, image, etc.)."),structuredContent:z(u(),R().describe("Structured content for machine-readable context data.")).optional().describe("Structured content for machine-readable context data.")})});l({method:c("ui/initialize"),params:l({appInfo:Le.describe("App identification (name and version)."),appCapabilities:ru.describe("Features and capabilities this app provides."),protocolVersion:u().describe("Protocol version this app supports.")})});var lu=l({protocolVersion:u().describe('Negotiated protocol version string (e.g., "2025-11-21").'),hostInfo:Le.describe("Host application identification and version."),hostCapabilities:su.describe("Features and capabilities provided by the host."),hostContext:Go.describe("Rich context about the host environment.")}).passthrough();function du(e,t=document.documentElement){for(let[o,n]of Object.entries(e))n!==void 0&&t.style.setProperty(o,n)}function pu(e){if(document.getElementById("__mcp-host-fonts"))return;let t=document.createElement("style");t.id="__mcp-host-fonts",t.textContent=e,document.head.appendChild(t)}class hu extends Hc{_appInfo;_capabilities;options;_hostCapabilities;_hostInfo;_hostContext;constructor(t,o={},n={autoResize:!0}){super(n),this._appInfo=t,this._capabilities=o,this.options=n,this.setRequestHandler(je,s=>(console.log("Received ping:",s.params),{})),this.onhostcontextchanged=()=>{}}getHostCapabilities(){return this._hostCapabilities}getHostVersion(){return this._hostInfo}getHostContext(){return this._hostContext}set ontoolinput(t){this.setNotificationHandler(Yc,o=>t(o.params))}set ontoolinputpartial(t){this.setNotificationHandler(Xc,o=>t(o.params))}set ontoolresult(t){this.setNotificationHandler(cu,o=>t(o.params))}set ontoolcancelled(t){this.setNotificationHandler(eu,o=>t(o.params))}set onhostcontextchanged(t){this.setNotificationHandler(uu,o=>{this._hostContext={...this._hostContext,...o.params},t(o.params)})}set onteardown(t){this.setRequestHandler(nu,(o,n)=>t(o.params,n))}set oncalltool(t){this.setRequestHandler(Bo,(o,n)=>t(o.params,n))}set onlisttools(t){this.setRequestHandler(Fo,(o,n)=>t(o.params,n))}assertCapabilityForMethod(t){}assertRequestHandlerCapability(t){switch(t){case"tools/call":case"tools/list":if(!this._capabilities.tools)throw Error(`Client does not support tool capability (required for ${t})`);return;case"ping":case"ui/resource-teardown":return;default:throw Error(`No handler for method ${t} registered`)}}assertNotificationCapability(t){}assertTaskCapability(t){throw Error("Tasks are not supported in MCP Apps")}assertTaskHandlerCapability(t){throw Error("Task handlers are not supported in MCP Apps")}async callServerTool(t,o){if(typeof t=="string")throw Error(`callServerTool() expects an object as its first argument, but received a string ("${t}"). Did you mean: callServerTool({ name: "${t}", arguments: { ... } })?`);return await this.request({method:"tools/call",params:t},He,o)}async readServerResource(t,o){return await this.request({method:"resources/read",params:t},Lo,o)}async listServerResources(t,o){return await this.request({method:"resources/list",params:t},Uo,o)}sendMessage(t,o){return this.request({method:"ui/message",params:t},Qc,o)}sendLog(t){return this.notification({method:"notifications/message",params:t})}updateModelContext(t,o){return this.request({method:"ui/update-model-context",params:t},ct,o)}openLink(t,o){return this.request({method:"ui/open-link",params:t},Jc,o)}sendOpenLink=this.openLink;downloadFile(t,o){return this.request({method:"ui/download-file",params:t},Kc,o)}requestTeardown(t={}){return this.notification({method:"ui/notifications/request-teardown",params:t})}requestDisplayMode(t,o){return this.request({method:"ui/request-display-mode",params:t},iu,o)}sendSizeChanged(t){return this.notification({method:"ui/notifications/size-changed",params:t})}setupSizeChangedNotifications(){let t=!1,o=0,n=0,s=()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1;let i=document.documentElement,a=i.style.width,p=i.style.height;i.style.width="fit-content",i.style.height="max-content";let h=i.getBoundingClientRect();i.style.width=a,i.style.height=p;let f=window.innerWidth-i.clientWidth,m=Math.ceil(h.width+f),_=Math.ceil(h.height);(m!==o||_!==n)&&(o=m,n=_,this.sendSizeChanged({width:m,height:_}))}))};s();let r=new ResizeObserver(s);return r.observe(document.documentElement),r.observe(document.body),()=>r.disconnect()}async connect(t=new Wo(window.parent,window.parent),o){if(this.transport)throw Error("App is already connected. Call close() before connecting again.");await super.connect(t);try{let n=await this.request({method:"ui/initialize",params:{appCapabilities:this._capabilities,appInfo:this._appInfo,protocolVersion:Fc}},lu,o);if(n===void 0)throw Error(`Server sent invalid initialize result: ${n}`);this._hostCapabilities=n.hostCapabilities,this._hostInfo=n.hostInfo,this._hostContext=n.hostContext,await this.notification({method:"ui/notifications/initialized"}),this.options?.autoResize&&this.setupSizeChangedNotifications()}catch(n){throw this.close(),n}}}async function mu(e){const t=new hu({name:e.name,version:e.version});return t.ontoolresult=o=>{try{const n=o.structuredContent;if(n&&typeof n=="object"&&n.status==="success")e.onData(n.data);else if(n&&typeof n=="object"&&n.status==="error"){const s=n.message;Ve(s||"Unknown error"),e.onError?.(s||"Unknown error")}else{const s=o.content?.find(r=>r.type==="text");if(s&&"text"in s){const r=JSON.parse(s.text);r.status==="success"?e.onData(r.data):Ve(r.message||"Unknown error")}}}catch(n){const s=n instanceof Error?n.message:String(n);Ve(`Failed to parse result: ${s}`),e.onError?.(s)}},t.onhostcontextchanged=o=>{if(o.styles?.variables&&du(o.styles.variables),o.styles?.css?.fonts&&pu(o.styles.css.fonts),o.safeAreaInsets){const{top:n,right:s,bottom:r,left:i}=o.safeAreaInsets;document.body.style.padding=`${n}px ${s}px ${r}px ${i}px`}},t.onteardown=async()=>({}),await t.connect(new Wo),t}function Ve(e){const t=document.querySelector(".atoms-error");t&&t.remove();const o=document.createElement("div");o.className="atoms-error",o.textContent=e,document.body.prepend(o)}const Jo=document.createElement("style");Jo.textContent=`
|
|
71
|
+
#graph-canvas {
|
|
72
|
+
display: block;
|
|
73
|
+
width: 100%;
|
|
74
|
+
height: 450px;
|
|
75
|
+
background: var(--bg-primary);
|
|
76
|
+
cursor: grab;
|
|
77
|
+
}
|
|
78
|
+
#graph-canvas:active { cursor: grabbing; }
|
|
79
|
+
.toolbar-label {
|
|
80
|
+
font-size: 11px;
|
|
81
|
+
color: var(--text-muted);
|
|
82
|
+
font-weight: 500;
|
|
83
|
+
}
|
|
84
|
+
.toolbar-value {
|
|
85
|
+
font-size: 12px;
|
|
86
|
+
color: var(--text-primary);
|
|
87
|
+
font-weight: 600;
|
|
88
|
+
font-family: var(--font-code);
|
|
89
|
+
margin-right: 12px;
|
|
90
|
+
}
|
|
91
|
+
.tooltip {
|
|
92
|
+
position: absolute;
|
|
93
|
+
background: var(--bg-secondary);
|
|
94
|
+
border: 1px solid var(--border-color);
|
|
95
|
+
padding: 8px 12px;
|
|
96
|
+
font-size: 12px;
|
|
97
|
+
max-width: 250px;
|
|
98
|
+
pointer-events: none;
|
|
99
|
+
z-index: 50;
|
|
100
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
|
101
|
+
}
|
|
102
|
+
.tooltip .tt-id {
|
|
103
|
+
font-family: var(--font-code);
|
|
104
|
+
font-size: 11px;
|
|
105
|
+
color: var(--atoms-purple);
|
|
106
|
+
font-weight: 600;
|
|
107
|
+
}
|
|
108
|
+
.tooltip .tt-title {
|
|
109
|
+
margin-top: 2px;
|
|
110
|
+
color: var(--text-primary);
|
|
111
|
+
}
|
|
112
|
+
.tooltip .tt-meta {
|
|
113
|
+
margin-top: 4px;
|
|
114
|
+
font-size: 11px;
|
|
115
|
+
color: var(--text-muted);
|
|
116
|
+
}
|
|
117
|
+
.legend {
|
|
118
|
+
display: flex;
|
|
119
|
+
gap: 12px;
|
|
120
|
+
padding: 8px 16px;
|
|
121
|
+
border-top: 1px solid var(--border-color);
|
|
122
|
+
background: var(--bg-secondary);
|
|
123
|
+
flex-wrap: wrap;
|
|
124
|
+
}
|
|
125
|
+
.legend-item {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: 4px;
|
|
129
|
+
font-size: 11px;
|
|
130
|
+
color: var(--text-secondary);
|
|
131
|
+
}
|
|
132
|
+
.legend-shape {
|
|
133
|
+
width: 12px;
|
|
134
|
+
height: 12px;
|
|
135
|
+
flex-shrink: 0;
|
|
136
|
+
}
|
|
137
|
+
`;document.head.appendChild(Jo);const U=document.getElementById("graph-canvas"),ce=document.getElementById("tooltip"),fu=document.getElementById("loading"),gu=document.getElementById("stats");let J=[],le=[],qe=0,Me=0,oe=1,zt=!1,Ko=0,Qo=0,We;const _u={requirement:"#a855f7","test-case":"#22c55e",note:"#58a6ff"},Qt={parent:{dash:[],color:"#888"},child:{dash:[],color:"#888"},verifies:{dash:[6,3],color:"#a855f7"},verified_by:{dash:[6,3],color:"#a855f7"},related:{dash:[2,2],color:"#666"}};function vu(e){const t=new Map,o=U.width/2,n=U.height/2;t.set(e.root,{id:e.root,title:e.root,type:"requirement",relationship:"root",depth:0,x:o,y:n,vx:0,vy:0,isRoot:!0});const s=new Map;for(const i of e.items)s.has(i.depth)||s.set(i.depth,[]),s.get(i.depth).push(i);for(const[i,a]of s){const p=i*120;a.forEach((h,f)=>{const m=2*Math.PI*f/a.length-Math.PI/2,_=(Math.random()-.5)*30;t.set(h.id,{id:h.id,title:h.title,type:h.type,relationship:h.relationship,depth:h.depth,x:o+Math.cos(m)*p+_,y:n+Math.sin(m)*p+_,vx:0,vy:0,isRoot:!1})})}J=Array.from(t.values()),le=[];for(const i of e.items)i.depth===1&&le.push({source:e.root,target:i.id,type:i.relationship});const r=new Map;r.set(0,[e.root]);for(const i of e.items)r.has(i.depth)||r.set(i.depth,[]),r.get(i.depth).push(i.id);for(const i of e.items){if(i.depth<=1)continue;const a=r.get(i.depth-1)??[];if(a.length>0){const p=t.get(a[0]),h=t.get(i.id);if(p&&h){let f=a[0],m=1/0;for(const _ of a){const b=t.get(_);if(!b)continue;const M=b.x-h.x,L=b.y-h.y,G=M*M+L*L;G<m&&(m=G,f=_)}le.push({source:f,target:i.id,type:i.relationship})}}}}function bu(){const s=U.width/2,r=U.height/2;for(const a of J){a.vx+=(s-a.x)*.001,a.vy+=(r-a.y)*.001;for(const p of J){if(p.id===a.id)continue;const h=a.x-p.x,f=a.y-p.y,m=Math.max(1,Math.sqrt(h*h+f*f)),_=2e3/(m*m);a.vx+=h/m*_,a.vy+=f/m*_}}const i=new Map(J.map(a=>[a.id,a]));for(const a of le){const p=i.get(a.source),h=i.get(a.target);if(!p||!h)continue;const f=h.x-p.x,m=h.y-p.y;p.vx+=f*.005,p.vy+=m*.005,h.vx-=f*.005,h.vy-=m*.005}for(const a of J){if(a.isRoot){a.x=s,a.y=r,a.vx=0,a.vy=0;continue}a.vx*=.85,a.vy*=.85,a.x+=a.vx,a.y+=a.vy}}function Yt(){const e=U.getContext("2d"),t=window.devicePixelRatio||1;e.clearRect(0,0,U.width,U.height),e.save(),e.translate(qe*t,Me*t),e.scale(oe,oe);const o=new Map(J.map(n=>[n.id,n]));for(const n of le){const s=o.get(n.source),r=o.get(n.target);if(!s||!r)continue;const i=Qt[n.type]??Qt.related;e.beginPath(),e.strokeStyle=i.color,e.lineWidth=1.5,e.setLineDash(i.dash),e.moveTo(s.x,s.y),e.lineTo(r.x,r.y),e.stroke(),e.setLineDash([]);const a=Math.atan2(r.y-s.y,r.x-s.x),p=8,h=r.x-Math.cos(a)*25,f=r.y-Math.sin(a)*25;e.beginPath(),e.moveTo(h,f),e.lineTo(h-p*Math.cos(a-.4),f-p*Math.sin(a-.4)),e.lineTo(h-p*Math.cos(a+.4),f-p*Math.sin(a+.4)),e.closePath(),e.fillStyle=i.color,e.fill()}for(const n of J){const s=_u[n.type]??"#888",r=100,i=36;if(e.fillStyle="#1a1a1a",e.strokeStyle=s,e.lineWidth=n.isRoot?3:1.5,n.type==="requirement")e.beginPath(),e.rect(n.x-r/2,n.y-i/2,r,i),e.fill(),e.stroke();else if(n.type==="test-case")e.beginPath(),e.roundRect(n.x-r/2,n.y-i/2,r,i,8),e.fill(),e.stroke();else{const p=r/2,h=i/2;e.beginPath(),e.moveTo(n.x,n.y-h),e.lineTo(n.x+p,n.y),e.lineTo(n.x,n.y+h),e.lineTo(n.x-p,n.y),e.closePath(),e.fill(),e.stroke()}n.isRoot&&(e.shadowColor="#a855f7",e.shadowBlur=12,e.strokeStyle="#a855f7",e.lineWidth=2,e.stroke(),e.shadowBlur=0),e.fillStyle="#e0e0e0",e.font="500 11px 'IBM Plex Sans', sans-serif",e.textAlign="center",e.textBaseline="middle";const a=n.id.length>14?n.id.substring(0,12)+"...":n.id;e.fillText(a,n.x,n.y)}e.restore()}function Yo(){const e=window.devicePixelRatio||1,t=U.getBoundingClientRect();U.width=t.width*e,U.height=t.height*e}U.addEventListener("mousedown",e=>{zt=!0,Ko=e.clientX-qe,Qo=e.clientY-Me});U.addEventListener("mousemove",e=>{if(zt){qe=e.clientX-Ko,Me=e.clientY-Qo;return}const t=U.getBoundingClientRect(),o=(e.clientX-t.left-qe)/oe,n=(e.clientY-t.top-Me)/oe;let s=null;for(const r of J){const i=o-r.x,a=n-r.y;if(Math.abs(i)<55&&Math.abs(a)<22){s=r;break}}s?(ce.style.display="block",ce.style.left=`${e.clientX-t.left+12}px`,ce.style.top=`${e.clientY-t.top-10}px`,ce.innerHTML=`
|
|
138
|
+
<div class="tt-id">${s.id}</div>
|
|
139
|
+
<div class="tt-title">${s.title}</div>
|
|
140
|
+
<div class="tt-meta">${s.type} · ${s.relationship}${s.isRoot?" (root)":""}</div>
|
|
141
|
+
`):ce.style.display="none"});U.addEventListener("mouseup",()=>{zt=!1});U.addEventListener("wheel",e=>{e.preventDefault(),oe*=e.deltaY>0?.9:1.1,oe=Math.max(.3,Math.min(4,oe))},{passive:!1});window.addEventListener("resize",Yo);function yu(e){fu.style.display="none",U.style.display="block",gu.textContent=`${e.total_count} items traced from ${e.root}`,document.getElementById("root-id").textContent=e.root,document.getElementById("direction").textContent=e.direction,document.getElementById("depth").textContent=String(e.depth_limit),Yo(),vu(e),We&&cancelAnimationFrame(We);let t=0;function o(){t++,bu(),Yt(),t<200?We=requestAnimationFrame(o):Yt()}o()}const Rt=document.createElement("div");Rt.className="legend";Rt.innerHTML=`
|
|
142
|
+
<div class="legend-item"><div class="legend-shape" style="background:#a855f7"></div>Requirement</div>
|
|
143
|
+
<div class="legend-item"><div class="legend-shape" style="background:#22c55e;border-radius:3px"></div>Test Case</div>
|
|
144
|
+
<div class="legend-item"><div class="legend-shape" style="background:#58a6ff;transform:rotate(45deg);width:10px;height:10px"></div>Note</div>
|
|
145
|
+
<div class="legend-item"><svg width="20" height="10"><line x1="0" y1="5" x2="20" y2="5" stroke="#888" stroke-width="1.5"/></svg>Parent/Child</div>
|
|
146
|
+
<div class="legend-item"><svg width="20" height="10"><line x1="0" y1="5" x2="20" y2="5" stroke="#a855f7" stroke-width="1.5" stroke-dasharray="6,3"/></svg>Verifies</div>
|
|
147
|
+
`;document.getElementById("app").appendChild(Rt);mu({name:"ATOMS Trace Graph",version:"1.0.0",onData:e=>yu(e)});</script>
|
|
148
|
+
<style rel="stylesheet" crossorigin>@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap";:root{--atoms-purple: #a855f7;--atoms-purple-light: #c084fc;--atoms-purple-hover: #b975f9;--atoms-green: #22c55e;--atoms-green-light: #4ade80;--atoms-red: #ef4444;--atoms-red-light: #f87171;--atoms-amber: #f59e0b;--atoms-blue: #58a6ff;--bg-primary: var(--color-background-primary, #0c0c0c);--bg-secondary: var(--color-background-secondary, #121212);--bg-tertiary: var(--color-background-tertiary, #181818);--text-primary: var(--color-text-primary, #fafafa);--text-secondary: var(--color-text-secondary, #a0a0a0);--text-muted: var(--color-text-muted, #606060);--border-color: var(--color-border-primary, #252525);--font-main: var(--font-sans, "IBM Plex Sans", sans-serif);--font-code: var(--font-mono, "IBM Plex Mono", monospace)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-main);background:var(--bg-primary);color:var(--text-primary);line-height:1.5;-webkit-font-smoothing:antialiased}.atoms-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:0;padding:16px}.atoms-header{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.atoms-header .logo{width:20px;height:20px;filter:invert(1)}.atoms-header .title{font-size:14px;font-weight:600;color:var(--text-primary)}.atoms-header .subtitle{font-size:12px;color:var(--text-muted);margin-left:auto}.atoms-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:500;font-family:var(--font-main);border:1px solid var(--border-color);border-radius:0;background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;transition:background .1s ease}.atoms-btn:hover{background:var(--bg-tertiary)}.atoms-btn-primary{background:var(--atoms-purple);color:#fff;border-color:var(--atoms-purple)}.atoms-btn-primary:hover{background:var(--atoms-purple-hover)}.atoms-watermark{position:fixed;bottom:8px;right:12px;display:flex;align-items:center;gap:6px;font-size:10px;color:var(--text-muted);opacity:.5;font-family:var(--font-main);pointer-events:none}.atoms-watermark img{width:14px;height:14px;filter:invert(1);opacity:.6}.atoms-loading{display:flex;align-items:center;justify-content:center;min-height:200px;color:var(--text-muted);font-size:13px}.atoms-loading:before{content:"";width:16px;height:16px;border:2px solid var(--border-color);border-top-color:var(--atoms-purple);border-radius:50%;margin-right:10px;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.atoms-error{padding:16px;background:color-mix(in srgb,var(--atoms-red) 10%,var(--bg-primary));border:1px solid var(--atoms-red);color:var(--text-primary);font-size:13px}.atoms-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;padding:16px}.atoms-metric{background:var(--bg-secondary);border:1px solid var(--border-color);padding:12px;text-align:center}.atoms-metric .value{font-size:24px;font-weight:700;color:var(--atoms-purple);font-variant-numeric:tabular-nums}.atoms-metric .label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-top:4px}.atoms-toolbar{display:flex;align-items:center;gap:8px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary);flex-wrap:wrap}</style>
|
|
149
|
+
</head>
|
|
150
|
+
<body>
|
|
151
|
+
<div id="app">
|
|
152
|
+
<div class="atoms-header">
|
|
153
|
+
<img class="logo" src="data:image/png;base64,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" alt="ATOMS" />
|
|
154
|
+
<span class="title">Traceability Graph</span>
|
|
155
|
+
<span class="subtitle" id="stats"></span>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="atoms-toolbar">
|
|
158
|
+
<label class="toolbar-label">Root:</label>
|
|
159
|
+
<span class="toolbar-value" id="root-id"></span>
|
|
160
|
+
<label class="toolbar-label">Direction:</label>
|
|
161
|
+
<span class="toolbar-value" id="direction"></span>
|
|
162
|
+
<label class="toolbar-label">Depth:</label>
|
|
163
|
+
<span class="toolbar-value" id="depth"></span>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="atoms-loading" id="loading">Loading trace graph...</div>
|
|
166
|
+
<canvas id="graph-canvas"></canvas>
|
|
167
|
+
<div id="tooltip" class="tooltip" style="display:none"></div>
|
|
168
|
+
<div class="atoms-watermark"><img src="data:image/png;base64,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" alt="" />ATOMS.tech</div>
|
|
169
|
+
</div>
|
|
170
|
+
</body>
|
|
171
|
+
</html>
|
package/dist/auth/login.d.ts
CHANGED
package/dist/auth/login.js
CHANGED
package/dist/auth/refresh.d.ts
CHANGED
package/dist/auth/refresh.js
CHANGED