diff --git a/docs/reference/plugin-authoring.md b/docs/reference/plugin-authoring.md index db0f9dd50b9..dea06aa405e 100644 --- a/docs/reference/plugin-authoring.md +++ b/docs/reference/plugin-authoring.md @@ -340,7 +340,12 @@ accepts an edit, and never hands your own accepted edits back through `onReplace keeps your draft and rejects `flush()`. On `conflict` it calls `merge(base, outside, mine)` once, where `base` is the last accepted value, and sends the result. Without `merge` the outside document wins, since an agent may have written the file: the draft is dropped, `onReplace` gets -the outside value, and `flush()` rejects with `conflict`. Pass `merge` to keep both sides. It answers Orca's `editor.flush` +the outside value, and `flush()` rejects with `conflict`. Pass `merge` to keep both sides. With +`merge`, a write to the file on disk while the tab has unsaved edits also reaches the editor: +Orca calls `merge(base, outside, mine)` with `base` the disk content those edits started from, +the tab keeps the merged result unsaved, and its Reload/Overwrite banner is not shown. This +applies to a local file open in one editor view; elsewhere, without `merge`, or when the editor +does not answer within a second, that banner decides. It answers Orca's `editor.flush` itself before a save. Bytes editors pass both `decode` and `encode`. Check `'session' in orca.document` to support older Orca. diff --git a/resources/plugins/declarative/orca-testing.mjs b/resources/plugins/declarative/orca-testing.mjs index 4743dc5b610..4387dc517dc 100644 --- a/resources/plugins/declarative/orca-testing.mjs +++ b/resources/plugins/declarative/orca-testing.mjs @@ -61,7 +61,7 @@ ${u}`:u:"",d=Function,p=`return (input) => { ${u} }`,m;try{m=new d(...a,p)(...s)}catch(f){throw new V(`this schema (generated code failed to evaluate: ${f.message})`)}return n?.debug&&(m.code=c),m.definite=o.definite,m}function L(e,n){for(let[o,t]of e.constants)if(t===n)return o;let i=`c${e.constantCounter++}`;return e.constants.set(i,n),i}function Pt(e,n){return e.definite=!1,L(e,n)}function N(e){return`v${e.varCounter++}`}function G$(e,n){let i=e._zod.run({value:n,issues:[]},{});if(i&&typeof i.then=="function")return pe;let o=i;return o.issues.length===0?o.value:pe}function ce(e,n,i,o,t=!0){let r=e.content.length,a=n.constants.size,s=n.constantCounter,u=n.varCounter;try{return Q(e,n,i,o,t)}catch(c){if(!(c instanceof V)||!c.islandable)throw c;if(e.content.length=r,n.constants.size>a){let d=Array.from(n.constants.keys()).slice(a);for(let p of d)n.constants.delete(p)}return n.constantCounter=s,n.varCounter=u,F$(e,n,i,o)}}function F$(e,n,i,o){n.definite=!1;let t=L(n,i),r=L(n,G$),a=N(n);return e.write(`const ${a} = ${r}(${t}, ${o});`),e.write(`if (${a} === INVALID) return INVALID;`),a}var B$=new Set(["max_size","min_size","size_equals","max_length","min_length","length_equals"]);function H$(e,n,i,o){let t=i._zod.def.checks;if(!t||t.length===0)return o;let r=o;for(let a of t){let s=a._zod.def;if(s.when&&!B$.has(s.check))throw new V('check with a custom "when" condition');switch(s.check){case"greater_than":K$(e,n,s,r);break;case"less_than":W$(e,n,s,r);break;case"multiple_of":J$(e,n,s,r);break;case"number_format":Kf(e,s,r);break;case"min_length":{let u=ot(s.minimum,"min_length"),c=gc(e,n,r,`${r}.length >= ${u} && ${r}.length < ${s.minimum*2}`);e.write(`if (${c} < ${u}) return INVALID;`);break}case"max_length":{let u=ot(s.maximum,"max_length"),c=gc(e,n,r,`${r}.length > ${u}`);e.write(`if (${c} > ${u}) return INVALID;`);break}case"length_equals":{let u=ot(s.length,"length_equals"),c=gc(e,n,r,`${r}.length >= ${u} && ${r}.length <= ${s.length*2}`);e.write(`if (${c} !== ${u}) return INVALID;`);break}case"min_size":e.write(`if (${r}.size < ${ot(s.minimum,"min_size")}) return INVALID;`);break;case"max_size":e.write(`if (${r}.size > ${ot(s.maximum,"max_size")}) return INVALID;`);break;case"size_equals":e.write(`if (${r}.size !== ${ot(s.size,"size_equals")}) return INVALID;`);break;case"string_format":r=Wf(e,n,s,r);break;case"custom":r=tk(e,n,a,r);break;case"bigint_format":X$(e,s,r);break;case"mime_type":q$(e,n,s,r);break;case"property":Q$(e,n,s,r);break;case"properties":Y$(e,n,s,r);break;case"overwrite":{let u=N(n);ek(e,n,a,r,u),r=u;break}default:throw new V(`check type ${s.check}`)}}return r}function gc(e,n,i,o){let t=L(n,kt),r=N(n);return e.write(`const ${r} = typeof ${i} === "string" && ${o} ? ${t}(${i}) : ${i}.length;`),r}function ot(e,n){if(typeof e!="number"||!Number.isFinite(e))throw new V(`${n} bound of type ${typeof e}`);return`${e}`}function Hf(e,n){if(typeof n=="bigint")return`${n}n`;if(typeof n=="number"){if(Number.isNaN(n))throw new V("comparison check with NaN bound");return`${n}`}if(n instanceof Date){if(Number.isNaN(n.getTime()))throw new V("comparison check with Invalid Date bound");return L(e,n)}throw new V(`comparison check bound of type ${typeof n}`)}function K$(e,n,i,o){let t=i.inclusive?"<":"<=";e.write(`if (${o} ${t} ${Hf(n,i.value)}) return INVALID;`)}function W$(e,n,i,o){let t=i.inclusive?">":">=";e.write(`if (${o} ${t} ${Hf(n,i.value)}) return INVALID;`)}function J$(e,n,i,o){if(typeof i.value=="bigint"){if(i.value===BigInt(0))throw new V("multiple_of check with a zero divisor");e.write(`if (${o} % ${i.value}n !== 0n) return INVALID;`)}else{let t=L(n,Mn);e.write(`if (${t}(${o}, ${ot(i.value,"multiple_of")}) !== 0) return INVALID;`)}}function Kf(e,n,i){let o=n.format;switch(o){case"safeint":e.write(`if (!Number.isSafeInteger(${i})) return INVALID;`);break;case"int32":e.write(`if (!Number.isInteger(${i}) || ${i} < -2147483648 || ${i} > 2147483647) return INVALID;`);break;case"uint32":e.write(`if (!Number.isInteger(${i}) || ${i} < 0 || ${i} > 4294967295) return INVALID;`);break;case"float32":e.write(`if (!Number.isFinite(${i}) || ${i} < -3.4028234663852886e38 || ${i} > 3.4028234663852886e38) return INVALID;`);break;case"float64":e.write(`if (!Number.isFinite(${i})) return INVALID;`);break;default:throw new V(`number format ${o}`)}}function X$(e,n,i){let o=n.format;if(o)switch(o){case"int64":e.write(`if (${i} < -9223372036854775808n || ${i} > 9223372036854775807n) return INVALID;`);break;case"uint64":e.write(`if (${i} < 0n || ${i} > 18446744073709551615n) return INVALID;`);break;default:throw new V(`bigint format ${o}`)}}function q$(e,n,i,o){let t=i.mime;if(t&&t.length>0){let r=L(n,new Set(t));e.write(`if (!${r}.has(${o}.type)) return INVALID;`)}}function Y$(e,n,i,o){if(i.when)throw new V('check with a custom "when" condition');e.write(`if (${o} == null) return INVALID;`);let t=i.shape;for(let r of Reflect.ownKeys(t)){let a=typeof r=="symbol"?L(n,r):le(r),s=N(n);e.write(`const ${s} = ${o}[${a}];`),ce(e,n,t[r],s,!1)}}function Q$(e,n,i,o){let t=`${o}[${JSON.stringify(i.property)}]`;Q(e,n,i.schema,t)}function ek(e,n,i,o,t){let r=i._zod.def.tx;if(!r)throw new V("overwrite check without a transform function");if(Tt(r))throw new ze("z.compile: async overwrite transforms are not supported");let a=L(n,r);e.write(`const ${t} = ${a}(${o});`)}function vc(){throw new _e}function bc(e){this.issues.push(e)}function tk(e,n,i,o){let t=i._zod.def;if(t.fn){if(Tt(t.fn))throw new ze("z.compile: async .refine() predicates are not supported");let r=Pt(n,t.fn),a=L(n,vc),s=N(n);return e.write(`const ${s} = ${r}(${o});`),e.write(`if (${s} instanceof Promise) ${a}();`),e.write(`if (!${s}) return INVALID;`),o}if(i._zod.check){if(Tt(i._zod.check))throw new ze("z.compile: async .superRefine() / check functions are not supported");let r=i._zod.check,s=Pt(n,c=>{let d={value:c,issues:[],addIssue:bc};return r(d)instanceof Promise&&vc(),d.issues.length===0?d.value:pe}),u=N(n);return e.write(`const ${u} = ${s}(${o});`),e.write(`if (${u} === INVALID) return INVALID;`),u}throw new V("custom check without a predicate or check function")}var nk=new Set(["cidrv4","cuid","cuid2","date","datetime","duration","e164","email","emoji","ends_with","guid","includes","ipv4","ksuid","lowercase","mac","nanoid","regex","starts_with","time","ulid","uppercase","uuid","xid"]);function Wf(e,n,i,o,t=!0){let r=i.format;if(r==="base64"){let c=L(n,ar);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(r==="base64url"){let c=L(n,Ei);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(r==="jwt"){let c=L(n,zi),d=L(n,i.alg??null);return e.write(`if (!${c}(${o}, ${d})) return INVALID;`),o}if(r==="ipv6"){let c=L(n,or);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(r==="cidrv6"){let c=L(n,Ti);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(r==="credit_card"){let c=L(n,Oi);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(r==="iban"){let c=L(n,Ni);return e.write(`if (!${c}(${o})) return INVALID;`),o}let a=i;if(r==="url"||r==="httpurl"||a.normalize||a.hostname!==void 0||a.protocol!==void 0){let c=L(n,Ii),d=L(n,i),p=N(n),m=N(n);if(e.write(`const ${p} = ${o}.trim();`),e.write(`const ${m} = ${c}(${p}, ${d});`),e.write(`if (typeof ${m} === "number") return INVALID;`),a.hostname!==void 0){let y=L(n,Si);e.write(`if (!${y}(${m}, ${d}.hostname)) return INVALID;`)}if(a.protocol!==void 0){let y=L(n,Pi);e.write(`if (!${y}(${m}, ${d}.protocol)) return INVALID;`)}if(!t)return null;let f=N(n),g=a.normalize?`${m}.href`:`${L(n,ir)}(${p})`;return e.write(`const ${f} = ${g};`),f}let s=i.fn;if(s){if(Tt(s))throw new V(`async string format ${r}`);let c=L(n,s);return e.write(`if (!${c}(${o})) return INVALID;`),o}if(nk.has(r)&&i.pattern){let c=L(n,i.pattern);return e.write(`${c}.lastIndex = 0;`),e.write(`if (!${c}.test(${o})) return INVALID;`),o}let u=i.format;switch(u){case"regex":throw new V("regex format without a pattern");case"lowercase":e.write(`if (${o} !== ${o}.toLowerCase()) return INVALID;`);break;case"uppercase":e.write(`if (${o} !== ${o}.toUpperCase()) return INVALID;`);break;case"includes":e.write(`if (!${o}.includes(${le(i.includes)})) return INVALID;`);break;case"starts_with":{let c=i.prefix;e.write(`if (${o}.slice(0, ${c.length}) !== ${le(c)}) return INVALID;`);break}case"ends_with":{let c=i.suffix;e.write(`if (${o}.slice(-${c.length}) !== ${le(c)}) return INVALID;`);break}default:throw new V(`string format ${u}`)}return o}function Q(e,n,i,o,t=!0){let r=i._zod.def,a=r.type;if(r.coerce)throw new V(`coercion (z.coerce.${a}())`);let s=t||!!r.checks?.length,u;switch(a){case"string":u=rk(e,n,i,o,s);break;case"number":u=ik(e,i,o);break;case"boolean":u=ok(e,o);break;case"bigint":u=ak(e,i,o);break;case"symbol":u=sk(e,o);break;case"undefined":u=uk(e,o);break;case"null":u=ck(e,o);break;case"any":case"unknown":u=o;break;case"never":e.write("return INVALID;"),u=o;break;case"void":u=lk(e,o);break;case"nan":u=dk(e,o);break;case"date":u=pk(e,o);break;case"object":u=mk(e,n,i,o,s);break;case"optional":u=fk(e,n,i,o,s);break;case"nullable":u=hk(e,n,i,o,s);break;case"array":u=yk(e,n,i,o,s);break;case"literal":u=bk(e,n,i,o);break;case"enum":u=_k(e,n,i,o);break;case"readonly":{let c=Gf(e,n,i,o),d=N(n);e.write(`const ${d} = Object.freeze(${c});`),u=d;break}case"success":Gf(e,n,i,o),u="true";break;case"default":case"prefault":u=$k(e,n,i,o);break;case"nonoptional":u=kk(e,n,i,o);break;case"tuple":u=xk(e,n,i,o);break;case"union":u=wk(e,n,i,o);break;case"intersection":u=Pk(e,n,i,o);break;case"record":u=Tk(e,n,i,o);break;case"map":u=Ek(e,n,i,o);break;case"set":u=Ok(e,n,i,o);break;case"file":u=Nk(e,o);break;case"template_literal":u=zk(e,n,i,o);break;case"lazy":u=Dk(e,n,i,o);break;case"pipe":u=Ck(e,n,i,o);break;case"custom":u=jk(e,n,i,o);break;case"transform":u=Rk(e,n,i,o);break;case"catch":u=Uk(e,n,i,o);break;default:throw new V(`schema type ${a}`)}return u===null?null:H$(e,n,i,u)}function rk(e,n,i,o,t=!0){e.write(`if (typeof ${o} !== "string") return INVALID;`);let r=i._zod.def;return r.format===void 0?o:Wf(e,n,r,o,t)}function ik(e,n,i){e.write(`if (typeof ${i} !== "number" || !Number.isFinite(${i})) return INVALID;`);let o=n._zod.def;return o.check==="number_format"&&o.format&&Kf(e,{format:o.format},i),i}function ok(e,n){return e.write(`if (typeof ${n} !== "boolean") return INVALID;`),n}function ak(e,n,i){e.write(`if (typeof ${i} !== "bigint") return INVALID;`);let o=n._zod.def;if(o.format)switch(o.format){case"int64":e.write(`if (${i} < -9223372036854775808n || ${i} > 9223372036854775807n) return INVALID;`);break;case"uint64":e.write(`if (${i} < 0n || ${i} > 18446744073709551615n) return INVALID;`);break}return i}function sk(e,n){return e.write(`if (typeof ${n} !== "symbol") return INVALID;`),n}function uk(e,n){return e.write(`if (${n} !== undefined) return INVALID;`),n}function ck(e,n){return e.write(`if (${n} !== null) return INVALID;`),n}function lk(e,n){return e.write(`if (${n} !== undefined) return INVALID;`),n}function dk(e,n){return e.write(`if (typeof ${n} !== "number" || !Number.isNaN(${n})) return INVALID;`),n}function pk(e,n){return e.write(`if (!(${n} instanceof Date) || Number.isNaN(${n}.getTime())) return INVALID;`),n}function mk(e,n,i,o,t=!0){let r=i._zod.def;e.write(`if (typeof ${o} !== "object" || ${o} === null || Array.isArray(${o})) return INVALID;`);let a=r.shape,s=Object.keys(a),u=Object.getOwnPropertySymbols(a),c=u.length?[...s,...u]:s,d=b=>typeof b=="symbol"?L(n,b):le(b),p=b=>typeof b=="symbol"?`[${d(b)}]`:le(b),m=a;if(s.includes("__proto__"))throw new V('object shape key "__proto__"');let f=new Map;for(let b of c){let T=m[b],E=d(b),z=N(n);if(e.write(`const ${z} = ${o}[${E}];`),T._zod.optin!==void 0){let w=N(n);e.write(`let ${w} = (() => {`),e.indented(O=>{let A=ce(O,n,T,z);O.write(`return ${A};`)}),e.write("})();"),T._zod.optout==="optional"?(e.write(`if (${w} === INVALID) {`),e.indented(O=>{O.write(`if (${E} in ${o}) return INVALID;`),O.write(`${w} = undefined;`)}),e.write("}")):e.write(`if (${w} === INVALID) return INVALID;`),f.set(b,w)}else{vk(T)&&e.write(`if (!(${E} in ${o})) return INVALID;`);let w=ce(e,n,T,z,t);w!==null&&f.set(b,w)}}let g=r.catchall,y="none";if(g){let b=g._zod.def.type;if(b==="never"){let T=s.map(E=>`k !== ${le(E)}`).join(" && ")||"true";e.write(`for (const k in ${o}) {`),e.indented(E=>{E.write(`if (${T}) return INVALID;`)}),e.write("}")}else(b==="unknown"||b==="any")&&!g._zod.def.checks?.length?y="passthrough":y="schema"}let x=N(n),I=c.some(b=>Vf(m[b])||hc(m[b]));if(!t){if(y==="schema"){let b=s.length>0?L(n,new Set(s)):null;e.write(`for (const k in ${o}) {`),e.indented(T=>{T.write('if (k === "__proto__") continue;'),b&&T.write(`if (${b}.has(k)) continue;`);let E=N(n);T.write(`const ${E} = ${o}[k];`),ce(T,n,g,E,!1)}),e.write("}")}return null}if(I){e.write(`const ${x} = {};`);for(let b of c){let T=d(b),E=f.get(b);hc(m[b])?e.write(`if (${T} in ${o}) ${x}[${T}] = ${E};`):Vf(m[b])?e.write(`if (${E} !== undefined || ${T} in ${o}) ${x}[${T}] = ${E};`):e.write(`${x}[${T}] = ${E};`)}}else{let b=c.map(T=>`${p(T)}: ${f.get(T)}`).join(", ");e.write(`const ${x} = { ${b} };`)}if(y!=="none"){let b=s.length>0?L(n,new Set(s)):null;e.write(`for (const k in ${o}) {`),e.indented(T=>{if(T.write('if (k === "__proto__") continue;'),b&&T.write(`if (${b}.has(k)) continue;`),y==="passthrough")T.write(`${x}[k] = ${o}[k];`);else{let E=N(n);T.write(`const ${E} = ${o}[k];`);let z=ce(T,n,g,E);T.write(`${x}[k] = ${z};`)}}),e.write("}")}return x}function fk(e,n,i,o,t=!0){let r=i._zod.def;if(gk(i))return Q(e,n,r.innerType,o,t);if(r.innerType._zod.optin==="defaulted"){let s=N(n),u=N(n);return e.write(`let ${s};`),e.write(`if (${o} === undefined) {`),e.indented(c=>{c.write(`const ${u} = (() => {`),c.indented(d=>{let p=Q(d,n,r.innerType,o);d.write(`return ${p};`)}),c.write("})();"),c.write(`if (${u} !== INVALID) ${s} = ${u};`)}),e.write("} else {"),e.indented(c=>{let d=Q(c,n,r.innerType,o);c.write(`${s} = ${d};`)}),e.write("}"),s}let a=t?N(n):null;return a&&e.write(`let ${a};`),e.write(`if (${o} !== undefined) {`),e.indented(s=>{let u=Q(s,n,r.innerType,o,t);a&&u!==null&&s.write(`${a} = ${u};`)}),e.write("}"),a}function gk(e){return e._zod.traits?.has("$ZodExactOptional")===!0}function vk(e){return e._zod.optin===void 0&&St(e)}function St(e){if(e._zod.def.coerce)return!0;let n=e._zod.def;switch(n.type){case"any":case"unknown":case"undefined":case"void":case"default":case"prefault":case"transform":case"custom":case"lazy":return!0;case"string":case"number":case"boolean":case"bigint":case"symbol":case"null":case"never":case"nan":case"date":case"object":case"array":case"tuple":case"record":case"map":case"set":case"file":case"template_literal":return!1;case"nonoptional":return n.innerType?St(n.innerType):!1;case"literal":return!!n.values?.includes(void 0);case"enum":return!!e._zod.values?.has(void 0);case"optional":case"nullable":case"readonly":case"success":return n.innerType?St(n.innerType):!0;case"catch":return!0;case"union":return n.options?n.options.some(St):!0;case"intersection":return!n.left||!n.right?!0:St(n.left)&&St(n.right);case"pipe":return n.in?St(n.in):!0;default:return!0}}function hc(e){return e._zod.optin==="optional"&&e._zod.optout==="optional"}function Vf(e){return(e._zod.optin!=="defaulted"||e._zod.optout==="optional")&&on(e)}function on(e){let n=e._zod.def;switch(n.type){case"string":case"number":case"boolean":case"bigint":case"symbol":case"null":case"nan":case"date":case"object":case"array":case"tuple":case"record":case"map":case"set":case"file":case"template_literal":case"never":case"success":return!1;case"literal":return!!n.values?.includes(void 0);case"enum":return!!e._zod.values?.has(void 0);case"optional":return!0;case"nullable":case"readonly":case"nonoptional":return n.innerType?on(n.innerType):!0;case"union":return n.options?n.options.some(on):!0;case"intersection":return!n.left||!n.right||on(n.left)||on(n.right);case"pipe":return n.out?on(n.out):!0;default:return!0}}function hk(e,n,i,o,t=!0){let r=i._zod.def,a=t?N(n):null;return a&&e.write(`let ${a} = null;`),e.write(`if (${o} !== null) {`),e.indented(s=>{let u=Q(s,n,r.innerType,o,t);a&&u!==null&&s.write(`${a} = ${u};`)}),e.write("}"),a}function _c(e,n,i){for(let[o,t]of Wt(n._zod.def.checks))e.write(`if (${i} > ${ot(o,t._zod.def.check)}) return INVALID;`)}function yk(e,n,i,o,t=!0){let r=i._zod.def;e.write(`if (!Array.isArray(${o})) return INVALID;`),_c(e,i,`${o}.length`);let a=t?N(n):null,s=N(n),u=N(n);return a&&e.write(`const ${a} = new Array(${o}.length);`),e.write(`for (let ${s} = 0; ${s} < ${o}.length; ${s}++) {`),e.indented(c=>{c.write(`const ${u} = ${o}[${s}];`);let d=ce(c,n,r.element,u,t);a&&d!==null&&c.write(`${a}[${s}] = ${d};`)}),e.write("}"),a}function bk(e,n,i,o){let r=i._zod.def.values;if(r.length!==1){let s=L(n,new Set(r));return e.write(`if (!${s}.has(${o})) return INVALID;`),o}let a=r[0];if(typeof a=="number"&&Number.isNaN(a)){let s=L(n,new Set(r));return e.write(`if (!${s}.has(${o})) return INVALID;`),o}if(typeof a=="string")e.write(`if (${o} !== ${le(a)}) return INVALID;`);else if(typeof a=="number"||typeof a=="boolean")e.write(`if (${o} !== ${a}) return INVALID;`);else if(a===null)e.write(`if (${o} !== null) return INVALID;`);else if(a===void 0)e.write(`if (${o} !== undefined) return INVALID;`);else if(typeof a=="bigint")e.write(`if (${o} !== ${a}n) return INVALID;`);else throw new V(`literal type ${typeof a}`);return o}function _k(e,n,i,o){let t=i._zod.values;if(!t)throw new V("enum schema without enumerated values");let r=L(n,t);return e.write(`if (!${r}.has(${o})) return INVALID;`),o}function Gf(e,n,i,o){let t=i._zod.def;return Q(e,n,t.innerType,o)}function $k(e,n,i,o){let t=i._zod.def,a=Object.getOwnPropertyDescriptor(i._zod.def,"defaultValue")?()=>i._zod.def.defaultValue:void 0;if(i._zod.def.type==="prefault"){if(!a)return Q(e,n,t.innerType,o);let u=L(n,a),c=N(n);return e.write(`let ${c} = ${o};`),e.write(`if (${o} === undefined) ${c} = ${u}();`),Q(e,n,t.innerType,c)}let s=N(n);if(a){let u=L(n,a),c=L(n,Zn);e.write(`let ${s};`),e.write(`if (${o} === undefined) {`),e.indented(d=>{d.write(`${s} = ${c}(${u}());`)}),e.write("} else {"),e.indented(d=>{let p=Q(d,n,t.innerType,o);d.write(`${s} = ${p} === undefined ? ${c}(${u}()) : ${p};`)}),e.write("}")}else e.write(`let ${s};`),e.write(`if (${o} !== undefined) {`),e.indented(u=>{let c=Q(u,n,t.innerType,o);u.write(`${s} = ${c};`)}),e.write("}");return s}function kk(e,n,i,o){let t=i._zod.def,r=Q(e,n,t.innerType,o),a=N(n);return e.write(`const ${a} = ${r};`),e.write(`if (${a} === undefined) return INVALID;`),a}function xk(e,n,i,o){let t=i._zod.def,r=t.items,a=t.rest;e.write(`if (!Array.isArray(${o})) return INVALID;`);let s=Ff(r,"optin"),u=Ff(r,"optout");a?e.write(`if (${o}.length < ${s}) return INVALID;`):e.write(`if (${o}.length < ${s} || ${o}.length > ${r.length}) return INVALID;`);let c=N(n);e.write(`const ${c} = [];`);for(let d=0;d=u)e.write(`if (${c}.length === ${d}) {`),e.indented(m=>{m.write(`if (${d} < ${o}.length) {`),m.indented(f=>{let g=N(n);f.write(`const ${g} = ${o}[${d}];`);let y=ce(f,n,p,g);f.write(`${c}[${d}] = ${y};`)}),m.write("} else {"),m.indented(f=>{if(hc(p)){f.write(`${c}.length = ${d};`);return}let g=N(n),y=N(n);f.write(`const ${g} = undefined;`),f.write(`const ${y} = (() => {`),f.indented(x=>{let I=ce(x,n,p,g);x.write(`return ${I};`)}),f.write("})();"),f.write(`if (${y} === INVALID || ${y} === undefined) ${c}.length = ${d};`),f.write(`else ${c}[${d}] = ${y};`)}),m.write("}")}),e.write("}");else{let m=N(n);e.write(`const ${m} = ${o}[${d}];`);let f=ce(e,n,p,m);e.write(`${c}[${d}] = ${f};`)}}if(a){let d=N(n),p=N(n);e.write(`for (let ${d} = ${r.length}; ${d} < ${o}.length; ${d}++) {`),e.indented(m=>{m.write(`const ${p} = ${o}[${d}];`);let f=ce(m,n,a,p);m.write(`${c}[${d}] = ${f};`)}),e.write("}")}return c}function Ff(e,n){for(let i=e.length-1;i>=0;i--)if(!(n==="optin"?e[i]._zod.optin!==void 0:e[i]._zod.optout==="optional"))return i+1;return 0}function wk(e,n,i,o){let t=i._zod.def,r=t.options;if(t.discriminator)return Ik(e,n,t,o);if(t.inclusive===!1)throw new V("exclusive unions (z.xor)");if(r.length===0)return e.write("return INVALID;"),o;if(r.length===1)return Q(e,n,r[0],o);if(r.every(u=>u._zod.def.type==="literal"&&!u._zod.def.checks?.length)){let u=new Set(r.flatMap(d=>d._zod.def.values)),c=L(n,u);return e.write(`if (!${c}.has(${o})) return INVALID;`),o}let s=N(n);e.write(`let ${s};`);for(let u=0;u {`):e.write(`if (${s} === INVALID) ${s} = (() => {`),e.indented(d=>{let p=Q(d,n,c,o);d.write(`return ${p};`)}),e.write("})();")}return e.write(`if (${s} === INVALID) return INVALID;`),s}function Ik(e,n,i,o){if(i.unionFallback)throw new V("discriminated union with unionFallback");if(i.options.length===0)return e.write("return INVALID;"),o;let t=N(n),r=N(n);e.write(`const ${t} = ${o}?.[${le(i.discriminator)}];`),e.write(`let ${r};`);let a=!0,s=new Set;for(let u of i.options){let c=u._zod.propValues?.[i.discriminator];if(!c||c.size===0)throw new V("discriminated union option without static discriminator values");for(let m of c){if(s.has(m))throw new V(`duplicate discriminator value ${String(m)}`);s.add(m)}let d=Array.from(c,m=>Sk(n,t,m)),p=a?"if":"else if";e.write(`${p} (${d.join(" || ")}) {`),e.indented(m=>{let f=Q(m,n,u,o);m.write(`${r} = ${f};`)}),e.write("}"),a=!1}return e.write("else { return INVALID; }"),r}function Sk(e,n,i){if(typeof i=="string")return`${n} === ${le(i)}`;if(typeof i=="number")return Number.isNaN(i)?`Number.isNaN(${n})`:`${n} === ${i}`;if(typeof i=="boolean")return`${n} === ${i}`;if(i===null)return`${n} === null`;if(i===void 0)return`${n} === undefined`;if(typeof i=="bigint")return`${n} === ${i}n`;if(typeof i=="symbol"){let o=L(e,i);return`${n} === ${o}`}throw new V(`literal discriminator value ${String(i)}`)}function Pk(e,n,i,o){let t=i._zod.def;n.definite=!1;let r=ce(e,n,t.left,o),a=ce(e,n,t.right,o),s=L(n,tn),u=N(n);return e.write(`const ${u} = ${s}(${r}, ${a});`),e.write(`if (!${u}.valid) return INVALID;`),`${u}.data`}function Tk(e,n,i,o){let t=i._zod.def,r=L(n,Ie);e.write(`if (!${r}(${o})) return INVALID;`);let a=N(n),s=N(n),u=N(n);e.write(`const ${a} = {};`);let c=t,d=c.partial?void 0:t.keyType._zod.values;if(d){let f=[];for(let y of d){if(!(typeof y=="string"||typeof y=="number"||typeof y=="symbol"))throw new V(`record key value ${String(y)}`);let x=typeof y=="number"?y.toString():y;if(x==="__proto__")throw new V('record key "__proto__"');f.push(x);let I=L(n,y),b=Q(e,n,t.keyType,I),T=N(n);e.write(`const ${T} = ${o}[${Ak(n,x)}];`);let E=ce(e,n,t.valueType,T);e.write(`${a}[${b}] = ${E};`)}let g=L(n,new Set(f));return e.write(`for (const ${s} in ${o}) {`),e.indented(y=>{y.write(`if (${g}.has(${s})) continue;`),c.mode==="loose"?y.write(`if (${s} !== "__proto__") ${a}[${s}] = ${o}[${s}];`):y.write("return INVALID;")}),e.write("}"),a}let p=t.keyType._zod.def;if(!(p.type==="string"&&p.format===void 0&&!p.coerce&&(p.checks?.length??0)===0)){let f=t.mode==="loose",g=qi(t.keyType);g.definite===!1&&(n.definite=!1);let y=L(n,g),x=L(n,Xe),I=N(n);return Bf(e,n,o,s,b=>{b.write(`let ${I} = ${y}(${s});`),b.write(`if (${I} === INVALID && typeof ${s} === "string" && ${x}.test(${s})) ${I} = ${y}(Number(${s}));`),f?b.write(`if (${I} === INVALID) { ${a}[${s}] = ${o}[${s}]; continue; }`):b.write(`if (${I} === INVALID) return INVALID;`),b.write(`if (${I} === "__proto__") continue;`);let T=N(n);b.write(`const ${T} = ${o}[${s}];`);let E=ce(b,n,t.valueType,T);b.write(`${a}[${I}] = ${E};`)}),a}return Bf(e,n,o,s,f=>{f.write(`const ${u} = ${o}[${s}];`);let g=ce(f,n,t.valueType,u);f.write(`${a}[${s}] = ${g};`)},"return INVALID;"),a}function Bf(e,n,i,o,t,r){let a=L(n,Object.prototype.propertyIsEnumerable),s=N(n),u=N(n),c=N(n);e.write(`const ${s} = Object.getOwnPropertySymbols(${i});`),e.write(`const ${u} = Object.getOwnPropertyNames(${i});`),e.write(`for (let ${c} = 0; ${c} < ${u}.length; ${c}++) {`),e.indented(d=>{d.write(`const ${o} = ${u}[${c}];`),d.write(`if (${o} === "__proto__" || !${a}.call(${i}, ${o})) continue;`),t(d)}),e.write("}"),e.write(`for (let ${c} = 0; ${c} < ${s}.length; ${c}++) {`),e.indented(d=>{d.write(`const ${o} = ${s}[${c}];`),d.write(`if (!${a}.call(${i}, ${o})) continue;`),r?d.write(r):t(d)}),e.write("}")}function Ak(e,n){return typeof n=="string"?le(n):L(e,n)}function Ek(e,n,i,o){let t=i._zod.def;e.write(`if (!(${o} instanceof Map)) return INVALID;`),_c(e,i,`${o}.size`);let r=N(n),a=N(n),s=N(n);return e.write(`const ${r} = new Map();`),e.write(`for (const [${a}, ${s}] of ${o}) {`),e.indented(u=>{let c=Q(u,n,t.keyType,a),d=Q(u,n,t.valueType,s);u.write(`${r}.set(${c}, ${d});`)}),e.write("}"),r}function Ok(e,n,i,o){let t=i._zod.def;e.write(`if (!(${o} instanceof Set)) return INVALID;`),_c(e,i,`${o}.size`);let r=N(n),a=N(n);return e.write(`const ${r} = new Set();`),e.write(`for (const ${a} of ${o}) {`),e.indented(s=>{let u=Q(s,n,t.valueType,a);s.write(`${r}.add(${u});`)}),e.write("}"),r}function Nk(e,n){return e.write(`if (!(${n} instanceof File)) return INVALID;`),n}function zk(e,n,i,o){e.write(`if (typeof ${o} !== "string") return INVALID;`);let t=i._zod.pattern;if(t){let r=L(n,t);e.write(`${r}.lastIndex = 0;`),e.write(`if (!${r}.test(${o})) return INVALID;`)}return o}function Dk(e,n,i,o){let t=i._zod.def,r=Pt(n,t.getter),a=L(n,{parser:null});e.write(`if (!${a}.parser) {`),e.indented(u=>{u.write(`const inner = ${r}();`),u.write(`${a}.parser = function(input) {`),u.indented(c=>{c.write("const result = inner._zod.run({ value: input, issues: [] }, {});"),c.write("return result.issues.length === 0 ? result.value : INVALID;")}),u.write("};")}),e.write("}");let s=N(n);return e.write(`const ${s} = ${a}.parser(${o});`),e.write(`if (${s} === INVALID) return INVALID;`),s}function Ck(e,n,i,o){let t=i._zod.def,r=Q(e,n,t.in,o);if(t.transform){if(Tt(t.transform))throw new ze("z.compile: async transforms in pipes are not supported");let a=t.transform,u=Pt(n,d=>{let p={value:d,issues:[],addIssue:bc},m=a(d,p);return m instanceof Promise?pe:p.issues.length===0?m:pe}),c=N(n);return e.write(`const ${c} = ${u}(${r});`),e.write(`if (${c} === INVALID) return INVALID;`),Q(e,n,t.out,c)}else return Q(e,n,t.out,r)}function Tt(e){return typeof e=="function"&&(e.constructor.name==="AsyncFunction"||e[Symbol.toStringTag]==="AsyncFunction")}function jk(e,n,i,o){let t=i._zod.def;if(t.fn){if(Tt(t.fn))throw new ze("z.compile: async custom predicates are not supported");let r=Pt(n,t.fn),a=L(n,vc),s=N(n);e.write(`const ${s} = ${r}(${o});`),e.write(`if (${s} instanceof Promise) ${a}();`),e.write(`if (!${s}) return INVALID;`)}else throw new V("custom schema without a predicate function");return o}function Lk(e,n,i){let o=e._zod.run({value:i,issues:[]},{});if(o&&typeof o.then=="function")return pe;let t=o;return t.issues.length===0?t.value:n()}function Uk(e,n,i,o){let t=i._zod.def;if(!t.catchValue[ni])throw new V("catch with a callback (only a constant catch value compiles)",!1);let r=N(n);e.write(`let ${r} = (() => {`),e.indented(c=>{let d=ce(c,n,t.innerType,o);c.write(`return ${d};`)}),e.write("})();");let a=L(n,t.innerType),s=Pt(n,t.catchValue),u=L(n,Lk);return e.write(`if (${r} === INVALID) {`),e.indented(c=>{c.write(`${r} = ${u}(${a}, ${s}, ${o});`),c.write(`if (${r} === INVALID) return INVALID;`)}),e.write("}"),r}function Rk(e,n,i,o){let t=i._zod.def;if(t.transform){if(Tt(t.transform))throw new ze("z.compile: async transforms are not supported");let r=t.transform,s=Pt(n,c=>{let d={value:c,issues:[],addIssue:bc},p=r(c,d);return p instanceof Promise?pe:d.issues.length===0?p:pe}),u=N(n);return e.write(`const ${u} = ${s}(${o});`),e.write(`if (${u} === INVALID) return INVALID;`),u}return o}function Yi(e){return e.checks&&(e.checks=[...e.checks]),e}function $c(e,n){return new e(Yi({type:"string",...S(n)}))}function kc(e,n){return new e(Yi({type:"string",coerce:!0,...S(n)}))}function Qi(e,n){return new e({type:"string",format:"email",check:"string_format",abort:!1,...S(n)})}function eo(e,n){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...S(n)})}function to(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...S(n)})}function no(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...S(n)})}function ro(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...S(n)})}function io(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...S(n)})}function hr(e,n){return new e({type:"string",format:"url",check:"string_format",abort:!1,...S(n)})}function oo(e,n){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...S(n)})}function ao(e,n){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...S(n)})}function so(e,n){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...S(n)})}function uo(e,n){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...S(n)})}function co(e,n){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...S(n)})}function lo(e,n){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...S(n)})}function po(e,n){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...S(n)})}function mo(e,n){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...S(n)})}function fo(e,n){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...S(n)})}function xc(e,n){return new e({type:"string",format:"mac",check:"string_format",abort:!1,...S(n)})}function go(e,n){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...S(n)})}function vo(e,n){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...S(n)})}function ho(e,n){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...S(n)})}function yo(e,n){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...S(n)})}function bo(e,n){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...S(n)})}function wc(e,n){return new e({type:"string",format:"credit_card",check:"string_format",abort:!1,...S(n)})}function Ic(e,n){return new e({type:"string",format:"iban",check:"string_format",abort:!1,...S(n)})}function _o(e,n){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...S(n)})}var Sc={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6};function yr(e,n){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...S(n)})}function br(e,n){return new e({type:"string",format:"date",check:"string_format",...S(n)})}function _r(e,n){return new e({type:"string",format:"time",check:"string_format",precision:null,...S(n)})}function $r(e,n){return new e({type:"string",format:"duration",check:"string_format",...S(n)})}function Pc(e,n){return new e(Yi({type:"number",checks:[],...S(n)}))}function Tc(e,n){return new e(Yi({type:"number",coerce:!0,checks:[],...S(n)}))}function Ac(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...S(n)})}function Ec(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"float32",...S(n)})}function Oc(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"float64",...S(n)})}function Nc(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"int32",...S(n)})}function zc(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"uint32",...S(n)})}function Dc(e,n){return new e({type:"boolean",...S(n)})}function Cc(e,n){return new e({type:"boolean",coerce:!0,...S(n)})}function jc(e,n){return new e({type:"bigint",...S(n)})}function Lc(e,n){return new e({type:"bigint",coerce:!0,...S(n)})}function Uc(e,n){return new e({type:"bigint",check:"bigint_format",abort:!1,format:"int64",...S(n)})}function Rc(e,n){return new e({type:"bigint",check:"bigint_format",abort:!1,format:"uint64",...S(n)})}function Mc(e,n){return new e({type:"symbol",...S(n)})}function Zc(e,n){return new e({type:"undefined",...S(n)})}function Vc(e,n){return new e({type:"null",...S(n)})}function Gc(e){return new e({type:"any"})}function Fc(e){return new e({type:"unknown"})}function Bc(e,n){return new e({type:"never",...S(n)})}function Hc(e,n){return new e({type:"void",...S(n)})}function Kc(e,n){return new e({type:"date",...S(n)})}function Wc(e,n){return new e({type:"date",coerce:!0,...S(n)})}function Jc(e,n){return new e({type:"nan",...S(n)})}function Re(e,n){return new yi({check:"less_than",...S(n),value:e,inclusive:!1})}function xe(e,n){return new yi({check:"less_than",...S(n),value:e,inclusive:!0})}function Me(e,n){return new bi({check:"greater_than",...S(n),value:e,inclusive:!1})}function we(e,n){return new bi({check:"greater_than",...S(n),value:e,inclusive:!0})}function $o(e){return Me(0,e)}function ko(e){return Re(0,e)}function xo(e){return xe(0,e)}function wo(e){return we(0,e)}function at(e,n){return new Os({check:"multiple_of",...S(n),value:e})}function st(e,n){return new Ds({check:"max_size",...S(n),maximum:e})}function Ze(e,n){return new Cs({check:"min_size",...S(n),minimum:e})}function At(e,n){return new js({check:"size_equals",...S(n),size:e})}function Et(e,n){return new Ls({check:"max_length",...S(n),maximum:e})}function qe(e,n){return new Us({check:"min_length",...S(n),minimum:e})}function Ot(e,n){return new Rs({check:"length_equals",...S(n),length:e})}function an(e,n){return new Ms({check:"string_format",format:"regex",...S(n),pattern:e})}function sn(e){return new Zs({check:"string_format",format:"lowercase",...S(e)})}function un(e){return new Vs({check:"string_format",format:"uppercase",...S(e)})}function cn(e,n){return new Gs({check:"string_format",format:"includes",...S(n),includes:e})}function ln(e,n){return new Fs({check:"string_format",format:"starts_with",...S(n),prefix:e})}function dn(e,n){return new Bs({check:"string_format",format:"ends_with",...S(n),suffix:e})}function Io(e,n,i){return new Hs({check:"property",property:e,schema:n,...S(i)})}function pn(e,n){return new Ks({check:"properties",shape:e,...S(n)})}function mn(e,n){return new Ws({check:"mime_type",mime:e,...S(n)})}function De(e){return new Js({check:"overwrite",tx:e})}function fn(e){return De(n=>n.normalize(e))}function gn(){return De(e=>e.trim())}function vn(){return De(e=>e.toLowerCase())}function hn(){return De(e=>e.toUpperCase())}function yn(){return De(e=>za(e))}function Xc(e,n,i){return new e({type:"array",element:n,...S(i)})}function Mk(e,n,i){return new e({type:"union",options:n,...S(i)})}function Zk(e,n,i){return new e({type:"union",options:n,inclusive:!1,...S(i)})}function Vk(e,n,i,o){return new e({type:"union",options:i,discriminator:n,...S(o)})}function Gk(e,n,i){return new e({type:"intersection",left:n,right:i})}function Fk(e,n,i,o){let t=i instanceof U,r=t?o:i,a=t?i:null;return new e({type:"tuple",items:n,rest:a,...S(r)})}function Bk(e,n,i,o){return new e({type:"record",keyType:n,valueType:i,...S(o)})}function Hk(e,n,i,o){return new e({type:"map",keyType:n,valueType:i,...S(o)})}function Kk(e,n,i){return new e({type:"set",valueType:n,...S(i)})}function Wk(e,n,i){let o=Array.isArray(n)?Object.fromEntries(n.map(t=>[t,t])):n;return new e({type:"enum",entries:o,...S(i)})}function Jk(e,n,i){return new e({type:"enum",entries:n,...S(i)})}function Xk(e,n,i){return new e({type:"literal",values:Array.isArray(n)?n:[n],...S(i)})}function qc(e,n){return new e({type:"file",...S(n)})}function qk(e,n){return new e({type:"transform",transform:n})}function Yk(e,n){return new e({type:"optional",innerType:n})}function Qk(e,n){return new e({type:"nullable",innerType:n})}function ex(e,n,i){return new e({type:"default",innerType:n,get defaultValue(){return typeof i=="function"?i():Zn(i)}})}function tx(e,n,i){return new e({type:"nonoptional",innerType:n,...S(i)})}function nx(e,n){return new e({type:"success",innerType:n})}function rx(e,n,i){return new e({type:"catch",innerType:n,catchValue:typeof i=="function"?i:Ra(i)})}function ix(e,n,i){return new e({type:"pipe",in:n,out:i})}function ox(e,n){return new e({type:"readonly",innerType:n})}function ax(e,n,i){return new e({type:"template_literal",parts:n,...S(i)})}function sx(e,n){return new e({type:"lazy",getter:n})}function ux(e,n){return new e({type:"promise",innerType:n})}function Yc(e,n,i){let o=S(i);return o.abort??(o.abort=!0),new e({type:"custom",check:"custom",fn:n,...o})}function Qc(e,n,i){return new e({type:"custom",check:"custom",fn:n,...S(i)})}function el(e,n){let i=Jf(o=>(o.addIssue=t=>{if(typeof t=="string")o.issues.push(Jt(t,o.value,i._zod.def));else{let r=t;r.fatal&&(r.continue=!1),r.code??(r.code="custom"),"input"in r||(r.input=o.value),r.inst??(r.inst=i),r.continue??(r.continue=!i._zod.def.abort),o.issues.push(Jt(r))}},e(o.value,o)),n);return i}function Jf(e,n){let i=new q({check:"custom",...S(n)});return i._zod.check=e,i}function tl(e){let n=new q({check:"describe"});return n._zod.onattach=[i=>{let o=ue.get(i)??{};ue.add(i,{...o,description:e})}],n._zod.check=()=>{},n}function nl(e){let n=new q({check:"meta"});return n._zod.onattach=[i=>{let o=ue.get(i)??{};ue.add(i,{...o,...e})}],n._zod.check=()=>{},n}function rl(e,n){let i=S(n),o=i.truthy??["true","1","yes","on","y","enabled"],t=i.falsy??["false","0","no","off","n","disabled"];i.case!=="sensitive"&&(o=o.map(f=>typeof f=="string"?f.toLowerCase():f),t=t.map(f=>typeof f=="string"?f.toLowerCase():f));let r=new Set(o),a=new Set(t),s=e.Codec??lr,u=e.Boolean??ur,c=e.String??It,d=new c({type:"string",error:i.error}),p=new u({type:"boolean",error:i.error}),m=new s({type:"pipe",in:d,out:p,transform:((f,g)=>{let y=f;return i.case!=="sensitive"&&(y=y.toLowerCase()),r.has(y)?!0:a.has(y)?!1:(g.issues.push({code:"invalid_value",expected:"stringbool",values:[...r,...a],input:g.value,inst:m,continue:!1}),{})}),reverseTransform:((f,g)=>f===!0?o[0]||"true":t[0]||"false"),error:i.error});return m._zod.bag.truthy=o,m._zod.bag.falsy=t,m._zod.bag.case=i.case??"insensitive",m}function Nt(e,n,i,o={}){let t=S(o),r={check:"string_format",type:"string",format:n,fn:typeof i=="function"?i:s=>i.test(s),...t};return i instanceof RegExp&&(r.pattern=i),new e(r)}function kr(e,...n){for(let i of n)for(let o of Reflect.ownKeys(i))Object.prototype.propertyIsEnumerable.call(i,o)&&se(e,o,i[o]);return e}function ut(e){let n=e?.target??"draft-2020-12";return n==="draft-4"&&(n="draft-04"),n==="draft-7"&&(n="draft-07"),{processors:e.processors??{},metadataRegistry:e?.metadata??ue,target:n,unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}),io:e?.io??"output",counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??"ref",reused:e?.reused??"inline",intersections:[],deferred:[],external:e?.external??void 0}}function re(e,n,i,o,t){let r=typeof n.unrepresentable=="function"?n.unrepresentable({zodSchema:e,path:o.path,message:t}):n.unrepresentable;if(r==="any")return!1;if(r===void 0||r==="throw")throw new Error(t);return Object.assign(i,r),!0}function W(e,n,i={path:[],schemaPath:[]}){var o;let t=e._zod.def,r=n.seen.get(e);if(r)return r.count++,i.schemaPath.includes(e)&&(r.cycle=i.path),r.schema;let a={schema:{},count:1,cycle:void 0,path:i.path};n.seen.set(e,a),n.sharedDefsExtractedFor=void 0,n.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)a.schema=s;else{let d={...i,schemaPath:[...i.schemaPath,e],path:i.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(n,a.schema,d);else{let m=a.schema,f=n.processors[t.type];if(!f)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${t.type}`);f(e,n,m,d)}let p=e._zod.parent;p&&(a.ref||(a.ref=p),W(p,n,d),n.seen.get(p).isParent=!0)}let u=n.metadataRegistry.get(e);return u&&kr(a.schema,u),n.io==="input"&&me(e)&&(delete a.schema.examples,delete a.schema.default),n.io==="input"&&"_prefault"in a.schema&&((o=a.schema).default??(o.default=a.schema._prefault)),delete a.schema._prefault,n.seen.get(e).schema}function Xf(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function ct(e,n){let i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");if(e.external&&e.sharedDefsExtractedFor===e.external)return;let o=new Map;for(let a of e.seen.entries()){let s=e.metadataRegistry.get(a[0])?.id;if(s){let u=o.get(s);if(u&&u!==a[0])throw new Error(`Duplicate schema id "${s}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);o.set(s,a[0])}}let t=a=>{let s=e.target==="draft-2020-12"?"$defs":"definitions";if(e.external){let p=e.external.registry.get(a[0])?.id,m=e.external.uri??(g=>g);if(p)return{ref:m(p)};let f=a[1].defId??a[1].schema.id??`schema${e.counter++}`;return a[1].defId=f,{defId:f,ref:`${m("__shared")}#/${s}/${Xf(f)}`}}let u="#",c=`${u}/${s}/`;if(a[1]===i&&!a[1].schema.id)return{ref:u};let d=a[1].schema.id??`__schema${e.counter++}`;return{defId:d,ref:c+Xf(d)}},r=a=>{if(a[1].schema.$ref)return;let s=a[1],{ref:u,defId:c}=t(a);s.def={...s.schema},c&&(s.defId=c);let d=s.schema;for(let p in d)delete d[p];d.$ref=u};if(e.cycles==="throw")for(let a of e.seen.entries()){let s=a[1];if(s.cycle)throw new Error(`Cycle detected: #/${s.cycle?.join("/")}/ -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of e.seen.entries()){let s=a[1];if(n===a[0]){r(a);continue}if(e.external){let c=e.external.registry.get(a[0])?.id;if(n!==a[0]&&c){r(a);continue}}if(e.metadataRegistry.get(a[0])?.id){r(a);continue}if(s.cycle){r(a);continue}s.count>1&&e.reused==="ref"&&r(a)}e.external&&(e.sharedDefsExtractedFor=e.external)}function Qf(e){let n=e.anyOf;if(!Array.isArray(n)||n.length===0||e.type!==void 0)return;let i=[];for(let o of n){if(!o||typeof o!="object")return;Qf(o);let t=Object.keys(o);if(t.length!==1||t[0]!=="type")return;let r=o.type;for(let a of Array.isArray(r)?r:[r]){if(typeof a!="string")return;i.includes(a)||i.push(a)}}delete e.anyOf,e.type=i.length===1?i[0]:i}var eg=new Set(["type","properties","required","additionalProperties"]),qf=["oneOf","anyOf"];function Yf(e){let n=e.additionalProperties;return n===void 0||n===!1||typeof n!="object"||n===null?null:Object.keys(n).length?n:null}function il(e){let n=[];for(let r of e){if(typeof r!="object"||r.type!=="object")return null;for(let a in r)if(!eg.has(a))return null;n.push(r)}let i={},o=new Set;for(let r of n){for(let a in r.properties){if(Object.prototype.hasOwnProperty.call(i,a))continue;let s=[];for(let c of n){let d=c.properties?.[a]??Yf(c);d!=null&&(s.some(p=>JSON.stringify(p)===JSON.stringify(d))||s.push(d))}let u=s.length===1?s[0]:il(s)??{allOf:s};se(i,a,u)}for(let a of r.required??[])o.add(a)}let t={type:"object",properties:i};if(o.size&&(t.required=[...o]),n.every(r=>r.additionalProperties===!1))t.additionalProperties=!1;else{let r=[];for(let a of n){let s=Yf(a);s&&!r.some(u=>JSON.stringify(u)===JSON.stringify(s))&&r.push(s)}r.length===1?t.additionalProperties=r[0]:r.length>1&&(t.additionalProperties={allOf:r})}return t}function cx(e){let n=e.allOf;if(!Array.isArray(n)||n.length<2)return;for(let t of eg)if(t in e)return;let i=n.filter(t=>qf.some(r=>Array.isArray(t[r]))),o=null;if(!i.length)o=il(n);else{let t=i[0],r=qf.find(u=>Array.isArray(t[u]));if(Object.keys(t).length!==1)return;let a=n.filter(u=>u!==t),s=t[r].map(u=>il([...a,u]));if(s.some(u=>!u))return;o={[r]:s}}o&&(delete e.allOf,kr(e,o))}function lt(e,n){let i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");let o=s=>{let u=e.seen.get(s);if(u.ref===null)return;let c=u.def??u.schema,d={...c},p=u.ref;if(u.ref=null,p){o(p);let f=e.seen.get(p),g=f.schema;if(g.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(c.allOf=c.allOf??[],c.allOf.push(g)):kr(c,g),kr(c,d),s._zod.parent===p)for(let x in c)x==="$ref"||x==="allOf"||x in d||delete c[x];if(g.$ref&&f.def)for(let x in c)x==="$ref"||x==="allOf"||x in f.def&&JSON.stringify(c[x])===JSON.stringify(f.def[x])&&delete c[x]}let m=s._zod.parent;if(m&&m!==p){o(m);let f=e.seen.get(m);if(f?.schema.$ref&&(c.$ref=f.schema.$ref,f.def))for(let g in c)g==="$ref"||g==="allOf"||g in f.def&&JSON.stringify(c[g])===JSON.stringify(f.def[g])&&delete c[g]}e.override({zodSchema:s,jsonSchema:c,path:u.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let s of[...e.seen.entries()].reverse())o(s[0]);if(e.target!=="openapi-3.0")for(let s of e.seen.entries())Qf(s[1].def??s[1].schema);for(let s of e.deferred)s();if(e.intersections.length){let s=new Map;for(let u of e.seen.values())for(let c of[u.schema,u.def]){let d=c?.allOf;if(!Array.isArray(d))continue;let p=s.get(d);p?p.push(c):s.set(d,[c])}for(let u of e.intersections)for(let c of s.get(u)??[])cx(c)}}let t={};if(e.target==="draft-2020-12"?t.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?t.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?t.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){let s=e.external.registry.get(n)?.id;if(!s)throw new Error("Schema is missing an `id` property");t.$id=e.external.uri(s)}kr(t,i.defId?i.schema:i.def??i.schema);let r=e.metadataRegistry.get(n)?.id;r!==void 0&&t.id===r&&delete t.id;let a=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let s of e.seen.entries()){let u=s[1];u.def&&u.defId&&(u.def.id===u.defId&&delete u.def.id,se(a,u.defId,u.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(a).length>0&&(e.target==="draft-2020-12"?t.$defs=a:t.definitions=a);try{let s=JSON.parse(JSON.stringify(t));return Object.defineProperty(s,"~standard",{value:{...n["~standard"],jsonSchema:{input:bn(n,"input",e.processors),output:bn(n,"output",e.processors)}},enumerable:!1,writable:!1}),s}catch{throw new Error("Error converting schema to JSON.")}}function me(e,n){let i=n??{seen:new Set};if(i.seen.has(e))return!1;i.seen.add(e);let o=e._zod.def;if(o.type==="transform")return!0;if(o.type==="array")return me(o.element,i);if(o.type==="set")return me(o.valueType,i);if(o.type==="lazy")return me(o.getter(),i);if(o.type==="promise"||o.type==="optional"||o.type==="nonoptional"||o.type==="nullable"||o.type==="readonly"||o.type==="default"||o.type==="prefault"||o.type==="catch")return me(o.innerType,i);if(o.type==="intersection")return me(o.left,i)||me(o.right,i);if(o.type==="record"||o.type==="map")return me(o.keyType,i)||me(o.valueType,i);if(o.type==="pipe")return e._zod.traits.has("$ZodCodec")?!0:me(o.in,i)||me(o.out,i);if(o.type==="object"){for(let t in o.shape)if(me(o.shape[t],i))return!0;return!1}if(o.type==="union"){for(let t of o.options)if(me(t,i))return!0;return!1}if(o.type==="tuple"){for(let t of o.items)if(me(t,i))return!0;return!!(o.rest&&me(o.rest,i))}return!1}var ol=(e,n={})=>i=>{let o=ut({...i,processors:n});return W(e,o),ct(o,e),lt(o,e)},bn=(e,n,i={})=>o=>{let{libraryOptions:t,target:r}=o??{},a=ut({...t??{},target:r,io:n,processors:i});return W(e,a),ct(a,e),lt(a,e)};var _n=(e,n,i)=>{(e[n]===void 0||i>e[n])&&(e[n]=i)},$n=(e,n,i)=>{(e[n]===void 0||i{_n(e,"minimum",n),$n(e,"maximum",n)},og=(e,n)=>{e.multipleOf??(e.multipleOf=[]),e.multipleOf.includes(n)||e.multipleOf.push(n)},ag=(e,n)=>{e.patterns??(e.patterns=new Set),e.patterns.add(n)},sg=(e,n)=>{e.mime=e.mime?e.mime.filter(i=>n.includes(i)):[...n]},ug=(e,n)=>{e.format=n,n.includes("int")&&(e.isInt=!0)},ng=(e,n)=>_n(e,"minimum",n.minimum),rg=(e,n)=>$n(e,"maximum",n.maximum),ig=e=>(n,i)=>{ug(n,i.format);let[o,t]=e[i.format];_n(n,"minimum",o),$n(n,"maximum",t)},lx={greater_than:(e,n)=>_n(e,n.inclusive?"minimum":"exclusiveMinimum",n.value),less_than:(e,n)=>$n(e,n.inclusive?"maximum":"exclusiveMaximum",n.value),multiple_of:(e,n)=>og(e,n.value),number_format:ig(Gn),bigint_format:ig(Fn),min_length:ng,max_length:rg,length_equals:(e,n)=>tg(e,n.length),min_size:ng,max_size:rg,size_equals:(e,n)=>tg(e,n.size),string_format:(e,n)=>{ug(e,n.format),n.pattern&&ag(e,n.pattern),(n.format==="base64"||n.format==="base64url")&&(e.contentEncoding=n.format),(n.local||n.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,n)=>sg(e,n.mime)};function ie(e){let n={},i=e._zod.def,o=e._zod.traits.has("$ZodCheck")?[e,...i.checks??[]]:i.checks??[];for(let r of o)lx[r._zod.def.check]?.(n,r._zod.def);let t=e._zod.bag;t.minimum!==void 0&&_n(n,"minimum",t.minimum),t.exclusiveMinimum!==void 0&&_n(n,"exclusiveMinimum",t.exclusiveMinimum),t.maximum!==void 0&&$n(n,"maximum",t.maximum),t.exclusiveMaximum!==void 0&&$n(n,"exclusiveMaximum",t.exclusiveMaximum),t.multipleOf!==void 0&&og(n,t.multipleOf),t.format!==void 0&&(n.format??(n.format=t.format),t.format.includes("int")&&(n.isInt=!0)),t.mime&&sg(n,t.mime);for(let r of t.patterns??[])ag(n,r);return n}var dx={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},px=new Map([[Ai,ds],[sr,ps]]),cg=e=>px.get(e)??e,ul=(e,n,i,o)=>{let t=i;t.type="string";let{minimum:r,maximum:a,format:s,patterns:u,contentEncoding:c,laxFormat:d}=ie(e);if(typeof r=="number"&&(t.minLength=r),typeof a=="number"&&(t.maxLength=a),s&&(t.format=dx[s]??s,t.format===""&&delete t.format,(s==="time"||d)&&delete t.format),c&&(t.contentEncoding=c),u&&u.size>0){let p=[...u].map(cg);p.length===1?t.pattern=p[0].source:p.length>1&&(t.allOf=[...p.map(m=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:m.source}))])}},cl=(e,n,i,o)=>{let t=i,{minimum:r,maximum:a,multipleOf:s,exclusiveMaximum:u,exclusiveMinimum:c,isInt:d}=ie(e);t.type=d?"integer":"number";let p=typeof c=="number"&&c>=(r??Number.NEGATIVE_INFINITY),m=typeof u=="number"&&u<=(a??Number.POSITIVE_INFINITY),f=n.target==="draft-04"||n.target==="openapi-3.0";if(p?f?(t.minimum=c,t.exclusiveMinimum=!0):t.exclusiveMinimum=c:typeof r=="number"&&(t.minimum=r),m?f?(t.maximum=u,t.exclusiveMaximum=!0):t.exclusiveMaximum=u:typeof a=="number"&&(t.maximum=a),s){let g=new Set;for(let I of s)Number.isFinite(I)&&I!==0?g.add(Math.abs(I)):re(e,n,t,o,`A multipleOf divisor of ${I} cannot be represented in JSON Schema`);let[y,...x]=g;y!==void 0&&(t.multipleOf=y),x.length&&(t.allOf=[...t.allOf??[],...x.map(I=>({multipleOf:I}))])}},ll=(e,n,i,o)=>{i.type="boolean"},dl=(e,n,i,o)=>{re(e,n,i,o,"BigInt cannot be represented in JSON Schema")},pl=(e,n,i,o)=>{re(e,n,i,o,"Symbols cannot be represented in JSON Schema")},ml=(e,n,i,o)=>{n.target==="openapi-3.0"?(i.type="string",i.nullable=!0,i.enum=[null]):i.type="null"},fl=(e,n,i,o)=>{re(e,n,i,o,"Undefined cannot be represented in JSON Schema")},gl=(e,n,i,o)=>{re(e,n,i,o,"Void cannot be represented in JSON Schema")},vl=(e,n,i,o)=>{i.not={}},hl=(e,n,i,o)=>{},yl=(e,n,i,o)=>{},bl=(e,n,i,o)=>{re(e,n,i,o,"Date cannot be represented in JSON Schema")},_l=(e,n,i,o)=>{let t=e._zod.def,r=Ft(t.entries);if(r.length===0){i.not={};return}r.every(a=>typeof a=="number")&&(i.type="number"),r.every(a=>typeof a=="string")&&(i.type="string"),i.enum=r},$l=(e,n,i,o)=>{let t=e._zod.def;if(t.values.length===0){i.not={};return}let r=[];for(let a of t.values)if(a===void 0){if(re(e,n,i,o,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof a=="bigint"){if(re(e,n,i,o,"BigInt literals cannot be represented in JSON Schema"))return;r.push(Number(a))}else r.push(a);if(r.length!==0)if(r.length===1){let a=r[0];i.type=a===null?"null":typeof a,n.target==="draft-04"||n.target==="openapi-3.0"?i.enum=[a]:i.const=a}else r.every(a=>typeof a=="number")&&(i.type="number"),r.every(a=>typeof a=="string")&&(i.type="string"),r.every(a=>typeof a=="boolean")&&(i.type="boolean"),r.every(a=>a===null)&&(i.type="null"),i.enum=r},kl=(e,n,i,o)=>{re(e,n,i,o,"NaN cannot be represented in JSON Schema")},xl=(e,n,i,o)=>{let t=i,r=e._zod.pattern;if(!r)throw new Error("Pattern not found in template literal");t.type="string",t.pattern=r.source},wl=(e,n,i,o)=>{let t=i;t.type="string",t.format="binary",t.contentEncoding="binary";let{minimum:r,maximum:a,mime:s}=ie(e);r!==void 0&&(t.minLength=r),a!==void 0&&(t.maxLength=a),s&&(s.length===0?t.not={}:s.length===1?t.contentMediaType=s[0]:t.anyOf=s.map(u=>({contentMediaType:u})))},Il=(e,n,i,o)=>{i.type="boolean"},Sl=(e,n,i,o)=>{re(e,n,i,o,"Custom types cannot be represented in JSON Schema")},Pl=(e,n,i,o)=>{re(e,n,i,o,"Function types cannot be represented in JSON Schema")},Tl=(e,n,i,o)=>{re(e,n,i,o,"Transforms cannot be represented in JSON Schema")},Al=(e,n,i,o)=>{re(e,n,i,o,"Map cannot be represented in JSON Schema")},El=(e,n,i,o)=>{re(e,n,i,o,"Set cannot be represented in JSON Schema")},Ol=(e,n,i,o)=>{let t=i,r=e._zod.def,{minimum:a,maximum:s}=ie(e);typeof a=="number"&&(t.minItems=a),typeof s=="number"&&(t.maxItems=s),t.type="array",t.items=W(r.element,n,{...o,path:[...o.path,"items"]})};function xr(e){let n=e._zod.def;return n.type==="pipe"&&n.in._zod.traits.has("$ZodTransform")?xr(n.out):n.type==="catch"?xr(n.innerType):e._zod.optin}var Nl=(e,n,i,o)=>{let t=i,r=e._zod.def,a=r.shape;if(Object.getOwnPropertySymbols(a).length&&re(e,n,t,o,"Symbol keys cannot be represented in JSON Schema"))return;t.type="object",t.properties={};for(let c in a)se(t.properties,c,W(a[c],n,{...o,path:[...o.path,"properties",c]}));let u=[];for(let c of Object.keys(a)){let d=r.shape[c];(n.io==="input"?xr(d)===void 0:d._zod.optout===void 0)&&u.push(c)}u.length>0&&(t.required=u),r.catchall?._zod.def.type==="never"?t.additionalProperties=!1:r.catchall?r.catchall&&(t.additionalProperties=W(r.catchall,n,{...o,path:[...o.path,"additionalProperties"]})):n.io==="output"&&(t.additionalProperties=!1)},Po=(e,n,i,o)=>{let t=e._zod.def,r=t.inclusive===!1,a=t.options.map((s,u)=>W(s,n,{...o,path:[...o.path,r?"oneOf":"anyOf",u]}));r?i.oneOf=a:i.anyOf=a},zl=(e,n,i,o)=>{let t=e._zod.def,r=W(t.left,n,{...o,path:[...o.path,"allOf",0]}),a=W(t.right,n,{...o,path:[...o.path,"allOf",1]}),s=c=>"allOf"in c&&Object.keys(c).length===1,u=[...s(r)?r.allOf:[r],...s(a)?a.allOf:[a]];i.allOf=u,n.intersections.push(u)},Dl=(e,n,i,o)=>{let t=i,r=e._zod.def;t.type="array";let a=n.target==="draft-2020-12"?"prefixItems":"items",s=n.target==="draft-2020-12"||n.target==="openapi-3.0"?"items":"additionalItems",u=r.items.map((y,x)=>W(y,n,{...o,path:[...o.path,a,x]})),c=r.rest?W(r.rest,n,{...o,path:[...o.path,s,...n.target==="openapi-3.0"?[r.items.length]:[]]}):null,d=r.items.length;for(;d>0;){let y=r.items[d-1];if(!(n.io==="input"?xr(y)!==void 0:y._zod.optout==="optional"))break;d--}let p=r.items.length,m=!r.rest;n.target==="draft-2020-12"?(t.prefixItems=u,m?t.items=!1:c&&(t.items=c),d>0&&(t.minItems=d),m&&(t.maxItems=p)):n.target==="openapi-3.0"?(t.items={anyOf:u},c&&t.items.anyOf.push(c),d>0&&(t.minItems=d),m&&(t.maxItems=p)):(t.items=u,m?t.additionalItems=!1:c&&(t.additionalItems=c),d>0&&(t.minItems=d),m&&(t.maxItems=p));let{minimum:f,maximum:g}=ie(e);typeof f=="number"&&(t.minItems=f),typeof g=="number"&&(t.maxItems=g)};function al(e,n,i){if(n.$ref){if(i.has(n))return n;i.add(n);let g=e.get(n)?.def;if(!g)return n;let y=al(e,g,i);return y===g?n:y}for(let g of["anyOf","oneOf"]){let y=n[g];if(!Array.isArray(y))continue;let x=y.map(I=>al(e,I,i));x.some((I,b)=>I!==y[b])&&(n={...n,[g]:x})}let o=Array.isArray(n.type)?n.type:[n.type],t=!o.includes("string")&&o.some(g=>g==="number"||g==="integer"),r=n.enum??(n.const!==void 0?[n.const]:void 0);if(!t&&!r?.some(g=>typeof g=="number"))return n;let{minimum:a,maximum:s,exclusiveMinimum:u,exclusiveMaximum:c,multipleOf:d,format:p,id:m,...f}=n;return f.enum?f.enum=f.enum.map(g=>typeof g=="number"?String(g):g):typeof f.const=="number"&&(f.const=String(f.const)),t&&(f.type="string",r||(f.pattern=(o.includes("number")?Xe:er).source)),f}var sl=new WeakMap;function mx(e){let n=new Map;for(let o of e.seen.values())o.def&&!n.has(o.schema)&&n.set(o.schema,o);let i=new Map;for(let o of sl.get(e)??[]){let t=e.seen.get(o),r=(t?.def??t?.schema)?.propertyNames;if(!r||r===!0||i.has(r))continue;let a=al(n,r,new Set);a!==r&&i.set(r,a)}if(i.size)for(let o of e.seen.values())for(let t of[o.schema,o.def]){let r=t&&i.get(t.propertyNames);r&&(t.propertyNames=r)}}var Cl=(e,n,i,o)=>{let t=i,r=e._zod.def;t.type="object";let a=r.keyType,s=ie(a).patterns;if(r.mode==="loose"&&s&&s.size>0){let d=W(r.valueType,n,{...o,path:[...o.path,"patternProperties","*"]});t.patternProperties={};for(let p of s)se(t.patternProperties,cg(p).source,d)}else{if(n.target==="draft-07"||n.target==="draft-2020-12"){t.propertyNames=W(r.keyType,n,{...o,path:[...o.path,"propertyNames"]});let d=sl.get(n);d||(d=[],sl.set(n,d),n.deferred.push(()=>mx(n))),d.push(e)}t.additionalProperties=W(r.valueType,n,{...o,path:[...o.path,"additionalProperties"]})}let u=a._zod.values,c=n.io==="input"&&xr(r.valueType)!==void 0;if(u&&!r.partial&&!c){let d=[...u].filter(p=>typeof p=="string"||typeof p=="number");d.length>0&&(t.required=d.map(String))}},jl=(e,n,i,o)=>{let t=e._zod.def,r=W(t.innerType,n,o),a=n.seen.get(e);n.target==="openapi-3.0"?(a.ref=t.innerType,i.nullable=!0):i.anyOf=[r,{type:"null"}]},Ll=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},Ul=Symbol();function lg(e,n,i,o,t){let r=!1,a=JSON.stringify(e,(s,u)=>typeof u!="bigint"?u:(r=!0,null));return r?(re(n,i,o,t,"BigInt defaults cannot be represented in JSON Schema"),Ul):JSON.parse(a)}var Rl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType;let a=lg(t.defaultValue,e,n,i,o);a!==Ul&&(i.default=a)},Ml=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);if(r.ref=t.innerType,n.io!=="input")return;let a=lg(t.defaultValue,e,n,i,o);a!==Ul&&(i._prefault=a)},Zl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType;let a;try{a=t.catchValue(void 0)}catch{re(e,n,i,o,"Dynamic catch values are not supported in JSON Schema");return}i.default=a},Vl=(e,n,i,o)=>{let t=e._zod.def,r=t.in._zod.traits.has("$ZodTransform"),a=n.io==="input"?r?t.out:t.in:t.out;W(a,n,o);let s=n.seen.get(e);s.ref=a},Gl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType,i.readOnly=!0},Fl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},To=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},Bl=(e,n,i,o)=>{let t=e._zod.innerType;W(t,n,o);let r=n.seen.get(e);r.ref=t},So={string:ul,number:cl,boolean:ll,bigint:dl,symbol:pl,null:ml,undefined:fl,void:gl,never:vl,any:hl,unknown:yl,date:bl,enum:_l,literal:$l,nan:kl,template_literal:xl,file:wl,success:Il,custom:Sl,function:Pl,transform:Tl,map:Al,set:El,array:Ol,object:Nl,union:Po,intersection:zl,tuple:Dl,record:Cl,nullable:jl,nonoptional:Ll,default:Rl,prefault:Ml,catch:Zl,pipe:Vl,readonly:Gl,promise:Fl,optional:To,lazy:Bl};function Ao(e,n){if("_idmap"in e){let o=e,t=ut({...n,processors:So}),r={};for(let u of o._idmap.entries()){let[c,d]=u;W(d,t)}let a={},s={registry:o,uri:n?.uri,defs:r};t.external=s;for(let u of o._idmap.entries()){let[c,d]=u;ct(t,d),se(a,c,lt(t,d))}if(Object.keys(r).length>0){let u=t.target==="draft-2020-12"?"$defs":"definitions";a.__shared={[u]:r}}return{schemas:a}}let i=ut({...n,processors:So});return W(e,i),ct(i,e),lt(i,e)}var Eo=class{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(n){this.ctx.counter=n}get seen(){return this.ctx.seen}constructor(n){let i=n?.target??"draft-2020-12";i==="draft-4"&&(i="draft-04"),i==="draft-7"&&(i="draft-07"),this.ctx=ut({processors:So,target:i,...n?.metadata&&{metadata:n.metadata},...n?.unrepresentable&&{unrepresentable:n.unrepresentable},...n?.override&&{override:n.override},...n?.io&&{io:n.io}})}process(n,i={path:[],schemaPath:[]}){return W(n,this.ctx,i)}emit(n,i){i&&(i.cycles&&(this.ctx.cycles=i.cycles),i.reused&&(this.ctx.reused=i.reused),i.external&&(this.ctx.external=i.external)),this.ctx.sharedDefsExtractedFor=void 0,this.ctx.sharedEmitDoneFor=void 0,ct(this.ctx,n);let o=lt(this.ctx,n),{"~standard":t,...r}=o;return r}};var dg={};var An={};Ke(An,{ZodAny:()=>md,ZodArray:()=>hd,ZodBase64:()=>Jo,ZodBase64URL:()=>Xo,ZodBigInt:()=>Pn,ZodBigIntFormat:()=>Qo,ZodBoolean:()=>Sn,ZodCIDRv4:()=>Ko,ZodCIDRv6:()=>Wo,ZodCUID:()=>Mo,ZodCUID2:()=>Zo,ZodCatch:()=>Ud,ZodCodec:()=>zr,ZodCreditCard:()=>od,ZodCustom:()=>Dr,ZodCustomStringFormat:()=>jt,ZodDate:()=>Pr,ZodDefault:()=>Nd,ZodDiscriminatedUnion:()=>bd,ZodE164:()=>qo,ZodEmail:()=>jo,ZodEmoji:()=>Uo,ZodEnum:()=>xn,ZodExactOptional:()=>ra,ZodFile:()=>Td,ZodFunction:()=>Wd,ZodGUID:()=>Lo,ZodIBAN:()=>ad,ZodIPv4:()=>Bo,ZodIPv6:()=>Ho,ZodISODate:()=>pt,ZodISODateTime:()=>dt,ZodISODuration:()=>ft,ZodISOTime:()=>mt,ZodInstanceOf:()=>qd,ZodIntersection:()=>_d,ZodJWT:()=>Yo,ZodKSUID:()=>Fo,ZodLazy:()=>Bd,ZodLiteral:()=>Pd,ZodMAC:()=>id,ZodMap:()=>Id,ZodNaN:()=>Md,ZodNanoID:()=>Ro,ZodNever:()=>gd,ZodNonOptional:()=>ia,ZodNull:()=>dd,ZodNullable:()=>Od,ZodNumber:()=>In,ZodNumberFormat:()=>Lt,ZodObject:()=>Ar,ZodOptional:()=>Or,ZodPipe:()=>Nr,ZodPrefault:()=>Dd,ZodPreprocess:()=>Zd,ZodPromise:()=>Kd,ZodReadonly:()=>Vd,ZodRecord:()=>kn,ZodSet:()=>Sd,ZodString:()=>wn,ZodStringFormat:()=>X,ZodSuccess:()=>Ld,ZodSymbol:()=>cd,ZodTemplateLiteral:()=>Fd,ZodTransform:()=>Ad,ZodTuple:()=>kd,ZodType:()=>M,ZodULID:()=>Vo,ZodURL:()=>Sr,ZodUUID:()=>Ve,ZodUndefined:()=>ld,ZodUnion:()=>Er,ZodUnknown:()=>fd,ZodVoid:()=>vd,ZodXID:()=>Go,ZodXor:()=>yd,_ZodString:()=>Co,_default:()=>zd,_function:()=>xv,any:()=>ev,array:()=>Tr,base64:()=>Dg,base64url:()=>Cg,bigint:()=>Jg,boolean:()=>ud,catch:()=>Rd,check:()=>wv,cidrv4:()=>Ng,cidrv6:()=>zg,codec:()=>bv,creditCard:()=>Lg,cuid:()=>wg,cuid2:()=>Ig,currencyCode:()=>Gg,custom:()=>Iv,date:()=>nv,describe:()=>Sv,discriminatedUnion:()=>uv,e164:()=>jg,email:()=>fg,emoji:()=>kg,enum:()=>ta,exactOptional:()=>Ed,file:()=>gv,float32:()=>Bg,float64:()=>Hg,function:()=>xv,guid:()=>gg,hash:()=>Fg,hex:()=>Vg,hostname:()=>Zg,httpUrl:()=>$g,iban:()=>Ug,instanceof:()=>Tv,int:()=>zo,int32:()=>Kg,int64:()=>Xg,intersection:()=>$d,invertCodec:()=>_v,ipv4:()=>Ag,ipv6:()=>Og,json:()=>Ev,jwt:()=>Rg,keyof:()=>rv,ksuid:()=>Tg,lazy:()=>Hd,literal:()=>fv,looseObject:()=>av,looseRecord:()=>lv,mac:()=>Eg,map:()=>dv,meta:()=>Pv,nan:()=>yv,nanoid:()=>xg,nativeEnum:()=>mv,never:()=>ea,nonoptional:()=>jd,null:()=>pd,nullable:()=>Ir,nullish:()=>vv,number:()=>sd,object:()=>iv,optional:()=>Dt,partialRecord:()=>cv,pipe:()=>Do,prefault:()=>Cd,preprocess:()=>Ov,promise:()=>kv,readonly:()=>Gd,record:()=>wd,refine:()=>Jd,set:()=>pv,strictObject:()=>ov,string:()=>wr,stringFormat:()=>Mg,stringbool:()=>Av,success:()=>hv,superRefine:()=>Xd,symbol:()=>Yg,templateLiteral:()=>$v,transform:()=>na,tuple:()=>xd,uint32:()=>Wg,uint64:()=>qg,ulid:()=>Sg,undefined:()=>Qg,union:()=>Tn,unknown:()=>zt,url:()=>_g,uuid:()=>vg,uuidv4:()=>hg,uuidv6:()=>yg,uuidv7:()=>bg,void:()=>tv,xid:()=>Pg,xor:()=>sv});var Oo={};Ke(Oo,{endsWith:()=>dn,gt:()=>Me,gte:()=>we,includes:()=>cn,length:()=>Ot,lowercase:()=>sn,lt:()=>Re,lte:()=>xe,maxLength:()=>Et,maxSize:()=>st,mime:()=>mn,minLength:()=>qe,minSize:()=>Ze,multipleOf:()=>at,negative:()=>ko,nonnegative:()=>wo,nonpositive:()=>xo,normalize:()=>fn,overwrite:()=>De,positive:()=>$o,properties:()=>pn,property:()=>Io,regex:()=>an,size:()=>At,slugify:()=>yn,startsWith:()=>ln,toLowerCase:()=>vn,toUpperCase:()=>hn,trim:()=>gn,uppercase:()=>un});var pg=new WeakSet([Object.prototype,Error.prototype]);function No(e,n,i){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get(){let o=i(this);return Object.defineProperty(this,n,{value:o,configurable:!0,writable:!0}),o},set(o){Object.defineProperty(this,n,{value:o,configurable:!0,writable:!0})}})}var mg=(e,n)=>{Ba.init(e,n),e.name="ZodError";let i=Object.getPrototypeOf(e);pg.has(i)||(pg.add(i),No(i,"format",o=>t=>Xn(o,t)),No(i,"flatten",o=>t=>Jn(o,t)),No(i,"addIssue",o=>t=>{o.issues.push(t),o.message=JSON.stringify(o.issues,Bt,2)}),No(i,"addIssues",o=>t=>{o.issues.push(...t),o.message=JSON.stringify(o.issues,Bt,2)}),Object.defineProperty(i,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},gx=v("ZodError",mg),ke=v("ZodError",mg,void 0,{Parent:Error});var Hl=Xt(ke),Kl=qt(ke),Wl=Yt(ke),Jl=Qt(ke),Xl=ai(ke),ql=si(ke),Yl=ui(ke),Ql=ci(ke),ed=li(ke),td=di(ke),nd=pi(ke),rd=mi(ke);function hx(){oe.localeError||ee(Bi())}function Ct(){oe.memoizer||ee({memoizer:fr()})}var M=v("ZodType",(e,n)=>(hx(),U.init(e,n),e.def=n,e.type=n.type,e),{check(...e){let n=this.def;return this.clone(_.mergeDefs(n,{checks:[...n.checks??[],...e.map(i=>typeof i=="function"?{_zod:{check:i,def:{check:"custom"},onattach:[]}}:i)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,n){return H(this,e,n)},brand(){return this},register(e,n){return e.add(this,n),this},refine(e,n){return this.check(Jd(e,n))},superRefine(e,n){return this.check(Xd(e,n))},overwrite(e){return this.check(De(e))},optional(){return Dt(this)},exactOptional(){return Ed(this)},nullable(){return Ir(this)},nullish(){return Dt(Ir(this))},nonoptional(e){return jd(this,e)},array(){return Tr(this)},or(e){return Tn([this,e])},and(e){return $d(this,e)},transform(e){return Do(this,na(e))},default(e){return zd(this,e)},prefault(e){return Cd(this,e)},catch(e){return Rd(this,e)},pipe(e){return Do(this,e)},readonly(){return Gd(this)},describe(e){let n=this.clone();return ue.add(n,{description:e}),n},meta(...e){if(e.length===0)return ue.get(this);let n=this.clone();return ue.add(n,e[0]),n},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...n){return n.length===0?e(this):e(this,...n)},get"~standard"(){return _.hide(this,"~standard",{...wi(this),jsonSchema:{input:bn(this,"input"),output:bn(this,"output")}})},set"~standard"(e){_.own(this,"~standard",e)},parse:function e(n,i){return Hl(this,n,i,{callee:e})},parseAsync:async function e(n,i){return await Kl(this,n,i,{callee:e})},safeParse(e,n){return Wl(this,e,n)},async safeParseAsync(e,n){return Jl(this,e,n)},get spa(){return this?.safeParseAsync},set spa(e){_.own(this,"spa",e)},validate(e,n){return qn(this,e,n)},validateAsync(e,n){return Yn(this,e,n)},encode:function e(n,i){return Xl(this,n,i,{callee:e})},decode:function e(n,i){return ql(this,n,i,{callee:e})},encodeAsync:async function e(n,i){return await Yl(this,n,i,{callee:e})},decodeAsync:async function e(n,i){return await Ql(this,n,i,{callee:e})},safeEncode(e,n){return ed(this,e,n)},safeDecode(e,n){return td(this,e,n)},async safeEncodeAsync(e,n){return nd(this,e,n)},async safeDecodeAsync(e,n){return rd(this,e,n)},toJSONSchema(e){return ol(this,{})(e)},get description(){return ue.get(this)?.description},get _def(){return this._zod.def}}),Co=v("_ZodString",(e,n)=>{It.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ul(e,i,o,t)},_.derived({format:e=>ie(e).format??null,minLength:e=>ie(e).minimum??null,maxLength:e=>ie(e).maximum??null},{regex(...e){return this.check(an(...e))},includes(...e){return this.check(cn(...e))},startsWith(...e){return this.check(ln(...e))},endsWith(...e){return this.check(dn(...e))},min(...e){return this.check(qe(...e))},max(...e){return this.check(Et(...e))},length(...e){return this.check(Ot(...e))},nonempty(...e){return this.check(qe(1,...e))},lowercase(e){return this.check(sn(e))},uppercase(e){return this.check(un(e))},trim(){return this.check(gn())},normalize(...e){return this.check(fn(...e))},toLowerCase(){return this.check(vn())},toUpperCase(){return this.check(hn())},slugify(){return this.check(yn())}})),wn=v("ZodString",(e,n)=>{It.init(e,n),Co.init(e,n)},{email(e){return this.check(Qi(jo,e))},url(e){return this.check(hr(Sr,e))},jwt(e){return this.check(_o(Yo,e))},emoji(e){return this.check(oo(Uo,e))},guid(e){return this.check(eo(Lo,e))},uuid(e){return this.check(to(Ve,e))},uuidv4(e){return this.check(no(Ve,e))},uuidv6(e){return this.check(ro(Ve,e))},uuidv7(e){return this.check(io(Ve,e))},nanoid(e){return this.check(ao(Ro,e))},cuid(e){return this.check(so(Mo,e))},cuid2(e){return this.check(uo(Zo,e))},ulid(e){return this.check(co(Vo,e))},base64(e){return this.check(ho(Jo,e))},base64url(e){return this.check(yo(Xo,e))},xid(e){return this.check(lo(Go,e))},ksuid(e){return this.check(po(Fo,e))},ipv4(e){return this.check(mo(Bo,e))},ipv6(e){return this.check(fo(Ho,e))},cidrv4(e){return this.check(go(Ko,e))},cidrv6(e){return this.check(vo(Wo,e))},e164(e){return this.check(bo(qo,e))},datetime(e){return this.check(yr(dt,e))},date(e){return this.check(br(pt,e))},time(e){return this.check(_r(mt,e))},duration(e){return this.check($r(ft,e))}});function wr(e){return $c(wn,e)}var X=v("ZodStringFormat",(e,n)=>{K.init(e,n),Co.init(e,n)}),dt=v("ZodISODateTime",(e,n)=>{du.init(e,n),X.init(e,n)}),pt=v("ZodISODate",(e,n)=>{pu.init(e,n),X.init(e,n)}),mt=v("ZodISOTime",(e,n)=>{mu.init(e,n),X.init(e,n)}),ft=v("ZodISODuration",(e,n)=>{fu.init(e,n),X.init(e,n)}),jo=v("ZodEmail",(e,n)=>{eu.init(e,n),X.init(e,n)});function fg(e){return Qi(jo,e)}var Lo=v("ZodGUID",(e,n)=>{Ys.init(e,n),X.init(e,n)});function gg(e){return eo(Lo,e)}var Ve=v("ZodUUID",(e,n)=>{Qs.init(e,n),X.init(e,n)});function vg(e){return to(Ve,e)}function hg(e){return no(Ve,e)}function yg(e){return ro(Ve,e)}function bg(e){return io(Ve,e)}var Sr=v("ZodURL",(e,n)=>{ru.init(e,n),X.init(e,n)});function _g(e){return hr(Sr,e)}function $g(e){return hr(Sr,{protocol:Qn,hostname:fs,..._.normalizeParams(e)})}var Uo=v("ZodEmoji",(e,n)=>{iu.init(e,n),X.init(e,n)});function kg(e){return oo(Uo,e)}var Ro=v("ZodNanoID",(e,n)=>{ou.init(e,n),X.init(e,n)});function xg(e){return ao(Ro,e)}var Mo=v("ZodCUID",(e,n)=>{au.init(e,n),X.init(e,n)});function wg(e){return so(Mo,e)}var Zo=v("ZodCUID2",(e,n)=>{su.init(e,n),X.init(e,n)});function Ig(e){return uo(Zo,e)}var Vo=v("ZodULID",(e,n)=>{uu.init(e,n),X.init(e,n)});function Sg(e){return co(Vo,e)}var Go=v("ZodXID",(e,n)=>{cu.init(e,n),X.init(e,n)});function Pg(e){return lo(Go,e)}var Fo=v("ZodKSUID",(e,n)=>{lu.init(e,n),X.init(e,n)});function Tg(e){return po(Fo,e)}var Bo=v("ZodIPv4",(e,n)=>{gu.init(e,n),X.init(e,n)});function Ag(e){return mo(Bo,e)}var id=v("ZodMAC",(e,n)=>{hu.init(e,n),X.init(e,n)});function Eg(e){return xc(id,e)}var Ho=v("ZodIPv6",(e,n)=>{vu.init(e,n),X.init(e,n)});function Og(e){return fo(Ho,e)}var Ko=v("ZodCIDRv4",(e,n)=>{yu.init(e,n),X.init(e,n)});function Ng(e){return go(Ko,e)}var Wo=v("ZodCIDRv6",(e,n)=>{bu.init(e,n),X.init(e,n)});function zg(e){return vo(Wo,e)}var Jo=v("ZodBase64",(e,n)=>{_u.init(e,n),X.init(e,n)});function Dg(e){return ho(Jo,e)}var Xo=v("ZodBase64URL",(e,n)=>{$u.init(e,n),X.init(e,n)});function Cg(e){return yo(Xo,e)}var qo=v("ZodE164",(e,n)=>{ku.init(e,n),X.init(e,n)});function jg(e){return bo(qo,e)}var od=v("ZodCreditCard",(e,n)=>{xu.init(e,n),X.init(e,n)});function Lg(e){return wc(od,e)}var ad=v("ZodIBAN",(e,n)=>{wu.init(e,n),X.init(e,n)});function Ug(e){return Ic(ad,e)}var Yo=v("ZodJWT",(e,n)=>{Iu.init(e,n),X.init(e,n)});function Rg(e){return _o(Yo,e)}var jt=v("ZodCustomStringFormat",(e,n)=>{Su.init(e,n),X.init(e,n)});function Mg(e,n,i={}){return Nt(jt,e,n,i)}function Zg(e){return Nt(jt,"hostname",ms,e)}function Vg(e){return Nt(jt,"hex",Ts,e)}function Gg(e){return Nt(jt,"currency_code",vs,e)}function Fg(e,n){let i=n?.enc??"hex",o=`${e}_${i}`,t=Pe[o];if(!t)throw new Error(`Unrecognized hash format: ${o}`);return Nt(jt,o,t,n)}var In=v("ZodNumber",(e,n)=>{Di.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>cl(e,i,o,t),e.isFinite=!0},_.derived({minValue:e=>{let{minimum:n,exclusiveMinimum:i}=ie(e);return Math.max(n??Number.NEGATIVE_INFINITY,i??Number.NEGATIVE_INFINITY)},maxValue:e=>{let{maximum:n,exclusiveMaximum:i}=ie(e);return Math.min(n??Number.POSITIVE_INFINITY,i??Number.POSITIVE_INFINITY)},isInt:e=>{let{isInt:n,multipleOf:i}=ie(e);return!!n||!!i?.some(Number.isSafeInteger)},format:e=>ie(e).format??null},{gt(e,n){return this.check(Me(e,n))},gte(e,n){return this.check(we(e,n))},min(e,n){return this.check(we(e,n))},lt(e,n){return this.check(Re(e,n))},lte(e,n){return this.check(xe(e,n))},max(e,n){return this.check(xe(e,n))},int(e){return this.check(zo(e))},safe(e){return this.check(zo(e))},positive(e){return this.check(Me(0,e))},nonnegative(e){return this.check(we(0,e))},negative(e){return this.check(Re(0,e))},nonpositive(e){return this.check(xe(0,e))},multipleOf(e,n){return this.check(at(e,n))},step(e,n){return this.check(at(e,n))},finite(){return this}}));function sd(e){return Pc(In,e)}var Lt=v("ZodNumberFormat",(e,n)=>{Pu.init(e,n),In.init(e,n)});function zo(e){return Ac(Lt,e)}function Bg(e){return Ec(Lt,e)}function Hg(e){return Oc(Lt,e)}function Kg(e){return Nc(Lt,e)}function Wg(e){return zc(Lt,e)}var Sn=v("ZodBoolean",(e,n)=>{ur.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ll(e,i,o,t)});function ud(e){return Dc(Sn,e)}var Pn=v("ZodBigInt",(e,n)=>{Ci.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>dl(e,i,o,t)},_.derived({minValue:e=>ie(e).minimum??null,maxValue:e=>ie(e).maximum??null,format:e=>ie(e).format??null},{gte(e,n){return this.check(we(e,n))},min(e,n){return this.check(we(e,n))},gt(e,n){return this.check(Me(e,n))},lt(e,n){return this.check(Re(e,n))},lte(e,n){return this.check(xe(e,n))},max(e,n){return this.check(xe(e,n))},positive(e){return this.check(Me(BigInt(0),e))},negative(e){return this.check(Re(BigInt(0),e))},nonpositive(e){return this.check(xe(BigInt(0),e))},nonnegative(e){return this.check(we(BigInt(0),e))},multipleOf(e,n){return this.check(at(e,n))}}));function Jg(e){return jc(Pn,e)}var Qo=v("ZodBigIntFormat",(e,n)=>{Tu.init(e,n),Pn.init(e,n)});function Xg(e){return Uc(Qo,e)}function qg(e){return Rc(Qo,e)}var cd=v("ZodSymbol",(e,n)=>{Au.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>pl(e,i,o,t)});function Yg(e){return Mc(cd,e)}var ld=v("ZodUndefined",(e,n)=>{Eu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>fl(e,i,o,t)});function Qg(e){return Zc(ld,e)}var dd=v("ZodNull",(e,n)=>{Ou.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ml(e,i,o,t)});function pd(e){return Vc(dd,e)}var md=v("ZodAny",(e,n)=>{Nu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>hl(e,i,o,t)});function ev(){return Gc(md)}var fd=v("ZodUnknown",(e,n)=>{zu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>yl(e,i,o,t)});function zt(){return Fc(fd)}var gd=v("ZodNever",(e,n)=>{Du.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>vl(e,i,o,t)});function ea(e){return Bc(gd,e)}var vd=v("ZodVoid",(e,n)=>{Cu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>gl(e,i,o,t)});function tv(e){return Hc(vd,e)}var Pr=v("ZodDate",(e,n)=>{ju.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>bl(e,i,o,t),e.min=(i,o)=>e.check(we(i,o)),e.max=(i,o)=>e.check(xe(i,o))},_.derived({minDate:e=>{let{minimum:n}=ie(e);return n?new Date(n):null},maxDate:e=>{let{maximum:n}=ie(e);return n?new Date(n):null}},{}));function nv(e){return Kc(Pr,e)}var hd=v("ZodArray",(e,n)=>{Ct(),Uu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ol(e,i,o,t),e.element=n.element},{min(e,n){return this.check(qe(e,n))},nonempty(e){return this.check(qe(1,e))},max(e,n){return this.check(Et(e,n))},length(e,n){return this.check(Ot(e,n))},unwrap(){return this.element}});function Tr(e,n){return Xc(hd,e,n)}function rv(e){let n=e._zod.def.shape;return ta(Object.keys(n))}var Ar=v("ZodObject",(e,n)=>{Ct(),Ru.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Nl(e,i,o,t),_.installLazyProp(e,"shape",i=>i._zod.def.shape,!1)},{keyof(){return ta(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(_.mergeDefs(this._zod.def,{catchall:e}))},passthrough(){return this.clone(_.mergeDefs(this._zod.def,{catchall:zt()}))},loose(){return this.clone(_.mergeDefs(this._zod.def,{catchall:zt()}))},strict(){return this.clone(_.mergeDefs(this._zod.def,{catchall:ea()}))},strip(){return this.clone(_.mergeDefs(this._zod.def,{catchall:void 0}))},extend(e){return _.extend(this,e)},safeExtend(e){return _.safeExtend(this,e)},merge(e){return _.merge(this,e)},pick(e){return _.pick(this,e)},omit(e){return _.omit(this,e)},partial(...e){return _.partial(Or,this,e[0])},exactPartial(...e){return _.partial(ra,this,e[0],"exactPartial")},required(...e){return _.required(ia,this,e[0])}});function iv(e,n){let i={type:"object",shape:e??{},..._.normalizeParams(n)};return new Ar(i)}function ov(e,n){return new Ar({type:"object",shape:e,catchall:ea(),..._.normalizeParams(n)})}function av(e,n){return new Ar({type:"object",shape:e,catchall:zt(),..._.normalizeParams(n)})}var Er=v("ZodUnion",(e,n)=>{cr.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Po(e,i,o,t),e.options=n.options});function Tn(e,n){return new Er({type:"union",options:e,..._.normalizeParams(n)})}var yd=v("ZodXor",(e,n)=>{Er.init(e,n),Mu.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Po(e,i,o,t),e.options=n.options});function sv(e,n){return new yd({type:"union",options:e,inclusive:!1,..._.normalizeParams(n)})}var bd=v("ZodDiscriminatedUnion",(e,n)=>{Er.init(e,n),Vu.init(e,n)});function uv(e,n,i){return new bd({type:"union",options:n,discriminator:e,..._.normalizeParams(i)})}var _d=v("ZodIntersection",(e,n)=>{Gu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>zl(e,i,o,t)});function $d(e,n){return new _d({type:"intersection",left:e,right:n})}var kd=v("ZodTuple",(e,n)=>{Ct(),ji.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Dl(e,i,o,t)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw new Error(".partial() cannot be used on tuple schemas containing refinements");return this.clone({...e,items:e.items.map(n=>new Or({type:"optional",innerType:n}))})}});function xd(e,n,i){let o=n instanceof U,t=o?i:n,r=o?n:null;return new kd({type:"tuple",items:e,rest:r,..._.normalizeParams(t)})}var kn=v("ZodRecord",(e,n)=>{Ct(),Fu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Cl(e,i,o,t),e.keyType=n.keyType,e.valueType=n.valueType});function wd(e,n,i){return!n||!n._zod?new kn({type:"record",keyType:wr(),valueType:e,..._.normalizeParams(n)}):new kn({type:"record",keyType:e,valueType:n,..._.normalizeParams(i)})}function cv(e,n,i){return new kn({type:"record",keyType:e,valueType:n,..._.normalizeParams(i),partial:!0})}function lv(e,n,i){return new kn({type:"record",keyType:e,valueType:n,mode:"loose",..._.normalizeParams(i)})}var Id=v("ZodMap",(e,n)=>{Ct(),Bu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Al(e,i,o,t),e.keyType=n.keyType,e.valueType=n.valueType,e.min=(...i)=>e.check(Ze(...i)),e.nonempty=i=>e.check(Ze(1,i)),e.max=(...i)=>e.check(st(...i)),e.size=(...i)=>e.check(At(...i))});function dv(e,n,i){return new Id({type:"map",keyType:e,valueType:n,..._.normalizeParams(i)})}var Sd=v("ZodSet",(e,n)=>{Ct(),Hu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>El(e,i,o,t),e.min=(...i)=>e.check(Ze(...i)),e.nonempty=i=>e.check(Ze(1,i)),e.max=(...i)=>e.check(st(...i)),e.size=(...i)=>e.check(At(...i))});function pv(e,n){return new Sd({type:"set",valueType:e,..._.normalizeParams(n)})}var xn=v("ZodEnum",(e,n)=>{Ku.init(e,n),M.init(e,n),e._zod.processJSONSchema=(o,t,r)=>_l(e,o,t,r),e.enum=n.entries,e.options=[...e._zod.values];let i=new Set(Object.keys(n.entries));e.extract=(o,t)=>{let r={};for(let a of o)if(i.has(a))r[a]=n.entries[a];else throw new Error(`Key ${a} not found in enum`);return new xn({...n,checks:[],..._.normalizeParams(t),entries:r})},e.exclude=(o,t)=>{let r={...n.entries};for(let a of o)if(i.has(a))delete r[a];else throw new Error(`Key ${a} not found in enum`);return new xn({...n,checks:[],..._.normalizeParams(t),entries:r})}});function ta(e,n){let i=Array.isArray(e)?Object.fromEntries(e.map(o=>[o,o])):e;return new xn({type:"enum",entries:i,..._.normalizeParams(n)})}function mv(e,n){return new xn({type:"enum",entries:e,..._.normalizeParams(n)})}var Pd=v("ZodLiteral",(e,n)=>{Wu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>$l(e,i,o,t),e.values=new Set(n.values),Object.defineProperty(e,"value",{get(){if(n.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return n.values[0]}})});function fv(e,n){return new Pd({type:"literal",values:Array.isArray(e)?e:[e],..._.normalizeParams(n)})}var Td=v("ZodFile",(e,n)=>{Ju.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>wl(e,i,o,t),e.min=(i,o)=>e.check(Ze(i,o)),e.max=(i,o)=>e.check(st(i,o)),e.mime=(i,o)=>e.check(mn(Array.isArray(i)?i:[i],o))});function gv(e){return qc(Td,e)}var Ad=v("ZodTransform",(e,n)=>{Ct(),Xu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Tl(e,i,o,t),e._zod.parse=(i,o)=>{if(o.direction==="backward")throw new it(e.constructor.name);i.addIssue=r=>{if(typeof r=="string")i.issues.push(_.issue(r,i.value,n));else{let a=r;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),"input"in a||(a.input=i.value),a.inst??(a.inst=e),i.issues.push(_.issue(a))}};let t=n.transform(i.value,i);return t instanceof Promise?t.then(r=>(i.value=r,i)):(i.value=t,i)}});function na(e){return new Ad({type:"transform",transform:e})}var Or=v("ZodOptional",(e,n)=>{Li.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>To(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Dt(e){return new Or({type:"optional",innerType:e})}var ra=v("ZodExactOptional",(e,n)=>{qu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>To(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new ra({type:"optional",innerType:e})}var Od=v("ZodNullable",(e,n)=>{Yu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>jl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Ir(e){return new Od({type:"nullable",innerType:e})}function vv(e){return Dt(Ir(e))}var Nd=v("ZodDefault",(e,n)=>{Qu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Rl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function zd(e,n){return new Nd({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():_.shallowClone(n)}})}var Dd=v("ZodPrefault",(e,n)=>{ec.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ml(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Cd(e,n){return new Dd({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():_.shallowClone(n)}})}var ia=v("ZodNonOptional",(e,n)=>{tc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ll(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function jd(e,n){return new ia({type:"nonoptional",innerType:e,..._.normalizeParams(n)})}var Ld=v("ZodSuccess",(e,n)=>{nc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Il(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function hv(e){return new Ld({type:"success",innerType:e})}var Ud=v("ZodCatch",(e,n)=>{rc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Zl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Rd(e,n){return new Ud({type:"catch",innerType:e,catchValue:typeof n=="function"?n:_.constantCatch(n)})}var Md=v("ZodNaN",(e,n)=>{ic.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>kl(e,i,o,t)});function yv(e){return Jc(Md,e)}var Nr=v("ZodPipe",(e,n)=>{Ui.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Vl(e,i,o,t),e.in=n.in,e.out=n.out});function Do(e,n){return new Nr({type:"pipe",in:e,out:n})}var zr=v("ZodCodec",(e,n)=>{Nr.init(e,n),lr.init(e,n)});function bv(e,n,i){return new zr({type:"pipe",in:e,out:n,transform:i.decode,reverseTransform:i.encode})}function _v(e){let n=e._zod.def;return new zr({type:"pipe",in:n.out,out:n.in,transform:n.reverseTransform,reverseTransform:n.transform})}var Zd=v("ZodPreprocess",(e,n)=>{Nr.init(e,n),oc.init(e,n)}),Vd=v("ZodReadonly",(e,n)=>{ac.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Gl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Gd(e){return new Vd({type:"readonly",innerType:e})}var Fd=v("ZodTemplateLiteral",(e,n)=>{sc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>xl(e,i,o,t)});function $v(e,n){return new Fd({type:"template_literal",parts:e,..._.normalizeParams(n)})}var Bd=v("ZodLazy",(e,n)=>{dr.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Bl(e,i,o,t),e.unwrap=()=>e._zod.def.getter()});function Hd(e){return new Bd({type:"lazy",getter:e})}var Kd=v("ZodPromise",(e,n)=>{cc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Fl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function kv(e){return new Kd({type:"promise",innerType:e})}var Wd=v("ZodFunction",(e,n)=>{uc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Pl(e,i,o,t)});function xv(e){return new Wd({type:"function",input:Array.isArray(e?.input)?xd(e?.input):e?.input??Tr(zt()),output:e?.output??zt()})}var Dr=v("ZodCustom",(e,n)=>{lc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Sl(e,i,o,t)});function wv(e){let n=new q({check:"custom"});return n._zod.check=e,n}function Iv(e,n){return Yc(Dr,e??(()=>!0),n)}function Jd(e,n={}){return Qc(Dr,e,n)}function Xd(e,n){return el(e,n)}var Sv=tl,Pv=nl,qd=v("ZodInstanceOf",(e,n)=>{Dr.init(e,n)},{properties(e,n){return this.check(pn(e,n))}});function Tv(e,n={}){let i=new qd({type:"custom",check:"custom",fn:o=>o instanceof e,abort:!0,..._.normalizeParams(n)});return i._zod.bag.Class=e,i._zod.check=o=>{o.value instanceof e||o.issues.push({code:"invalid_type",expected:e.name,input:o.value,inst:i,path:[...i._zod.def.path??[]]})},i}var Av=(...e)=>rl({Codec:zr,Boolean:Sn,String:wn},...e);function Ev(e){let n=Hd(()=>Tn([wr(e),sd(),ud(),pd(),Tr(n),wd(wr(),n)]));return n}function Ov(e,n){return new Zd({type:"pipe",in:na(e),out:n})}var yx={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};function bx(e){ee({customError:e})}function _x(){return ee().customError}var Yd;Yd||(Yd={});var Cr={};Ke(Cr,{ZodISODate:()=>pt,ZodISODateTime:()=>dt,ZodISODuration:()=>ft,ZodISOTime:()=>mt,date:()=>kx,datetime:()=>$x,duration:()=>wx,time:()=>xx});function $x(e){return yr(dt,e)}function kx(e){return br(pt,e)}function xx(e){return _r(mt,e)}function wx(e){return $r(ft,e)}var P={...An,...Oo,iso:Cr},Ix=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"]);function Sx(e,n){let i=e.$schema;return i==="https://json-schema.org/draft/2020-12/schema"?"draft-2020-12":i==="http://json-schema.org/draft-07/schema#"?"draft-7":i==="http://json-schema.org/draft-04/schema#"?"draft-4":n??"draft-2020-12"}function Nv(e,n){return e.map((i,o)=>oo).check(o=>{let t=o.value;if(typeof t!="object"||t===null||Array.isArray(t))return;let r=Object.getOwnPropertyNames(t);if(n.minProperties!==void 0&&r.length=${n.minProperties} properties`,input:t,inst:e,continue:!0}),n.maxProperties!==void 0&&r.length>n.maxProperties&&o.issues.push({origin:"object",code:"too_big",maximum:n.maxProperties,inclusive:!0,message:`Too big: expected object to have <=${n.maxProperties} properties`,input:t,inst:e,continue:!0}),n.keySchema)for(let a of r){let s=n.keySchema.safeParse(a);s.success||o.issues.push({code:"invalid_key",origin:"record",issues:s.error.issues,input:a,path:[a],continue:!0})}}).pipe(e)}function Qd(e,n){if(e===null)return"z";let i=typeof e;if(i!=="object"){if(i==="number"&&Number.isNaN(e))return null;let o=String(e);return`${i[0]}${o.length}:${o}`}if(n.has(e))return null;n.add(e);try{if(Array.isArray(e)){let r=[];for(let a of e){let s=Qd(a,n);if(s===null)return null;r.push(s)}return`a${r.length}:[${r.join(",")}]`}let o=Object.keys(e).sort(),t=[];for(let r of o){let a=Qd(e[r],n);if(a===null)return null;t.push(`${r.length}:${r}=${a}`)}return`o${t.length}:{${t.join(",")}}`}finally{n.delete(e)}}var Ex=new Set(["items","prefixItems","additionalItems","additionalProperties","contains","propertyNames","not","if","then","else","allOf","anyOf","oneOf","unevaluatedItems","unevaluatedProperties","contentSchema"]),Ox=new Set(["properties","patternProperties","dependentSchemas","dependencies","$defs","definitions"]);function jr(e){return typeof e!="object"||e===null?!1:Array.isArray(e)?e.some(jr):typeof e.$ref=="string"?!0:Object.entries(e).some(([n,i])=>Ex.has(n)?jr(i):!Ox.has(n)||typeof i!="object"||i===null?!1:Object.values(i).some(jr))}function zv(e){return e===1?"element":"elements"}function Nx(e,n){return P.transform(o=>o).check(o=>{let t=o.value;if(Array.isArray(t)){if(n.uniqueItems===!0){let r=new Map;for(let a=0;a=a)break;sn.maxContains&&o.issues.push({code:"custom",message:`Array must contain at most ${n.maxContains} matching ${zv(n.maxContains)}`,input:t,continue:!0})}}}).pipe(e)}function Dv(e,n){if(e!==!1)return e===void 0||e===!0?P.any():fe(e,n)}var zx=/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;function Cv(e,n){if(e.not!==void 0){if(typeof e.not=="object"&&Object.keys(e.not).length===0)return P.never();throw new Error("not is not supported in Zod (except { not: {} } for never)")}if(e.unevaluatedItems!==void 0)throw new Error("unevaluatedItems is not supported");if(e.unevaluatedProperties!==void 0)throw new Error("unevaluatedProperties is not supported");if(e.if!==void 0||e.then!==void 0||e.else!==void 0)throw new Error("Conditional schemas (if/then/else) are not supported");if(e.dependentSchemas!==void 0||e.dependentRequired!==void 0)throw new Error("dependentSchemas and dependentRequired are not supported");if(e.$ref){let t=e.$ref;if(n.refs.has(t))return n.refs.get(t);if(n.processing.has(t))return P.lazy(()=>{if(!n.refs.has(t))throw new Error(`Circular reference not resolved: ${t}`);return n.refs.get(t)});n.processing.add(t);let r=Tx(t,n),a=fe(r,n);return n.refs.set(t,a),n.processing.delete(t),a}if(e.enum!==void 0){let t=e.enum;if(n.version==="openapi-3.0"&&e.nullable===!0&&t.length===1&&t[0]===null)return P.null();if(t.length===0)return P.never();if(t.length===1)return P.literal(t[0]);if(t.every(a=>typeof a=="string"))return P.enum(t);let r=t.map(a=>P.literal(a));return r.length<2?r[0]:P.union([r[0],r[1],...r.slice(2)])}if(e.const!==void 0)return P.literal(e.const);let i=e.type;if(Array.isArray(i)){let t=i.map(r=>{let a={...e,type:r};return Cv(a,n)});return t.length===0?P.never():t.length===1?t[0]:P.union(t)}if(!i)return P.any();let o;switch(i){case"string":{let t=P.string();if(e.format){let r=e.format;r==="email"?t=t.check(P.email()):r==="uri"||r==="uri-reference"?t=t.check(P.url()):r==="uuid"||r==="guid"?t=t.check(P.uuid()):r==="date-time"?t=t.check(P.iso.datetime({offset:!0})):r==="date"?t=t.check(P.iso.date()):r==="time"?t=t.check(P.regex(zx)):r==="duration"?t=t.check(P.iso.duration()):r==="hostname"?t=t.check(P.hostname()):r==="ipv4"?t=t.check(P.ipv4()):r==="ipv6"?t=t.check(P.ipv6()):r==="mac"?t=t.check(P.mac()):r==="cidr"?t=t.check(P.cidrv4()):r==="cidr-v6"?t=t.check(P.cidrv6()):r==="base64"?t=t.check(P.base64()):r==="base64url"?t=t.check(P.base64url()):r==="e164"?t=t.check(P.e164()):r==="credit_card"?t=t.check(P.creditCard()):r==="iban"?t=t.check(P.iban()):r==="jwt"?t=t.check(P.jwt()):r==="emoji"?t=t.check(P.emoji()):r==="nanoid"?t=t.check(P.nanoid()):r==="cuid"?t=t.check(P.cuid()):r==="cuid2"?t=t.check(P.cuid2()):r==="ulid"?t=t.check(P.ulid()):r==="xid"?t=t.check(P.xid()):r==="ksuid"&&(t=t.check(P.ksuid()))}typeof e.minLength=="number"&&(t=t.min(e.minLength)),typeof e.maxLength=="number"&&(t=t.max(e.maxLength)),e.pattern&&(t=t.regex(new RegExp(e.pattern))),o=t;break}case"number":case"integer":{let t=i==="integer"?P.number().int():P.number();typeof e.minimum=="number"&&e.exclusiveMinimum!==!0&&(t=t.min(e.minimum)),typeof e.maximum=="number"&&e.exclusiveMaximum!==!0&&(t=t.max(e.maximum)),typeof e.exclusiveMinimum=="number"?t=t.gt(e.exclusiveMinimum):e.exclusiveMinimum===!0&&typeof e.minimum=="number"&&(t=t.gt(e.minimum)),typeof e.exclusiveMaximum=="number"?t=t.lt(e.exclusiveMaximum):e.exclusiveMaximum===!0&&typeof e.maximum=="number"&&(t=t.lt(e.maximum)),typeof e.multipleOf=="number"&&(t=t.multipleOf(e.multipleOf)),o=t;break}case"boolean":{o=P.boolean();break}case"null":{o=P.null();break}case"object":{let t={},r=e.properties||{},a=new Set(e.required||[]),s=typeof e.additionalProperties=="object"?fe(e.additionalProperties,n):void 0;for(let[p,m]of Object.entries(r)){let f=fe(m,n);se(t,p,a.has(p)?f:f.optional())}if(e.patternProperties){let p=e.patternProperties,m=Object.keys(p),f=[];for(let y of m){let x=fe(p[y],n),I=P.string().regex(new RegExp(y));f.push(P.looseRecord(I,x))}let g=[];if(Object.keys(t).length>0&&g.push(P.object(t).passthrough()),g.push(...f),g.length===0)o=P.object({}).passthrough();else if(g.length===1)o=g[0];else{let y=P.intersection(g[0],g[1]);for(let x=2;xnew RegExp(b)),I=o;o=o.check(b=>{if(!Ie(b.value))return;let T=[];for(let E of Object.keys(b.value))y.includes(E)||x.some(z=>z.test(E))||T.push(E);T.length&&b.issues.push({code:"unrecognized_keys",keys:T,input:b.value,inst:I})})}}else{let p=P.object(t);e.additionalProperties===!1?o=p.strict():s?o=p.catchall(s):o=p.passthrough()}let u=e.propertyNames!==void 0&&e.propertyNames!==!0,c=typeof e.minProperties=="number"?e.minProperties:void 0,d=typeof e.maxProperties=="number"?e.maxProperties:void 0;if(u||c!==void 0||d!==void 0){let p;if(u){let m=typeof e.propertyNames=="object"&&e.propertyNames.type===void 0?{type:"string",...e.propertyNames}:e.propertyNames;p=fe(m,n)}o=Ax(o,{keySchema:p,minProperties:c,maxProperties:d})}break}case"array":{let t=e.prefixItems,r=e.items;if(t&&Array.isArray(t)){let a=typeof e.minItems=="number"?e.minItems:0,s=t.map(p=>fe(p,n)),u=Nv(s,a),c=Array.isArray(r)?void 0:Dv(r,n),d=P.tuple(u);o=c?d.rest(c):d,typeof e.minItems=="number"&&(o=o.check(P.minLength(e.minItems))),typeof e.maxItems=="number"&&(o=o.check(P.maxLength(e.maxItems)))}else if(Array.isArray(r)){let a=typeof e.minItems=="number"?e.minItems:0,s=r.map(p=>fe(p,n)),u=Nv(s,a),c=Dv(e.additionalItems,n),d=P.tuple(u);o=c?d.rest(c):d,typeof e.minItems=="number"&&(o=o.check(P.minLength(e.minItems))),typeof e.maxItems=="number"&&(o=o.check(P.maxLength(e.maxItems)))}else if(r!==void 0){let a=fe(r,n),s=P.array(a);typeof e.minItems=="number"&&(s=s.min(e.minItems)),typeof e.maxItems=="number"&&(s=s.max(e.maxItems)),o=s}else o=P.array(P.any());(e.uniqueItems===!0||e.contains!==void 0)&&(o=Nx(o,{uniqueItems:e.uniqueItems===!0,containsSchema:e.contains!==void 0?fe(e.contains,n):void 0,minContains:typeof e.minContains=="number"?e.minContains:void 0,maxContains:typeof e.maxContains=="number"?e.maxContains:void 0}));break}default:throw new Error(`Unsupported type: ${i}`)}return o}function fe(e,n){if(typeof e=="boolean")return e?P.any():P.never();let i=Cv(e,n),o=e.type||e.enum!==void 0||e.const!==void 0;if(e.anyOf&&Array.isArray(e.anyOf)){let s=e.anyOf.map(c=>fe(c,n)),u=P.union(s);i=o?P.intersection(i,u):u}if(e.oneOf&&Array.isArray(e.oneOf)){let s=e.oneOf.map(c=>fe(c,n)),u=P.xor(s);i=o?P.intersection(i,u):u}if(e.allOf&&Array.isArray(e.allOf))if(e.allOf.length===0)i=o?i:P.any();else{let s=o?i:fe(e.allOf[0],n),u=o?0:1;for(let c=u;c0&&n.registry.add(i,t),e.description&&(i=i.describe(e.description)),i}function jv(e,n){if(typeof e=="boolean")return e?P.any():P.never();let i;try{i=JSON.parse(JSON.stringify(e))}catch{throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas")}let o=Sx(i,n?.defaultTarget),t=i.$defs||i.definitions||{},r={version:o,defs:t,refs:new Map,processing:new Set,rootSchema:i,registry:n?.registry??ue};return fe(i,r)}var Lv=Symbol("z.visit/resolving");function Lr(e,n){let i=typeof n=="function"?n:(a,s)=>{let u=n[a._zod.def.type];return u?u(a,s):a},o=new Map;function t(a){let s=o.get(a);if(s===Lv)return new dr({type:"lazy",getter:()=>o.get(a)});if(s!==void 0)return s;o.set(a,Lv);let u=r(a),c=i(u,u!==a);return o.set(a,c),c}function r(a){let s=a._zod.def,u=s.type;switch(u){case"object":{let c=s.shape,d=Object.keys(c),p=!1,m={};for(let g of d){let y=t(c[g]);y!==c[g]&&(p=!0),m[g]=y}let f=s.catchall;return s.catchall&&(f=t(s.catchall),f!==s.catchall&&(p=!0)),p?H(a,{...s,shape:m,catchall:f}):a}case"array":{let c=t(s.element);return c===s.element?a:H(a,{...s,element:c})}case"tuple":{let c=s.items,d=!1,p=[];for(let f of c){let g=t(f);g!==f&&(d=!0),p.push(g)}let m=s.rest;return s.rest&&(m=t(s.rest),m!==s.rest&&(d=!0)),d?H(a,{...s,items:p,rest:m}):a}case"record":case"map":{let c=t(s.keyType),d=t(s.valueType);return c===s.keyType&&d===s.valueType?a:H(a,{...s,keyType:c,valueType:d})}case"set":{let c=t(s.valueType);return c===s.valueType?a:H(a,{...s,valueType:c})}case"union":{let c=s.options,d=!1,p=[];for(let m of c){let f=t(m);f!==m&&(d=!0),p.push(f)}return d?H(a,{...s,options:p}):a}case"intersection":{let c=t(s.left),d=t(s.right);return c===s.left&&d===s.right?a:H(a,{...s,left:c,right:d})}case"optional":case"nullable":case"default":case"prefault":case"catch":case"readonly":case"nonoptional":case"promise":case"success":{let c=t(s.innerType);return c===s.innerType?a:H(a,{...s,innerType:c})}case"pipe":{let c=t(s.in),d=t(s.out);return c===s.in&&d===s.out?a:H(a,{...s,in:c,out:d})}case"function":{let c=t(s.input),d=t(s.output);return c===s.input&&d===s.output?a:H(a,{...s,input:c,output:d})}case"lazy":{let c=s.getter,{_cachedInner:d,...p}=s;return H(a,{...p,getter:()=>t(c())})}case"template_literal":case"string":case"number":case"int":case"boolean":case"bigint":case"symbol":case"undefined":case"null":case"void":case"never":case"any":case"unknown":case"date":case"nan":case"enum":case"literal":case"file":case"transform":case"custom":return a;default:return a}}return t(e)}function Uv(e){return Lr(e,{object:n=>n.partial(),union:n=>{let i=n._zod.def;return i.discriminator===void 0?n:Tn(i.options)}})}function Dx(e,n){if(!n?.length)return e;let i=e._zod.def;return H(e,Ne(i,{checks:[...i.checks??[],...n]}),{parent:!0})}function Rv(e){return Dx(e.out,e.checks)}function Cx(e){return e.in._zod.traits.has("$ZodTransform")?Rv(e):e.in}function Mv(e){return Lr(e,{pipe:n=>Cx(n._zod.def),default:(n,i)=>i?Dt(n._zod.def.innerType):n,catch:(n,i)=>i?n._zod.def.innerType:n})}function Zv(e){return Lr(e,{pipe:n=>Rv(n._zod.def),prefault:(n,i)=>i?n._zod.def.innerType:n})}var ep={};Ke(ep,{bigint:()=>Rx,boolean:()=>Ux,date:()=>Mx,number:()=>Lx,string:()=>jx});function jx(e){return kc(wn,e)}function Lx(e){return Tc(In,e)}function Ux(e){return Cc(Sn,e)}function Rx(e){return Lc(Pn,e)}function Mx(e){return Wc(Pr,e)}var Zx=new Set(["__proto__","prototype","constructor"]),Ut=l.string().min(1).max(256).refine(e=>!Zx.has(e),"reserved storage key"),oa=l.json(),aa=256*1024,Vx=5*1024*1024,Vv=1024,Gv=l.strictObject({key:Ut}),Fv=l.object({value:oa}),Bv=l.strictObject({key:Ut,value:oa}),Hv=l.object({ok:l.literal(!0)}),Kv=l.strictObject({key:Ut}),Wv=l.object({ok:l.literal(!0)}),Jv=l.strictObject({}).optional(),Xv=l.object({keys:l.array(l.string()).max(Vv)}),qv=l.strictObject({key:Ut}),Yv=l.object({value:l.string().nullable()}),Qv=l.strictObject({key:Ut,value:l.string().max(64*1024)}),eh=l.object({ok:l.literal(!0)}),th=l.strictObject({key:Ut}),nh=l.object({ok:l.literal(!0)}),rh=l.strictObject({}).optional(),ih=l.object({status:l.enum(["os-keyring","unavailable"])}),oh=l.strictObject({}).optional(),ah=l.object({settings:l.record(l.string(),oa)}),sh=l.strictObject({key:Ut,value:oa}),uh=l.object({ok:l.literal(!0)});var En="x-orca-enum-since";var Qe="1.4.160",tp="1.4.245";var Ur="1.4.246";var ch=Ur,lh=Ur;var Ce="1.4.248";var Fx="Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.";function dh(e,n,i){return ae(`${e} ${Fx}`,n,i)}function ae(e,n,i){return i?{description:e,"x-orca-since":n,examples:[...i]}:{description:e,"x-orca-since":n}}var gt=["workspace.created","workspace.removed","agent.status.changed","workspace.changed"],tO=gt.length,Bx={"workspace.created":tp,"workspace.removed":tp,"agent.status.changed":Qe,"workspace.changed":lh},sa=new Map([["worktree.created","workspace.created"],["worktree.removed","workspace.removed"]]);var nO=l.object({on:l.enum(gt).meta({...ae("Event delivered to the plugin worker.",Qe),[En]:Bx})}).strict().meta({id:"EventContribution",description:"An event subscription. Requires `main`, the `trusted-worker` execution profile and the capability of the event's domain: `workspace:read` for workspace events, `agent:read` for agent events."});var ge=["worker","panel","editor"],Te=["worker"],On=["panel","editor"],J=e=>e;function ph(e,n){return n==="worker"?e.since:Math.max(e.since,e.framesSince??0)}var Hx=["success","failure","cancellation","superseded"],mh=[...Hx,"interruption","unconfirmed"];var Nn=["working","blocked","waiting","done"];var jO=new Set(Nn);var vt=l.string().regex(/^[A-Za-z0-9_.:-]{1,128}$/,"is 1-128 letters, digits, or . _ : -");var ua=12e4,BO=1024*1024,HO=256*1024;var Wx=l.object({id:l.string().min(1).max(64),surface:l.enum(["panel","editor"]),contributionId:l.string().min(1).max(256)}),KO=l.object({name:vt,input:l.unknown(),panel:Wx}),WO=l.object({event:vt,payload:l.unknown(),panel:l.string().min(1).max(64).optional()}),hh=["storage","settings"],JO=l.object({area:l.enum(hh),key:l.string().min(1).max(256)}),XO=l.discriminatedUnion("kind",[l.object({kind:l.literal("message"),event:vt,payload:l.unknown()}),l.object({kind:l.literal("event"),event:l.enum(gt),payload:l.unknown()}),l.object({kind:l.literal("changed"),area:l.enum(hh),key:l.string()})]);var Jx=l.strictObject({name:vt,input:l.json().optional(),timeoutMs:l.number().int().min(1).max(ua).optional()}),Xx=l.object({output:l.json()}),qx=50,Yx=l.strictObject({}).optional(),Qx=l.object({agents:l.array(l.object({terminalId:l.string().min(1).max(1024).nullable(),title:l.string().max(512).nullable(),agent:l.string().max(128).nullable(),state:l.enum(Nn),stateStartedAt:l.number().finite()})).max(qx)}),ew=l.strictObject({event:l.enum(gt)}),tw=l.object({ok:l.literal(!0)}),yh={"plugin.request":J({summary:"Asks the plugin's own worker to run the handler it registered with `orca.panels.handle(name)`, starting the worker if needed; resolves with what the handler returned. `unknown_method` when no handler has that name.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:On,params:Jx,result:Xx}),"agents.list":J({summary:"The agents in the focused workspace: their terminal, title, agent kind and status. `agent.status.changed` reports each change after.",since:2,scope:"active-workspace",capability:"agent:read",mutation:!1,surfaces:ge,params:Yx,result:Qx}),"events.subscribe":J({summary:"Delivers a workspace or agent event to this panel as `orca.on(event)`; needs the event's read capability. The frame APIs call it for you.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:On,params:ew,result:tw})};var nw=/^(?:con|prn|aux|nul|clock\$|conin\$|conout\$|com[1-9\u00B9\u00B2\u00B3]|lpt[1-9\u00B9\u00B2\u00B3])(?:\..*)?$/i,rw=/[<>:"|?*]/,ca=String.raw`[^<>:"|?*\x00-\x1f\\/]*[^<>:"|?*\x00-\x1f\\/. ]`,np=new RegExp(`^${ca}(?:[\\\\/]${ca})*$`),iN=new RegExp(`^${ca}(?:/${ca})*$`);function iw(e){return e.length===0||e==="."||e===".."?"empty and dot path segments are not allowed":e.endsWith(".")||e.endsWith(" ")?"path segments may not end with a dot or space":rw.test(e)||[...e].some(n=>n.charCodeAt(0)<=31)?"path segment contains a Windows-forbidden character or alternate-data-stream colon":nw.test(e)?"path segment is a Windows reserved device name":null}function ow(e){if(e.length===0||e.startsWith("/")||e.startsWith("\\"))return"must be a non-empty relative path";let n=e.split(/[\\/]/);for(let i of n){let o=iw(i);if(o)return o}return null}function rp(e){return ow(e)===null}var bh=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,aw=new Set(["__proto__","prototype","constructor"]),ip=64;function _h(e){return aw.has(e)}var op="must be a portable relative path inside the plugin directory",zn=l.string().max(ip).regex(bh,"must be kebab-case (a-z, 0-9, dashes)").refine(e=>!_h(e),"must not be a reserved name"),$h=l.string().min(1).max(1024).regex(np,op).refine(e=>!np.test(e)||rp(e),op),pN=l.string().min(1).max(1024).transform(e=>e.replace(/[\\/]+$/,"")).refine(rp,op),kh=l.string().min(1).max(256).regex(/^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$/,"must be a portable command id");var sw=/[\p{Cc}\p{Cf}\p{Cs}\p{Zl}\p{Zp}]/u,uw=new Set(["‌","‍"]);function cw(e){return uw.has(e)||!sw.test(e)}function xh(e){return[...e].filter(cw).join("")}var lw=/[\t\n\v\f\r\u0085\u2028\u2029]+/g;function dw(e){return xh(e.replace(lw," "))}function Rr(e){let n=e.overwrite(dw);return e.minLength?n.min(e.minLength,"must contain visible characters"):n}var j={maxNodes:5e3,maxDepth:64,maxTreeBytes:524288,maxTextLength:16384,maxLabelLength:1024,maxPropsPerNode:32,maxSelectOptions:500,maxEventArgs:8,maxCallbackIdLength:64,maxRadioOptions:50,maxTableColumns:32,maxTableRows:5e3,maxTreeItems:2e3,maxTreeItemDepth:16,maxKeyValueItems:200,maxDocumentLength:65536,maxEventArgItems:5e3},yN={maxBytes:640*1024,maxMessages:200,perMs:1e4,maxDepth:j.maxDepth*2+24,maxObjects:j.maxNodes*8+1024};var Ge={render:"ui.render",event:"ui.event",error:"ui.error",ack:"ui.ack",ready:"ui.ready",hydrate:"ui.hydrate",visibility:"ui.visibility",persist:"ui.persist",retain:"ui.retain",snapshot:"ui.snapshot",restore:"ui.restore"};var pw={Input:{value:"value",change:"onChange"},Textarea:{value:"value",change:"onChange"},Switch:{value:"checked",change:"onChange"},Checkbox:{value:"checked",change:"onChange"},Select:{value:"value",change:"onChange"},RadioGroup:{value:"value",change:"onChange"},Slider:{value:"value",change:"onChange"},Tabs:{value:"value",change:"onChange"},Collapsible:{value:"open",change:"onChange"},Table:{value:"selected",change:"onSelectionChange"},Tree:{value:"selected",change:"onSelect"}},mw=new Map(Object.entries(pw));function ap(e){return mw.get(e)??null}var la="$edit";var da=/^[A-Za-z0-9_.:-]+$/,wh=l.object({$callback:l.string().min(1).max(j.maxCallbackIdLength).regex(da)}).strict(),pa=["neutral","accent","success","warning","danger"],G=l.string().max(j.maxLabelLength),B=G.min(1),Y=wh.optional(),je=l.string().regex(/^[a-z0-9-]{1,64}$/),Dn=l.enum(["none","xs","sm","md","lg"]).optional(),sp=l.enum(["start","center","end","stretch"]).optional(),et=l.enum(pa).optional(),ma=l.enum(["xs","sm","md"]).optional(),up=l.enum(["solid","outline","ghost"]).optional(),D=l.boolean().optional(),Cn=l.string().max(j.maxTextLength),Mr=l.enum(["sm","md","lg","none"]).optional(),Rt=l.string().min(1).max(j.maxLabelLength),ve={[la]:l.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional()};function R(e,n){return{props:e,children:n}}var ht=["activity","bar-chart-3","bell","blocks","book","bot","bug","calendar","cloud","code","database","file-text","flag","folder","gauge","globe","hammer","layers","lightbulb","package","plug","puzzle","rocket","star","terminal","wrench","zap","add","remove","delete","edit","refresh","search","settings","check","close","info","warning","error","open-external","copy","download","upload","play","pause","stop","more","expand","collapse","next","filter","branch","file","agent","link"],fw=Object.fromEntries(ht.slice(ht.indexOf("add")).map(e=>[e,Ur])),EN=new Map(ht.map(e=>[e.replaceAll("-",""),e]));var gw=["html","components"],vw=/\.(?:m?js|tsx?|mts|jsx)$/i,ON=l.object({id:zn.meta(ae("Panel id, unique among this plugin's panels. The reserved names `constructor` and `prototype` are refused.",Qe,["dashboard"])),title:Rr(l.string().min(1).max(256)).meta(ae("Title shown on the panel tab and its tooltip.",Qe,["Dashboard"])),icon:l.enum(ht).optional().meta({...ae("Icon shown in the right-sidebar activity bar. Defaults to `plug`.",Qe,["database"]),[En]:fw}),entry:$h.meta(dh(`What the panel runs: an HTML page for \`ui: "html"\`, a \`.js\`/\`.mjs\` module for \`ui: "components"\`. Either may instead be a \`.ts\`/\`.tsx\`/\`.mts\`/\`.jsx\` file, which Orca transpiles when it loads (needs \`engines.orca\` \`>=${ch}\`; an \`html\` panel then gets a generated page around it). It is trusted code: install panels you trust.`,Qe,["dist/panel.html"])),ui:l.enum(gw).optional().meta(ae("How the panel draws its UI. `html` (default) shows `entry` as a web page in an isolated frame; `components` runs `entry` as a hidden module and Orca draws the component tree it returns with its own controls.",Ur,["components"]))}).strict().refine(e=>e.ui!=="components"||vw.test(e.entry),{path:["entry"],message:"a components panel entry must be a .js, .mjs, .ts, .tsx, .mts or .jsx module"}).meta({id:"PanelContribution",description:"A sidebar panel. Requires the `sandboxed-ui` execution profile or higher."});var hw="1.4.248";var yw=64,bw=256,jn=hw,Ih={text:Rr(l.string().max(yw)).optional().meta(ae("Short label shown in the status bar.",jn,["3 blocked"])),icon:l.enum(ht).optional().meta(ae("Icon shown before the text, from the panel icon set.",jn,["bell"])),tone:l.enum(pa).optional().meta(ae("Colour of the item. Defaults to `neutral`.",jn,["warning"])),tooltip:Rr(l.string().max(bw)).optional().meta(ae("Shown on hover. Defaults to the plugin name.",jn))},RN=l.object({id:zn.meta(ae("Item id, unique among this plugin's status bar items; `statusBar.update` names it.",jn,["blocked-count"])),...Ih,command:kh.optional().meta(ae("Id of a command this plugin contributes in `contributes.commands`, run when the item is pressed.",jn,["guard.showLog"]))}).strict().meta({id:"StatusBarItemContribution",description:"An item in the status bar. Requires the `declarative` profile; a `trusted-worker` can change it with `statusBar.update`."}),Sh=l.strictObject({...Ih,visible:l.boolean().optional()});var _w=l.strictObject({id:zn,...Sh.shape}),$w=l.object({ok:l.literal(!0)}),Ph={"statusBar.update":J({summary:"Changes one of the plugin's `contributes.statusBarItems` (named by `id`): fields given replace their current value, `visible: false` hides it. Desktop app only; lasts until Orca restarts, and is hidden while the plugin is disabled.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:Te,params:_w,result:$w})};function cp(e){return e==="linux"?"orca-ide":e==="win32"?"orca.cmd":"orca"}function kw(e){return{...e,launchCmd:e.launchCmd??e.detectCmd,expectedProcess:e.expectedProcess??e.detectCmd}}var xw={claude:{detectCmd:"claude",promptInjectionMode:"argv",pasteNeedsTypedRequest:!0,draftPromptFlag:"--prefill",preflightTrust:"claude",draftPasteReadySignal:"claude-composer-prompt",workerStartReadsComposerMarker:!0,ctrlEnterEncoding:"csi-u"},"claude-agent-teams":{detectCmd:"orca",detectCmdAliases:["orca-dev","orca-ide"],detectRequiredCommands:["claude"],detectUnsupportedRuntimes:["win32","wsl"],launchCmd:"orca claude-teams",launchCmdByPlatform:{linux:`${cp("linux")} claude-teams`,win32:`${cp("win32")} claude-teams`},expectedProcess:"claude",promptInjectionMode:"stdin-after-start",pasteNeedsTypedRequest:!0,preflightTrust:"claude",draftPasteReadySignal:"claude-composer-prompt",workerStartReadsComposerMarker:!0,ctrlEnterEncoding:"csi-u"},codebuddy:{detectCmd:"codebuddy",detectCmdAliases:["cbc"],promptInjectionMode:"argv"},openclaude:{detectCmd:"openclaude",promptInjectionMode:"argv",draftPromptFlag:"--prefill"},codex:{detectCmd:"codex",promptInjectionMode:"argv",windowsInputRecordPasteNewline:"alt-enter",preflightTrust:"codex",draftPasteReadySignal:"codex-composer-prompt",draftPasteReadyTimeoutMs:2e4,submitRetryDelayMs:1200},autohand:{detectCmd:"autohand",promptInjectionMode:"stdin-after-start"},ante:{detectCmd:"ante",promptInjectionMode:"stdin-after-start"},trae:{detectCmd:"traecli",promptInjectionMode:"argv",argvPromptSeparator:"--"},opencode:{detectCmd:"opencode",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste",submitPasteReadySignal:"opencode-agent-row",draftPasteReadyTimeoutMs:2e4,ctrlEnterEncoding:"csi-u",composerReadyCaptures:["opencode-1-18-32-timed-boot-slow","opencode-1-18-32-timed-boot-hidden-pane","opencode-1-18-32-timed-first-launch","opencode-cmd-2-0-21-timed-warm-server"]},opencode2:{detectCmd:"opencode2",launchCmd:"opencode2 --standalone",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste",submitPasteReadySignal:"opencode-agent-row",draftPasteReadyTimeoutMs:2e4,composerReadyCaptures:["opencode-2-0-18-timed-boot-hidden-pane","opencode-2-0-21-timed-cold-standalone","opencode-2-0-21-timed-cold-standalone-hidden-pane","opencode-2-0-21-timed-natural-load-enter-dropped","opencode-2-0-14-timed-cold-standalone"]},"mimo-code":{detectCmd:"mimo",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste"},pi:{detectCmd:"pi",promptInjectionMode:"argv",draftPromptEnvVar:"ORCA_PI_PREFILL",windowsShiftEnterEncoding:"csi-u"},omp:{detectCmd:"omp",promptInjectionMode:"argv",draftPromptEnvVar:"ORCA_OMP_PREFILL",windowsShiftEnterEncoding:"csi-u"},"prime-agent":{detectCmd:"prime-agent",promptInjectionMode:"argv",argvPromptSeparator:"--",windowsShiftEnterEncoding:"csi-u"},qoder:{detectCmd:"qodercli",detectCmdAliases:["qoder"],promptInjectionMode:"flag-prompt-interactive",preflightTrust:"qoder"},"qoder-cn":{detectCmd:"qoderclicn",detectCmdAliases:["qodercn"],promptInjectionMode:"flag-prompt-interactive",preflightTrust:"qoder-cn"},gemini:{detectCmd:"gemini",promptInjectionMode:"flag-prompt-interactive"},antigravity:{detectCmd:"agy",promptInjectionMode:"flag-prompt-interactive",preflightTrust:"antigravity",submitLineSettleMsPerLine:45},aider:{detectCmd:"aider",promptInjectionMode:"stdin-after-start"},goose:{detectCmd:"goose",promptInjectionMode:"stdin-after-start"},amp:{detectCmd:"amp",promptInjectionMode:"stdin-after-start"},kilo:{detectCmd:"kilo",promptInjectionMode:"stdin-after-start"},kiro:{detectCmd:"kiro-cli",launchCmd:"kiro-cli chat --tui",promptInjectionMode:"stdin-after-start"},crush:{detectCmd:"crush",promptInjectionMode:"stdin-after-start"},aug:{detectCmd:"auggie",promptInjectionMode:"stdin-after-start"},cline:{detectCmd:"cline",promptInjectionMode:"stdin-after-start"},freebuff:{detectCmd:"freebuff",promptInjectionMode:"stdin-after-start"},codebuff:{detectCmd:"codebuff",promptInjectionMode:"stdin-after-start"},"command-code":{detectCmd:"command-code",launchCmd:"command-code --trust",promptInjectionMode:"argv"},continue:{detectCmd:"cn",promptInjectionMode:"stdin-after-start"},cursor:{detectCmd:"cursor-agent",promptInjectionMode:"argv",preflightTrust:"cursor"},droid:{detectCmd:"droid",promptInjectionMode:"argv",windowsShiftEnterEncoding:"csi-u",ctrlEnterEncoding:"csi-u"},kimi:{preflightTrust:"kimi",detectCmd:"kimi",detectCmdAliases:["kimi-code"],promptInjectionMode:"stdin-after-start"},"mistral-vibe":{detectCmd:"vibe",detectCmdAliases:["mistral-vibe"],promptInjectionMode:"stdin-after-start"},"qwen-code":{detectCmd:"qwen",promptInjectionMode:"stdin-after-start",submitRetryDelayMs:1200},rovo:{detectCmd:"acli",launchCmd:"acli rovodev run",promptInjectionMode:"stdin-after-start"},hermes:{detectCmd:"hermes",launchCmd:"hermes --tui",promptInjectionMode:"hermes-query"},openclaw:{detectCmd:"openclaw",promptInjectionMode:"stdin-after-start"},copilot:{detectCmd:"copilot",promptInjectionMode:"flag-interactive",preflightTrust:"copilot"},grok:{detectCmd:"grok",promptInjectionMode:"argv",argvPromptSeparator:"--",draftPasteReadySignal:"grok-composer-prompt",ctrlEnterEncoding:"csi-u"},muse:{detectCmd:"muse",launchCmd:"muse --trust-workspace",promptInjectionMode:"stdin-after-start"},dsh:{detectCmd:"dsh-tui",detectCmdAliases:["dst"],detectRequiredCommands:["dsh"],launchCmd:"dsh-tui .",expectedProcess:"dsh",promptInjectionMode:"stdin-after-start",draftPasteReadySignal:"dsh-composer-prompt",submitRetryDelayMs:1e3,submitRetryBudgetMs:3e4},zcode:{detectCmd:"zcode",expectedProcess:"zcode-cli",promptInjectionMode:"stdin-after-start",draftPasteReadySignal:"zcode-composer-prompt",composerReadyCaptures:["zcode-composer-ready"]},devin:{detectCmd:"devin",promptInjectionMode:"argv",argvPromptSeparator:"--"},jcode:{detectCmd:"jcode",launchCmd:"jcode",expectedProcess:"jcode",promptInjectionMode:"stdin-after-start"}},ww=Object.fromEntries(Object.entries(xw).map(([e,n])=>[e,kw(n)]));function Th(e){return typeof e=="string"&&Object.hasOwn(ww,e)}var lp=["worktree.history.back","worktree.history.forward","sidebar.left.toggle","sidebar.sleepingWorkspaces.toggle","floatingWorkspace.maximize","tab.rename","workspace.rename","workspace.openBoard","view.tasks","sidebar.right.toggle","sidebar.explorer.toggle","sidebar.search.toggle","sidebar.sourceControl.toggle","sidebar.checks.toggle","sidebar.ports.toggle"];var tz=new Set(lp);var Iw=500,dp=2e3,Zr=1024,Ah=4096,Vr=l.string().min(1).max(Zr),pp=l.string().min(1).max(Zr),Sw=l.strictObject({}).optional(),Pw=l.object({workspaces:l.array(l.object({id:Vr,kind:l.enum(["worktree","folder"]),name:l.string().max(512),path:l.string().max(Zr),branch:l.string().max(512).nullable(),hostId:l.string().max(Zr).nullable()})).max(Iw),truncated:l.boolean()}),Tw=l.strictObject({workspaceId:Vr}),Aw=l.object({opened:l.literal(!0)}),Ew=l.strictObject({workspaceId:Vr,title:l.string().min(1).max(512).optional(),command:l.string().min(1).max(Ah).optional()}),Ow=l.object({terminalId:pp}),Nw=l.strictObject({terminalId:pp,maxLines:l.number().int().min(1).max(dp).optional()}),zw=l.object({lines:l.array(l.string()).max(dp),truncated:l.boolean()}),Dw=l.strictObject({workspaceId:Vr,agent:l.string().min(1).max(64).refine(Th,"unknown agent"),prompt:l.string().min(1).max(Ah).optional()}),Cw=l.object({terminalId:pp});function jw(e){let n=e.split(/[\\/]/);return!/^[a-z]:/i.test(e)&&n[0]!==""&&n.every(i=>i!=="..")&&n.some(i=>i!==""&&i!==".")}var Lw=l.strictObject({workspaceId:Vr,path:l.string().min(1).max(Zr).refine(jw,"path must be relative and inside the workspace")}),Uw=l.object({opened:l.literal(!0)}),Rw=l.strictObject({action:l.enum(lp)}),Mw=l.object({ran:l.literal(!0)}),Eh={"workspace.list":J({summary:"Lists every workspace, Git worktrees and folders, on every host Orca reaches.",since:3,scope:"any-workspace",capability:"workspace:read",mutation:!1,surfaces:Te,params:Sw,result:Pw}),"workspace.open":J({summary:"Shows a workspace in Orca, as clicking it in the sidebar does; a folder workspace needs the desktop app.",since:3,scope:"any-workspace",capability:"workspace:write",mutation:!0,surfaces:Te,params:Tw,result:Aw}),"terminal.create":J({summary:"Opens a terminal in a workspace, optionally running a command, in the background.",since:3,scope:"any-workspace",capability:"terminal:send",mutation:!0,surfaces:Te,params:Ew,result:Ow}),"terminal.read":J({summary:`Reads a terminal's newest output as plain text, at most ${dp} lines.`,since:3,scope:"explicit-terminal",capability:"terminal:read",mutation:!1,surfaces:Te,params:Nw,result:zw}),"agent.launch":J({summary:"Starts an agent's CLI in a new terminal of a workspace, in the background, and returns as soon as it starts; a `prompt` is sent once the agent is ready.",since:3,scope:"any-workspace",capability:"agent:launch",mutation:!0,surfaces:Te,params:Dw,result:Cw}),"editor.open":J({summary:"Opens a file of a workspace in an editor tab of Orca's window; desktop app only. `workspace.open` shows the workspace.",since:3,scope:"any-workspace",capability:"workspace:write",mutation:!0,surfaces:Te,params:Lw,result:Uw}),"commands.run":J({summary:"Runs one of Orca's built-in actions in its window, never a plugin's replacement of it; desktop app only.",since:3,scope:"desktop",capability:"workspace:write",mutation:!0,surfaces:Te,params:Rw,result:Mw})};var Oh={...Ph,...Eh};var Zw=4096,Vw=50,Gr=512,tt=1024,Gw=l.strictObject({}).optional(),mp=l.object({branch:l.string().max(Gr),displayName:l.string().max(Gr),terminals:l.array(l.object({id:l.string().min(1).max(tt),title:l.string().max(Gr).optional()}).strict()).max(Vw)}).strict().nullable(),Fw=mp,Bw=l.strictObject({terminalId:l.string().min(1).max(tt),text:l.string().min(1).max(Zw),enter:l.boolean().default(!1)}),Hw=l.object({accepted:l.boolean()}),Kw=l.strictObject({title:l.string().min(1).max(120),body:l.string().max(1e3).optional()}),Ww=l.object({delivered:l.boolean()}),fp={openExternal:"shell.openExternal",saveAs:"files.saveAs"},Jw=8192,Xw=["http:","https:","mailto:"],Nh=64*1024*1024,qw=l.strictObject({url:l.string().min(1).max(Jw).refine(nI,"url must be an http:, https: or mailto: URL")}),Yw=l.object({opened:l.boolean(),reason:l.enum(["cancelled","consent-unavailable"]).optional()}),Qw=l.union([l.string().max(Nh),l.custom(e=>e instanceof ArrayBuffer||e instanceof Uint8Array,"data must be a string or ArrayBuffer").refine(e=>e.byteLength<=Nh,"data exceeds 64 MiB").meta({type:"ArrayBuffer"})]),eI=l.strictObject({suggestedName:l.string().min(1).max(255).optional(),mimeType:l.string().min(1).max(255).optional(),data:Qw}),tI=l.object({status:l.enum(["saved","cancelled"])});function nI(e){try{return Xw.includes(new URL(e).protocol)}catch{return!1}}var Mt={"workspace.readContext":J({summary:"Branch, name and terminal ids of the focused workspace, or null when none is focused.",since:0,scope:"active-workspace",capability:"workspace:read",mutation:!1,surfaces:ge,params:Gw,result:Fw}),"terminal.sendText":J({summary:"Types text into one terminal named by id, optionally pressing Enter.",since:0,scope:"explicit-terminal",capability:"terminal:send",mutation:!0,surfaces:Te,params:Bw,result:Hw}),"notifications.show":J({summary:"Shows a desktop notification.",since:0,scope:"desktop",capability:"notifications:show",mutation:!0,surfaces:ge,params:Kw,result:Ww}),"storage.get":J({summary:"Reads a JSON value from the plugin's private store; null when absent.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!1,framesSince:2,surfaces:ge,params:Gv,result:Fv}),"storage.set":J({summary:"Writes a JSON value to the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!0,framesSince:2,surfaces:ge,params:Bv,result:Hv}),"storage.delete":J({summary:"Removes a key from the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!0,framesSince:2,surfaces:ge,params:Kv,result:Wv}),"storage.keys":J({summary:"Lists the keys in the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!1,framesSince:2,surfaces:ge,params:Jv,result:Xv}),"secrets.get":J({summary:"Reads a secret from the plugin's encrypted secrets file; null when absent.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!1,framesSince:2,surfaces:ge,params:qv,result:Yv}),"secrets.set":J({summary:"Stores a secret in the plugin's encrypted secrets file.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!0,framesSince:2,surfaces:ge,params:Qv,result:eh}),"secrets.delete":J({summary:"Removes a secret from the plugin's encrypted secrets file.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!0,framesSince:2,surfaces:ge,params:th,result:nh}),"secrets.protection":J({summary:"How secrets are protected at rest: `os-keyring`, or `unavailable` (no OS key store, or Linux `basic_text`), where `secrets.set` fails.",since:1,scope:"plugin-private",capability:"secrets:own",mutation:!1,framesSince:2,surfaces:ge,params:rh,result:ih}),"settings.get":J({summary:"Reads every setting the plugin owns.",since:0,scope:"plugin-private",capability:"settings:own",mutation:!1,framesSince:2,surfaces:ge,params:oh,result:ah}),"settings.set":J({summary:"Writes one setting the plugin owns.",since:0,scope:"plugin-private",capability:"settings:own",mutation:!0,framesSince:2,surfaces:ge,params:sh,result:uh}),"shell.openExternal":J({summary:"Opens an http:, https: or mailto: URL in the default browser. Needs a click or key press in the frame; desktop app only. Orca asks the person before an http(s) host the plugin was not allowed; `opened` is false if they cancel.",since:1,scope:"desktop",capability:null,userActivation:!0,mutation:!1,surfaces:On,params:qw,result:Yw}),"files.saveAs":J({summary:"Offers data (a string or ArrayBuffer, up to 64 MiB) in Orca's save dialog; the plugin never learns the path. Needs a click or key press in the frame; desktop app only.",since:1,scope:"desktop",capability:null,userActivation:!0,mutation:!0,surfaces:On,params:eI,result:tI}),...yh,...Oh},zh=Object.keys(Mt).filter(Dh);function Dh(e){return Object.hasOwn(Mt,e)}function gp(e){return Dh(e)?Mt[e]:null}var Ch=Math.max(...zh.map(e=>Mt[e].since));function Fr(e){return zh.filter(n=>Mt[n].surfaces.includes(e))}function fa(e,n){return Fr(e).filter(i=>n||Mt[i].userActivation!==!0)}function ga(e,n="panel"){return Math.max(0,...e.map(i=>ph(Mt[i],n)))}var Le=1,yz=l.number().refine(e=>e===Le,{error:e=>typeof e.input=="number"&&e.input>Le?`targets host API ${e.input}, but this Orca supports only ${Le}; update Orca`:`must be ${Le}`}).meta({const:Le});var rI=new Set(["rate_limited","unavailable","timeout","conflict"]);function Fe(e,n=e,i){return Object.assign(new Error(n),{code:e,retryable:rI.has(e),...i===void 0?{}:{retryAfterMs:i}})}var iI=new Set(["plugin.request","events.subscribe","storage.get","storage.set","storage.delete","storage.keys","settings.get","settings.set","secrets.get","secrets.set","secrets.delete","secrets.protection"]);function va(e,n){return typeof e=="object"&&e!==null&&n in e?Object.getOwnPropertyDescriptor(e,n)?.value:void 0}function jh(e){let n={storage:new Map(Object.entries(e.storage??{})),settings:new Map(Object.entries(e.settings??{})),secrets:new Map(Object.entries(e.secrets??{}))},i=new Set,o=(a,s,u)=>{if(u===void 0?n[a].delete(s):n[a].set(s,u),a!=="secrets")for(let c of i)c(a,s);return{ok:!0}},t=null;async function r(a){let s=String(va(a,"name")),u=va(a,"input");if(!e.requests||!Object.hasOwn(e.requests,s)){if(t)return{output:await t(s,u)??null};throw Fe("unknown_method",`no panel handler named ${s}`)}let c=e.requests[s];return{output:(typeof c=="function"?await c(u):c)??null}}return{handles:a=>iI.has(a),async answer(a,s){let u=String(va(s,"key")),c=va(s,"value");switch(a){case"plugin.request":return r(s);case"storage.get":return{value:n.storage.get(u)??null};case"storage.keys":return{keys:[...n.storage.keys()]};case"settings.get":return{settings:Object.fromEntries(n.settings)};case"secrets.get":return{value:n.secrets.get(u)??null};case"secrets.protection":return{status:"os-keyring"};case"storage.set":return o("storage",u,c);case"settings.set":return o("settings",u,c);case"secrets.set":return o("secrets",u,c);case"storage.delete":return o("storage",u,void 0);case"secrets.delete":return o("secrets",u,void 0);default:return{ok:!0}}},routeRequests(a){return t=a,()=>{t===a&&(t=null)}},onChange(a){return i.add(a),()=>i.delete(a)},snapshot:()=>({storage:Object.fromEntries(n.storage),settings:Object.fromEntries(n.settings),secrets:Object.fromEntries(n.secrets)})}}var ha=class extends Error{constructor(i,o){super(o);this.code=i}code};function oI(e){return typeof e=="function"}var Lh={ok:!0};function aI(e){return e.result.safeParse(Lh).success}var vp={"workspace.readContext":null,"notifications.show":{delivered:!0},"shell.openExternal":{opened:!0},"files.saveAs":{status:"saved"},"agents.list":{agents:[]}};function Uh(e,n){let i=new Set(e.capabilities??n),o=new Map(Object.entries(e.results??{})),t=jh(e),r={panel:fa("panel",!0),worker:Fr("worker")},a=[],s=[],u=new Set,c=0,d=(g,y)=>{throw new ha(g,y)};async function p(g,y,x){let I=gp(g);if(!I)return d("unknown_method",`${g} does not exist in this Orca`);if(!I.surfaces.includes(x))return d("not_permitted",`${g} is not available to ${x}s`);if(I.userActivation===!0){if(c===0)return d("not_permitted",`${g} needs a click or key press in the frame`);c-=1}if(I.capability&&!i.has(I.capability))return d("capability_denied",`${g} needs the ${I.capability} capability`);let b=I.params.safeParse(y);return b.success?b.data:d("invalid_params",b.error.issues[0]?.message??"invalid params")}async function m(g,y,x){let I;try{I=await p(g,y,x)}catch(A){throw A instanceof ha?(s.push({method:g,code:A.code,message:A.message}),Fe(A.code,A.message)):A}let b=gp(g);if(!b)throw Fe("unknown_method",g);let T=!o.has(g)&&t.handles(g),E=aI(b);if(!o.has(g)&&!T&&!Object.hasOwn(vp,g)&&!E)throw Fe("unavailable",`the test configured no result for ${g}`);let z=o.has(g)?o.get(g):Object.hasOwn(vp,g)?vp[g]:Lh,w=T?await t.answer(g,I):oI(z)?await z(I):z,O=b.result.safeParse(w);if(!O.success)throw new TypeError(`mockHost: the result configured for ${g} does not match the host API: ${O.error.issues[0]?.message??"invalid result"}`);return O.data}let f=g=>({api:{major:Le,minor:ga(r[g])},call(y,x){a.push({method:y,params:x});let I=m(y,x,g);return u.add(I),I.catch(()=>{}).finally(()=>u.delete(I)),I},has:y=>r[g].some(x=>x===y)});return{calls:a,refusals:s,capabilities:[...i],callsOf:g=>a.filter(y=>y.method===g).map(y=>y.params),respond:(g,y)=>o.set(g,y),grantGesture:()=>{c=1},data:()=>t.snapshot(),onDataChange:g=>t.onChange(g),routeRequests:g=>t.routeRequests(g),async idle(){for(;u.size>0;)await Promise.allSettled(u)},bridge:f("panel"),worker:f("worker")}}var sI=l.object({label:B,labelHidden:D,value:Cn.optional(),defaultValue:Cn.optional(),placeholder:G.optional(),rows:l.number().int().min(2).max(20).optional(),maxLength:l.number().int().positive().max(j.maxTextLength).optional(),invalid:D,disabled:D,onChange:Y,onSubmit:Y,...ve}).strict(),uI=l.object({label:B,description:G.optional(),checked:D,defaultChecked:D,disabled:D,onChange:Y,...ve}).strict(),cI=l.object({label:B,labelHidden:D,value:G.optional(),defaultValue:G.optional(),options:l.array(l.object({value:B,label:B,description:G.optional(),disabled:D}).strict()).max(j.maxRadioOptions),orientation:l.enum(["vertical","horizontal"]).optional(),disabled:D,onChange:Y,...ve}).strict(),ya=l.number().refine(Number.isFinite,"must be finite"),lI=l.object({label:B,labelHidden:D,value:ya.optional(),defaultValue:ya.optional(),min:ya.optional(),max:ya.optional(),step:l.number().positive().refine(Number.isFinite).optional(),showValue:D,disabled:D,onChange:Y,...ve}).strict(),dI=l.object({label:B,description:G.optional(),error:G.optional(),required:D}).strict(),Rh={Textarea:R(sI,"none"),Checkbox:R(uI,"none"),RadioGroup:R(cI,"none"),Slider:R(lI,"none"),Field:R(dI,"any")};var pI=l.object({label:B,value:G.optional(),defaultValue:G.optional(),onChange:Y,...ve}).strict(),mI=l.object({value:B,label:B,icon:je.optional(),disabled:D}).strict(),fI=l.object({title:B,description:G.optional(),open:D,defaultOpen:D,disabled:D,onChange:Y,...ve}).strict(),gI=l.object({label:B,gap:Dn}).strict(),vI=l.object({columns:l.number().int().min(1).max(6).optional(),minItemWidth:l.enum(["xs","sm","md","lg"]).optional(),gap:Dn}).strict(),Mh={Tabs:R(pI,"tabs"),Tab:R(mI,"any"),Collapsible:R(fI,"any"),Toolbar:R(gI,"any"),Grid:R(vI,"any")};function Ue(e){return typeof e=="object"&&e!==null}var Br=["long","short","duration"],hp=l.number().refine(Number.isFinite,"must be a finite time in milliseconds"),Zh=l.object({type:l.literal("relative"),at:hp,format:l.enum(Br).optional()}).strict(),hI=[["day",864e5],["hour",36e5],["minute",6e4],["second",1e3]];function yI(e){let n=Math.abs(e),[i,o]=hI.find(([,t])=>n>=t)??["second",1e3];return{value:Math.trunc(e/o),unit:i}}function Vh(e,n,i,o){let{value:t,unit:r}=yI(e-n);return i==="duration"?new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:"narrow"}).format(Math.abs(t)):new Intl.RelativeTimeFormat(o,{numeric:i==="long"?"auto":"always",style:i==="long"?"long":"narrow"}).format(t,r)}var yp=l.string().min(1).max(64),bI=l.union([l.string().max(j.maxLabelLength),l.number(),l.boolean(),l.null(),Zh]),Gh=e=>new Set(e.map(n=>n.key)).size===e.length,_I=l.object({label:B,columns:l.array(l.object({key:yp,label:B,align:l.enum(["start","center","end"]).optional(),width:l.enum(["auto","xs","sm","md","lg"]).optional(),minWidth:l.enum(["auto","xs","sm","md"]).optional(),hideBelow:l.enum(["sm","md"]).optional(),sortable:D}).strict()).min(1).max(j.maxTableColumns).refine(Gh,"column keys must be unique"),rows:l.array(l.object({key:Rt,cells:l.record(yp,bI.refine(e=>typeof e!="number"||Number.isFinite(e))).refine(e=>Object.keys(e).length<=j.maxTableColumns),disabled:D}).strict()).max(j.maxTableRows).refine(Gh,"row keys must be unique"),sort:l.object({column:yp,direction:l.enum(["asc","desc"])}).strict().optional(),selectionMode:l.enum(["none","single","multiple"]).optional(),selected:l.array(Rt).max(j.maxTableRows).optional(),defaultSelected:l.array(Rt).max(j.maxTableRows).optional(),hasMore:D,loading:D,emptyText:G.optional(),maxHeight:Mr,onSortChange:Y,onSelectionChange:Y,onRowAction:Y,onLoadMore:Y,...ve}).strict(),$I=l.object({key:Rt,label:B,description:G.optional(),icon:je.optional(),disabled:D,hasChildren:D,children:l.array(l.unknown()).optional()}).strict();function kI(e){let n=[],i=new Set,o=[{raw:e,out:n,depth:1}],t=0;for(let r=o.pop();r;r=o.pop()){if(r.depth>j.maxTreeItemDepth)return`items nest deeper than ${j.maxTreeItemDepth}`;for(let a of r.raw){if(++t>j.maxTreeItems)return`more than ${j.maxTreeItems} items`;let s=$I.safeParse(Ue(a)?a:null);if(!s.success)return"each item needs a key and a label";let{children:u,...c}=s.data;if(i.has(c.key))return`duplicate item key ${JSON.stringify(c.key.slice(0,64))}`;i.add(c.key);let d=c;r.out.push(d),u&&(d.children=[],o.push({raw:u,out:d.children,depth:r.depth+1}))}}return n}var xI=l.array(l.unknown()).transform((e,n)=>{let i=kI(e);return typeof i=="string"?(n.addIssue({code:"custom",message:i}),l.NEVER):i}),wI=l.object({label:B,items:xI,selected:G.optional(),defaultSelected:G.optional(),expanded:l.array(Rt).max(j.maxTreeItems).optional(),defaultExpanded:l.array(Rt).max(j.maxTreeItems).optional(),maxHeight:Mr,onSelect:Y,onToggle:Y,onAction:Y,...ve}).strict(),Fh={Table:R(_I,"none"),Tree:R(wI,"none")};var Bh=l.string().max(j.maxDocumentLength),II=/\.(?:png|jpe?g|webp)$/i;function SI(e){return II.test(e)&&!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e)&&!/[\\\0?#]/.test(e)&&e.split("/").every(n=>n!==""&&n!=="."&&n!=="..")}var PI=l.object({content:Bh}).strict(),TI=l.object({code:Bh,language:l.string().regex(/^[A-Za-z0-9_+#.-]{1,64}$/).optional(),label:G.optional(),lineNumbers:D,wrap:D,maxHeight:Mr}).strict(),AI=l.object({src:l.string().max(512).refine(SI,"must be an image file in the plugin"),alt:G,size:l.enum(["xs","sm","md","lg","full"]).optional(),fit:l.enum(["contain","cover"]).optional(),rounded:D}).strict(),EI=l.object({label:G.optional(),items:l.array(l.object({label:B,value:l.union([G,l.number().refine(Number.isFinite),l.boolean(),l.null()]),tone:et,code:D}).strict()).max(j.maxKeyValueItems)}).strict(),OI=l.object({tone:et,title:G.optional(),icon:je.optional()}).strict(),NI=l.object({at:hp,format:l.enum(Br).optional(),tone:et,muted:D}).strict(),zI=l.object({shape:l.enum(["text","block","circle"]).optional(),lines:l.number().int().min(1).max(10).optional(),label:G.optional()}).strict(),Hh={Markdown:R(PI,"none"),CodeView:R(TI,"none"),Image:R(AI,"none"),KeyValue:R(EI,"none"),Callout:R(OI,"any"),Skeleton:R(zI,"none"),RelativeTime:R(NI,"none")};var DI=ht,Kh=new Set(DI),CI=l.object({gap:Dn,align:sp}).strict(),jI=l.object({gap:Dn,align:sp,justify:l.enum(["start","center","end","between"]).optional(),wrap:D}).strict(),LI=l.object({tone:et,muted:D,size:ma,weight:l.enum(["regular","medium","semibold"]).optional(),truncate:D}).strict(),UI=l.object({level:l.union([l.literal(1),l.literal(2),l.literal(3)]).optional()}).strict(),RI=l.object({variant:up,tone:et,size:ma,icon:je.optional(),tooltip:G.optional(),disabled:D,onPress:Y}).strict(),MI=l.object({icon:je,label:B,tooltip:G.optional(),variant:up,tone:et,size:ma,disabled:D,onPress:Y}).strict(),ZI=l.object({tone:et}).strict(),VI=l.object({title:G.optional(),description:G.optional()}).strict(),GI=l.object({label:G.optional()}).strict(),FI=l.object({title:G.optional(),description:G.optional(),icon:je.optional(),current:D,disabled:D,onPress:Y}).strict(),BI=l.object({label:B,labelHidden:D,value:Cn.optional(),defaultValue:Cn.optional(),placeholder:G.optional(),type:l.enum(["text","search","password"]).optional(),maxLength:l.number().int().positive().max(j.maxTextLength).optional(),invalid:D,disabled:D,onChange:Y,onSubmit:Y,...ve}).strict(),HI=l.object({label:B,checked:D,defaultChecked:D,disabled:D,onChange:Y,...ve}).strict(),KI=l.object({label:B,labelHidden:D,value:G.optional(),defaultValue:G.optional(),placeholder:G.optional(),options:l.array(l.object({value:B,label:B,disabled:D}).strict()).max(j.maxSelectOptions),disabled:D,onChange:Y,...ve}).strict(),WI=l.object({orientation:l.enum(["horizontal","vertical"]).optional()}).strict(),JI=l.object({label:B,labelHidden:D,value:l.number().min(0).max(100).optional()}).strict(),XI=l.object({label:B,labelHidden:D}).strict(),qI=l.object({title:B,description:G.optional(),icon:je.optional()}).strict(),YI=l.object({href:l.string().max(2048).regex(/^(https?:\/\/|mailto:)/i).optional(),onPress:Y}).strict(),QI=l.object({block:D}).strict(),Hr={Stack:R(CI,"any"),Row:R(jI,"any"),Text:R(LI,"inline"),Heading:R(UI,"inline"),Button:R(RI,"text"),IconButton:R(MI,"none"),Badge:R(ZI,"text"),Card:R(VI,"any"),List:R(GI,"items"),ListItem:R(FI,"any"),Input:R(BI,"none"),Switch:R(HI,"none"),Select:R(KI,"none"),Separator:R(WI,"none"),Progress:R(JI,"none"),Spinner:R(XI,"none"),EmptyState:R(qI,"any"),Link:R(YI,"text"),Code:R(QI,"text"),...Rh,...Mh,...Fh,...Hh};function bp(e){return typeof e=="string"&&Object.hasOwn(Hr,e)}var iD=Object.keys(Hr).filter(bp),Wh=new Set(["Text","Link","Code","Badge","RelativeTime"]),Jh=new Set(["Button","IconButton","Input","Switch","Select","Link","ListItem","Textarea","Checkbox","RadioGroup","Slider","Tabs","Collapsible","Table","Tree","Markdown"]),ba={items:"ListItem",tabs:"Tab"};var eS=new Set(["type","key","props","children"]),_p=32,tS=8,nS=/^[A-Z][A-Za-z0-9]{0,63}$/,rS=20,iS=new Map([[ba.items,"items"],[ba.tabs,"tabs"]]),oS={ListItem:"List",Tab:"Tabs"};function Xh(e){return e==="items"||e==="tabs"?ba[e]:void 0}var _a=class extends Error{};function te(e,n){throw new _a(`${e}: ${n}`)}function aS(e,n){return e===void 0?[]:(Array.isArray(e)||te(n,"children must be an array"),e)}function sS(e,n,i){let o=Hr[e].props.shape,t={};for(let[r,a]of Object.entries(n)){if(a===void 0)continue;if(!Object.hasOwn(o,r)){i(`${e}: ignored unknown prop "${r.slice(0,64)}"`);continue}let s=o[r].safeParse(a);if(!s.success){i(`${e}: ignored invalid ${r}`);continue}t[r]=s.data}for(let[r,a]of Object.entries(o))if(!Object.hasOwn(t,r)&&!a.safeParse(void 0).success)return i(`${e}: missing required ${r}; showing a placeholder`),null;return typeof t.icon=="string"&&!Kh.has(t.icon)&&i(`${e}: unknown icon "${t.icon}"; showing a fallback glyph`),t}function qh(e){if(e===null)return{ok:!0,tree:null,nodes:0,warnings:[]};let n=new Set,i=c=>{n.sizej.maxTextLength&&te(I,"text is too long"),r+ ++a>j.maxNodes&&te(I,`more than ${j.maxNodes} nodes`),s+=tS+Oe.length,s>j.maxTreeBytes&&te(I,`tree exceeds ${j.maxTreeBytes} bytes`),x.push(Oe);continue}Ue(d)||te(I,"expected a node, string or number");let b=d.type,T=bp(b);!T&&(typeof b!="string"||!nS.test(b))&&te(I,`invalid component name ${JSON.stringify(String(b)).slice(0,80)}`),(f==="none"||f==="text")&&te(I,`${m} accepts only text`),f==="inline"&&T&&!Wh.has(b)&&te(I,`${m} accepts only text, Text, Link, Code, Badge and RelativeTime`);let E=Xh(f),z=typeof b=="string"?iS.get(b):void 0;E!==void 0&&b!==E&&te(I,`${m} holds only ${E}`),z!==void 0&&z!==f&&te(I,`${b} must be a direct child of ${oS[b]??"its container"}`),g&&Jh.has(b)&&te(I,`a ListItem with onPress cannot contain a ${b}`),++r+a>j.maxNodes&&te(I,`more than ${j.maxNodes} nodes`),p>j.maxDepth&&te(I,`deeper than ${j.maxDepth}`);for(let Oe of Object.keys(d))eS.has(Oe)||te(I,`unknown node field ${Oe.slice(0,64)}`);let w=d.key;w!==void 0&&((typeof w!="string"||w.length>j.maxLabelLength)&&te(I,"key must be a short string"),y.has(w)&&te(I,`duplicate key ${JSON.stringify(w.slice(0,64))} among siblings`),y.add(w));let O=w===void 0?{}:{key:w};if(!T){i(`unknown component ${b}; showing a placeholder`),x.push({type:"Unsupported",...O,props:{name:b},children:[]}),s+=_p+b.length;continue}let A=d.props??{};(!Ue(A)||Object.keys(A).length>j.maxPropsPerNode)&&te(I,"props must be an object with few fields");let F=sS(b,A,i);if(!F){x.push({type:"Unsupported",...O,props:{name:b},children:[]}),s+=_p+b.length;continue}s+=_p+JSON.stringify(F).length,s>j.maxTreeBytes&&te(I,`tree exceeds ${j.maxTreeBytes} bytes`);let C=[],ne={type:b,...O,props:F,children:C};x.push(ne);let he=aS(d.children,I);he.length>j.maxNodes&&te(I,`more than ${j.maxNodes} children`);let Ee=new Set,Yr=g||b==="ListItem"&&F.onPress!==void 0;for(let Oe=he.length-1;Oe>=0;Oe--)t.push({raw:he[Oe],depth:p+1,parentType:b,policy:Hr[b].children,inPressable:Yr,siblingKeys:Ee,out:C,path:`${I}.children.${Oe}`})}}catch(c){if(c instanceof _a)return{ok:!1,error:c.message};throw c}let u=o[0];return typeof u=="object"?{ok:!0,tree:u,nodes:r,warnings:[...n]}:{ok:!1,error:"tree: expected a node"}}var Kr=l.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),Zt=l.string().min(1).max(64),$p=l.union([l.string().max(j.maxTextLength),l.number().refine(Number.isFinite),l.boolean(),l.null()]),Yh=l.array($p).max(j.maxEventArgItems),uS=l.union([$p,Yh,l.record(l.string().max(64),l.union([$p,Yh])).refine(e=>Object.keys(e).length<=16,"too many fields")]),vD=l.object({document:Zt,revision:Kr,callback:l.string().min(1).max(j.maxCallbackIdLength).regex(da),args:l.array(uS).max(j.maxEventArgs),edit:Kr.optional()}).strict(),cS=l.object({document:Zt,revision:Kr,tree:l.unknown()}).strict(),Qh=l.object({document:Zt.optional(),revision:Kr,message:l.string().max(j.maxLabelLength*4),stack:l.string().max(8192).optional()}).strict();function ey(e){let n=cS.safeParse(e);if(!n.success)return{ok:!1,document:null,revision:null,error:"malformed render"};let{document:i,revision:o}=n.data,t=qh(n.data.tree);return t.ok?{...t,document:i,revision:o}:{ok:!1,document:i,revision:o,error:t.error}}var hD=l.object({document:Zt,revision:Kr,accepted:l.boolean(),retryAfterMs:l.number().int().nonnegative().max(6e4).optional()}).strict(),yD=l.object({document:Zt}).strict(),ty=/^[A-Za-z0-9_.:-]{1,128}$/,lS=["plugin","workspace"],kp=l.number().int().min(0).max(1e6),bD=l.object({version:kp,value:l.json()}).strict().refine(e=>JSON.stringify(e.value).length<=aa,"persisted value is too large"),ny=l.object({document:Zt,entries:l.array(l.object({scope:l.enum(lS),key:l.string().regex(ty),version:kp,value:l.json()}).strict()).min(1).max(64)}).strict(),_D=l.object({document:Zt,entries:l.array(l.object({key:l.string().regex(ty),version:kp,value:l.json().optional()}).strict().refine(e=>JSON.stringify(e.value??null).length<=aa,"retained value is too large")).min(1).max(64)}).strict();import{installOrcaDeclarativeRuntime as xS}from"./orca-runtime.mjs";var dS={Stack:"group",Row:"group",Card:"region",Text:"text",Heading:"heading",Button:"button",IconButton:"button",Badge:"status",List:"list",ListItem:"listitem",Input:"textbox",Switch:"switch",Select:"combobox",Separator:"separator",Progress:"progressbar",Spinner:"status",EmptyState:"group",Link:"link",Code:"code",Textarea:"textbox",Checkbox:"checkbox",RadioGroup:"radiogroup",Slider:"slider",Field:"group",Tabs:"tablist",Tab:"tab",Collapsible:"group",Toolbar:"toolbar",Grid:"group",Table:"grid",Tree:"tree",Markdown:"document",CodeView:"code",Image:"img",KeyValue:"list",Callout:"note",Skeleton:"status",RelativeTime:"time",Unsupported:"unsupported"};function iy(e,n){if(typeof e!="number")return"";let i=Br.find(o=>o===n)??"short";return Vh(e,Date.now(),i,"en")}function pS(e){return typeof e=="object"&&e!==null&&"at"in e?iy(e.at,"format"in e?e.format:void 0):String(e??"")}var mS=["title","description","content","code","error","alt"];function fS(e){let n=[],i=[e.rows,e.items].flatMap(o=>Array.isArray(o)?o:[]);for(let o=i.shift();o!==void 0;o=i.shift()){if(typeof o!="object"||o===null)continue;let t={...o};typeof t.cells=="object"&&t.cells!==null&&n.push(...Object.values(t.cells).map(pS));for(let r of["label","value"])t[r]!==void 0&&t[r]!==null&&n.push(String(t[r]));Array.isArray(t.children)&&i.push(...t.children)}return n}function oy(e){if(typeof e=="string")return e;let n=e.props,i=mS.map(o=>n[o]).filter(o=>typeof o=="string");return e.type==="RelativeTime"?iy(n.at,n.format):e.type==="Tab"?typeof n.label=="string"?n.label:"":[...i,...fS(n),...e.children.map(oy)].join(" ")}var xp=e=>e.replace(/\s+/g," ").trim();function gS(e){let n=e.props,i=n.label??n.title;return typeof i=="string"?i:void 0}function vS(e,n){let i=e.props,o=e.type==="ListItem"&&i.onPress!==void 0;return{type:e.type,key:e.key?.startsWith("#")?void 0:e.key,role:o?"button":dS[e.type]??"generic",label:gS(e),text:xp(oy(e)),props:i,disabled:i.disabled===!0,path:n}}function $a(e){let n=[],i=(o,t)=>{n.push(vS(o,t)),o.children.forEach((r,a)=>{typeof r!="string"&&i(r,`${t}/${r.key??`#${a}`}`)})};return e&&i(e,e.key??"#0"),n}function ry(e,n){return e===void 0?!1:typeof n=="string"?xp(e)===xp(n):n.test(e)}function ay(e,n){return(n.type===void 0||e.type===n.type)&&(n.role===void 0||e.role===n.role)&&(n.text===void 0||ry(e.text,n.text))&&(n.label===void 0||ry(e.label,n.label))&&(n.testId===void 0||e.key===n.testId)}function sy(e){return e.filter(n=>!e.some(i=>i.path.startsWith(`${n.path}/`)))}function uy(e){return Object.entries(e).map(([n,i])=>`${n}: ${i instanceof RegExp?String(i):JSON.stringify(i)}`).join(", ")}function wp(e){if(typeof e=="string")return e;let n={};for(let[i,o]of Object.entries(e.props)){if(i.startsWith("$"))continue;let t=typeof o=="object"&&o!==null&&"$callback"in o;n[i]=t?"[handler]":o}return{type:e.type,...e.key&&!e.key.startsWith("#")?{key:e.key}:{},...Object.keys(n).length>0?{props:n}:{},...e.children.length>0?{children:e.children.map(wp)}:{}}}var hS={value:"defaultValue",checked:"defaultChecked",open:"defaultOpen",selected:"defaultSelected"};function Ip(e){return typeof e=="string"||typeof e=="boolean"||typeof e=="number"||Array.isArray(e)&&e.every(n=>typeof n=="string")}function yS(e){switch(e.type){case"Switch":case"Checkbox":case"Collapsible":return!1;case"Slider":return typeof e.props.min=="number"?e.props.min:0;case"Table":return[];default:return""}}function cy(){let e=new Map;function n(t){let r=ap(t.type);if(!r)throw new Error(`a ${t.type} has no value; expected a form control, Tabs or Table`);return r}function i(t){let r=e.get(t.path);if(r)return r;let{value:a}=n(t),s=t.props[a],u=t.props[hS[a]??""],d={value:Ip(s)?s:Ip(u)?u:yS(t),sent:0};return e.set(t.path,d),d}function o(t,r){let{value:a,change:s}=n(t);if(t.props[a]!==void 0&&t.props[s]===void 0)throw new Error(`the ${t.type} is read-only: it has a ${a} and no ${s}`);let u=i(t);return u.sent+=1,u.value=r,{value:r,id:u.sent}}return{observe(t){let r=new Map;for(let a of t){let s=ap(a.type);if(!s)continue;let u=e.get(a.path)??i(a),c=a.props[s.value],d=a.props[la];Ip(c)&&(typeof d=="number"?d:0)>=u.sent&&(u.value=c),r.set(a.path,u)}e=r},valueOf:t=>i(t).value,edit:o,typeInto(t,r,a){if(t.type!=="Input"&&t.type!=="Textarea")throw new Error(`type: a ${t.type} takes no text; expected an Input or Textarea`);let s=a?"":String(i(t).value),u=[];a&&u.push(o(t,s));for(let c of r)s+=c,u.push(o(t,s));return u},toggle(t){if(!["Switch","Checkbox","Collapsible"].includes(t.type))throw new Error(`toggle: expected a Switch, Checkbox or Collapsible, not a ${t.type}`);return o(t,!i(t).value)}}}function ly(e){let n=new Map,i=(s,u)=>{let c=n.get(s)??new Set;return c.add(u),n.set(s,c),{dispose:()=>c.delete(u)}},o=(s,u)=>{for(let c of n.get(s)??[])c(u)},t=s=>u=>typeof u=="object"&&u!==null&&s in u?Object.getOwnPropertyDescriptor(u,s)?.value:void 0,r=()=>{};return{facades:{plugin:{request:(s,u,c)=>{let d=typeof c=="object"&&c!==null&&"timeoutMs"in c?c.timeoutMs:void 0;return e("plugin.request",{name:s,...u===void 0?{}:{input:u},...typeof d=="number"?{timeoutMs:d}:{}}).then(t("output"))},on:(s,u)=>i(`message:${s}`,u)},storage:{get:s=>e("storage.get",{key:s}).then(u=>t("value")(u)??null),set:(s,u)=>e("storage.set",{key:s,value:u}).then(r),delete:s=>e("storage.delete",{key:s}).then(r),keys:async()=>{let s=t("keys")(await e("storage.keys"));return Array.isArray(s)?s.map(String):[]},onDidChange:s=>i("changed:storage",u=>s({key:String(u)}))},settings:{get:async s=>{let u=t("settings")(await e("settings.get"));return s===void 0?u:t(s)(u)},set:(s,u)=>e("settings.set",{key:s,value:u}).then(r),onDidChange:s=>i("changed:settings",u=>s({key:String(u)}))},secrets:{get:async s=>{let u=t("value")(await e("secrets.get",{key:s}));return typeof u=="string"?u:null},set:(s,u)=>e("secrets.set",{key:s,value:u}).then(r),delete:s=>e("secrets.delete",{key:s}).then(r)}},post:(s,u)=>o(`message:${s}`,u),changed:(s,u)=>o(`changed:${s}`,u)}}var dy=Symbol.for("orca.testing.stored");function py(e,n){return Object.freeze({[dy]:!0,version:n,value:e})}function bS(e){return typeof e=="object"&&e!==null&&dy in e}function my(e,n){for(let i of["plugin","workspace"])for(let[o,t]of Object.entries(n?.[i]??{}))e[i].set(o,bS(t)?{version:t.version,value:t.value}:{version:1,value:t})}var _S={sm:360,md:480};function fy(e,n){let i=e.filter(o=>!o.hideBelow||n>=_S[o.hideBelow]);return i.length>0?i:e.slice(0,1)}var Sp=(e,n)=>e.path.startsWith(`${n.path}/`);function ka(e,n){return n.filter(i=>i.type==="Tab"&&Sp(i,e)&&!i.path.slice(e.path.length+1).includes("/"))}function Pp(e,n,i){let o=ka(e,n);return o.find(t=>t.props.value===i)??o.find(t=>!t.disabled)}function gy(e,n){let i=[];for(let o of e)if(!i.some(t=>Sp(o,t))&&(o.type==="Collapsible"&&n(o)!==!0&&i.push(o),o.type==="Tabs")){let t=Pp(o,e,n(o));i.push(...ka(o,e).filter(r=>r!==t))}return e.filter(o=>!i.some(t=>Sp(o,t)))}function vy(e){return typeof e=="object"&&e!==null&&"key"in e&&typeof e.key=="string"}function Tp(e){return Array.isArray(e.props.rows)?e.props.rows.filter(vy):[]}function Ap(e){let n=[],i=Array.isArray(e.props.items)?[...e.props.items]:[];for(let o=i.shift();o!==void 0;o=i.shift())if(vy(o)){n.push(o);let t="children"in o?o.children:void 0;Array.isArray(t)&&i.push(...t)}return n}function Ae(e,n,i){if(e.type!==n)throw new Error(`${i}: expected a ${n}, not a ${e.type}`)}function Ep(e,n,i){let o=Tp(e).find(t=>t.key===n);if(!o||o.disabled===!0)throw new Error(`${i}: the Table has no enabled row "${n}"`);return o}function xa(e,n,i){let o=Ap(e).find(t=>t.key===n);if(!o)throw new Error(`${i}: the Tree has no item "${n}"`);return o}function hy(e){return e.hasChildren===!0||Array.isArray(e.children)&&e.children.length>0}function yy(e,n){let o=(Array.isArray(e.props.columns)?e.props.columns:[]).find(a=>typeof a=="object"&&a!==null&&"key"in a&&a.key===n);if(!o||typeof o!="object"||!("sortable"in o)||o.sortable!==!0)throw new Error(`sort: the Table has no sortable column "${n}"`);let t=e.props.sort,r=typeof t=="object"&&t!==null&&"column"in t&&t.column===n&&"direction"in t&&t.direction==="asc";return{column:n,direction:r?"desc":"asc"}}function $S(e,n){return e.type==="Tabs"?ka(e,n).map(o=>({value:o.props.value,disabled:o.disabled})):(Array.isArray(e.props.options)?e.props.options:[]).map(o=>typeof o=="object"&&o!==null&&"value"in o?{value:o.value,disabled:"disabled"in o&&o.disabled===!0}:{value:void 0,disabled:!0})}function by({host:e,controls:n,resolve:i,elements:o,dispatch:t,settled:r}){let a=new Map,s=d=>{let p=a.get(d.path);if(!p){let m=d.props.expanded??d.props.defaultExpanded;p=new Set(Array.isArray(m)?m.filter(f=>typeof f=="string"):[]),a.set(d.path,p)}return p},u=async(d,p,m,f)=>{let g=n.edit(d,m);t(p,[f],g.id),await r()},c=async(d,p,m,f)=>{let g=i(d,f);if(Ae(g,"Tree",f),!hy(xa(g,p,f)))throw new Error(`${f}: the Tree item "${p}" has no children`);let y=s(g);y.has(p)!==m&&(m?y.add(p):y.delete(p),t(g.props.onToggle,[{key:p,expanded:m}]),await r())};return{async press(d){let p=i(d,"press"),{href:m,onPress:f}=p.props;if(p.type==="Link"&&typeof m=="string")e.grantGesture(),e.bridge.call("shell.openExternal",{url:m}).catch(()=>{});else{if(f===void 0)throw new Error(`press: the ${p.type} has no onPress`);e.grantGesture()}t(f,[]),await r()},async type(d,p,m={}){let f=i(d,"type");for(let g of n.typeInto(f,p,m.replace===!0))t(f.props.onChange,[g.value],g.id),await r();m.submit&&(t(f.props.onSubmit,[n.valueOf(f)]),await r())},async submit(d){let p=i(d,"submit");t(p.props.onSubmit,[n.valueOf(p)]),await r()},async toggle(d){let p=i(d,"toggle"),m=n.toggle(p);t(p.props.onChange,[m.value],m.id),await r()},async select(d,p){let m=i(d,"select");if(!["Select","RadioGroup","Tabs"].includes(m.type))throw new Error(`select: expected a Select, RadioGroup or Tabs, not a ${m.type}`);let f=$S(m,o()).find(g=>g.value===p);if(!f||f.disabled)throw new Error(`select: the ${m.type} has no enabled option "${p}"`);await u(m,m.props.onChange,p,p)},async slide(d,p){let m=i(d,"slide");Ae(m,"Slider","slide");let f=typeof m.props.min=="number"?m.props.min:0,g=typeof m.props.max=="number"?m.props.max:100;if(!Number.isFinite(p)||pg)throw new Error(`slide: ${p} is outside the Slider's ${f} to ${g}`);await u(m,m.props.onChange,p,p)},async sort(d,p){let m=i(d,"sort");if(Ae(m,"Table","sort"),m.props.onSortChange===void 0)throw new Error("sort: the Table has no onSortChange");t(m.props.onSortChange,[yy(m,p)]),await r()},async selectRows(d,p){let m=i(d,"selectRows");Ae(m,"Table","selectRows");let f=m.props.selectionMode??"none";if(f==="none"||f==="single"&&p.length>1)throw new Error(`selectRows: the Table's selectionMode is ${String(f)}`);p.forEach(g=>Ep(m,g,"selectRows")),await u(m,m.props.onSelectionChange,[...p],{keys:[...p]})},async activateRow(d,p){let m=i(d,"activateRow");if(Ae(m,"Table","activateRow"),Ep(m,p,"activateRow"),m.props.onRowAction===void 0)throw new Error("activateRow: the Table has no onRowAction");t(m.props.onRowAction,[{key:p}]),await r()},async loadMore(d){let p=i(d,"loadMore");if(Ae(p,"Table","loadMore"),p.props.hasMore!==!0||p.props.onLoadMore===void 0)throw new Error("loadMore: the Table has no more rows (hasMore and onLoadMore)");t(p.props.onLoadMore,[]),await r()},expand:(d,p)=>c(d,p,!0,"expand"),collapse:(d,p)=>c(d,p,!1,"collapse"),async selectItem(d,p){let m=i(d,"selectItem");if(Ae(m,"Tree","selectItem"),xa(m,p,"selectItem").disabled===!0)throw new Error(`selectItem: the Tree item "${p}" is disabled`);await u(m,m.props.onSelect,p,{key:p})},async activateItem(d,p){let m=i(d,"activateItem");if(Ae(m,"Tree","activateItem"),xa(m,p,"activateItem").disabled===!0||!m.props.onAction)throw new Error(`activateItem: the Tree item "${p}" cannot be activated`);t(m.props.onAction,[{key:p}]),await r()},expandedOf:d=>{let p=i(d,"expandedOf");return Ae(p,"Tree","expandedOf"),Ap(p).map(m=>m.key).filter(m=>s(p).has(m))},columnsOf:(d,p={})=>{let m=i(d,"columnsOf");Ae(m,"Table","columnsOf");let g=(Array.isArray(m.props.columns)?m.props.columns:[]).flatMap(y=>{if(typeof y!="object"||y===null||!("key"in y))return[];let x="hideBelow"in y?y.hideBelow:void 0;return typeof y.key=="string"?[{key:y.key,hideBelow:x==="sm"||x==="md"?x:void 0}]:[]});return fy(g,p.width??Number.POSITIVE_INFINITY).map(y=>y.key)},rowsOf:d=>{let p=i(d,"rowsOf");return Ae(p,"Table","rowsOf"),Tp(p).map(m=>m.key)}}}var Be=e=>{let n=(e??"").replace(/\s+/g," ").trim();return JSON.stringify(n.length>60?`${n.slice(0,59)}…`:n)},_y=e=>Array.isArray(e)?e.length:0;function kS(e,n){let{props:i}=e;switch(e.type){case"Heading":return`Heading ${Be(e.text)}`;case"Callout":return`Callout ${String(i.tone??"neutral")} ${Be(e.label??e.text)}`;case"EmptyState":return`EmptyState ${Be(e.label)}`;case"Table":return`Table ${Be(e.label)}: ${_y(i.rows)} row(s)${i.hasMore===!0?", more":""}`;case"Tree":return`Tree ${Be(e.label)}: ${_y(i.items)} top-level item(s)`;case"Tabs":return`Tabs ${Be(e.label)}: ${Be(n.get(e.path))} selected`;case"Skeleton":case"Spinner":return`${e.type} ${Be(e.label??"Loading")}`;case"Text":return i.tone==="danger"||i.tone==="warning"?`Text ${String(i.tone)} ${Be(e.text)}`:null;default:return null}}function $y(e,n){let i=[];for(let o of e){if(o.type==="List"){let r=e.filter(a=>a.type==="ListItem"&&a.path.startsWith(`${o.path}/`)).length;i.push(`List ${Be(o.label)}: ${r} item(s)`);continue}let t=kS(o,n);t&&i.push(t)}return i.length>12?[...i.slice(0,12),`… ${i.length-12} more`]:i}function ky(e){return"path"in e}var wS=100,IS=()=>new Promise(e=>typeof setImmediate=="function"?setImmediate(e):setTimeout(e,0));async function xy(e,n){let i=n.host,o=new Map,t=(w,O)=>{for(let A of o.get(w)??[])A(O)},r=[],a=[],s=[],u={plugin:new Map,workspace:new Map};my(u,n.persisted);let c=n.visible??!0,d={document:"",revision:0,tree:null},p=cy(),m=ly(i.bridge.call),f=i.onDataChange(m.changed);function g(w,O){if(w===Ge.ready)t(Ge.hydrate,{panel:{id:n.panelId??"panel"},visible:c,plugin:Object.fromEntries(u.plugin),workspace:Object.fromEntries(u.workspace)});else if(w===Ge.render){let A=ey(O);if(!A.ok){a.push({kind:"refused",message:A.error}),A.document!==null&&A.revision!==null&&t(Ge.ack,{document:A.document,revision:A.revision,accepted:!1});return}s.push(...A.warnings.filter(F=>!s.includes(F))),d={document:A.document,revision:A.revision,tree:A.tree},p.observe($a(A.tree)),t(Ge.ack,{document:A.document,revision:A.revision,accepted:!0})}else if(w===Ge.error){let A=Qh.safeParse(O);a.push(A.success?{kind:"plugin",message:A.data.message,...A.data.stack?{stack:A.data.stack}:{}}:{kind:"plugin",message:String(O)})}else if(w===Ge.persist){let A=ny.safeParse(O);if(!A.success){a.push({kind:"refused",message:"persisted state Orca would not store"});return}for(let F of A.data.entries)u[F.scope].set(F.key,{version:F.version,value:F.value})}}let y=xS({post:g,awaitHydration:!0,colorScheme:n.theme??"dark",schedule:w=>r.push(w),bridge:{api:i.bridge.api,locale:n.locale??"en",host:{call:i.bridge.call,has:i.bridge.has},...m.facades,on(w,O){let A=o.get(w)??new Set;return A.add(O),o.set(w,A),{dispose:()=>A.delete(O)}}}});async function x(){for(let w=0;wgy($a(d.tree),w=>p.valueOf(w)),b=w=>sy(I().filter(O=>ay(O,w)));function T(w,O){let A=ky(w)?I().find(F=>F.path===w.path):b(w)[0];if(!A)throw new Error(ky(w)?`${O}: the element is no longer in the panel`:`${O}: nothing in the panel matches { ${uy(w)} }`);if(A.disabled)throw new Error(`${O}: the ${A.type} is disabled`);return A}function E(w,O,A){let F=typeof w=="object"&&w!==null&&"$callback"in w?w.$callback:null;typeof F=="string"&&t(Ge.event,{document:d.document,revision:d.revision,callback:F,args:O,...A===void 0?{}:{edit:A}})}await Promise.resolve(typeof e=="function"?{default:e}:e).then(w=>y.boot(w)).catch(w=>a.push({kind:"plugin",message:w instanceof Error?w.message:String(w),...w instanceof Error&&w.stack?{stack:w.stack}:{}})),await x();let z=by({host:i,controls:p,resolve:T,elements:I,dispatch:E,settled:x});return{host:i,errors:a,warnings:s,get refusals(){return i.refusals},find:w=>b(w)[0]??null,findAll:b,tree:()=>d.tree?wp(d.tree):null,drawnTree:()=>d.tree,summary:()=>{let w=$a(d.tree),O=I(),A=new Map(O.filter(F=>F.type==="Tabs").map(F=>[F.path,Pp(F,w,p.valueOf(F))?.label??""]));return $y(O,A)},get persisted(){let w=O=>Object.fromEntries([...u[O]].map(([A,F])=>[A,F.value]));return{plugin:w("plugin"),workspace:w("workspace"),storage:i.data().storage}},settled:x,...z,valueOf:w=>p.valueOf(T(w,"valueOf")),async emit(w,O){t(w,O),await x()},async post(w,O){m.post(w,O),await x()},async setVisible(w){c=w,t(Ge.visibility,{visible:w}),await x()},async rerender(){y.rerender(),await x()},async unmount(){y.dispose(),o.clear(),f()}}}var wy={workspaceId:l.string().min(1).max(2048),kind:l.enum(["worktree","folder"])},SS=l.object({...wy,path:l.string().min(1).max(32*1024),branch:l.string().max(1024)}),PS=l.object({...wy,path:l.string().min(1).max(32*1024)}),TS=l.object({workspaceId:l.string().min(1).max(2048).nullable(),paneKey:l.string().min(1).max(2048),terminalId:l.string().min(1).max(tt).optional(),title:l.string().max(Gr).optional(),state:l.enum(Nn),receivedAt:l.number().finite().positive(),mainAgent:l.object({state:l.enum(Nn),outcome:l.enum(mh).optional(),stateStartedAt:l.number().finite()}).optional()}),AS=l.object({context:mp}),Op={"workspace.created":SS,"workspace.removed":PS,"agent.status.changed":TS,"workspace.changed":AS};var Wr=["terminal.send","workspace.create.before","workspace.create.after","agent.launch.before","agent.prompt.before","agent.tool.before","agent.tool.after","editor.save.before"],nC=Wr.length,ES={"terminal.send":Ce,"workspace.create.before":Ce,"workspace.create.after":Ce,"agent.launch.before":Ce,"agent.prompt.before":Ce,"agent.tool.before":Ce,"agent.tool.after":Ce,"editor.save.before":Ce};function wa(e){return Wr.some(n=>n===e)}var rC=l.object({event:l.enum(Wr).meta({...ae("Hook the worker handles with `orca.hooks.on`.",Ce),[En]:ES}),onError:l.enum(["pass","deny"]).optional().meta(ae("What Orca does when this plugin's hook throws, times out, crashes or does not start: `pass` (the default) carries on as if it passed; `deny` refuses the action, naming the plugin, so a guard fails closed. Ignored for hooks that only observe.",Ce))}).strict().meta({id:"HookContribution",description:"A hook Orca runs through the worker before (or after) it acts. Requires `main` and the `trusted-worker` execution profile."});var aC=1024*1024,sC=new TextEncoder,uC=new Uint8Array(0);var vC=16*1024*1024,hC=16*1024*1024;var OS=256*1024;var wC=16*1024,Jr=16*1024*1024;var yt=2e3,Ln=l.strictObject({deny:l.string().min(1).max(500)}),NS=l.object({terminalId:l.string().min(1).max(tt),text:l.string().max(Jr),enter:l.boolean(),inputKind:l.enum(["driving","orchestration","launch"])}),zS=l.object({kind:l.enum(["worktree","folder"]),projectId:l.string().min(1).max(2048),name:l.string().min(1).max(1024),branch:l.string().min(1).max(1024).optional(),base:l.string().min(1).max(1024).optional()}),DS=l.object({workspaceId:l.string().min(1).max(2048),kind:l.enum(["worktree","folder"]),path:l.string().min(1).max(32*1024),branch:l.string().max(1024)}),CS=l.record(l.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256).refine(e=>!e.toUpperCase().startsWith("ORCA_"),"ORCA_* variables are reserved"),l.string().max(32*1024)).refine(e=>Object.keys(e).length<=64,"at most 64 variables"),jS=l.enum(["worktree","folder"]),LS=l.object({agent:l.string().min(1).max(64),workspaceId:l.string().min(1).max(2048).nullable(),workspaceKind:jS.nullable(),terminalId:l.string().min(1).max(tt).optional(),command:l.string().min(1).max(Jr),env:CS}),US=l.object({agent:l.string().min(1).max(64).nullable(),terminalId:l.string().min(1).max(tt),prompt:l.string().max(Jr),inputKind:l.enum(["driving","orchestration","launch"])}),Iy={agent:l.string().min(1).max(64),workspaceId:l.string().min(1).max(2048).nullable(),terminalId:l.string().min(1).max(tt).optional(),tool:l.string().min(1).max(256),input:l.unknown(),callId:l.string().min(1).max(256).optional()},RS=l.object(Iy),MS=l.object({...Iy,output:l.unknown().optional()}),ZS=l.object({workspaceId:l.string().min(1).max(2048).nullable(),path:l.string().min(1).max(32*1024),languageId:l.string().min(1).max(128).optional(),text:l.string().max(Jr)}),Xr={"terminal.send":{payload:NS,result:Ln,mutable:["text","enter"],deadlineMs:yt,summary:"Text Orca, the CLI or a plugin is about to send to a terminal. A person typing (on the desktop, a phone or a paired client) is never hooked, and prompts Orca submits to an agent take `agent.prompt.before` instead. Writes to one terminal stay in order while a hook decides. Rewrite `text` or `enter` with `next`, or return `{ deny }` to refuse the send."},"workspace.create.before":{payload:zS,result:Ln,mutable:["name","branch","base"],deadlineMs:yt,summary:"A worktree or folder workspace is about to be created. Change `name`, `branch` or `base` with `next`, or return `{ deny }` to refuse it."},"workspace.create.after":{payload:DS,result:null,mutable:[],deadlineMs:yt,summary:"A worktree or folder workspace was created. Observe only: Orca does not wait for it, and results are ignored."},"agent.launch.before":{payload:LS,result:Ln,mutable:["command","env"],deadlineMs:yt,summary:"Orca is about to start an agent CLI in a terminal, from any launcher (new tab, workspace create, CLI, automation, orchestration). Change `command` or add `env` with `next`, or return `{ deny }` to refuse the launch. Restores of saved sessions are not hooked."},"agent.prompt.before":{payload:US,result:Ln,mutable:["prompt"],deadlineMs:yt,summary:"Orca is about to submit a prompt to an agent in a terminal: a launch prompt, an orchestration dispatch, an issue or task prompt, or `orca terminal send` to an agent. A prompt a person submits is never hooked, and writes to one terminal stay in order while it decides. Rewrite `prompt` with `next`, or return `{ deny }` to refuse it."},"agent.tool.before":{payload:RS,result:Ln,mutable:["input"],deadlineMs:yt,summary:"An agent in an Orca terminal is about to run a tool. Claude Code waits for the answer: return `{ deny }` to refuse the call (the agent sees the reason) or change `input` with `next`; the person is still asked as usual. Other agents only report the call, so their results are ignored. Agents on SSH or WSL hosts are not hooked yet."},"agent.tool.after":{payload:MS,result:null,mutable:[],deadlineMs:yt,summary:"An agent in an Orca terminal finished a tool call (successfully or not). Observe only: Orca does not wait for it."},"editor.save.before":{payload:ZS,result:Ln,mutable:["text"],deadlineMs:yt,summary:"The person is about to save a text file from an Orca editor tab (an explicit save, not autosave). Change `text` with `next` (format on save) or return `{ deny }` to refuse the save, which shows your reason. Edits made while the hook ran stay unsaved."}};var Ia=class{constructor(n){this.event=n}event},NC=l.object({event:l.enum(Wr),payload:l.unknown()}),Sy=l.discriminatedUnion("decision",[l.object({decision:l.literal("continue"),payload:l.unknown()}),l.object({decision:l.literal("result"),result:l.unknown()})]);async function Py(e,n){let i=n;for(let o of e){let r=await o(i,a=>new Ia(a??i));if(r instanceof Ia)i=r.event;else if(r!=null)return{decision:"result",result:r}}return{decision:"continue",payload:i}}function VS(e){return e instanceof Error?e.message:String(e)}function Ty(e,n,i="timed out"){let o,t=new Promise((r,a)=>{o=setTimeout(()=>a(new Error(`${i} after ${n}ms`)),n)});return Promise.race([e,t]).finally(()=>clearTimeout(o))}function GS(e,n,i){let o=Xr[e];if(!Ue(n)||!Ue(i))return{ok:!1,reason:"next() was given something other than the event object"};let t={...n};for(let a of o.mutable)Object.hasOwn(i,a)&&(t[a]=i[a]);let r=o.payload.safeParse(t);return r.success?{ok:!0,payload:r.data}:{ok:!1,reason:r.error.issues[0]?.message??"invalid change"}}var Np=class extends Error{};async function Ay(e){let{event:n}=e,i=Xr[n],o=e.deadlineMs??i.deadlineMs,t=e.payload;for(let r of e.participants){let a=e.now(),s=()=>Math.round(e.now()-a),u=i.result!==null&&e.failsClosed?.(r)===!0,c=(f,g=!1)=>u&&!g?(e.log(r,`hook ${n} denied after ${s()}ms (onError: deny): ${f}`),{kind:"deny",pluginKey:r,reason:`${r} failed and denies on error: ${f}`}):(e.log(r,`hook ${n} skipped after ${s()}ms: ${f}`),null),d;try{if(e.start){let f=e.startTimeoutMs??o;await Ty(e.start(r),f,"worker did not start")}d=await Ty(e.invoke(r,t,o),o)}catch(f){let g=c(VS(f),f instanceof Np);if(g)return g;continue}let p=Sy.safeParse(d);if(!p.success){let f=c("the worker answered with something other than a hook decision");if(f)return f;continue}if(p.data.decision==="continue"){let f=GS(n,t,p.data.payload);f.ok?t=f.payload:e.log(r,`hook ${n}: change ignored: ${f.reason}`);continue}if(i.result===null)continue;let m=i.result.safeParse(p.data.result);if(!m.success){e.log(r,`hook ${n}: result ignored: return next(event) or { deny: reason }`);continue}return{kind:"deny",pluginKey:r,reason:m.data.deny}}return{kind:"continue",payload:t}}function FS(e){return typeof e!="object"||e===null||!("workspaceId"in e)||"worktreeId"in e?e:{...e,worktreeId:e.workspaceId}}function qr(e,n){return typeof e=="object"&&e!==null&&n in e?Object.getOwnPropertyDescriptor(e,n)?.value:void 0}function Sa(e,n){return e.add(n),{dispose:()=>{e.delete(n)}}}var BS=new Set(Fr("worker"));function Ey(){return{commands:new Map,events:new Map,hooks:new Map,panelRequests:new Map,dataListeners:{storage:new Set,settings:new Set}}}function Oy(e){let{tables:n,hostCall:i}=e,o=async(t,r)=>{await i(t,r)};return Object.freeze({api:Object.freeze({major:Le,minor:Ch}),commands:Object.freeze({register(t,r){return n.commands.set(t,r),{dispose:()=>{n.commands.delete(t)}}}}),events:Object.freeze({on(t,r){let a=sa.get(t)??t,s=n.events.get(a)??new Set;n.events.set(a,s);let u=a!==t||t==="agent.status.changed",c=Sa(s,p=>r(u?FS(p):p));if(t!=="workspace.changed")return c;let d=!0;return i("workspace.readContext").then(p=>d&&r({context:p})).catch(()=>{}),{dispose:()=>{d=!1,c.dispose()}}}}),hooks:Object.freeze({on(t,r){if(!wa(t))throw new TypeError(`orca.hooks.on: unknown hook ${String(t)}`);if(typeof r!="function")throw new TypeError("orca.hooks.on needs a handler function");let a=n.hooks.get(t)??new Set;return n.hooks.set(t,a),Sa(a,r)}}),host:Object.freeze({call:(t,r,a)=>i(t,r,a),has:t=>BS.has(t)}),panels:Object.freeze({handle(t,r){if(vt.parse(t),typeof r!="function")throw new TypeError("orca.panels.handle needs a handler function");return n.panelRequests.set(t,r),{dispose:()=>{n.panelRequests.get(t)===r&&n.panelRequests.delete(t)}}},post(t,r,a){vt.parse(t),e.postToPanels({event:t,payload:r,...a?.panel?{panel:a.panel}:{}})}}),storage:Object.freeze({get:async t=>qr(await i("storage.get",{key:t}),"value")??null,set:(t,r)=>o("storage.set",{key:t,value:r}),delete:t=>o("storage.delete",{key:t}),keys:async()=>{let t=qr(await i("storage.keys"),"keys");return Array.isArray(t)?t.filter(r=>typeof r=="string"):[]},onDidChange:t=>Sa(n.dataListeners.storage,t)}),settings:Object.freeze({get:async t=>{let r=qr(await i("settings.get"),"settings"),a=typeof r=="object"&&r!==null?{...r}:{};return t===void 0?a:qr(a,t)},set:(t,r)=>o("settings.set",{key:t,value:r}),onDidChange:t=>Sa(n.dataListeners.settings,t)}),secrets:Object.freeze({get:async t=>{let r=qr(await i("secrets.get",{key:t}),"value");return typeof r=="string"?r:null},set:(t,r)=>o("secrets.set",{key:t,value:r}),delete:t=>o("secrets.delete",{key:t})}),grantedCapabilities:Object.freeze([...e.grantedCapabilities]),log:t=>e.log(String(t))})}var Ny={id:"test-panel",surface:"panel",contributionId:"panel"};function HS(e){return Object.hasOwn(Op,e)}function KS(e){return e instanceof Error?e.message:String(e)}async function zy(e,n){let{host:i}=n,o=new Set(n.events),t=n.hooks.map(b=>typeof b=="string"?{event:b}:b),r=new Set(t.map(b=>b.event)),a=new Set(t.filter(b=>b.onError==="deny").map(b=>b.event)),s=Ey(),u=[],c=[],d=!0,p=e.default;if(typeof p!="function")throw new TypeError(typeof e.activate=="function"?"mountWorker: the module exports activate by name, but Orca calls the default export: write `export default function activate(orca)`":"mountWorker: the module has no default-exported activate(orca) function");let m=e.deactivate;if(m!==void 0&&typeof m!="function")throw new TypeError("mountWorker: the module exports a deactivate that is not a function");let f=Oy({tables:s,hostCall:(b,T)=>i.worker.call(b,T),postToPanels:b=>{c.push(b)},log:b=>{u.push(b)},grantedCapabilities:i.capabilities}),g=i.onDataChange((b,T)=>{for(let E of s.dataListeners[b])E({key:T})});await p(f);let y=n.commands?[...s.commands.keys()].find(b=>!n.commands?.includes(b)):void 0;if(y!==void 0)throw new Error(`registered undeclared command ${y}: list it in contributes.commands`);async function x(b,T,E){let z=s.panelRequests.get(b);if(!z)throw Fe("unknown_method",`no panel handler named ${b}`);let w={...Ny,contributionId:E??Ny.contributionId};return z(T,{panel:w,signal:new AbortController().signal})}let I=i.routeRequests((b,T)=>x(b,T));return{host:i,logs:u,posts:c,get refusals(){return i.refusals},async emit(b,T){if(!HS(b))throw new Error(`emit: "${b}" is not an event Orca sends to workers`);if(!o.has(b))throw new Error(`emit: "${b}" never arrives: it is not in contributes.events`);let E=Op[b].safeParse(T);if(!E.success)throw new TypeError(`emit: that ${b} payload is not one Orca sends: ${E.error.issues[0]?.message??""}`);let z=s.events.get(sa.get(b)??b)??[];await Promise.all([...z].map(async w=>w(E.data))),await i.idle()},hooks:{async fire(b,T){if(!wa(b))throw new Error(`hooks.fire: "${b}" is not a hook Orca runs`);if(!r.has(b))throw new Error(`hooks.fire: "${b}" never runs: it is not in contributes.hooks`);let E=Xr[b].payload.safeParse(T);if(!E.success)throw new TypeError(`hooks.fire: that ${b} event is not one Orca sends: ${E.error.issues[0]?.message??""}`);let z=await Ay({event:b,payload:E.data,participants:["worker"],invoke:(w,O)=>Py(s.hooks.get(b)??[],O),log:(w,O)=>{u.push(O)},now:()=>performance.now(),failsClosed:()=>a.has(b)});return await i.idle(),z.kind==="deny"?{kind:"deny",reason:z.reason}:{kind:"continue",event:z.payload}}},async command(b,T){let E=s.commands.get(b);if(!E)throw new Error(`command: the worker registered no "${b}"`);let z=await E(T,{signal:new AbortController().signal});return await i.idle(),z},async request(b,T,E={}){let z=await x(b,T,E.panel);return await i.idle(),z},async deactivate(){if(d){d=!1,g(),I(),s.events.clear(),s.hooks.clear(),s.commands.clear(),s.panelRequests.clear();try{await(typeof m=="function"?m():void 0)}catch(b){throw new Error(`deactivate threw: ${KS(b)}`,{cause:b})}await i.idle()}}}}import{test as qj,describe as Yj,beforeEach as Qj,afterEach as eL}from"node:test";import{default as nL}from"node:assert/strict";import{runInThisContext as tP}from"node:vm";function Dy(e){if(typeof e!="object"||e===null||!("on"in e)||!("document"in e))return!1;let n=e.document;return typeof e.on=="function"&&typeof n=="object"&&n!==null&&"session"in n&&typeof n.session=="function"&&"applyEdit"in n&&typeof n.applyEdit=="function"}var He=1;var Dp=["invalid_request","invalid_params","unknown_method","capability_denied","consent_required","not_permitted","rate_limited","unavailable","action_failed","cancelled","timeout","conflict","too_large"],WS=new Set(["rate_limited","unavailable","timeout","conflict"]);function JS(e){return Dp.find(n=>n===e)??"action_failed"}function bt(e,n,i){let o=JS(e);return{code:o,message:n.slice(0,8192),retryable:WS.has(o),...i===void 0?{}:{retryAfterMs:i}}}var zp=l.number().int().nonnegative(),Cy=l.string().min(1).max(128),XS=l.object({code:l.string().max(64),message:l.string().max(8192),retryable:l.boolean(),retryAfterMs:l.number().int().nonnegative().optional()}),nj=l.discriminatedUnion("kind",[l.object({orca:l.literal(He),kind:l.literal("req"),id:zp,method:Cy,params:l.unknown().optional()}),l.object({orca:l.literal(He),kind:l.literal("res"),id:zp,result:l.unknown().optional(),error:XS.optional()}),l.object({orca:l.literal(He),kind:l.literal("evt"),event:Cy,payload:l.unknown().optional()}),l.object({orca:l.literal(He),kind:l.literal("cancel"),id:zp})]);var Vt={ready:"ready",hello:"hello",theme:"theme",ping:"ping",pong:"pong",editorKeydown:"editor.keydown",editorDocument:"editor.document",editorSubscribed:"editor.subscribed",push:"plugin.push"},Un={applyEdit:"editor.applyEdit",flush:"editor.flush"},jy=64*1024;var qS=l.string().min(32).max(128),sj=l.object({sessionToken:qS,action:l.string().min(1),params:l.unknown().optional()}).strict();var Cp=64*1024*1024,mj=16*1024*1024;var jp=1e3,YS=l.strictObject({baseVersion:l.number().int().nonnegative(),content:l.discriminatedUnion("kind",[l.strictObject({kind:l.literal("text"),text:l.string()}),l.strictObject({kind:l.literal("bytes"),bytes:l.instanceof(ArrayBuffer)})])});function Ly(e){let n=YS.safeParse(e);return n.success?n.data:null}var Lp=bt("conflict","The file changed outside this editor; edit the latest document."),Uy=bt("too_large","The edit is larger than Orca accepts; the file keeps its last accepted edit.");var Ry="__orcaPluginFrameTransport",My="__orcaDeclarativePost";var Zy=` +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of e.seen.entries()){let s=a[1];if(n===a[0]){r(a);continue}if(e.external){let c=e.external.registry.get(a[0])?.id;if(n!==a[0]&&c){r(a);continue}}if(e.metadataRegistry.get(a[0])?.id){r(a);continue}if(s.cycle){r(a);continue}s.count>1&&e.reused==="ref"&&r(a)}e.external&&(e.sharedDefsExtractedFor=e.external)}function Qf(e){let n=e.anyOf;if(!Array.isArray(n)||n.length===0||e.type!==void 0)return;let i=[];for(let o of n){if(!o||typeof o!="object")return;Qf(o);let t=Object.keys(o);if(t.length!==1||t[0]!=="type")return;let r=o.type;for(let a of Array.isArray(r)?r:[r]){if(typeof a!="string")return;i.includes(a)||i.push(a)}}delete e.anyOf,e.type=i.length===1?i[0]:i}var eg=new Set(["type","properties","required","additionalProperties"]),qf=["oneOf","anyOf"];function Yf(e){let n=e.additionalProperties;return n===void 0||n===!1||typeof n!="object"||n===null?null:Object.keys(n).length?n:null}function il(e){let n=[];for(let r of e){if(typeof r!="object"||r.type!=="object")return null;for(let a in r)if(!eg.has(a))return null;n.push(r)}let i={},o=new Set;for(let r of n){for(let a in r.properties){if(Object.prototype.hasOwnProperty.call(i,a))continue;let s=[];for(let c of n){let d=c.properties?.[a]??Yf(c);d!=null&&(s.some(p=>JSON.stringify(p)===JSON.stringify(d))||s.push(d))}let u=s.length===1?s[0]:il(s)??{allOf:s};se(i,a,u)}for(let a of r.required??[])o.add(a)}let t={type:"object",properties:i};if(o.size&&(t.required=[...o]),n.every(r=>r.additionalProperties===!1))t.additionalProperties=!1;else{let r=[];for(let a of n){let s=Yf(a);s&&!r.some(u=>JSON.stringify(u)===JSON.stringify(s))&&r.push(s)}r.length===1?t.additionalProperties=r[0]:r.length>1&&(t.additionalProperties={allOf:r})}return t}function cx(e){let n=e.allOf;if(!Array.isArray(n)||n.length<2)return;for(let t of eg)if(t in e)return;let i=n.filter(t=>qf.some(r=>Array.isArray(t[r]))),o=null;if(!i.length)o=il(n);else{let t=i[0],r=qf.find(u=>Array.isArray(t[u]));if(Object.keys(t).length!==1)return;let a=n.filter(u=>u!==t),s=t[r].map(u=>il([...a,u]));if(s.some(u=>!u))return;o={[r]:s}}o&&(delete e.allOf,kr(e,o))}function lt(e,n){let i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");let o=s=>{let u=e.seen.get(s);if(u.ref===null)return;let c=u.def??u.schema,d={...c},p=u.ref;if(u.ref=null,p){o(p);let f=e.seen.get(p),g=f.schema;if(g.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(c.allOf=c.allOf??[],c.allOf.push(g)):kr(c,g),kr(c,d),s._zod.parent===p)for(let x in c)x==="$ref"||x==="allOf"||x in d||delete c[x];if(g.$ref&&f.def)for(let x in c)x==="$ref"||x==="allOf"||x in f.def&&JSON.stringify(c[x])===JSON.stringify(f.def[x])&&delete c[x]}let m=s._zod.parent;if(m&&m!==p){o(m);let f=e.seen.get(m);if(f?.schema.$ref&&(c.$ref=f.schema.$ref,f.def))for(let g in c)g==="$ref"||g==="allOf"||g in f.def&&JSON.stringify(c[g])===JSON.stringify(f.def[g])&&delete c[g]}e.override({zodSchema:s,jsonSchema:c,path:u.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let s of[...e.seen.entries()].reverse())o(s[0]);if(e.target!=="openapi-3.0")for(let s of e.seen.entries())Qf(s[1].def??s[1].schema);for(let s of e.deferred)s();if(e.intersections.length){let s=new Map;for(let u of e.seen.values())for(let c of[u.schema,u.def]){let d=c?.allOf;if(!Array.isArray(d))continue;let p=s.get(d);p?p.push(c):s.set(d,[c])}for(let u of e.intersections)for(let c of s.get(u)??[])cx(c)}}let t={};if(e.target==="draft-2020-12"?t.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?t.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?t.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){let s=e.external.registry.get(n)?.id;if(!s)throw new Error("Schema is missing an `id` property");t.$id=e.external.uri(s)}kr(t,i.defId?i.schema:i.def??i.schema);let r=e.metadataRegistry.get(n)?.id;r!==void 0&&t.id===r&&delete t.id;let a=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let s of e.seen.entries()){let u=s[1];u.def&&u.defId&&(u.def.id===u.defId&&delete u.def.id,se(a,u.defId,u.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(a).length>0&&(e.target==="draft-2020-12"?t.$defs=a:t.definitions=a);try{let s=JSON.parse(JSON.stringify(t));return Object.defineProperty(s,"~standard",{value:{...n["~standard"],jsonSchema:{input:bn(n,"input",e.processors),output:bn(n,"output",e.processors)}},enumerable:!1,writable:!1}),s}catch{throw new Error("Error converting schema to JSON.")}}function me(e,n){let i=n??{seen:new Set};if(i.seen.has(e))return!1;i.seen.add(e);let o=e._zod.def;if(o.type==="transform")return!0;if(o.type==="array")return me(o.element,i);if(o.type==="set")return me(o.valueType,i);if(o.type==="lazy")return me(o.getter(),i);if(o.type==="promise"||o.type==="optional"||o.type==="nonoptional"||o.type==="nullable"||o.type==="readonly"||o.type==="default"||o.type==="prefault"||o.type==="catch")return me(o.innerType,i);if(o.type==="intersection")return me(o.left,i)||me(o.right,i);if(o.type==="record"||o.type==="map")return me(o.keyType,i)||me(o.valueType,i);if(o.type==="pipe")return e._zod.traits.has("$ZodCodec")?!0:me(o.in,i)||me(o.out,i);if(o.type==="object"){for(let t in o.shape)if(me(o.shape[t],i))return!0;return!1}if(o.type==="union"){for(let t of o.options)if(me(t,i))return!0;return!1}if(o.type==="tuple"){for(let t of o.items)if(me(t,i))return!0;return!!(o.rest&&me(o.rest,i))}return!1}var ol=(e,n={})=>i=>{let o=ut({...i,processors:n});return W(e,o),ct(o,e),lt(o,e)},bn=(e,n,i={})=>o=>{let{libraryOptions:t,target:r}=o??{},a=ut({...t??{},target:r,io:n,processors:i});return W(e,a),ct(a,e),lt(a,e)};var _n=(e,n,i)=>{(e[n]===void 0||i>e[n])&&(e[n]=i)},$n=(e,n,i)=>{(e[n]===void 0||i{_n(e,"minimum",n),$n(e,"maximum",n)},og=(e,n)=>{e.multipleOf??(e.multipleOf=[]),e.multipleOf.includes(n)||e.multipleOf.push(n)},ag=(e,n)=>{e.patterns??(e.patterns=new Set),e.patterns.add(n)},sg=(e,n)=>{e.mime=e.mime?e.mime.filter(i=>n.includes(i)):[...n]},ug=(e,n)=>{e.format=n,n.includes("int")&&(e.isInt=!0)},ng=(e,n)=>_n(e,"minimum",n.minimum),rg=(e,n)=>$n(e,"maximum",n.maximum),ig=e=>(n,i)=>{ug(n,i.format);let[o,t]=e[i.format];_n(n,"minimum",o),$n(n,"maximum",t)},lx={greater_than:(e,n)=>_n(e,n.inclusive?"minimum":"exclusiveMinimum",n.value),less_than:(e,n)=>$n(e,n.inclusive?"maximum":"exclusiveMaximum",n.value),multiple_of:(e,n)=>og(e,n.value),number_format:ig(Gn),bigint_format:ig(Fn),min_length:ng,max_length:rg,length_equals:(e,n)=>tg(e,n.length),min_size:ng,max_size:rg,size_equals:(e,n)=>tg(e,n.size),string_format:(e,n)=>{ug(e,n.format),n.pattern&&ag(e,n.pattern),(n.format==="base64"||n.format==="base64url")&&(e.contentEncoding=n.format),(n.local||n.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,n)=>sg(e,n.mime)};function ie(e){let n={},i=e._zod.def,o=e._zod.traits.has("$ZodCheck")?[e,...i.checks??[]]:i.checks??[];for(let r of o)lx[r._zod.def.check]?.(n,r._zod.def);let t=e._zod.bag;t.minimum!==void 0&&_n(n,"minimum",t.minimum),t.exclusiveMinimum!==void 0&&_n(n,"exclusiveMinimum",t.exclusiveMinimum),t.maximum!==void 0&&$n(n,"maximum",t.maximum),t.exclusiveMaximum!==void 0&&$n(n,"exclusiveMaximum",t.exclusiveMaximum),t.multipleOf!==void 0&&og(n,t.multipleOf),t.format!==void 0&&(n.format??(n.format=t.format),t.format.includes("int")&&(n.isInt=!0)),t.mime&&sg(n,t.mime);for(let r of t.patterns??[])ag(n,r);return n}var dx={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},px=new Map([[Ai,ds],[sr,ps]]),cg=e=>px.get(e)??e,ul=(e,n,i,o)=>{let t=i;t.type="string";let{minimum:r,maximum:a,format:s,patterns:u,contentEncoding:c,laxFormat:d}=ie(e);if(typeof r=="number"&&(t.minLength=r),typeof a=="number"&&(t.maxLength=a),s&&(t.format=dx[s]??s,t.format===""&&delete t.format,(s==="time"||d)&&delete t.format),c&&(t.contentEncoding=c),u&&u.size>0){let p=[...u].map(cg);p.length===1?t.pattern=p[0].source:p.length>1&&(t.allOf=[...p.map(m=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:m.source}))])}},cl=(e,n,i,o)=>{let t=i,{minimum:r,maximum:a,multipleOf:s,exclusiveMaximum:u,exclusiveMinimum:c,isInt:d}=ie(e);t.type=d?"integer":"number";let p=typeof c=="number"&&c>=(r??Number.NEGATIVE_INFINITY),m=typeof u=="number"&&u<=(a??Number.POSITIVE_INFINITY),f=n.target==="draft-04"||n.target==="openapi-3.0";if(p?f?(t.minimum=c,t.exclusiveMinimum=!0):t.exclusiveMinimum=c:typeof r=="number"&&(t.minimum=r),m?f?(t.maximum=u,t.exclusiveMaximum=!0):t.exclusiveMaximum=u:typeof a=="number"&&(t.maximum=a),s){let g=new Set;for(let I of s)Number.isFinite(I)&&I!==0?g.add(Math.abs(I)):re(e,n,t,o,`A multipleOf divisor of ${I} cannot be represented in JSON Schema`);let[y,...x]=g;y!==void 0&&(t.multipleOf=y),x.length&&(t.allOf=[...t.allOf??[],...x.map(I=>({multipleOf:I}))])}},ll=(e,n,i,o)=>{i.type="boolean"},dl=(e,n,i,o)=>{re(e,n,i,o,"BigInt cannot be represented in JSON Schema")},pl=(e,n,i,o)=>{re(e,n,i,o,"Symbols cannot be represented in JSON Schema")},ml=(e,n,i,o)=>{n.target==="openapi-3.0"?(i.type="string",i.nullable=!0,i.enum=[null]):i.type="null"},fl=(e,n,i,o)=>{re(e,n,i,o,"Undefined cannot be represented in JSON Schema")},gl=(e,n,i,o)=>{re(e,n,i,o,"Void cannot be represented in JSON Schema")},vl=(e,n,i,o)=>{i.not={}},hl=(e,n,i,o)=>{},yl=(e,n,i,o)=>{},bl=(e,n,i,o)=>{re(e,n,i,o,"Date cannot be represented in JSON Schema")},_l=(e,n,i,o)=>{let t=e._zod.def,r=Ft(t.entries);if(r.length===0){i.not={};return}r.every(a=>typeof a=="number")&&(i.type="number"),r.every(a=>typeof a=="string")&&(i.type="string"),i.enum=r},$l=(e,n,i,o)=>{let t=e._zod.def;if(t.values.length===0){i.not={};return}let r=[];for(let a of t.values)if(a===void 0){if(re(e,n,i,o,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof a=="bigint"){if(re(e,n,i,o,"BigInt literals cannot be represented in JSON Schema"))return;r.push(Number(a))}else r.push(a);if(r.length!==0)if(r.length===1){let a=r[0];i.type=a===null?"null":typeof a,n.target==="draft-04"||n.target==="openapi-3.0"?i.enum=[a]:i.const=a}else r.every(a=>typeof a=="number")&&(i.type="number"),r.every(a=>typeof a=="string")&&(i.type="string"),r.every(a=>typeof a=="boolean")&&(i.type="boolean"),r.every(a=>a===null)&&(i.type="null"),i.enum=r},kl=(e,n,i,o)=>{re(e,n,i,o,"NaN cannot be represented in JSON Schema")},xl=(e,n,i,o)=>{let t=i,r=e._zod.pattern;if(!r)throw new Error("Pattern not found in template literal");t.type="string",t.pattern=r.source},wl=(e,n,i,o)=>{let t=i;t.type="string",t.format="binary",t.contentEncoding="binary";let{minimum:r,maximum:a,mime:s}=ie(e);r!==void 0&&(t.minLength=r),a!==void 0&&(t.maxLength=a),s&&(s.length===0?t.not={}:s.length===1?t.contentMediaType=s[0]:t.anyOf=s.map(u=>({contentMediaType:u})))},Il=(e,n,i,o)=>{i.type="boolean"},Sl=(e,n,i,o)=>{re(e,n,i,o,"Custom types cannot be represented in JSON Schema")},Pl=(e,n,i,o)=>{re(e,n,i,o,"Function types cannot be represented in JSON Schema")},Tl=(e,n,i,o)=>{re(e,n,i,o,"Transforms cannot be represented in JSON Schema")},Al=(e,n,i,o)=>{re(e,n,i,o,"Map cannot be represented in JSON Schema")},El=(e,n,i,o)=>{re(e,n,i,o,"Set cannot be represented in JSON Schema")},Ol=(e,n,i,o)=>{let t=i,r=e._zod.def,{minimum:a,maximum:s}=ie(e);typeof a=="number"&&(t.minItems=a),typeof s=="number"&&(t.maxItems=s),t.type="array",t.items=W(r.element,n,{...o,path:[...o.path,"items"]})};function xr(e){let n=e._zod.def;return n.type==="pipe"&&n.in._zod.traits.has("$ZodTransform")?xr(n.out):n.type==="catch"?xr(n.innerType):e._zod.optin}var Nl=(e,n,i,o)=>{let t=i,r=e._zod.def,a=r.shape;if(Object.getOwnPropertySymbols(a).length&&re(e,n,t,o,"Symbol keys cannot be represented in JSON Schema"))return;t.type="object",t.properties={};for(let c in a)se(t.properties,c,W(a[c],n,{...o,path:[...o.path,"properties",c]}));let u=[];for(let c of Object.keys(a)){let d=r.shape[c];(n.io==="input"?xr(d)===void 0:d._zod.optout===void 0)&&u.push(c)}u.length>0&&(t.required=u),r.catchall?._zod.def.type==="never"?t.additionalProperties=!1:r.catchall?r.catchall&&(t.additionalProperties=W(r.catchall,n,{...o,path:[...o.path,"additionalProperties"]})):n.io==="output"&&(t.additionalProperties=!1)},Po=(e,n,i,o)=>{let t=e._zod.def,r=t.inclusive===!1,a=t.options.map((s,u)=>W(s,n,{...o,path:[...o.path,r?"oneOf":"anyOf",u]}));r?i.oneOf=a:i.anyOf=a},zl=(e,n,i,o)=>{let t=e._zod.def,r=W(t.left,n,{...o,path:[...o.path,"allOf",0]}),a=W(t.right,n,{...o,path:[...o.path,"allOf",1]}),s=c=>"allOf"in c&&Object.keys(c).length===1,u=[...s(r)?r.allOf:[r],...s(a)?a.allOf:[a]];i.allOf=u,n.intersections.push(u)},Dl=(e,n,i,o)=>{let t=i,r=e._zod.def;t.type="array";let a=n.target==="draft-2020-12"?"prefixItems":"items",s=n.target==="draft-2020-12"||n.target==="openapi-3.0"?"items":"additionalItems",u=r.items.map((y,x)=>W(y,n,{...o,path:[...o.path,a,x]})),c=r.rest?W(r.rest,n,{...o,path:[...o.path,s,...n.target==="openapi-3.0"?[r.items.length]:[]]}):null,d=r.items.length;for(;d>0;){let y=r.items[d-1];if(!(n.io==="input"?xr(y)!==void 0:y._zod.optout==="optional"))break;d--}let p=r.items.length,m=!r.rest;n.target==="draft-2020-12"?(t.prefixItems=u,m?t.items=!1:c&&(t.items=c),d>0&&(t.minItems=d),m&&(t.maxItems=p)):n.target==="openapi-3.0"?(t.items={anyOf:u},c&&t.items.anyOf.push(c),d>0&&(t.minItems=d),m&&(t.maxItems=p)):(t.items=u,m?t.additionalItems=!1:c&&(t.additionalItems=c),d>0&&(t.minItems=d),m&&(t.maxItems=p));let{minimum:f,maximum:g}=ie(e);typeof f=="number"&&(t.minItems=f),typeof g=="number"&&(t.maxItems=g)};function al(e,n,i){if(n.$ref){if(i.has(n))return n;i.add(n);let g=e.get(n)?.def;if(!g)return n;let y=al(e,g,i);return y===g?n:y}for(let g of["anyOf","oneOf"]){let y=n[g];if(!Array.isArray(y))continue;let x=y.map(I=>al(e,I,i));x.some((I,b)=>I!==y[b])&&(n={...n,[g]:x})}let o=Array.isArray(n.type)?n.type:[n.type],t=!o.includes("string")&&o.some(g=>g==="number"||g==="integer"),r=n.enum??(n.const!==void 0?[n.const]:void 0);if(!t&&!r?.some(g=>typeof g=="number"))return n;let{minimum:a,maximum:s,exclusiveMinimum:u,exclusiveMaximum:c,multipleOf:d,format:p,id:m,...f}=n;return f.enum?f.enum=f.enum.map(g=>typeof g=="number"?String(g):g):typeof f.const=="number"&&(f.const=String(f.const)),t&&(f.type="string",r||(f.pattern=(o.includes("number")?Xe:er).source)),f}var sl=new WeakMap;function mx(e){let n=new Map;for(let o of e.seen.values())o.def&&!n.has(o.schema)&&n.set(o.schema,o);let i=new Map;for(let o of sl.get(e)??[]){let t=e.seen.get(o),r=(t?.def??t?.schema)?.propertyNames;if(!r||r===!0||i.has(r))continue;let a=al(n,r,new Set);a!==r&&i.set(r,a)}if(i.size)for(let o of e.seen.values())for(let t of[o.schema,o.def]){let r=t&&i.get(t.propertyNames);r&&(t.propertyNames=r)}}var Cl=(e,n,i,o)=>{let t=i,r=e._zod.def;t.type="object";let a=r.keyType,s=ie(a).patterns;if(r.mode==="loose"&&s&&s.size>0){let d=W(r.valueType,n,{...o,path:[...o.path,"patternProperties","*"]});t.patternProperties={};for(let p of s)se(t.patternProperties,cg(p).source,d)}else{if(n.target==="draft-07"||n.target==="draft-2020-12"){t.propertyNames=W(r.keyType,n,{...o,path:[...o.path,"propertyNames"]});let d=sl.get(n);d||(d=[],sl.set(n,d),n.deferred.push(()=>mx(n))),d.push(e)}t.additionalProperties=W(r.valueType,n,{...o,path:[...o.path,"additionalProperties"]})}let u=a._zod.values,c=n.io==="input"&&xr(r.valueType)!==void 0;if(u&&!r.partial&&!c){let d=[...u].filter(p=>typeof p=="string"||typeof p=="number");d.length>0&&(t.required=d.map(String))}},jl=(e,n,i,o)=>{let t=e._zod.def,r=W(t.innerType,n,o),a=n.seen.get(e);n.target==="openapi-3.0"?(a.ref=t.innerType,i.nullable=!0):i.anyOf=[r,{type:"null"}]},Ll=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},Ul=Symbol();function lg(e,n,i,o,t){let r=!1,a=JSON.stringify(e,(s,u)=>typeof u!="bigint"?u:(r=!0,null));return r?(re(n,i,o,t,"BigInt defaults cannot be represented in JSON Schema"),Ul):JSON.parse(a)}var Rl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType;let a=lg(t.defaultValue,e,n,i,o);a!==Ul&&(i.default=a)},Ml=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);if(r.ref=t.innerType,n.io!=="input")return;let a=lg(t.defaultValue,e,n,i,o);a!==Ul&&(i._prefault=a)},Zl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType;let a;try{a=t.catchValue(void 0)}catch{re(e,n,i,o,"Dynamic catch values are not supported in JSON Schema");return}i.default=a},Vl=(e,n,i,o)=>{let t=e._zod.def,r=t.in._zod.traits.has("$ZodTransform"),a=n.io==="input"?r?t.out:t.in:t.out;W(a,n,o);let s=n.seen.get(e);s.ref=a},Gl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType,i.readOnly=!0},Fl=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},To=(e,n,i,o)=>{let t=e._zod.def;W(t.innerType,n,o);let r=n.seen.get(e);r.ref=t.innerType},Bl=(e,n,i,o)=>{let t=e._zod.innerType;W(t,n,o);let r=n.seen.get(e);r.ref=t},So={string:ul,number:cl,boolean:ll,bigint:dl,symbol:pl,null:ml,undefined:fl,void:gl,never:vl,any:hl,unknown:yl,date:bl,enum:_l,literal:$l,nan:kl,template_literal:xl,file:wl,success:Il,custom:Sl,function:Pl,transform:Tl,map:Al,set:El,array:Ol,object:Nl,union:Po,intersection:zl,tuple:Dl,record:Cl,nullable:jl,nonoptional:Ll,default:Rl,prefault:Ml,catch:Zl,pipe:Vl,readonly:Gl,promise:Fl,optional:To,lazy:Bl};function Ao(e,n){if("_idmap"in e){let o=e,t=ut({...n,processors:So}),r={};for(let u of o._idmap.entries()){let[c,d]=u;W(d,t)}let a={},s={registry:o,uri:n?.uri,defs:r};t.external=s;for(let u of o._idmap.entries()){let[c,d]=u;ct(t,d),se(a,c,lt(t,d))}if(Object.keys(r).length>0){let u=t.target==="draft-2020-12"?"$defs":"definitions";a.__shared={[u]:r}}return{schemas:a}}let i=ut({...n,processors:So});return W(e,i),ct(i,e),lt(i,e)}var Eo=class{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(n){this.ctx.counter=n}get seen(){return this.ctx.seen}constructor(n){let i=n?.target??"draft-2020-12";i==="draft-4"&&(i="draft-04"),i==="draft-7"&&(i="draft-07"),this.ctx=ut({processors:So,target:i,...n?.metadata&&{metadata:n.metadata},...n?.unrepresentable&&{unrepresentable:n.unrepresentable},...n?.override&&{override:n.override},...n?.io&&{io:n.io}})}process(n,i={path:[],schemaPath:[]}){return W(n,this.ctx,i)}emit(n,i){i&&(i.cycles&&(this.ctx.cycles=i.cycles),i.reused&&(this.ctx.reused=i.reused),i.external&&(this.ctx.external=i.external)),this.ctx.sharedDefsExtractedFor=void 0,this.ctx.sharedEmitDoneFor=void 0,ct(this.ctx,n);let o=lt(this.ctx,n),{"~standard":t,...r}=o;return r}};var dg={};var An={};Ke(An,{ZodAny:()=>md,ZodArray:()=>hd,ZodBase64:()=>Jo,ZodBase64URL:()=>Xo,ZodBigInt:()=>Pn,ZodBigIntFormat:()=>Qo,ZodBoolean:()=>Sn,ZodCIDRv4:()=>Ko,ZodCIDRv6:()=>Wo,ZodCUID:()=>Mo,ZodCUID2:()=>Zo,ZodCatch:()=>Ud,ZodCodec:()=>zr,ZodCreditCard:()=>od,ZodCustom:()=>Dr,ZodCustomStringFormat:()=>jt,ZodDate:()=>Pr,ZodDefault:()=>Nd,ZodDiscriminatedUnion:()=>bd,ZodE164:()=>qo,ZodEmail:()=>jo,ZodEmoji:()=>Uo,ZodEnum:()=>xn,ZodExactOptional:()=>ra,ZodFile:()=>Td,ZodFunction:()=>Wd,ZodGUID:()=>Lo,ZodIBAN:()=>ad,ZodIPv4:()=>Bo,ZodIPv6:()=>Ho,ZodISODate:()=>pt,ZodISODateTime:()=>dt,ZodISODuration:()=>ft,ZodISOTime:()=>mt,ZodInstanceOf:()=>qd,ZodIntersection:()=>_d,ZodJWT:()=>Yo,ZodKSUID:()=>Fo,ZodLazy:()=>Bd,ZodLiteral:()=>Pd,ZodMAC:()=>id,ZodMap:()=>Id,ZodNaN:()=>Md,ZodNanoID:()=>Ro,ZodNever:()=>gd,ZodNonOptional:()=>ia,ZodNull:()=>dd,ZodNullable:()=>Od,ZodNumber:()=>In,ZodNumberFormat:()=>Lt,ZodObject:()=>Ar,ZodOptional:()=>Or,ZodPipe:()=>Nr,ZodPrefault:()=>Dd,ZodPreprocess:()=>Zd,ZodPromise:()=>Kd,ZodReadonly:()=>Vd,ZodRecord:()=>kn,ZodSet:()=>Sd,ZodString:()=>wn,ZodStringFormat:()=>X,ZodSuccess:()=>Ld,ZodSymbol:()=>cd,ZodTemplateLiteral:()=>Fd,ZodTransform:()=>Ad,ZodTuple:()=>kd,ZodType:()=>M,ZodULID:()=>Vo,ZodURL:()=>Sr,ZodUUID:()=>Ve,ZodUndefined:()=>ld,ZodUnion:()=>Er,ZodUnknown:()=>fd,ZodVoid:()=>vd,ZodXID:()=>Go,ZodXor:()=>yd,_ZodString:()=>Co,_default:()=>zd,_function:()=>xv,any:()=>ev,array:()=>Tr,base64:()=>Dg,base64url:()=>Cg,bigint:()=>Jg,boolean:()=>ud,catch:()=>Rd,check:()=>wv,cidrv4:()=>Ng,cidrv6:()=>zg,codec:()=>bv,creditCard:()=>Lg,cuid:()=>wg,cuid2:()=>Ig,currencyCode:()=>Gg,custom:()=>Iv,date:()=>nv,describe:()=>Sv,discriminatedUnion:()=>uv,e164:()=>jg,email:()=>fg,emoji:()=>kg,enum:()=>ta,exactOptional:()=>Ed,file:()=>gv,float32:()=>Bg,float64:()=>Hg,function:()=>xv,guid:()=>gg,hash:()=>Fg,hex:()=>Vg,hostname:()=>Zg,httpUrl:()=>$g,iban:()=>Ug,instanceof:()=>Tv,int:()=>zo,int32:()=>Kg,int64:()=>Xg,intersection:()=>$d,invertCodec:()=>_v,ipv4:()=>Ag,ipv6:()=>Og,json:()=>Ev,jwt:()=>Rg,keyof:()=>rv,ksuid:()=>Tg,lazy:()=>Hd,literal:()=>fv,looseObject:()=>av,looseRecord:()=>lv,mac:()=>Eg,map:()=>dv,meta:()=>Pv,nan:()=>yv,nanoid:()=>xg,nativeEnum:()=>mv,never:()=>ea,nonoptional:()=>jd,null:()=>pd,nullable:()=>Ir,nullish:()=>vv,number:()=>sd,object:()=>iv,optional:()=>Dt,partialRecord:()=>cv,pipe:()=>Do,prefault:()=>Cd,preprocess:()=>Ov,promise:()=>kv,readonly:()=>Gd,record:()=>wd,refine:()=>Jd,set:()=>pv,strictObject:()=>ov,string:()=>wr,stringFormat:()=>Mg,stringbool:()=>Av,success:()=>hv,superRefine:()=>Xd,symbol:()=>Yg,templateLiteral:()=>$v,transform:()=>na,tuple:()=>xd,uint32:()=>Wg,uint64:()=>qg,ulid:()=>Sg,undefined:()=>Qg,union:()=>Tn,unknown:()=>zt,url:()=>_g,uuid:()=>vg,uuidv4:()=>hg,uuidv6:()=>yg,uuidv7:()=>bg,void:()=>tv,xid:()=>Pg,xor:()=>sv});var Oo={};Ke(Oo,{endsWith:()=>dn,gt:()=>Me,gte:()=>we,includes:()=>cn,length:()=>Ot,lowercase:()=>sn,lt:()=>Re,lte:()=>xe,maxLength:()=>Et,maxSize:()=>st,mime:()=>mn,minLength:()=>qe,minSize:()=>Ze,multipleOf:()=>at,negative:()=>ko,nonnegative:()=>wo,nonpositive:()=>xo,normalize:()=>fn,overwrite:()=>De,positive:()=>$o,properties:()=>pn,property:()=>Io,regex:()=>an,size:()=>At,slugify:()=>yn,startsWith:()=>ln,toLowerCase:()=>vn,toUpperCase:()=>hn,trim:()=>gn,uppercase:()=>un});var pg=new WeakSet([Object.prototype,Error.prototype]);function No(e,n,i){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get(){let o=i(this);return Object.defineProperty(this,n,{value:o,configurable:!0,writable:!0}),o},set(o){Object.defineProperty(this,n,{value:o,configurable:!0,writable:!0})}})}var mg=(e,n)=>{Ba.init(e,n),e.name="ZodError";let i=Object.getPrototypeOf(e);pg.has(i)||(pg.add(i),No(i,"format",o=>t=>Xn(o,t)),No(i,"flatten",o=>t=>Jn(o,t)),No(i,"addIssue",o=>t=>{o.issues.push(t),o.message=JSON.stringify(o.issues,Bt,2)}),No(i,"addIssues",o=>t=>{o.issues.push(...t),o.message=JSON.stringify(o.issues,Bt,2)}),Object.defineProperty(i,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},gx=v("ZodError",mg),ke=v("ZodError",mg,void 0,{Parent:Error});var Hl=Xt(ke),Kl=qt(ke),Wl=Yt(ke),Jl=Qt(ke),Xl=ai(ke),ql=si(ke),Yl=ui(ke),Ql=ci(ke),ed=li(ke),td=di(ke),nd=pi(ke),rd=mi(ke);function hx(){oe.localeError||ee(Bi())}function Ct(){oe.memoizer||ee({memoizer:fr()})}var M=v("ZodType",(e,n)=>(hx(),U.init(e,n),e.def=n,e.type=n.type,e),{check(...e){let n=this.def;return this.clone(_.mergeDefs(n,{checks:[...n.checks??[],...e.map(i=>typeof i=="function"?{_zod:{check:i,def:{check:"custom"},onattach:[]}}:i)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,n){return H(this,e,n)},brand(){return this},register(e,n){return e.add(this,n),this},refine(e,n){return this.check(Jd(e,n))},superRefine(e,n){return this.check(Xd(e,n))},overwrite(e){return this.check(De(e))},optional(){return Dt(this)},exactOptional(){return Ed(this)},nullable(){return Ir(this)},nullish(){return Dt(Ir(this))},nonoptional(e){return jd(this,e)},array(){return Tr(this)},or(e){return Tn([this,e])},and(e){return $d(this,e)},transform(e){return Do(this,na(e))},default(e){return zd(this,e)},prefault(e){return Cd(this,e)},catch(e){return Rd(this,e)},pipe(e){return Do(this,e)},readonly(){return Gd(this)},describe(e){let n=this.clone();return ue.add(n,{description:e}),n},meta(...e){if(e.length===0)return ue.get(this);let n=this.clone();return ue.add(n,e[0]),n},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...n){return n.length===0?e(this):e(this,...n)},get"~standard"(){return _.hide(this,"~standard",{...wi(this),jsonSchema:{input:bn(this,"input"),output:bn(this,"output")}})},set"~standard"(e){_.own(this,"~standard",e)},parse:function e(n,i){return Hl(this,n,i,{callee:e})},parseAsync:async function e(n,i){return await Kl(this,n,i,{callee:e})},safeParse(e,n){return Wl(this,e,n)},async safeParseAsync(e,n){return Jl(this,e,n)},get spa(){return this?.safeParseAsync},set spa(e){_.own(this,"spa",e)},validate(e,n){return qn(this,e,n)},validateAsync(e,n){return Yn(this,e,n)},encode:function e(n,i){return Xl(this,n,i,{callee:e})},decode:function e(n,i){return ql(this,n,i,{callee:e})},encodeAsync:async function e(n,i){return await Yl(this,n,i,{callee:e})},decodeAsync:async function e(n,i){return await Ql(this,n,i,{callee:e})},safeEncode(e,n){return ed(this,e,n)},safeDecode(e,n){return td(this,e,n)},async safeEncodeAsync(e,n){return nd(this,e,n)},async safeDecodeAsync(e,n){return rd(this,e,n)},toJSONSchema(e){return ol(this,{})(e)},get description(){return ue.get(this)?.description},get _def(){return this._zod.def}}),Co=v("_ZodString",(e,n)=>{It.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ul(e,i,o,t)},_.derived({format:e=>ie(e).format??null,minLength:e=>ie(e).minimum??null,maxLength:e=>ie(e).maximum??null},{regex(...e){return this.check(an(...e))},includes(...e){return this.check(cn(...e))},startsWith(...e){return this.check(ln(...e))},endsWith(...e){return this.check(dn(...e))},min(...e){return this.check(qe(...e))},max(...e){return this.check(Et(...e))},length(...e){return this.check(Ot(...e))},nonempty(...e){return this.check(qe(1,...e))},lowercase(e){return this.check(sn(e))},uppercase(e){return this.check(un(e))},trim(){return this.check(gn())},normalize(...e){return this.check(fn(...e))},toLowerCase(){return this.check(vn())},toUpperCase(){return this.check(hn())},slugify(){return this.check(yn())}})),wn=v("ZodString",(e,n)=>{It.init(e,n),Co.init(e,n)},{email(e){return this.check(Qi(jo,e))},url(e){return this.check(hr(Sr,e))},jwt(e){return this.check(_o(Yo,e))},emoji(e){return this.check(oo(Uo,e))},guid(e){return this.check(eo(Lo,e))},uuid(e){return this.check(to(Ve,e))},uuidv4(e){return this.check(no(Ve,e))},uuidv6(e){return this.check(ro(Ve,e))},uuidv7(e){return this.check(io(Ve,e))},nanoid(e){return this.check(ao(Ro,e))},cuid(e){return this.check(so(Mo,e))},cuid2(e){return this.check(uo(Zo,e))},ulid(e){return this.check(co(Vo,e))},base64(e){return this.check(ho(Jo,e))},base64url(e){return this.check(yo(Xo,e))},xid(e){return this.check(lo(Go,e))},ksuid(e){return this.check(po(Fo,e))},ipv4(e){return this.check(mo(Bo,e))},ipv6(e){return this.check(fo(Ho,e))},cidrv4(e){return this.check(go(Ko,e))},cidrv6(e){return this.check(vo(Wo,e))},e164(e){return this.check(bo(qo,e))},datetime(e){return this.check(yr(dt,e))},date(e){return this.check(br(pt,e))},time(e){return this.check(_r(mt,e))},duration(e){return this.check($r(ft,e))}});function wr(e){return $c(wn,e)}var X=v("ZodStringFormat",(e,n)=>{K.init(e,n),Co.init(e,n)}),dt=v("ZodISODateTime",(e,n)=>{du.init(e,n),X.init(e,n)}),pt=v("ZodISODate",(e,n)=>{pu.init(e,n),X.init(e,n)}),mt=v("ZodISOTime",(e,n)=>{mu.init(e,n),X.init(e,n)}),ft=v("ZodISODuration",(e,n)=>{fu.init(e,n),X.init(e,n)}),jo=v("ZodEmail",(e,n)=>{eu.init(e,n),X.init(e,n)});function fg(e){return Qi(jo,e)}var Lo=v("ZodGUID",(e,n)=>{Ys.init(e,n),X.init(e,n)});function gg(e){return eo(Lo,e)}var Ve=v("ZodUUID",(e,n)=>{Qs.init(e,n),X.init(e,n)});function vg(e){return to(Ve,e)}function hg(e){return no(Ve,e)}function yg(e){return ro(Ve,e)}function bg(e){return io(Ve,e)}var Sr=v("ZodURL",(e,n)=>{ru.init(e,n),X.init(e,n)});function _g(e){return hr(Sr,e)}function $g(e){return hr(Sr,{protocol:Qn,hostname:fs,..._.normalizeParams(e)})}var Uo=v("ZodEmoji",(e,n)=>{iu.init(e,n),X.init(e,n)});function kg(e){return oo(Uo,e)}var Ro=v("ZodNanoID",(e,n)=>{ou.init(e,n),X.init(e,n)});function xg(e){return ao(Ro,e)}var Mo=v("ZodCUID",(e,n)=>{au.init(e,n),X.init(e,n)});function wg(e){return so(Mo,e)}var Zo=v("ZodCUID2",(e,n)=>{su.init(e,n),X.init(e,n)});function Ig(e){return uo(Zo,e)}var Vo=v("ZodULID",(e,n)=>{uu.init(e,n),X.init(e,n)});function Sg(e){return co(Vo,e)}var Go=v("ZodXID",(e,n)=>{cu.init(e,n),X.init(e,n)});function Pg(e){return lo(Go,e)}var Fo=v("ZodKSUID",(e,n)=>{lu.init(e,n),X.init(e,n)});function Tg(e){return po(Fo,e)}var Bo=v("ZodIPv4",(e,n)=>{gu.init(e,n),X.init(e,n)});function Ag(e){return mo(Bo,e)}var id=v("ZodMAC",(e,n)=>{hu.init(e,n),X.init(e,n)});function Eg(e){return xc(id,e)}var Ho=v("ZodIPv6",(e,n)=>{vu.init(e,n),X.init(e,n)});function Og(e){return fo(Ho,e)}var Ko=v("ZodCIDRv4",(e,n)=>{yu.init(e,n),X.init(e,n)});function Ng(e){return go(Ko,e)}var Wo=v("ZodCIDRv6",(e,n)=>{bu.init(e,n),X.init(e,n)});function zg(e){return vo(Wo,e)}var Jo=v("ZodBase64",(e,n)=>{_u.init(e,n),X.init(e,n)});function Dg(e){return ho(Jo,e)}var Xo=v("ZodBase64URL",(e,n)=>{$u.init(e,n),X.init(e,n)});function Cg(e){return yo(Xo,e)}var qo=v("ZodE164",(e,n)=>{ku.init(e,n),X.init(e,n)});function jg(e){return bo(qo,e)}var od=v("ZodCreditCard",(e,n)=>{xu.init(e,n),X.init(e,n)});function Lg(e){return wc(od,e)}var ad=v("ZodIBAN",(e,n)=>{wu.init(e,n),X.init(e,n)});function Ug(e){return Ic(ad,e)}var Yo=v("ZodJWT",(e,n)=>{Iu.init(e,n),X.init(e,n)});function Rg(e){return _o(Yo,e)}var jt=v("ZodCustomStringFormat",(e,n)=>{Su.init(e,n),X.init(e,n)});function Mg(e,n,i={}){return Nt(jt,e,n,i)}function Zg(e){return Nt(jt,"hostname",ms,e)}function Vg(e){return Nt(jt,"hex",Ts,e)}function Gg(e){return Nt(jt,"currency_code",vs,e)}function Fg(e,n){let i=n?.enc??"hex",o=`${e}_${i}`,t=Pe[o];if(!t)throw new Error(`Unrecognized hash format: ${o}`);return Nt(jt,o,t,n)}var In=v("ZodNumber",(e,n)=>{Di.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>cl(e,i,o,t),e.isFinite=!0},_.derived({minValue:e=>{let{minimum:n,exclusiveMinimum:i}=ie(e);return Math.max(n??Number.NEGATIVE_INFINITY,i??Number.NEGATIVE_INFINITY)},maxValue:e=>{let{maximum:n,exclusiveMaximum:i}=ie(e);return Math.min(n??Number.POSITIVE_INFINITY,i??Number.POSITIVE_INFINITY)},isInt:e=>{let{isInt:n,multipleOf:i}=ie(e);return!!n||!!i?.some(Number.isSafeInteger)},format:e=>ie(e).format??null},{gt(e,n){return this.check(Me(e,n))},gte(e,n){return this.check(we(e,n))},min(e,n){return this.check(we(e,n))},lt(e,n){return this.check(Re(e,n))},lte(e,n){return this.check(xe(e,n))},max(e,n){return this.check(xe(e,n))},int(e){return this.check(zo(e))},safe(e){return this.check(zo(e))},positive(e){return this.check(Me(0,e))},nonnegative(e){return this.check(we(0,e))},negative(e){return this.check(Re(0,e))},nonpositive(e){return this.check(xe(0,e))},multipleOf(e,n){return this.check(at(e,n))},step(e,n){return this.check(at(e,n))},finite(){return this}}));function sd(e){return Pc(In,e)}var Lt=v("ZodNumberFormat",(e,n)=>{Pu.init(e,n),In.init(e,n)});function zo(e){return Ac(Lt,e)}function Bg(e){return Ec(Lt,e)}function Hg(e){return Oc(Lt,e)}function Kg(e){return Nc(Lt,e)}function Wg(e){return zc(Lt,e)}var Sn=v("ZodBoolean",(e,n)=>{ur.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ll(e,i,o,t)});function ud(e){return Dc(Sn,e)}var Pn=v("ZodBigInt",(e,n)=>{Ci.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>dl(e,i,o,t)},_.derived({minValue:e=>ie(e).minimum??null,maxValue:e=>ie(e).maximum??null,format:e=>ie(e).format??null},{gte(e,n){return this.check(we(e,n))},min(e,n){return this.check(we(e,n))},gt(e,n){return this.check(Me(e,n))},lt(e,n){return this.check(Re(e,n))},lte(e,n){return this.check(xe(e,n))},max(e,n){return this.check(xe(e,n))},positive(e){return this.check(Me(BigInt(0),e))},negative(e){return this.check(Re(BigInt(0),e))},nonpositive(e){return this.check(xe(BigInt(0),e))},nonnegative(e){return this.check(we(BigInt(0),e))},multipleOf(e,n){return this.check(at(e,n))}}));function Jg(e){return jc(Pn,e)}var Qo=v("ZodBigIntFormat",(e,n)=>{Tu.init(e,n),Pn.init(e,n)});function Xg(e){return Uc(Qo,e)}function qg(e){return Rc(Qo,e)}var cd=v("ZodSymbol",(e,n)=>{Au.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>pl(e,i,o,t)});function Yg(e){return Mc(cd,e)}var ld=v("ZodUndefined",(e,n)=>{Eu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>fl(e,i,o,t)});function Qg(e){return Zc(ld,e)}var dd=v("ZodNull",(e,n)=>{Ou.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>ml(e,i,o,t)});function pd(e){return Vc(dd,e)}var md=v("ZodAny",(e,n)=>{Nu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>hl(e,i,o,t)});function ev(){return Gc(md)}var fd=v("ZodUnknown",(e,n)=>{zu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>yl(e,i,o,t)});function zt(){return Fc(fd)}var gd=v("ZodNever",(e,n)=>{Du.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>vl(e,i,o,t)});function ea(e){return Bc(gd,e)}var vd=v("ZodVoid",(e,n)=>{Cu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>gl(e,i,o,t)});function tv(e){return Hc(vd,e)}var Pr=v("ZodDate",(e,n)=>{ju.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>bl(e,i,o,t),e.min=(i,o)=>e.check(we(i,o)),e.max=(i,o)=>e.check(xe(i,o))},_.derived({minDate:e=>{let{minimum:n}=ie(e);return n?new Date(n):null},maxDate:e=>{let{maximum:n}=ie(e);return n?new Date(n):null}},{}));function nv(e){return Kc(Pr,e)}var hd=v("ZodArray",(e,n)=>{Ct(),Uu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ol(e,i,o,t),e.element=n.element},{min(e,n){return this.check(qe(e,n))},nonempty(e){return this.check(qe(1,e))},max(e,n){return this.check(Et(e,n))},length(e,n){return this.check(Ot(e,n))},unwrap(){return this.element}});function Tr(e,n){return Xc(hd,e,n)}function rv(e){let n=e._zod.def.shape;return ta(Object.keys(n))}var Ar=v("ZodObject",(e,n)=>{Ct(),Ru.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Nl(e,i,o,t),_.installLazyProp(e,"shape",i=>i._zod.def.shape,!1)},{keyof(){return ta(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(_.mergeDefs(this._zod.def,{catchall:e}))},passthrough(){return this.clone(_.mergeDefs(this._zod.def,{catchall:zt()}))},loose(){return this.clone(_.mergeDefs(this._zod.def,{catchall:zt()}))},strict(){return this.clone(_.mergeDefs(this._zod.def,{catchall:ea()}))},strip(){return this.clone(_.mergeDefs(this._zod.def,{catchall:void 0}))},extend(e){return _.extend(this,e)},safeExtend(e){return _.safeExtend(this,e)},merge(e){return _.merge(this,e)},pick(e){return _.pick(this,e)},omit(e){return _.omit(this,e)},partial(...e){return _.partial(Or,this,e[0])},exactPartial(...e){return _.partial(ra,this,e[0],"exactPartial")},required(...e){return _.required(ia,this,e[0])}});function iv(e,n){let i={type:"object",shape:e??{},..._.normalizeParams(n)};return new Ar(i)}function ov(e,n){return new Ar({type:"object",shape:e,catchall:ea(),..._.normalizeParams(n)})}function av(e,n){return new Ar({type:"object",shape:e,catchall:zt(),..._.normalizeParams(n)})}var Er=v("ZodUnion",(e,n)=>{cr.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Po(e,i,o,t),e.options=n.options});function Tn(e,n){return new Er({type:"union",options:e,..._.normalizeParams(n)})}var yd=v("ZodXor",(e,n)=>{Er.init(e,n),Mu.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Po(e,i,o,t),e.options=n.options});function sv(e,n){return new yd({type:"union",options:e,inclusive:!1,..._.normalizeParams(n)})}var bd=v("ZodDiscriminatedUnion",(e,n)=>{Er.init(e,n),Vu.init(e,n)});function uv(e,n,i){return new bd({type:"union",options:n,discriminator:e,..._.normalizeParams(i)})}var _d=v("ZodIntersection",(e,n)=>{Gu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>zl(e,i,o,t)});function $d(e,n){return new _d({type:"intersection",left:e,right:n})}var kd=v("ZodTuple",(e,n)=>{Ct(),ji.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Dl(e,i,o,t)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw new Error(".partial() cannot be used on tuple schemas containing refinements");return this.clone({...e,items:e.items.map(n=>new Or({type:"optional",innerType:n}))})}});function xd(e,n,i){let o=n instanceof U,t=o?i:n,r=o?n:null;return new kd({type:"tuple",items:e,rest:r,..._.normalizeParams(t)})}var kn=v("ZodRecord",(e,n)=>{Ct(),Fu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Cl(e,i,o,t),e.keyType=n.keyType,e.valueType=n.valueType});function wd(e,n,i){return!n||!n._zod?new kn({type:"record",keyType:wr(),valueType:e,..._.normalizeParams(n)}):new kn({type:"record",keyType:e,valueType:n,..._.normalizeParams(i)})}function cv(e,n,i){return new kn({type:"record",keyType:e,valueType:n,..._.normalizeParams(i),partial:!0})}function lv(e,n,i){return new kn({type:"record",keyType:e,valueType:n,mode:"loose",..._.normalizeParams(i)})}var Id=v("ZodMap",(e,n)=>{Ct(),Bu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Al(e,i,o,t),e.keyType=n.keyType,e.valueType=n.valueType,e.min=(...i)=>e.check(Ze(...i)),e.nonempty=i=>e.check(Ze(1,i)),e.max=(...i)=>e.check(st(...i)),e.size=(...i)=>e.check(At(...i))});function dv(e,n,i){return new Id({type:"map",keyType:e,valueType:n,..._.normalizeParams(i)})}var Sd=v("ZodSet",(e,n)=>{Ct(),Hu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>El(e,i,o,t),e.min=(...i)=>e.check(Ze(...i)),e.nonempty=i=>e.check(Ze(1,i)),e.max=(...i)=>e.check(st(...i)),e.size=(...i)=>e.check(At(...i))});function pv(e,n){return new Sd({type:"set",valueType:e,..._.normalizeParams(n)})}var xn=v("ZodEnum",(e,n)=>{Ku.init(e,n),M.init(e,n),e._zod.processJSONSchema=(o,t,r)=>_l(e,o,t,r),e.enum=n.entries,e.options=[...e._zod.values];let i=new Set(Object.keys(n.entries));e.extract=(o,t)=>{let r={};for(let a of o)if(i.has(a))r[a]=n.entries[a];else throw new Error(`Key ${a} not found in enum`);return new xn({...n,checks:[],..._.normalizeParams(t),entries:r})},e.exclude=(o,t)=>{let r={...n.entries};for(let a of o)if(i.has(a))delete r[a];else throw new Error(`Key ${a} not found in enum`);return new xn({...n,checks:[],..._.normalizeParams(t),entries:r})}});function ta(e,n){let i=Array.isArray(e)?Object.fromEntries(e.map(o=>[o,o])):e;return new xn({type:"enum",entries:i,..._.normalizeParams(n)})}function mv(e,n){return new xn({type:"enum",entries:e,..._.normalizeParams(n)})}var Pd=v("ZodLiteral",(e,n)=>{Wu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>$l(e,i,o,t),e.values=new Set(n.values),Object.defineProperty(e,"value",{get(){if(n.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return n.values[0]}})});function fv(e,n){return new Pd({type:"literal",values:Array.isArray(e)?e:[e],..._.normalizeParams(n)})}var Td=v("ZodFile",(e,n)=>{Ju.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>wl(e,i,o,t),e.min=(i,o)=>e.check(Ze(i,o)),e.max=(i,o)=>e.check(st(i,o)),e.mime=(i,o)=>e.check(mn(Array.isArray(i)?i:[i],o))});function gv(e){return qc(Td,e)}var Ad=v("ZodTransform",(e,n)=>{Ct(),Xu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Tl(e,i,o,t),e._zod.parse=(i,o)=>{if(o.direction==="backward")throw new it(e.constructor.name);i.addIssue=r=>{if(typeof r=="string")i.issues.push(_.issue(r,i.value,n));else{let a=r;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),"input"in a||(a.input=i.value),a.inst??(a.inst=e),i.issues.push(_.issue(a))}};let t=n.transform(i.value,i);return t instanceof Promise?t.then(r=>(i.value=r,i)):(i.value=t,i)}});function na(e){return new Ad({type:"transform",transform:e})}var Or=v("ZodOptional",(e,n)=>{Li.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>To(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Dt(e){return new Or({type:"optional",innerType:e})}var ra=v("ZodExactOptional",(e,n)=>{qu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>To(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new ra({type:"optional",innerType:e})}var Od=v("ZodNullable",(e,n)=>{Yu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>jl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Ir(e){return new Od({type:"nullable",innerType:e})}function vv(e){return Dt(Ir(e))}var Nd=v("ZodDefault",(e,n)=>{Qu.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Rl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function zd(e,n){return new Nd({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():_.shallowClone(n)}})}var Dd=v("ZodPrefault",(e,n)=>{ec.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ml(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Cd(e,n){return new Dd({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():_.shallowClone(n)}})}var ia=v("ZodNonOptional",(e,n)=>{tc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Ll(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function jd(e,n){return new ia({type:"nonoptional",innerType:e,..._.normalizeParams(n)})}var Ld=v("ZodSuccess",(e,n)=>{nc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Il(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function hv(e){return new Ld({type:"success",innerType:e})}var Ud=v("ZodCatch",(e,n)=>{rc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Zl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Rd(e,n){return new Ud({type:"catch",innerType:e,catchValue:typeof n=="function"?n:_.constantCatch(n)})}var Md=v("ZodNaN",(e,n)=>{ic.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>kl(e,i,o,t)});function yv(e){return Jc(Md,e)}var Nr=v("ZodPipe",(e,n)=>{Ui.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Vl(e,i,o,t),e.in=n.in,e.out=n.out});function Do(e,n){return new Nr({type:"pipe",in:e,out:n})}var zr=v("ZodCodec",(e,n)=>{Nr.init(e,n),lr.init(e,n)});function bv(e,n,i){return new zr({type:"pipe",in:e,out:n,transform:i.decode,reverseTransform:i.encode})}function _v(e){let n=e._zod.def;return new zr({type:"pipe",in:n.out,out:n.in,transform:n.reverseTransform,reverseTransform:n.transform})}var Zd=v("ZodPreprocess",(e,n)=>{Nr.init(e,n),oc.init(e,n)}),Vd=v("ZodReadonly",(e,n)=>{ac.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Gl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function Gd(e){return new Vd({type:"readonly",innerType:e})}var Fd=v("ZodTemplateLiteral",(e,n)=>{sc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>xl(e,i,o,t)});function $v(e,n){return new Fd({type:"template_literal",parts:e,..._.normalizeParams(n)})}var Bd=v("ZodLazy",(e,n)=>{dr.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Bl(e,i,o,t),e.unwrap=()=>e._zod.def.getter()});function Hd(e){return new Bd({type:"lazy",getter:e})}var Kd=v("ZodPromise",(e,n)=>{cc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Fl(e,i,o,t),e.unwrap=()=>e._zod.def.innerType});function kv(e){return new Kd({type:"promise",innerType:e})}var Wd=v("ZodFunction",(e,n)=>{uc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Pl(e,i,o,t)});function xv(e){return new Wd({type:"function",input:Array.isArray(e?.input)?xd(e?.input):e?.input??Tr(zt()),output:e?.output??zt()})}var Dr=v("ZodCustom",(e,n)=>{lc.init(e,n),M.init(e,n),e._zod.processJSONSchema=(i,o,t)=>Sl(e,i,o,t)});function wv(e){let n=new q({check:"custom"});return n._zod.check=e,n}function Iv(e,n){return Yc(Dr,e??(()=>!0),n)}function Jd(e,n={}){return Qc(Dr,e,n)}function Xd(e,n){return el(e,n)}var Sv=tl,Pv=nl,qd=v("ZodInstanceOf",(e,n)=>{Dr.init(e,n)},{properties(e,n){return this.check(pn(e,n))}});function Tv(e,n={}){let i=new qd({type:"custom",check:"custom",fn:o=>o instanceof e,abort:!0,..._.normalizeParams(n)});return i._zod.bag.Class=e,i._zod.check=o=>{o.value instanceof e||o.issues.push({code:"invalid_type",expected:e.name,input:o.value,inst:i,path:[...i._zod.def.path??[]]})},i}var Av=(...e)=>rl({Codec:zr,Boolean:Sn,String:wn},...e);function Ev(e){let n=Hd(()=>Tn([wr(e),sd(),ud(),pd(),Tr(n),wd(wr(),n)]));return n}function Ov(e,n){return new Zd({type:"pipe",in:na(e),out:n})}var yx={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};function bx(e){ee({customError:e})}function _x(){return ee().customError}var Yd;Yd||(Yd={});var Cr={};Ke(Cr,{ZodISODate:()=>pt,ZodISODateTime:()=>dt,ZodISODuration:()=>ft,ZodISOTime:()=>mt,date:()=>kx,datetime:()=>$x,duration:()=>wx,time:()=>xx});function $x(e){return yr(dt,e)}function kx(e){return br(pt,e)}function xx(e){return _r(mt,e)}function wx(e){return $r(ft,e)}var P={...An,...Oo,iso:Cr},Ix=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"]);function Sx(e,n){let i=e.$schema;return i==="https://json-schema.org/draft/2020-12/schema"?"draft-2020-12":i==="http://json-schema.org/draft-07/schema#"?"draft-7":i==="http://json-schema.org/draft-04/schema#"?"draft-4":n??"draft-2020-12"}function Nv(e,n){return e.map((i,o)=>oo).check(o=>{let t=o.value;if(typeof t!="object"||t===null||Array.isArray(t))return;let r=Object.getOwnPropertyNames(t);if(n.minProperties!==void 0&&r.length=${n.minProperties} properties`,input:t,inst:e,continue:!0}),n.maxProperties!==void 0&&r.length>n.maxProperties&&o.issues.push({origin:"object",code:"too_big",maximum:n.maxProperties,inclusive:!0,message:`Too big: expected object to have <=${n.maxProperties} properties`,input:t,inst:e,continue:!0}),n.keySchema)for(let a of r){let s=n.keySchema.safeParse(a);s.success||o.issues.push({code:"invalid_key",origin:"record",issues:s.error.issues,input:a,path:[a],continue:!0})}}).pipe(e)}function Qd(e,n){if(e===null)return"z";let i=typeof e;if(i!=="object"){if(i==="number"&&Number.isNaN(e))return null;let o=String(e);return`${i[0]}${o.length}:${o}`}if(n.has(e))return null;n.add(e);try{if(Array.isArray(e)){let r=[];for(let a of e){let s=Qd(a,n);if(s===null)return null;r.push(s)}return`a${r.length}:[${r.join(",")}]`}let o=Object.keys(e).sort(),t=[];for(let r of o){let a=Qd(e[r],n);if(a===null)return null;t.push(`${r.length}:${r}=${a}`)}return`o${t.length}:{${t.join(",")}}`}finally{n.delete(e)}}var Ex=new Set(["items","prefixItems","additionalItems","additionalProperties","contains","propertyNames","not","if","then","else","allOf","anyOf","oneOf","unevaluatedItems","unevaluatedProperties","contentSchema"]),Ox=new Set(["properties","patternProperties","dependentSchemas","dependencies","$defs","definitions"]);function jr(e){return typeof e!="object"||e===null?!1:Array.isArray(e)?e.some(jr):typeof e.$ref=="string"?!0:Object.entries(e).some(([n,i])=>Ex.has(n)?jr(i):!Ox.has(n)||typeof i!="object"||i===null?!1:Object.values(i).some(jr))}function zv(e){return e===1?"element":"elements"}function Nx(e,n){return P.transform(o=>o).check(o=>{let t=o.value;if(Array.isArray(t)){if(n.uniqueItems===!0){let r=new Map;for(let a=0;a=a)break;sn.maxContains&&o.issues.push({code:"custom",message:`Array must contain at most ${n.maxContains} matching ${zv(n.maxContains)}`,input:t,continue:!0})}}}).pipe(e)}function Dv(e,n){if(e!==!1)return e===void 0||e===!0?P.any():fe(e,n)}var zx=/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;function Cv(e,n){if(e.not!==void 0){if(typeof e.not=="object"&&Object.keys(e.not).length===0)return P.never();throw new Error("not is not supported in Zod (except { not: {} } for never)")}if(e.unevaluatedItems!==void 0)throw new Error("unevaluatedItems is not supported");if(e.unevaluatedProperties!==void 0)throw new Error("unevaluatedProperties is not supported");if(e.if!==void 0||e.then!==void 0||e.else!==void 0)throw new Error("Conditional schemas (if/then/else) are not supported");if(e.dependentSchemas!==void 0||e.dependentRequired!==void 0)throw new Error("dependentSchemas and dependentRequired are not supported");if(e.$ref){let t=e.$ref;if(n.refs.has(t))return n.refs.get(t);if(n.processing.has(t))return P.lazy(()=>{if(!n.refs.has(t))throw new Error(`Circular reference not resolved: ${t}`);return n.refs.get(t)});n.processing.add(t);let r=Tx(t,n),a=fe(r,n);return n.refs.set(t,a),n.processing.delete(t),a}if(e.enum!==void 0){let t=e.enum;if(n.version==="openapi-3.0"&&e.nullable===!0&&t.length===1&&t[0]===null)return P.null();if(t.length===0)return P.never();if(t.length===1)return P.literal(t[0]);if(t.every(a=>typeof a=="string"))return P.enum(t);let r=t.map(a=>P.literal(a));return r.length<2?r[0]:P.union([r[0],r[1],...r.slice(2)])}if(e.const!==void 0)return P.literal(e.const);let i=e.type;if(Array.isArray(i)){let t=i.map(r=>{let a={...e,type:r};return Cv(a,n)});return t.length===0?P.never():t.length===1?t[0]:P.union(t)}if(!i)return P.any();let o;switch(i){case"string":{let t=P.string();if(e.format){let r=e.format;r==="email"?t=t.check(P.email()):r==="uri"||r==="uri-reference"?t=t.check(P.url()):r==="uuid"||r==="guid"?t=t.check(P.uuid()):r==="date-time"?t=t.check(P.iso.datetime({offset:!0})):r==="date"?t=t.check(P.iso.date()):r==="time"?t=t.check(P.regex(zx)):r==="duration"?t=t.check(P.iso.duration()):r==="hostname"?t=t.check(P.hostname()):r==="ipv4"?t=t.check(P.ipv4()):r==="ipv6"?t=t.check(P.ipv6()):r==="mac"?t=t.check(P.mac()):r==="cidr"?t=t.check(P.cidrv4()):r==="cidr-v6"?t=t.check(P.cidrv6()):r==="base64"?t=t.check(P.base64()):r==="base64url"?t=t.check(P.base64url()):r==="e164"?t=t.check(P.e164()):r==="credit_card"?t=t.check(P.creditCard()):r==="iban"?t=t.check(P.iban()):r==="jwt"?t=t.check(P.jwt()):r==="emoji"?t=t.check(P.emoji()):r==="nanoid"?t=t.check(P.nanoid()):r==="cuid"?t=t.check(P.cuid()):r==="cuid2"?t=t.check(P.cuid2()):r==="ulid"?t=t.check(P.ulid()):r==="xid"?t=t.check(P.xid()):r==="ksuid"&&(t=t.check(P.ksuid()))}typeof e.minLength=="number"&&(t=t.min(e.minLength)),typeof e.maxLength=="number"&&(t=t.max(e.maxLength)),e.pattern&&(t=t.regex(new RegExp(e.pattern))),o=t;break}case"number":case"integer":{let t=i==="integer"?P.number().int():P.number();typeof e.minimum=="number"&&e.exclusiveMinimum!==!0&&(t=t.min(e.minimum)),typeof e.maximum=="number"&&e.exclusiveMaximum!==!0&&(t=t.max(e.maximum)),typeof e.exclusiveMinimum=="number"?t=t.gt(e.exclusiveMinimum):e.exclusiveMinimum===!0&&typeof e.minimum=="number"&&(t=t.gt(e.minimum)),typeof e.exclusiveMaximum=="number"?t=t.lt(e.exclusiveMaximum):e.exclusiveMaximum===!0&&typeof e.maximum=="number"&&(t=t.lt(e.maximum)),typeof e.multipleOf=="number"&&(t=t.multipleOf(e.multipleOf)),o=t;break}case"boolean":{o=P.boolean();break}case"null":{o=P.null();break}case"object":{let t={},r=e.properties||{},a=new Set(e.required||[]),s=typeof e.additionalProperties=="object"?fe(e.additionalProperties,n):void 0;for(let[p,m]of Object.entries(r)){let f=fe(m,n);se(t,p,a.has(p)?f:f.optional())}if(e.patternProperties){let p=e.patternProperties,m=Object.keys(p),f=[];for(let y of m){let x=fe(p[y],n),I=P.string().regex(new RegExp(y));f.push(P.looseRecord(I,x))}let g=[];if(Object.keys(t).length>0&&g.push(P.object(t).passthrough()),g.push(...f),g.length===0)o=P.object({}).passthrough();else if(g.length===1)o=g[0];else{let y=P.intersection(g[0],g[1]);for(let x=2;xnew RegExp(b)),I=o;o=o.check(b=>{if(!Ie(b.value))return;let T=[];for(let E of Object.keys(b.value))y.includes(E)||x.some(z=>z.test(E))||T.push(E);T.length&&b.issues.push({code:"unrecognized_keys",keys:T,input:b.value,inst:I})})}}else{let p=P.object(t);e.additionalProperties===!1?o=p.strict():s?o=p.catchall(s):o=p.passthrough()}let u=e.propertyNames!==void 0&&e.propertyNames!==!0,c=typeof e.minProperties=="number"?e.minProperties:void 0,d=typeof e.maxProperties=="number"?e.maxProperties:void 0;if(u||c!==void 0||d!==void 0){let p;if(u){let m=typeof e.propertyNames=="object"&&e.propertyNames.type===void 0?{type:"string",...e.propertyNames}:e.propertyNames;p=fe(m,n)}o=Ax(o,{keySchema:p,minProperties:c,maxProperties:d})}break}case"array":{let t=e.prefixItems,r=e.items;if(t&&Array.isArray(t)){let a=typeof e.minItems=="number"?e.minItems:0,s=t.map(p=>fe(p,n)),u=Nv(s,a),c=Array.isArray(r)?void 0:Dv(r,n),d=P.tuple(u);o=c?d.rest(c):d,typeof e.minItems=="number"&&(o=o.check(P.minLength(e.minItems))),typeof e.maxItems=="number"&&(o=o.check(P.maxLength(e.maxItems)))}else if(Array.isArray(r)){let a=typeof e.minItems=="number"?e.minItems:0,s=r.map(p=>fe(p,n)),u=Nv(s,a),c=Dv(e.additionalItems,n),d=P.tuple(u);o=c?d.rest(c):d,typeof e.minItems=="number"&&(o=o.check(P.minLength(e.minItems))),typeof e.maxItems=="number"&&(o=o.check(P.maxLength(e.maxItems)))}else if(r!==void 0){let a=fe(r,n),s=P.array(a);typeof e.minItems=="number"&&(s=s.min(e.minItems)),typeof e.maxItems=="number"&&(s=s.max(e.maxItems)),o=s}else o=P.array(P.any());(e.uniqueItems===!0||e.contains!==void 0)&&(o=Nx(o,{uniqueItems:e.uniqueItems===!0,containsSchema:e.contains!==void 0?fe(e.contains,n):void 0,minContains:typeof e.minContains=="number"?e.minContains:void 0,maxContains:typeof e.maxContains=="number"?e.maxContains:void 0}));break}default:throw new Error(`Unsupported type: ${i}`)}return o}function fe(e,n){if(typeof e=="boolean")return e?P.any():P.never();let i=Cv(e,n),o=e.type||e.enum!==void 0||e.const!==void 0;if(e.anyOf&&Array.isArray(e.anyOf)){let s=e.anyOf.map(c=>fe(c,n)),u=P.union(s);i=o?P.intersection(i,u):u}if(e.oneOf&&Array.isArray(e.oneOf)){let s=e.oneOf.map(c=>fe(c,n)),u=P.xor(s);i=o?P.intersection(i,u):u}if(e.allOf&&Array.isArray(e.allOf))if(e.allOf.length===0)i=o?i:P.any();else{let s=o?i:fe(e.allOf[0],n),u=o?0:1;for(let c=u;c0&&n.registry.add(i,t),e.description&&(i=i.describe(e.description)),i}function jv(e,n){if(typeof e=="boolean")return e?P.any():P.never();let i;try{i=JSON.parse(JSON.stringify(e))}catch{throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas")}let o=Sx(i,n?.defaultTarget),t=i.$defs||i.definitions||{},r={version:o,defs:t,refs:new Map,processing:new Set,rootSchema:i,registry:n?.registry??ue};return fe(i,r)}var Lv=Symbol("z.visit/resolving");function Lr(e,n){let i=typeof n=="function"?n:(a,s)=>{let u=n[a._zod.def.type];return u?u(a,s):a},o=new Map;function t(a){let s=o.get(a);if(s===Lv)return new dr({type:"lazy",getter:()=>o.get(a)});if(s!==void 0)return s;o.set(a,Lv);let u=r(a),c=i(u,u!==a);return o.set(a,c),c}function r(a){let s=a._zod.def,u=s.type;switch(u){case"object":{let c=s.shape,d=Object.keys(c),p=!1,m={};for(let g of d){let y=t(c[g]);y!==c[g]&&(p=!0),m[g]=y}let f=s.catchall;return s.catchall&&(f=t(s.catchall),f!==s.catchall&&(p=!0)),p?H(a,{...s,shape:m,catchall:f}):a}case"array":{let c=t(s.element);return c===s.element?a:H(a,{...s,element:c})}case"tuple":{let c=s.items,d=!1,p=[];for(let f of c){let g=t(f);g!==f&&(d=!0),p.push(g)}let m=s.rest;return s.rest&&(m=t(s.rest),m!==s.rest&&(d=!0)),d?H(a,{...s,items:p,rest:m}):a}case"record":case"map":{let c=t(s.keyType),d=t(s.valueType);return c===s.keyType&&d===s.valueType?a:H(a,{...s,keyType:c,valueType:d})}case"set":{let c=t(s.valueType);return c===s.valueType?a:H(a,{...s,valueType:c})}case"union":{let c=s.options,d=!1,p=[];for(let m of c){let f=t(m);f!==m&&(d=!0),p.push(f)}return d?H(a,{...s,options:p}):a}case"intersection":{let c=t(s.left),d=t(s.right);return c===s.left&&d===s.right?a:H(a,{...s,left:c,right:d})}case"optional":case"nullable":case"default":case"prefault":case"catch":case"readonly":case"nonoptional":case"promise":case"success":{let c=t(s.innerType);return c===s.innerType?a:H(a,{...s,innerType:c})}case"pipe":{let c=t(s.in),d=t(s.out);return c===s.in&&d===s.out?a:H(a,{...s,in:c,out:d})}case"function":{let c=t(s.input),d=t(s.output);return c===s.input&&d===s.output?a:H(a,{...s,input:c,output:d})}case"lazy":{let c=s.getter,{_cachedInner:d,...p}=s;return H(a,{...p,getter:()=>t(c())})}case"template_literal":case"string":case"number":case"int":case"boolean":case"bigint":case"symbol":case"undefined":case"null":case"void":case"never":case"any":case"unknown":case"date":case"nan":case"enum":case"literal":case"file":case"transform":case"custom":return a;default:return a}}return t(e)}function Uv(e){return Lr(e,{object:n=>n.partial(),union:n=>{let i=n._zod.def;return i.discriminator===void 0?n:Tn(i.options)}})}function Dx(e,n){if(!n?.length)return e;let i=e._zod.def;return H(e,Ne(i,{checks:[...i.checks??[],...n]}),{parent:!0})}function Rv(e){return Dx(e.out,e.checks)}function Cx(e){return e.in._zod.traits.has("$ZodTransform")?Rv(e):e.in}function Mv(e){return Lr(e,{pipe:n=>Cx(n._zod.def),default:(n,i)=>i?Dt(n._zod.def.innerType):n,catch:(n,i)=>i?n._zod.def.innerType:n})}function Zv(e){return Lr(e,{pipe:n=>Rv(n._zod.def),prefault:(n,i)=>i?n._zod.def.innerType:n})}var ep={};Ke(ep,{bigint:()=>Rx,boolean:()=>Ux,date:()=>Mx,number:()=>Lx,string:()=>jx});function jx(e){return kc(wn,e)}function Lx(e){return Tc(In,e)}function Ux(e){return Cc(Sn,e)}function Rx(e){return Lc(Pn,e)}function Mx(e){return Wc(Pr,e)}var Zx=new Set(["__proto__","prototype","constructor"]),Ut=l.string().min(1).max(256).refine(e=>!Zx.has(e),"reserved storage key"),oa=l.json(),aa=256*1024,Vx=5*1024*1024,Vv=1024,Gv=l.strictObject({key:Ut}),Fv=l.object({value:oa}),Bv=l.strictObject({key:Ut,value:oa}),Hv=l.object({ok:l.literal(!0)}),Kv=l.strictObject({key:Ut}),Wv=l.object({ok:l.literal(!0)}),Jv=l.strictObject({}).optional(),Xv=l.object({keys:l.array(l.string()).max(Vv)}),qv=l.strictObject({key:Ut}),Yv=l.object({value:l.string().nullable()}),Qv=l.strictObject({key:Ut,value:l.string().max(64*1024)}),eh=l.object({ok:l.literal(!0)}),th=l.strictObject({key:Ut}),nh=l.object({ok:l.literal(!0)}),rh=l.strictObject({}).optional(),ih=l.object({status:l.enum(["os-keyring","unavailable"])}),oh=l.strictObject({}).optional(),ah=l.object({settings:l.record(l.string(),oa)}),sh=l.strictObject({key:Ut,value:oa}),uh=l.object({ok:l.literal(!0)});var En="x-orca-enum-since";var Qe="1.4.160",tp="1.4.245";var Ur="1.4.246";var ch=Ur,lh=Ur;var Ce="1.4.248";var Fx="Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.";function dh(e,n,i){return ae(`${e} ${Fx}`,n,i)}function ae(e,n,i){return i?{description:e,"x-orca-since":n,examples:[...i]}:{description:e,"x-orca-since":n}}var gt=["workspace.created","workspace.removed","agent.status.changed","workspace.changed"],tO=gt.length,Bx={"workspace.created":tp,"workspace.removed":tp,"agent.status.changed":Qe,"workspace.changed":lh},sa=new Map([["worktree.created","workspace.created"],["worktree.removed","workspace.removed"]]);var nO=l.object({on:l.enum(gt).meta({...ae("Event delivered to the plugin worker.",Qe),[En]:Bx})}).strict().meta({id:"EventContribution",description:"An event subscription. Requires `main`, the `trusted-worker` execution profile and the capability of the event's domain: `workspace:read` for workspace events, `agent:read` for agent events."});var ge=["worker","panel","editor"],Te=["worker"],On=["panel","editor"],J=e=>e;function ph(e,n){return n==="worker"?e.since:Math.max(e.since,e.framesSince??0)}var Hx=["success","failure","cancellation","superseded"],mh=[...Hx,"interruption","unconfirmed"];var Nn=["working","blocked","waiting","done"];var jO=new Set(Nn);var vt=l.string().regex(/^[A-Za-z0-9_.:-]{1,128}$/,"is 1-128 letters, digits, or . _ : -");var ua=12e4,BO=1024*1024,HO=256*1024;var Wx=l.object({id:l.string().min(1).max(64),surface:l.enum(["panel","editor"]),contributionId:l.string().min(1).max(256)}),KO=l.object({name:vt,input:l.unknown(),panel:Wx}),WO=l.object({event:vt,payload:l.unknown(),panel:l.string().min(1).max(64).optional()}),hh=["storage","settings"],JO=l.object({area:l.enum(hh),key:l.string().min(1).max(256)}),XO=l.discriminatedUnion("kind",[l.object({kind:l.literal("message"),event:vt,payload:l.unknown()}),l.object({kind:l.literal("event"),event:l.enum(gt),payload:l.unknown()}),l.object({kind:l.literal("changed"),area:l.enum(hh),key:l.string()})]);var Jx=l.strictObject({name:vt,input:l.json().optional(),timeoutMs:l.number().int().min(1).max(ua).optional()}),Xx=l.object({output:l.json()}),qx=50,Yx=l.strictObject({}).optional(),Qx=l.object({agents:l.array(l.object({terminalId:l.string().min(1).max(1024).nullable(),title:l.string().max(512).nullable(),agent:l.string().max(128).nullable(),state:l.enum(Nn),stateStartedAt:l.number().finite()})).max(qx)}),ew=l.strictObject({event:l.enum(gt)}),tw=l.object({ok:l.literal(!0)}),yh={"plugin.request":J({summary:"Asks the plugin's own worker to run the handler it registered with `orca.panels.handle(name)`, starting the worker if needed; resolves with what the handler returned. `unknown_method` when no handler has that name.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:On,params:Jx,result:Xx}),"agents.list":J({summary:"The agents in the focused workspace: their terminal, title, agent kind and status. `agent.status.changed` reports each change after.",since:2,scope:"active-workspace",capability:"agent:read",mutation:!1,surfaces:ge,params:Yx,result:Qx}),"events.subscribe":J({summary:"Delivers a workspace or agent event to this panel as `orca.on(event)`; needs the event's read capability. The frame APIs call it for you.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:On,params:ew,result:tw})};var nw=/^(?:con|prn|aux|nul|clock\$|conin\$|conout\$|com[1-9\u00B9\u00B2\u00B3]|lpt[1-9\u00B9\u00B2\u00B3])(?:\..*)?$/i,rw=/[<>:"|?*]/,ca=String.raw`[^<>:"|?*\x00-\x1f\\/]*[^<>:"|?*\x00-\x1f\\/. ]`,np=new RegExp(`^${ca}(?:[\\\\/]${ca})*$`),iN=new RegExp(`^${ca}(?:/${ca})*$`);function iw(e){return e.length===0||e==="."||e===".."?"empty and dot path segments are not allowed":e.endsWith(".")||e.endsWith(" ")?"path segments may not end with a dot or space":rw.test(e)||[...e].some(n=>n.charCodeAt(0)<=31)?"path segment contains a Windows-forbidden character or alternate-data-stream colon":nw.test(e)?"path segment is a Windows reserved device name":null}function ow(e){if(e.length===0||e.startsWith("/")||e.startsWith("\\"))return"must be a non-empty relative path";let n=e.split(/[\\/]/);for(let i of n){let o=iw(i);if(o)return o}return null}function rp(e){return ow(e)===null}var bh=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,aw=new Set(["__proto__","prototype","constructor"]),ip=64;function _h(e){return aw.has(e)}var op="must be a portable relative path inside the plugin directory",zn=l.string().max(ip).regex(bh,"must be kebab-case (a-z, 0-9, dashes)").refine(e=>!_h(e),"must not be a reserved name"),$h=l.string().min(1).max(1024).regex(np,op).refine(e=>!np.test(e)||rp(e),op),pN=l.string().min(1).max(1024).transform(e=>e.replace(/[\\/]+$/,"")).refine(rp,op),kh=l.string().min(1).max(256).regex(/^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$/,"must be a portable command id");var sw=/[\p{Cc}\p{Cf}\p{Cs}\p{Zl}\p{Zp}]/u,uw=new Set(["‌","‍"]);function cw(e){return uw.has(e)||!sw.test(e)}function xh(e){return[...e].filter(cw).join("")}var lw=/[\t\n\v\f\r\u0085\u2028\u2029]+/g;function dw(e){return xh(e.replace(lw," "))}function Rr(e){let n=e.overwrite(dw);return e.minLength?n.min(e.minLength,"must contain visible characters"):n}var j={maxNodes:5e3,maxDepth:64,maxTreeBytes:524288,maxTextLength:16384,maxLabelLength:1024,maxPropsPerNode:32,maxSelectOptions:500,maxEventArgs:8,maxCallbackIdLength:64,maxRadioOptions:50,maxTableColumns:32,maxTableRows:5e3,maxTreeItems:2e3,maxTreeItemDepth:16,maxKeyValueItems:200,maxDocumentLength:65536,maxEventArgItems:5e3},yN={maxBytes:640*1024,maxMessages:200,perMs:1e4,maxDepth:j.maxDepth*2+24,maxObjects:j.maxNodes*8+1024};var Ge={render:"ui.render",event:"ui.event",error:"ui.error",ack:"ui.ack",ready:"ui.ready",hydrate:"ui.hydrate",visibility:"ui.visibility",persist:"ui.persist",retain:"ui.retain",snapshot:"ui.snapshot",restore:"ui.restore"};var pw={Input:{value:"value",change:"onChange"},Textarea:{value:"value",change:"onChange"},Switch:{value:"checked",change:"onChange"},Checkbox:{value:"checked",change:"onChange"},Select:{value:"value",change:"onChange"},RadioGroup:{value:"value",change:"onChange"},Slider:{value:"value",change:"onChange"},Tabs:{value:"value",change:"onChange"},Collapsible:{value:"open",change:"onChange"},Table:{value:"selected",change:"onSelectionChange"},Tree:{value:"selected",change:"onSelect"}},mw=new Map(Object.entries(pw));function ap(e){return mw.get(e)??null}var la="$edit";var da=/^[A-Za-z0-9_.:-]+$/,wh=l.object({$callback:l.string().min(1).max(j.maxCallbackIdLength).regex(da)}).strict(),pa=["neutral","accent","success","warning","danger"],G=l.string().max(j.maxLabelLength),B=G.min(1),Y=wh.optional(),je=l.string().regex(/^[a-z0-9-]{1,64}$/),Dn=l.enum(["none","xs","sm","md","lg"]).optional(),sp=l.enum(["start","center","end","stretch"]).optional(),et=l.enum(pa).optional(),ma=l.enum(["xs","sm","md"]).optional(),up=l.enum(["solid","outline","ghost"]).optional(),D=l.boolean().optional(),Cn=l.string().max(j.maxTextLength),Mr=l.enum(["sm","md","lg","none"]).optional(),Rt=l.string().min(1).max(j.maxLabelLength),ve={[la]:l.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional()};function R(e,n){return{props:e,children:n}}var ht=["activity","bar-chart-3","bell","blocks","book","bot","bug","calendar","cloud","code","database","file-text","flag","folder","gauge","globe","hammer","layers","lightbulb","package","plug","puzzle","rocket","star","terminal","wrench","zap","add","remove","delete","edit","refresh","search","settings","check","close","info","warning","error","open-external","copy","download","upload","play","pause","stop","more","expand","collapse","next","filter","branch","file","agent","link"],fw=Object.fromEntries(ht.slice(ht.indexOf("add")).map(e=>[e,Ur])),EN=new Map(ht.map(e=>[e.replaceAll("-",""),e]));var gw=["html","components"],vw=/\.(?:m?js|tsx?|mts|jsx)$/i,ON=l.object({id:zn.meta(ae("Panel id, unique among this plugin's panels. The reserved names `constructor` and `prototype` are refused.",Qe,["dashboard"])),title:Rr(l.string().min(1).max(256)).meta(ae("Title shown on the panel tab and its tooltip.",Qe,["Dashboard"])),icon:l.enum(ht).optional().meta({...ae("Icon shown in the right-sidebar activity bar. Defaults to `plug`.",Qe,["database"]),[En]:fw}),entry:$h.meta(dh(`What the panel runs: an HTML page for \`ui: "html"\`, a \`.js\`/\`.mjs\` module for \`ui: "components"\`. Either may instead be a \`.ts\`/\`.tsx\`/\`.mts\`/\`.jsx\` file, which Orca transpiles when it loads (needs \`engines.orca\` \`>=${ch}\`; an \`html\` panel then gets a generated page around it). It is trusted code: install panels you trust.`,Qe,["dist/panel.html"])),ui:l.enum(gw).optional().meta(ae("How the panel draws its UI. `html` (default) shows `entry` as a web page in an isolated frame; `components` runs `entry` as a hidden module and Orca draws the component tree it returns with its own controls.",Ur,["components"]))}).strict().refine(e=>e.ui!=="components"||vw.test(e.entry),{path:["entry"],message:"a components panel entry must be a .js, .mjs, .ts, .tsx, .mts or .jsx module"}).meta({id:"PanelContribution",description:"A sidebar panel. Requires the `sandboxed-ui` execution profile or higher."});var hw="1.4.248";var yw=64,bw=256,jn=hw,Ih={text:Rr(l.string().max(yw)).optional().meta(ae("Short label shown in the status bar.",jn,["3 blocked"])),icon:l.enum(ht).optional().meta(ae("Icon shown before the text, from the panel icon set.",jn,["bell"])),tone:l.enum(pa).optional().meta(ae("Colour of the item. Defaults to `neutral`.",jn,["warning"])),tooltip:Rr(l.string().max(bw)).optional().meta(ae("Shown on hover. Defaults to the plugin name.",jn))},RN=l.object({id:zn.meta(ae("Item id, unique among this plugin's status bar items; `statusBar.update` names it.",jn,["blocked-count"])),...Ih,command:kh.optional().meta(ae("Id of a command this plugin contributes in `contributes.commands`, run when the item is pressed.",jn,["guard.showLog"]))}).strict().meta({id:"StatusBarItemContribution",description:"An item in the status bar. Requires the `declarative` profile; a `trusted-worker` can change it with `statusBar.update`."}),Sh=l.strictObject({...Ih,visible:l.boolean().optional()});var _w=l.strictObject({id:zn,...Sh.shape}),$w=l.object({ok:l.literal(!0)}),Ph={"statusBar.update":J({summary:"Changes one of the plugin's `contributes.statusBarItems` (named by `id`): fields given replace their current value, `visible: false` hides it. Desktop app only; lasts until Orca restarts, and is hidden while the plugin is disabled.",since:2,scope:"plugin-private",capability:null,mutation:!1,surfaces:Te,params:_w,result:$w})};function cp(e){return e==="linux"?"orca-ide":e==="win32"?"orca.cmd":"orca"}function kw(e){return{...e,launchCmd:e.launchCmd??e.detectCmd,expectedProcess:e.expectedProcess??e.detectCmd}}var xw={claude:{detectCmd:"claude",promptInjectionMode:"argv",pasteNeedsTypedRequest:!0,draftPromptFlag:"--prefill",preflightTrust:"claude",draftPasteReadySignal:"claude-composer-prompt",workerStartReadsComposerMarker:!0,ctrlEnterEncoding:"csi-u"},"claude-agent-teams":{detectCmd:"orca",detectCmdAliases:["orca-dev","orca-ide"],detectRequiredCommands:["claude"],detectUnsupportedRuntimes:["win32","wsl"],launchCmd:"orca claude-teams",launchCmdByPlatform:{linux:`${cp("linux")} claude-teams`,win32:`${cp("win32")} claude-teams`},expectedProcess:"claude",promptInjectionMode:"stdin-after-start",pasteNeedsTypedRequest:!0,preflightTrust:"claude",draftPasteReadySignal:"claude-composer-prompt",workerStartReadsComposerMarker:!0,ctrlEnterEncoding:"csi-u"},codebuddy:{detectCmd:"codebuddy",detectCmdAliases:["cbc"],promptInjectionMode:"argv"},openclaude:{detectCmd:"openclaude",promptInjectionMode:"argv",draftPromptFlag:"--prefill"},codex:{detectCmd:"codex",promptInjectionMode:"argv",windowsInputRecordPasteNewline:"alt-enter",preflightTrust:"codex",draftPasteReadySignal:"codex-composer-prompt",draftPasteReadyTimeoutMs:2e4,submitRetryDelayMs:1200},autohand:{detectCmd:"autohand",promptInjectionMode:"stdin-after-start"},ante:{detectCmd:"ante",promptInjectionMode:"stdin-after-start"},trae:{detectCmd:"traecli",promptInjectionMode:"argv",argvPromptSeparator:"--"},opencode:{detectCmd:"opencode",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste",submitPasteReadySignal:"opencode-agent-row",draftPasteReadyTimeoutMs:2e4,ctrlEnterEncoding:"csi-u",composerReadyCaptures:["opencode-1-18-32-timed-boot-slow","opencode-1-18-32-timed-boot-hidden-pane","opencode-1-18-32-timed-first-launch","opencode-cmd-2-0-21-timed-warm-server"]},opencode2:{detectCmd:"opencode2",launchCmd:"opencode2 --standalone",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste",submitPasteReadySignal:"opencode-agent-row",draftPasteReadyTimeoutMs:2e4,composerReadyCaptures:["opencode-2-0-18-timed-boot-hidden-pane","opencode-2-0-21-timed-cold-standalone","opencode-2-0-21-timed-cold-standalone-hidden-pane","opencode-2-0-21-timed-natural-load-enter-dropped","opencode-2-0-14-timed-cold-standalone"]},"mimo-code":{detectCmd:"mimo",promptInjectionMode:"flag-prompt",draftPasteReadySignal:"render-cursor-after-bracketed-paste"},pi:{detectCmd:"pi",promptInjectionMode:"argv",draftPromptEnvVar:"ORCA_PI_PREFILL",windowsShiftEnterEncoding:"csi-u"},omp:{detectCmd:"omp",promptInjectionMode:"argv",draftPromptEnvVar:"ORCA_OMP_PREFILL",windowsShiftEnterEncoding:"csi-u"},"prime-agent":{detectCmd:"prime-agent",promptInjectionMode:"argv",argvPromptSeparator:"--",windowsShiftEnterEncoding:"csi-u"},qoder:{detectCmd:"qodercli",detectCmdAliases:["qoder"],promptInjectionMode:"flag-prompt-interactive",preflightTrust:"qoder"},"qoder-cn":{detectCmd:"qoderclicn",detectCmdAliases:["qodercn"],promptInjectionMode:"flag-prompt-interactive",preflightTrust:"qoder-cn"},gemini:{detectCmd:"gemini",promptInjectionMode:"flag-prompt-interactive"},antigravity:{detectCmd:"agy",promptInjectionMode:"flag-prompt-interactive",preflightTrust:"antigravity",submitLineSettleMsPerLine:45},aider:{detectCmd:"aider",promptInjectionMode:"stdin-after-start"},goose:{detectCmd:"goose",promptInjectionMode:"stdin-after-start"},amp:{detectCmd:"amp",promptInjectionMode:"stdin-after-start"},kilo:{detectCmd:"kilo",promptInjectionMode:"stdin-after-start"},kiro:{detectCmd:"kiro-cli",launchCmd:"kiro-cli chat --tui",promptInjectionMode:"stdin-after-start"},crush:{detectCmd:"crush",promptInjectionMode:"stdin-after-start"},aug:{detectCmd:"auggie",promptInjectionMode:"stdin-after-start"},cline:{detectCmd:"cline",promptInjectionMode:"stdin-after-start"},freebuff:{detectCmd:"freebuff",promptInjectionMode:"stdin-after-start"},codebuff:{detectCmd:"codebuff",promptInjectionMode:"stdin-after-start"},"command-code":{detectCmd:"command-code",launchCmd:"command-code --trust",promptInjectionMode:"argv"},continue:{detectCmd:"cn",promptInjectionMode:"stdin-after-start"},cursor:{detectCmd:"cursor-agent",promptInjectionMode:"argv",preflightTrust:"cursor"},droid:{detectCmd:"droid",promptInjectionMode:"argv",windowsShiftEnterEncoding:"csi-u",ctrlEnterEncoding:"csi-u"},kimi:{preflightTrust:"kimi",detectCmd:"kimi",detectCmdAliases:["kimi-code"],promptInjectionMode:"stdin-after-start"},"mistral-vibe":{detectCmd:"vibe",detectCmdAliases:["mistral-vibe"],promptInjectionMode:"stdin-after-start"},"qwen-code":{detectCmd:"qwen",promptInjectionMode:"stdin-after-start",submitRetryDelayMs:1200},rovo:{detectCmd:"acli",launchCmd:"acli rovodev run",promptInjectionMode:"stdin-after-start"},hermes:{detectCmd:"hermes",launchCmd:"hermes --tui",promptInjectionMode:"hermes-query"},openclaw:{detectCmd:"openclaw",promptInjectionMode:"stdin-after-start"},copilot:{detectCmd:"copilot",promptInjectionMode:"flag-interactive",preflightTrust:"copilot"},grok:{detectCmd:"grok",promptInjectionMode:"argv",argvPromptSeparator:"--",draftPasteReadySignal:"grok-composer-prompt",ctrlEnterEncoding:"csi-u"},muse:{detectCmd:"muse",launchCmd:"muse --trust-workspace",promptInjectionMode:"stdin-after-start"},dsh:{detectCmd:"dsh-tui",detectCmdAliases:["dst"],detectRequiredCommands:["dsh"],launchCmd:"dsh-tui .",expectedProcess:"dsh",promptInjectionMode:"stdin-after-start",draftPasteReadySignal:"dsh-composer-prompt",submitRetryDelayMs:1e3,submitRetryBudgetMs:3e4},zcode:{detectCmd:"zcode",expectedProcess:"zcode-cli",promptInjectionMode:"stdin-after-start",draftPasteReadySignal:"zcode-composer-prompt",composerReadyCaptures:["zcode-composer-ready"]},devin:{detectCmd:"devin",promptInjectionMode:"argv",argvPromptSeparator:"--"},jcode:{detectCmd:"jcode",launchCmd:"jcode",expectedProcess:"jcode",promptInjectionMode:"stdin-after-start"}},ww=Object.fromEntries(Object.entries(xw).map(([e,n])=>[e,kw(n)]));function Th(e){return typeof e=="string"&&Object.hasOwn(ww,e)}var lp=["worktree.history.back","worktree.history.forward","sidebar.left.toggle","sidebar.sleepingWorkspaces.toggle","floatingWorkspace.maximize","tab.rename","workspace.rename","workspace.openBoard","view.tasks","sidebar.right.toggle","sidebar.explorer.toggle","sidebar.search.toggle","sidebar.sourceControl.toggle","sidebar.checks.toggle","sidebar.ports.toggle"];var tz=new Set(lp);var Iw=500,dp=2e3,Zr=1024,Ah=4096,Vr=l.string().min(1).max(Zr),pp=l.string().min(1).max(Zr),Sw=l.strictObject({}).optional(),Pw=l.object({workspaces:l.array(l.object({id:Vr,kind:l.enum(["worktree","folder"]),name:l.string().max(512),path:l.string().max(Zr),branch:l.string().max(512).nullable(),hostId:l.string().max(Zr).nullable()})).max(Iw),truncated:l.boolean()}),Tw=l.strictObject({workspaceId:Vr}),Aw=l.object({opened:l.literal(!0)}),Ew=l.strictObject({workspaceId:Vr,title:l.string().min(1).max(512).optional(),command:l.string().min(1).max(Ah).optional()}),Ow=l.object({terminalId:pp}),Nw=l.strictObject({terminalId:pp,maxLines:l.number().int().min(1).max(dp).optional()}),zw=l.object({lines:l.array(l.string()).max(dp),truncated:l.boolean()}),Dw=l.strictObject({workspaceId:Vr,agent:l.string().min(1).max(64).refine(Th,"unknown agent"),prompt:l.string().min(1).max(Ah).optional()}),Cw=l.object({terminalId:pp});function jw(e){let n=e.split(/[\\/]/);return!/^[a-z]:/i.test(e)&&n[0]!==""&&n.every(i=>i!=="..")&&n.some(i=>i!==""&&i!==".")}var Lw=l.strictObject({workspaceId:Vr,path:l.string().min(1).max(Zr).refine(jw,"path must be relative and inside the workspace")}),Uw=l.object({opened:l.literal(!0)}),Rw=l.strictObject({action:l.enum(lp)}),Mw=l.object({ran:l.literal(!0)}),Eh={"workspace.list":J({summary:"Lists every workspace, Git worktrees and folders, on every host Orca reaches.",since:3,scope:"any-workspace",capability:"workspace:read",mutation:!1,surfaces:Te,params:Sw,result:Pw}),"workspace.open":J({summary:"Shows a workspace in Orca, as clicking it in the sidebar does; a folder workspace needs the desktop app.",since:3,scope:"any-workspace",capability:"workspace:write",mutation:!0,surfaces:Te,params:Tw,result:Aw}),"terminal.create":J({summary:"Opens a terminal in a workspace, optionally running a command, in the background.",since:3,scope:"any-workspace",capability:"terminal:send",mutation:!0,surfaces:Te,params:Ew,result:Ow}),"terminal.read":J({summary:`Reads a terminal's newest output as plain text, at most ${dp} lines.`,since:3,scope:"explicit-terminal",capability:"terminal:read",mutation:!1,surfaces:Te,params:Nw,result:zw}),"agent.launch":J({summary:"Starts an agent's CLI in a new terminal of a workspace, in the background, and returns as soon as it starts; a `prompt` is sent once the agent is ready.",since:3,scope:"any-workspace",capability:"agent:launch",mutation:!0,surfaces:Te,params:Dw,result:Cw}),"editor.open":J({summary:"Opens a file of a workspace in an editor tab of Orca's window; desktop app only. `workspace.open` shows the workspace.",since:3,scope:"any-workspace",capability:"workspace:write",mutation:!0,surfaces:Te,params:Lw,result:Uw}),"commands.run":J({summary:"Runs one of Orca's built-in actions in its window, never a plugin's replacement of it; desktop app only.",since:3,scope:"desktop",capability:"workspace:write",mutation:!0,surfaces:Te,params:Rw,result:Mw})};var Oh={...Ph,...Eh};var Zw=4096,Vw=50,Gr=512,tt=1024,Gw=l.strictObject({}).optional(),mp=l.object({branch:l.string().max(Gr),displayName:l.string().max(Gr),terminals:l.array(l.object({id:l.string().min(1).max(tt),title:l.string().max(Gr).optional()}).strict()).max(Vw)}).strict().nullable(),Fw=mp,Bw=l.strictObject({terminalId:l.string().min(1).max(tt),text:l.string().min(1).max(Zw),enter:l.boolean().default(!1)}),Hw=l.object({accepted:l.boolean()}),Kw=l.strictObject({title:l.string().min(1).max(120),body:l.string().max(1e3).optional()}),Ww=l.object({delivered:l.boolean()}),fp={openExternal:"shell.openExternal",saveAs:"files.saveAs"},Jw=8192,Xw=["http:","https:","mailto:"],Nh=64*1024*1024,qw=l.strictObject({url:l.string().min(1).max(Jw).refine(nI,"url must be an http:, https: or mailto: URL")}),Yw=l.object({opened:l.boolean(),reason:l.enum(["cancelled","consent-unavailable"]).optional()}),Qw=l.union([l.string().max(Nh),l.custom(e=>e instanceof ArrayBuffer||e instanceof Uint8Array,"data must be a string or ArrayBuffer").refine(e=>e.byteLength<=Nh,"data exceeds 64 MiB").meta({type:"ArrayBuffer"})]),eI=l.strictObject({suggestedName:l.string().min(1).max(255).optional(),mimeType:l.string().min(1).max(255).optional(),data:Qw}),tI=l.object({status:l.enum(["saved","cancelled"])});function nI(e){try{return Xw.includes(new URL(e).protocol)}catch{return!1}}var Mt={"workspace.readContext":J({summary:"Branch, name and terminal ids of the focused workspace, or null when none is focused.",since:0,scope:"active-workspace",capability:"workspace:read",mutation:!1,surfaces:ge,params:Gw,result:Fw}),"terminal.sendText":J({summary:"Types text into one terminal named by id, optionally pressing Enter.",since:0,scope:"explicit-terminal",capability:"terminal:send",mutation:!0,surfaces:Te,params:Bw,result:Hw}),"notifications.show":J({summary:"Shows a desktop notification.",since:0,scope:"desktop",capability:"notifications:show",mutation:!0,surfaces:ge,params:Kw,result:Ww}),"storage.get":J({summary:"Reads a JSON value from the plugin's private store; null when absent.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!1,framesSince:2,surfaces:ge,params:Gv,result:Fv}),"storage.set":J({summary:"Writes a JSON value to the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!0,framesSince:2,surfaces:ge,params:Bv,result:Hv}),"storage.delete":J({summary:"Removes a key from the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!0,framesSince:2,surfaces:ge,params:Kv,result:Wv}),"storage.keys":J({summary:"Lists the keys in the plugin's private store.",since:0,scope:"plugin-private",capability:"storage:own",mutation:!1,framesSince:2,surfaces:ge,params:Jv,result:Xv}),"secrets.get":J({summary:"Reads a secret from the plugin's encrypted secrets file; null when absent.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!1,framesSince:2,surfaces:ge,params:qv,result:Yv}),"secrets.set":J({summary:"Stores a secret in the plugin's encrypted secrets file.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!0,framesSince:2,surfaces:ge,params:Qv,result:eh}),"secrets.delete":J({summary:"Removes a secret from the plugin's encrypted secrets file.",since:0,scope:"plugin-private",capability:"secrets:own",mutation:!0,framesSince:2,surfaces:ge,params:th,result:nh}),"secrets.protection":J({summary:"How secrets are protected at rest: `os-keyring`, or `unavailable` (no OS key store, or Linux `basic_text`), where `secrets.set` fails.",since:1,scope:"plugin-private",capability:"secrets:own",mutation:!1,framesSince:2,surfaces:ge,params:rh,result:ih}),"settings.get":J({summary:"Reads every setting the plugin owns.",since:0,scope:"plugin-private",capability:"settings:own",mutation:!1,framesSince:2,surfaces:ge,params:oh,result:ah}),"settings.set":J({summary:"Writes one setting the plugin owns.",since:0,scope:"plugin-private",capability:"settings:own",mutation:!0,framesSince:2,surfaces:ge,params:sh,result:uh}),"shell.openExternal":J({summary:"Opens an http:, https: or mailto: URL in the default browser. Needs a click or key press in the frame; desktop app only. Orca asks the person before an http(s) host the plugin was not allowed; `opened` is false if they cancel.",since:1,scope:"desktop",capability:null,userActivation:!0,mutation:!1,surfaces:On,params:qw,result:Yw}),"files.saveAs":J({summary:"Offers data (a string or ArrayBuffer, up to 64 MiB) in Orca's save dialog; the plugin never learns the path. Needs a click or key press in the frame; desktop app only.",since:1,scope:"desktop",capability:null,userActivation:!0,mutation:!0,surfaces:On,params:eI,result:tI}),...yh,...Oh},zh=Object.keys(Mt).filter(Dh);function Dh(e){return Object.hasOwn(Mt,e)}function gp(e){return Dh(e)?Mt[e]:null}var Ch=Math.max(...zh.map(e=>Mt[e].since));function Fr(e){return zh.filter(n=>Mt[n].surfaces.includes(e))}function fa(e,n){return Fr(e).filter(i=>n||Mt[i].userActivation!==!0)}function ga(e,n="panel"){return Math.max(0,...e.map(i=>ph(Mt[i],n)))}var Le=1,yz=l.number().refine(e=>e===Le,{error:e=>typeof e.input=="number"&&e.input>Le?`targets host API ${e.input}, but this Orca supports only ${Le}; update Orca`:`must be ${Le}`}).meta({const:Le});var rI=new Set(["rate_limited","unavailable","timeout","conflict"]);function Fe(e,n=e,i){return Object.assign(new Error(n),{code:e,retryable:rI.has(e),...i===void 0?{}:{retryAfterMs:i}})}var iI=new Set(["plugin.request","events.subscribe","storage.get","storage.set","storage.delete","storage.keys","settings.get","settings.set","secrets.get","secrets.set","secrets.delete","secrets.protection"]);function va(e,n){return typeof e=="object"&&e!==null&&n in e?Object.getOwnPropertyDescriptor(e,n)?.value:void 0}function jh(e){let n={storage:new Map(Object.entries(e.storage??{})),settings:new Map(Object.entries(e.settings??{})),secrets:new Map(Object.entries(e.secrets??{}))},i=new Set,o=(a,s,u)=>{if(u===void 0?n[a].delete(s):n[a].set(s,u),a!=="secrets")for(let c of i)c(a,s);return{ok:!0}},t=null;async function r(a){let s=String(va(a,"name")),u=va(a,"input");if(!e.requests||!Object.hasOwn(e.requests,s)){if(t)return{output:await t(s,u)??null};throw Fe("unknown_method",`no panel handler named ${s}`)}let c=e.requests[s];return{output:(typeof c=="function"?await c(u):c)??null}}return{handles:a=>iI.has(a),async answer(a,s){let u=String(va(s,"key")),c=va(s,"value");switch(a){case"plugin.request":return r(s);case"storage.get":return{value:n.storage.get(u)??null};case"storage.keys":return{keys:[...n.storage.keys()]};case"settings.get":return{settings:Object.fromEntries(n.settings)};case"secrets.get":return{value:n.secrets.get(u)??null};case"secrets.protection":return{status:"os-keyring"};case"storage.set":return o("storage",u,c);case"settings.set":return o("settings",u,c);case"secrets.set":return o("secrets",u,c);case"storage.delete":return o("storage",u,void 0);case"secrets.delete":return o("secrets",u,void 0);default:return{ok:!0}}},routeRequests(a){return t=a,()=>{t===a&&(t=null)}},onChange(a){return i.add(a),()=>i.delete(a)},snapshot:()=>({storage:Object.fromEntries(n.storage),settings:Object.fromEntries(n.settings),secrets:Object.fromEntries(n.secrets)})}}var ha=class extends Error{constructor(i,o){super(o);this.code=i}code};function oI(e){return typeof e=="function"}var Lh={ok:!0};function aI(e){return e.result.safeParse(Lh).success}var vp={"workspace.readContext":null,"notifications.show":{delivered:!0},"shell.openExternal":{opened:!0},"files.saveAs":{status:"saved"},"agents.list":{agents:[]}};function Uh(e,n){let i=new Set(e.capabilities??n),o=new Map(Object.entries(e.results??{})),t=jh(e),r={panel:fa("panel",!0),worker:Fr("worker")},a=[],s=[],u=new Set,c=0,d=(g,y)=>{throw new ha(g,y)};async function p(g,y,x){let I=gp(g);if(!I)return d("unknown_method",`${g} does not exist in this Orca`);if(!I.surfaces.includes(x))return d("not_permitted",`${g} is not available to ${x}s`);if(I.userActivation===!0){if(c===0)return d("not_permitted",`${g} needs a click or key press in the frame`);c-=1}if(I.capability&&!i.has(I.capability))return d("capability_denied",`${g} needs the ${I.capability} capability`);let b=I.params.safeParse(y);return b.success?b.data:d("invalid_params",b.error.issues[0]?.message??"invalid params")}async function m(g,y,x){let I;try{I=await p(g,y,x)}catch(A){throw A instanceof ha?(s.push({method:g,code:A.code,message:A.message}),Fe(A.code,A.message)):A}let b=gp(g);if(!b)throw Fe("unknown_method",g);let T=!o.has(g)&&t.handles(g),E=aI(b);if(!o.has(g)&&!T&&!Object.hasOwn(vp,g)&&!E)throw Fe("unavailable",`the test configured no result for ${g}`);let z=o.has(g)?o.get(g):Object.hasOwn(vp,g)?vp[g]:Lh,w=T?await t.answer(g,I):oI(z)?await z(I):z,O=b.result.safeParse(w);if(!O.success)throw new TypeError(`mockHost: the result configured for ${g} does not match the host API: ${O.error.issues[0]?.message??"invalid result"}`);return O.data}let f=g=>({api:{major:Le,minor:ga(r[g])},call(y,x){a.push({method:y,params:x});let I=m(y,x,g);return u.add(I),I.catch(()=>{}).finally(()=>u.delete(I)),I},has:y=>r[g].some(x=>x===y)});return{calls:a,refusals:s,capabilities:[...i],callsOf:g=>a.filter(y=>y.method===g).map(y=>y.params),respond:(g,y)=>o.set(g,y),grantGesture:()=>{c=1},data:()=>t.snapshot(),onDataChange:g=>t.onChange(g),routeRequests:g=>t.routeRequests(g),async idle(){for(;u.size>0;)await Promise.allSettled(u)},bridge:f("panel"),worker:f("worker")}}var sI=l.object({label:B,labelHidden:D,value:Cn.optional(),defaultValue:Cn.optional(),placeholder:G.optional(),rows:l.number().int().min(2).max(20).optional(),maxLength:l.number().int().positive().max(j.maxTextLength).optional(),invalid:D,disabled:D,onChange:Y,onSubmit:Y,...ve}).strict(),uI=l.object({label:B,description:G.optional(),checked:D,defaultChecked:D,disabled:D,onChange:Y,...ve}).strict(),cI=l.object({label:B,labelHidden:D,value:G.optional(),defaultValue:G.optional(),options:l.array(l.object({value:B,label:B,description:G.optional(),disabled:D}).strict()).max(j.maxRadioOptions),orientation:l.enum(["vertical","horizontal"]).optional(),disabled:D,onChange:Y,...ve}).strict(),ya=l.number().refine(Number.isFinite,"must be finite"),lI=l.object({label:B,labelHidden:D,value:ya.optional(),defaultValue:ya.optional(),min:ya.optional(),max:ya.optional(),step:l.number().positive().refine(Number.isFinite).optional(),showValue:D,disabled:D,onChange:Y,...ve}).strict(),dI=l.object({label:B,description:G.optional(),error:G.optional(),required:D}).strict(),Rh={Textarea:R(sI,"none"),Checkbox:R(uI,"none"),RadioGroup:R(cI,"none"),Slider:R(lI,"none"),Field:R(dI,"any")};var pI=l.object({label:B,value:G.optional(),defaultValue:G.optional(),onChange:Y,...ve}).strict(),mI=l.object({value:B,label:B,icon:je.optional(),disabled:D}).strict(),fI=l.object({title:B,description:G.optional(),open:D,defaultOpen:D,disabled:D,onChange:Y,...ve}).strict(),gI=l.object({label:B,gap:Dn}).strict(),vI=l.object({columns:l.number().int().min(1).max(6).optional(),minItemWidth:l.enum(["xs","sm","md","lg"]).optional(),gap:Dn}).strict(),Mh={Tabs:R(pI,"tabs"),Tab:R(mI,"any"),Collapsible:R(fI,"any"),Toolbar:R(gI,"any"),Grid:R(vI,"any")};function Ue(e){return typeof e=="object"&&e!==null}var Br=["long","short","duration"],hp=l.number().refine(Number.isFinite,"must be a finite time in milliseconds"),Zh=l.object({type:l.literal("relative"),at:hp,format:l.enum(Br).optional()}).strict(),hI=[["day",864e5],["hour",36e5],["minute",6e4],["second",1e3]];function yI(e){let n=Math.abs(e),[i,o]=hI.find(([,t])=>n>=t)??["second",1e3];return{value:Math.trunc(e/o),unit:i}}function Vh(e,n,i,o){let{value:t,unit:r}=yI(e-n);return i==="duration"?new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:"narrow"}).format(Math.abs(t)):new Intl.RelativeTimeFormat(o,{numeric:i==="long"?"auto":"always",style:i==="long"?"long":"narrow"}).format(t,r)}var yp=l.string().min(1).max(64),bI=l.union([l.string().max(j.maxLabelLength),l.number(),l.boolean(),l.null(),Zh]),Gh=e=>new Set(e.map(n=>n.key)).size===e.length,_I=l.object({label:B,columns:l.array(l.object({key:yp,label:B,align:l.enum(["start","center","end"]).optional(),width:l.enum(["auto","xs","sm","md","lg"]).optional(),minWidth:l.enum(["auto","xs","sm","md"]).optional(),hideBelow:l.enum(["sm","md"]).optional(),sortable:D}).strict()).min(1).max(j.maxTableColumns).refine(Gh,"column keys must be unique"),rows:l.array(l.object({key:Rt,cells:l.record(yp,bI.refine(e=>typeof e!="number"||Number.isFinite(e))).refine(e=>Object.keys(e).length<=j.maxTableColumns),disabled:D}).strict()).max(j.maxTableRows).refine(Gh,"row keys must be unique"),sort:l.object({column:yp,direction:l.enum(["asc","desc"])}).strict().optional(),selectionMode:l.enum(["none","single","multiple"]).optional(),selected:l.array(Rt).max(j.maxTableRows).optional(),defaultSelected:l.array(Rt).max(j.maxTableRows).optional(),hasMore:D,loading:D,emptyText:G.optional(),maxHeight:Mr,onSortChange:Y,onSelectionChange:Y,onRowAction:Y,onLoadMore:Y,...ve}).strict(),$I=l.object({key:Rt,label:B,description:G.optional(),icon:je.optional(),disabled:D,hasChildren:D,children:l.array(l.unknown()).optional()}).strict();function kI(e){let n=[],i=new Set,o=[{raw:e,out:n,depth:1}],t=0;for(let r=o.pop();r;r=o.pop()){if(r.depth>j.maxTreeItemDepth)return`items nest deeper than ${j.maxTreeItemDepth}`;for(let a of r.raw){if(++t>j.maxTreeItems)return`more than ${j.maxTreeItems} items`;let s=$I.safeParse(Ue(a)?a:null);if(!s.success)return"each item needs a key and a label";let{children:u,...c}=s.data;if(i.has(c.key))return`duplicate item key ${JSON.stringify(c.key.slice(0,64))}`;i.add(c.key);let d=c;r.out.push(d),u&&(d.children=[],o.push({raw:u,out:d.children,depth:r.depth+1}))}}return n}var xI=l.array(l.unknown()).transform((e,n)=>{let i=kI(e);return typeof i=="string"?(n.addIssue({code:"custom",message:i}),l.NEVER):i}),wI=l.object({label:B,items:xI,selected:G.optional(),defaultSelected:G.optional(),expanded:l.array(Rt).max(j.maxTreeItems).optional(),defaultExpanded:l.array(Rt).max(j.maxTreeItems).optional(),maxHeight:Mr,onSelect:Y,onToggle:Y,onAction:Y,...ve}).strict(),Fh={Table:R(_I,"none"),Tree:R(wI,"none")};var Bh=l.string().max(j.maxDocumentLength),II=/\.(?:png|jpe?g|webp)$/i;function SI(e){return II.test(e)&&!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e)&&!/[\\\0?#]/.test(e)&&e.split("/").every(n=>n!==""&&n!=="."&&n!=="..")}var PI=l.object({content:Bh}).strict(),TI=l.object({code:Bh,language:l.string().regex(/^[A-Za-z0-9_+#.-]{1,64}$/).optional(),label:G.optional(),lineNumbers:D,wrap:D,maxHeight:Mr}).strict(),AI=l.object({src:l.string().max(512).refine(SI,"must be an image file in the plugin"),alt:G,size:l.enum(["xs","sm","md","lg","full"]).optional(),fit:l.enum(["contain","cover"]).optional(),rounded:D}).strict(),EI=l.object({label:G.optional(),items:l.array(l.object({label:B,value:l.union([G,l.number().refine(Number.isFinite),l.boolean(),l.null()]),tone:et,code:D}).strict()).max(j.maxKeyValueItems)}).strict(),OI=l.object({tone:et,title:G.optional(),icon:je.optional()}).strict(),NI=l.object({at:hp,format:l.enum(Br).optional(),tone:et,muted:D}).strict(),zI=l.object({shape:l.enum(["text","block","circle"]).optional(),lines:l.number().int().min(1).max(10).optional(),label:G.optional()}).strict(),Hh={Markdown:R(PI,"none"),CodeView:R(TI,"none"),Image:R(AI,"none"),KeyValue:R(EI,"none"),Callout:R(OI,"any"),Skeleton:R(zI,"none"),RelativeTime:R(NI,"none")};var DI=ht,Kh=new Set(DI),CI=l.object({gap:Dn,align:sp}).strict(),jI=l.object({gap:Dn,align:sp,justify:l.enum(["start","center","end","between"]).optional(),wrap:D}).strict(),LI=l.object({tone:et,muted:D,size:ma,weight:l.enum(["regular","medium","semibold"]).optional(),truncate:D}).strict(),UI=l.object({level:l.union([l.literal(1),l.literal(2),l.literal(3)]).optional()}).strict(),RI=l.object({variant:up,tone:et,size:ma,icon:je.optional(),tooltip:G.optional(),disabled:D,onPress:Y}).strict(),MI=l.object({icon:je,label:B,tooltip:G.optional(),variant:up,tone:et,size:ma,disabled:D,onPress:Y}).strict(),ZI=l.object({tone:et}).strict(),VI=l.object({title:G.optional(),description:G.optional()}).strict(),GI=l.object({label:G.optional()}).strict(),FI=l.object({title:G.optional(),description:G.optional(),icon:je.optional(),current:D,disabled:D,onPress:Y}).strict(),BI=l.object({label:B,labelHidden:D,value:Cn.optional(),defaultValue:Cn.optional(),placeholder:G.optional(),type:l.enum(["text","search","password"]).optional(),maxLength:l.number().int().positive().max(j.maxTextLength).optional(),invalid:D,disabled:D,onChange:Y,onSubmit:Y,...ve}).strict(),HI=l.object({label:B,checked:D,defaultChecked:D,disabled:D,onChange:Y,...ve}).strict(),KI=l.object({label:B,labelHidden:D,value:G.optional(),defaultValue:G.optional(),placeholder:G.optional(),options:l.array(l.object({value:B,label:B,disabled:D}).strict()).max(j.maxSelectOptions),disabled:D,onChange:Y,...ve}).strict(),WI=l.object({orientation:l.enum(["horizontal","vertical"]).optional()}).strict(),JI=l.object({label:B,labelHidden:D,value:l.number().min(0).max(100).optional()}).strict(),XI=l.object({label:B,labelHidden:D}).strict(),qI=l.object({title:B,description:G.optional(),icon:je.optional()}).strict(),YI=l.object({href:l.string().max(2048).regex(/^(https?:\/\/|mailto:)/i).optional(),onPress:Y}).strict(),QI=l.object({block:D}).strict(),Hr={Stack:R(CI,"any"),Row:R(jI,"any"),Text:R(LI,"inline"),Heading:R(UI,"inline"),Button:R(RI,"text"),IconButton:R(MI,"none"),Badge:R(ZI,"text"),Card:R(VI,"any"),List:R(GI,"items"),ListItem:R(FI,"any"),Input:R(BI,"none"),Switch:R(HI,"none"),Select:R(KI,"none"),Separator:R(WI,"none"),Progress:R(JI,"none"),Spinner:R(XI,"none"),EmptyState:R(qI,"any"),Link:R(YI,"text"),Code:R(QI,"text"),...Rh,...Mh,...Fh,...Hh};function bp(e){return typeof e=="string"&&Object.hasOwn(Hr,e)}var iD=Object.keys(Hr).filter(bp),Wh=new Set(["Text","Link","Code","Badge","RelativeTime"]),Jh=new Set(["Button","IconButton","Input","Switch","Select","Link","ListItem","Textarea","Checkbox","RadioGroup","Slider","Tabs","Collapsible","Table","Tree","Markdown"]),ba={items:"ListItem",tabs:"Tab"};var eS=new Set(["type","key","props","children"]),_p=32,tS=8,nS=/^[A-Z][A-Za-z0-9]{0,63}$/,rS=20,iS=new Map([[ba.items,"items"],[ba.tabs,"tabs"]]),oS={ListItem:"List",Tab:"Tabs"};function Xh(e){return e==="items"||e==="tabs"?ba[e]:void 0}var _a=class extends Error{};function te(e,n){throw new _a(`${e}: ${n}`)}function aS(e,n){return e===void 0?[]:(Array.isArray(e)||te(n,"children must be an array"),e)}function sS(e,n,i){let o=Hr[e].props.shape,t={};for(let[r,a]of Object.entries(n)){if(a===void 0)continue;if(!Object.hasOwn(o,r)){i(`${e}: ignored unknown prop "${r.slice(0,64)}"`);continue}let s=o[r].safeParse(a);if(!s.success){i(`${e}: ignored invalid ${r}`);continue}t[r]=s.data}for(let[r,a]of Object.entries(o))if(!Object.hasOwn(t,r)&&!a.safeParse(void 0).success)return i(`${e}: missing required ${r}; showing a placeholder`),null;return typeof t.icon=="string"&&!Kh.has(t.icon)&&i(`${e}: unknown icon "${t.icon}"; showing a fallback glyph`),t}function qh(e){if(e===null)return{ok:!0,tree:null,nodes:0,warnings:[]};let n=new Set,i=c=>{n.sizej.maxTextLength&&te(I,"text is too long"),r+ ++a>j.maxNodes&&te(I,`more than ${j.maxNodes} nodes`),s+=tS+Oe.length,s>j.maxTreeBytes&&te(I,`tree exceeds ${j.maxTreeBytes} bytes`),x.push(Oe);continue}Ue(d)||te(I,"expected a node, string or number");let b=d.type,T=bp(b);!T&&(typeof b!="string"||!nS.test(b))&&te(I,`invalid component name ${JSON.stringify(String(b)).slice(0,80)}`),(f==="none"||f==="text")&&te(I,`${m} accepts only text`),f==="inline"&&T&&!Wh.has(b)&&te(I,`${m} accepts only text, Text, Link, Code, Badge and RelativeTime`);let E=Xh(f),z=typeof b=="string"?iS.get(b):void 0;E!==void 0&&b!==E&&te(I,`${m} holds only ${E}`),z!==void 0&&z!==f&&te(I,`${b} must be a direct child of ${oS[b]??"its container"}`),g&&Jh.has(b)&&te(I,`a ListItem with onPress cannot contain a ${b}`),++r+a>j.maxNodes&&te(I,`more than ${j.maxNodes} nodes`),p>j.maxDepth&&te(I,`deeper than ${j.maxDepth}`);for(let Oe of Object.keys(d))eS.has(Oe)||te(I,`unknown node field ${Oe.slice(0,64)}`);let w=d.key;w!==void 0&&((typeof w!="string"||w.length>j.maxLabelLength)&&te(I,"key must be a short string"),y.has(w)&&te(I,`duplicate key ${JSON.stringify(w.slice(0,64))} among siblings`),y.add(w));let O=w===void 0?{}:{key:w};if(!T){i(`unknown component ${b}; showing a placeholder`),x.push({type:"Unsupported",...O,props:{name:b},children:[]}),s+=_p+b.length;continue}let A=d.props??{};(!Ue(A)||Object.keys(A).length>j.maxPropsPerNode)&&te(I,"props must be an object with few fields");let F=sS(b,A,i);if(!F){x.push({type:"Unsupported",...O,props:{name:b},children:[]}),s+=_p+b.length;continue}s+=_p+JSON.stringify(F).length,s>j.maxTreeBytes&&te(I,`tree exceeds ${j.maxTreeBytes} bytes`);let C=[],ne={type:b,...O,props:F,children:C};x.push(ne);let he=aS(d.children,I);he.length>j.maxNodes&&te(I,`more than ${j.maxNodes} children`);let Ee=new Set,Yr=g||b==="ListItem"&&F.onPress!==void 0;for(let Oe=he.length-1;Oe>=0;Oe--)t.push({raw:he[Oe],depth:p+1,parentType:b,policy:Hr[b].children,inPressable:Yr,siblingKeys:Ee,out:C,path:`${I}.children.${Oe}`})}}catch(c){if(c instanceof _a)return{ok:!1,error:c.message};throw c}let u=o[0];return typeof u=="object"?{ok:!0,tree:u,nodes:r,warnings:[...n]}:{ok:!1,error:"tree: expected a node"}}var Kr=l.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),Zt=l.string().min(1).max(64),$p=l.union([l.string().max(j.maxTextLength),l.number().refine(Number.isFinite),l.boolean(),l.null()]),Yh=l.array($p).max(j.maxEventArgItems),uS=l.union([$p,Yh,l.record(l.string().max(64),l.union([$p,Yh])).refine(e=>Object.keys(e).length<=16,"too many fields")]),vD=l.object({document:Zt,revision:Kr,callback:l.string().min(1).max(j.maxCallbackIdLength).regex(da),args:l.array(uS).max(j.maxEventArgs),edit:Kr.optional()}).strict(),cS=l.object({document:Zt,revision:Kr,tree:l.unknown()}).strict(),Qh=l.object({document:Zt.optional(),revision:Kr,message:l.string().max(j.maxLabelLength*4),stack:l.string().max(8192).optional()}).strict();function ey(e){let n=cS.safeParse(e);if(!n.success)return{ok:!1,document:null,revision:null,error:"malformed render"};let{document:i,revision:o}=n.data,t=qh(n.data.tree);return t.ok?{...t,document:i,revision:o}:{ok:!1,document:i,revision:o,error:t.error}}var hD=l.object({document:Zt,revision:Kr,accepted:l.boolean(),retryAfterMs:l.number().int().nonnegative().max(6e4).optional()}).strict(),yD=l.object({document:Zt}).strict(),ty=/^[A-Za-z0-9_.:-]{1,128}$/,lS=["plugin","workspace"],kp=l.number().int().min(0).max(1e6),bD=l.object({version:kp,value:l.json()}).strict().refine(e=>JSON.stringify(e.value).length<=aa,"persisted value is too large"),ny=l.object({document:Zt,entries:l.array(l.object({scope:l.enum(lS),key:l.string().regex(ty),version:kp,value:l.json()}).strict()).min(1).max(64)}).strict(),_D=l.object({document:Zt,entries:l.array(l.object({key:l.string().regex(ty),version:kp,value:l.json().optional()}).strict().refine(e=>JSON.stringify(e.value??null).length<=aa,"retained value is too large")).min(1).max(64)}).strict();import{installOrcaDeclarativeRuntime as xS}from"./orca-runtime.mjs";var dS={Stack:"group",Row:"group",Card:"region",Text:"text",Heading:"heading",Button:"button",IconButton:"button",Badge:"status",List:"list",ListItem:"listitem",Input:"textbox",Switch:"switch",Select:"combobox",Separator:"separator",Progress:"progressbar",Spinner:"status",EmptyState:"group",Link:"link",Code:"code",Textarea:"textbox",Checkbox:"checkbox",RadioGroup:"radiogroup",Slider:"slider",Field:"group",Tabs:"tablist",Tab:"tab",Collapsible:"group",Toolbar:"toolbar",Grid:"group",Table:"grid",Tree:"tree",Markdown:"document",CodeView:"code",Image:"img",KeyValue:"list",Callout:"note",Skeleton:"status",RelativeTime:"time",Unsupported:"unsupported"};function iy(e,n){if(typeof e!="number")return"";let i=Br.find(o=>o===n)??"short";return Vh(e,Date.now(),i,"en")}function pS(e){return typeof e=="object"&&e!==null&&"at"in e?iy(e.at,"format"in e?e.format:void 0):String(e??"")}var mS=["title","description","content","code","error","alt"];function fS(e){let n=[],i=[e.rows,e.items].flatMap(o=>Array.isArray(o)?o:[]);for(let o=i.shift();o!==void 0;o=i.shift()){if(typeof o!="object"||o===null)continue;let t={...o};typeof t.cells=="object"&&t.cells!==null&&n.push(...Object.values(t.cells).map(pS));for(let r of["label","value"])t[r]!==void 0&&t[r]!==null&&n.push(String(t[r]));Array.isArray(t.children)&&i.push(...t.children)}return n}function oy(e){if(typeof e=="string")return e;let n=e.props,i=mS.map(o=>n[o]).filter(o=>typeof o=="string");return e.type==="RelativeTime"?iy(n.at,n.format):e.type==="Tab"?typeof n.label=="string"?n.label:"":[...i,...fS(n),...e.children.map(oy)].join(" ")}var xp=e=>e.replace(/\s+/g," ").trim();function gS(e){let n=e.props,i=n.label??n.title;return typeof i=="string"?i:void 0}function vS(e,n){let i=e.props,o=e.type==="ListItem"&&i.onPress!==void 0;return{type:e.type,key:e.key?.startsWith("#")?void 0:e.key,role:o?"button":dS[e.type]??"generic",label:gS(e),text:xp(oy(e)),props:i,disabled:i.disabled===!0,path:n}}function $a(e){let n=[],i=(o,t)=>{n.push(vS(o,t)),o.children.forEach((r,a)=>{typeof r!="string"&&i(r,`${t}/${r.key??`#${a}`}`)})};return e&&i(e,e.key??"#0"),n}function ry(e,n){return e===void 0?!1:typeof n=="string"?xp(e)===xp(n):n.test(e)}function ay(e,n){return(n.type===void 0||e.type===n.type)&&(n.role===void 0||e.role===n.role)&&(n.text===void 0||ry(e.text,n.text))&&(n.label===void 0||ry(e.label,n.label))&&(n.testId===void 0||e.key===n.testId)}function sy(e){return e.filter(n=>!e.some(i=>i.path.startsWith(`${n.path}/`)))}function uy(e){return Object.entries(e).map(([n,i])=>`${n}: ${i instanceof RegExp?String(i):JSON.stringify(i)}`).join(", ")}function wp(e){if(typeof e=="string")return e;let n={};for(let[i,o]of Object.entries(e.props)){if(i.startsWith("$"))continue;let t=typeof o=="object"&&o!==null&&"$callback"in o;n[i]=t?"[handler]":o}return{type:e.type,...e.key&&!e.key.startsWith("#")?{key:e.key}:{},...Object.keys(n).length>0?{props:n}:{},...e.children.length>0?{children:e.children.map(wp)}:{}}}var hS={value:"defaultValue",checked:"defaultChecked",open:"defaultOpen",selected:"defaultSelected"};function Ip(e){return typeof e=="string"||typeof e=="boolean"||typeof e=="number"||Array.isArray(e)&&e.every(n=>typeof n=="string")}function yS(e){switch(e.type){case"Switch":case"Checkbox":case"Collapsible":return!1;case"Slider":return typeof e.props.min=="number"?e.props.min:0;case"Table":return[];default:return""}}function cy(){let e=new Map;function n(t){let r=ap(t.type);if(!r)throw new Error(`a ${t.type} has no value; expected a form control, Tabs or Table`);return r}function i(t){let r=e.get(t.path);if(r)return r;let{value:a}=n(t),s=t.props[a],u=t.props[hS[a]??""],d={value:Ip(s)?s:Ip(u)?u:yS(t),sent:0};return e.set(t.path,d),d}function o(t,r){let{value:a,change:s}=n(t);if(t.props[a]!==void 0&&t.props[s]===void 0)throw new Error(`the ${t.type} is read-only: it has a ${a} and no ${s}`);let u=i(t);return u.sent+=1,u.value=r,{value:r,id:u.sent}}return{observe(t){let r=new Map;for(let a of t){let s=ap(a.type);if(!s)continue;let u=e.get(a.path)??i(a),c=a.props[s.value],d=a.props[la];Ip(c)&&(typeof d=="number"?d:0)>=u.sent&&(u.value=c),r.set(a.path,u)}e=r},valueOf:t=>i(t).value,edit:o,typeInto(t,r,a){if(t.type!=="Input"&&t.type!=="Textarea")throw new Error(`type: a ${t.type} takes no text; expected an Input or Textarea`);let s=a?"":String(i(t).value),u=[];a&&u.push(o(t,s));for(let c of r)s+=c,u.push(o(t,s));return u},toggle(t){if(!["Switch","Checkbox","Collapsible"].includes(t.type))throw new Error(`toggle: expected a Switch, Checkbox or Collapsible, not a ${t.type}`);return o(t,!i(t).value)}}}function ly(e){let n=new Map,i=(s,u)=>{let c=n.get(s)??new Set;return c.add(u),n.set(s,c),{dispose:()=>c.delete(u)}},o=(s,u)=>{for(let c of n.get(s)??[])c(u)},t=s=>u=>typeof u=="object"&&u!==null&&s in u?Object.getOwnPropertyDescriptor(u,s)?.value:void 0,r=()=>{};return{facades:{plugin:{request:(s,u,c)=>{let d=typeof c=="object"&&c!==null&&"timeoutMs"in c?c.timeoutMs:void 0;return e("plugin.request",{name:s,...u===void 0?{}:{input:u},...typeof d=="number"?{timeoutMs:d}:{}}).then(t("output"))},on:(s,u)=>i(`message:${s}`,u)},storage:{get:s=>e("storage.get",{key:s}).then(u=>t("value")(u)??null),set:(s,u)=>e("storage.set",{key:s,value:u}).then(r),delete:s=>e("storage.delete",{key:s}).then(r),keys:async()=>{let s=t("keys")(await e("storage.keys"));return Array.isArray(s)?s.map(String):[]},onDidChange:s=>i("changed:storage",u=>s({key:String(u)}))},settings:{get:async s=>{let u=t("settings")(await e("settings.get"));return s===void 0?u:t(s)(u)},set:(s,u)=>e("settings.set",{key:s,value:u}).then(r),onDidChange:s=>i("changed:settings",u=>s({key:String(u)}))},secrets:{get:async s=>{let u=t("value")(await e("secrets.get",{key:s}));return typeof u=="string"?u:null},set:(s,u)=>e("secrets.set",{key:s,value:u}).then(r),delete:s=>e("secrets.delete",{key:s}).then(r)}},post:(s,u)=>o(`message:${s}`,u),changed:(s,u)=>o(`changed:${s}`,u)}}var dy=Symbol.for("orca.testing.stored");function py(e,n){return Object.freeze({[dy]:!0,version:n,value:e})}function bS(e){return typeof e=="object"&&e!==null&&dy in e}function my(e,n){for(let i of["plugin","workspace"])for(let[o,t]of Object.entries(n?.[i]??{}))e[i].set(o,bS(t)?{version:t.version,value:t.value}:{version:1,value:t})}var _S={sm:360,md:480};function fy(e,n){let i=e.filter(o=>!o.hideBelow||n>=_S[o.hideBelow]);return i.length>0?i:e.slice(0,1)}var Sp=(e,n)=>e.path.startsWith(`${n.path}/`);function ka(e,n){return n.filter(i=>i.type==="Tab"&&Sp(i,e)&&!i.path.slice(e.path.length+1).includes("/"))}function Pp(e,n,i){let o=ka(e,n);return o.find(t=>t.props.value===i)??o.find(t=>!t.disabled)}function gy(e,n){let i=[];for(let o of e)if(!i.some(t=>Sp(o,t))&&(o.type==="Collapsible"&&n(o)!==!0&&i.push(o),o.type==="Tabs")){let t=Pp(o,e,n(o));i.push(...ka(o,e).filter(r=>r!==t))}return e.filter(o=>!i.some(t=>Sp(o,t)))}function vy(e){return typeof e=="object"&&e!==null&&"key"in e&&typeof e.key=="string"}function Tp(e){return Array.isArray(e.props.rows)?e.props.rows.filter(vy):[]}function Ap(e){let n=[],i=Array.isArray(e.props.items)?[...e.props.items]:[];for(let o=i.shift();o!==void 0;o=i.shift())if(vy(o)){n.push(o);let t="children"in o?o.children:void 0;Array.isArray(t)&&i.push(...t)}return n}function Ae(e,n,i){if(e.type!==n)throw new Error(`${i}: expected a ${n}, not a ${e.type}`)}function Ep(e,n,i){let o=Tp(e).find(t=>t.key===n);if(!o||o.disabled===!0)throw new Error(`${i}: the Table has no enabled row "${n}"`);return o}function xa(e,n,i){let o=Ap(e).find(t=>t.key===n);if(!o)throw new Error(`${i}: the Tree has no item "${n}"`);return o}function hy(e){return e.hasChildren===!0||Array.isArray(e.children)&&e.children.length>0}function yy(e,n){let o=(Array.isArray(e.props.columns)?e.props.columns:[]).find(a=>typeof a=="object"&&a!==null&&"key"in a&&a.key===n);if(!o||typeof o!="object"||!("sortable"in o)||o.sortable!==!0)throw new Error(`sort: the Table has no sortable column "${n}"`);let t=e.props.sort,r=typeof t=="object"&&t!==null&&"column"in t&&t.column===n&&"direction"in t&&t.direction==="asc";return{column:n,direction:r?"desc":"asc"}}function $S(e,n){return e.type==="Tabs"?ka(e,n).map(o=>({value:o.props.value,disabled:o.disabled})):(Array.isArray(e.props.options)?e.props.options:[]).map(o=>typeof o=="object"&&o!==null&&"value"in o?{value:o.value,disabled:"disabled"in o&&o.disabled===!0}:{value:void 0,disabled:!0})}function by({host:e,controls:n,resolve:i,elements:o,dispatch:t,settled:r}){let a=new Map,s=d=>{let p=a.get(d.path);if(!p){let m=d.props.expanded??d.props.defaultExpanded;p=new Set(Array.isArray(m)?m.filter(f=>typeof f=="string"):[]),a.set(d.path,p)}return p},u=async(d,p,m,f)=>{let g=n.edit(d,m);t(p,[f],g.id),await r()},c=async(d,p,m,f)=>{let g=i(d,f);if(Ae(g,"Tree",f),!hy(xa(g,p,f)))throw new Error(`${f}: the Tree item "${p}" has no children`);let y=s(g);y.has(p)!==m&&(m?y.add(p):y.delete(p),t(g.props.onToggle,[{key:p,expanded:m}]),await r())};return{async press(d){let p=i(d,"press"),{href:m,onPress:f}=p.props;if(p.type==="Link"&&typeof m=="string")e.grantGesture(),e.bridge.call("shell.openExternal",{url:m}).catch(()=>{});else{if(f===void 0)throw new Error(`press: the ${p.type} has no onPress`);e.grantGesture()}t(f,[]),await r()},async type(d,p,m={}){let f=i(d,"type");for(let g of n.typeInto(f,p,m.replace===!0))t(f.props.onChange,[g.value],g.id),await r();m.submit&&(t(f.props.onSubmit,[n.valueOf(f)]),await r())},async submit(d){let p=i(d,"submit");t(p.props.onSubmit,[n.valueOf(p)]),await r()},async toggle(d){let p=i(d,"toggle"),m=n.toggle(p);t(p.props.onChange,[m.value],m.id),await r()},async select(d,p){let m=i(d,"select");if(!["Select","RadioGroup","Tabs"].includes(m.type))throw new Error(`select: expected a Select, RadioGroup or Tabs, not a ${m.type}`);let f=$S(m,o()).find(g=>g.value===p);if(!f||f.disabled)throw new Error(`select: the ${m.type} has no enabled option "${p}"`);await u(m,m.props.onChange,p,p)},async slide(d,p){let m=i(d,"slide");Ae(m,"Slider","slide");let f=typeof m.props.min=="number"?m.props.min:0,g=typeof m.props.max=="number"?m.props.max:100;if(!Number.isFinite(p)||pg)throw new Error(`slide: ${p} is outside the Slider's ${f} to ${g}`);await u(m,m.props.onChange,p,p)},async sort(d,p){let m=i(d,"sort");if(Ae(m,"Table","sort"),m.props.onSortChange===void 0)throw new Error("sort: the Table has no onSortChange");t(m.props.onSortChange,[yy(m,p)]),await r()},async selectRows(d,p){let m=i(d,"selectRows");Ae(m,"Table","selectRows");let f=m.props.selectionMode??"none";if(f==="none"||f==="single"&&p.length>1)throw new Error(`selectRows: the Table's selectionMode is ${String(f)}`);p.forEach(g=>Ep(m,g,"selectRows")),await u(m,m.props.onSelectionChange,[...p],{keys:[...p]})},async activateRow(d,p){let m=i(d,"activateRow");if(Ae(m,"Table","activateRow"),Ep(m,p,"activateRow"),m.props.onRowAction===void 0)throw new Error("activateRow: the Table has no onRowAction");t(m.props.onRowAction,[{key:p}]),await r()},async loadMore(d){let p=i(d,"loadMore");if(Ae(p,"Table","loadMore"),p.props.hasMore!==!0||p.props.onLoadMore===void 0)throw new Error("loadMore: the Table has no more rows (hasMore and onLoadMore)");t(p.props.onLoadMore,[]),await r()},expand:(d,p)=>c(d,p,!0,"expand"),collapse:(d,p)=>c(d,p,!1,"collapse"),async selectItem(d,p){let m=i(d,"selectItem");if(Ae(m,"Tree","selectItem"),xa(m,p,"selectItem").disabled===!0)throw new Error(`selectItem: the Tree item "${p}" is disabled`);await u(m,m.props.onSelect,p,{key:p})},async activateItem(d,p){let m=i(d,"activateItem");if(Ae(m,"Tree","activateItem"),xa(m,p,"activateItem").disabled===!0||!m.props.onAction)throw new Error(`activateItem: the Tree item "${p}" cannot be activated`);t(m.props.onAction,[{key:p}]),await r()},expandedOf:d=>{let p=i(d,"expandedOf");return Ae(p,"Tree","expandedOf"),Ap(p).map(m=>m.key).filter(m=>s(p).has(m))},columnsOf:(d,p={})=>{let m=i(d,"columnsOf");Ae(m,"Table","columnsOf");let g=(Array.isArray(m.props.columns)?m.props.columns:[]).flatMap(y=>{if(typeof y!="object"||y===null||!("key"in y))return[];let x="hideBelow"in y?y.hideBelow:void 0;return typeof y.key=="string"?[{key:y.key,hideBelow:x==="sm"||x==="md"?x:void 0}]:[]});return fy(g,p.width??Number.POSITIVE_INFINITY).map(y=>y.key)},rowsOf:d=>{let p=i(d,"rowsOf");return Ae(p,"Table","rowsOf"),Tp(p).map(m=>m.key)}}}var Be=e=>{let n=(e??"").replace(/\s+/g," ").trim();return JSON.stringify(n.length>60?`${n.slice(0,59)}…`:n)},_y=e=>Array.isArray(e)?e.length:0;function kS(e,n){let{props:i}=e;switch(e.type){case"Heading":return`Heading ${Be(e.text)}`;case"Callout":return`Callout ${String(i.tone??"neutral")} ${Be(e.label??e.text)}`;case"EmptyState":return`EmptyState ${Be(e.label)}`;case"Table":return`Table ${Be(e.label)}: ${_y(i.rows)} row(s)${i.hasMore===!0?", more":""}`;case"Tree":return`Tree ${Be(e.label)}: ${_y(i.items)} top-level item(s)`;case"Tabs":return`Tabs ${Be(e.label)}: ${Be(n.get(e.path))} selected`;case"Skeleton":case"Spinner":return`${e.type} ${Be(e.label??"Loading")}`;case"Text":return i.tone==="danger"||i.tone==="warning"?`Text ${String(i.tone)} ${Be(e.text)}`:null;default:return null}}function $y(e,n){let i=[];for(let o of e){if(o.type==="List"){let r=e.filter(a=>a.type==="ListItem"&&a.path.startsWith(`${o.path}/`)).length;i.push(`List ${Be(o.label)}: ${r} item(s)`);continue}let t=kS(o,n);t&&i.push(t)}return i.length>12?[...i.slice(0,12),`… ${i.length-12} more`]:i}function ky(e){return"path"in e}var wS=100,IS=()=>new Promise(e=>typeof setImmediate=="function"?setImmediate(e):setTimeout(e,0));async function xy(e,n){let i=n.host,o=new Map,t=(w,O)=>{for(let A of o.get(w)??[])A(O)},r=[],a=[],s=[],u={plugin:new Map,workspace:new Map};my(u,n.persisted);let c=n.visible??!0,d={document:"",revision:0,tree:null},p=cy(),m=ly(i.bridge.call),f=i.onDataChange(m.changed);function g(w,O){if(w===Ge.ready)t(Ge.hydrate,{panel:{id:n.panelId??"panel"},visible:c,plugin:Object.fromEntries(u.plugin),workspace:Object.fromEntries(u.workspace)});else if(w===Ge.render){let A=ey(O);if(!A.ok){a.push({kind:"refused",message:A.error}),A.document!==null&&A.revision!==null&&t(Ge.ack,{document:A.document,revision:A.revision,accepted:!1});return}s.push(...A.warnings.filter(F=>!s.includes(F))),d={document:A.document,revision:A.revision,tree:A.tree},p.observe($a(A.tree)),t(Ge.ack,{document:A.document,revision:A.revision,accepted:!0})}else if(w===Ge.error){let A=Qh.safeParse(O);a.push(A.success?{kind:"plugin",message:A.data.message,...A.data.stack?{stack:A.data.stack}:{}}:{kind:"plugin",message:String(O)})}else if(w===Ge.persist){let A=ny.safeParse(O);if(!A.success){a.push({kind:"refused",message:"persisted state Orca would not store"});return}for(let F of A.data.entries)u[F.scope].set(F.key,{version:F.version,value:F.value})}}let y=xS({post:g,awaitHydration:!0,colorScheme:n.theme??"dark",schedule:w=>r.push(w),bridge:{api:i.bridge.api,locale:n.locale??"en",host:{call:i.bridge.call,has:i.bridge.has},...m.facades,on(w,O){let A=o.get(w)??new Set;return A.add(O),o.set(w,A),{dispose:()=>A.delete(O)}}}});async function x(){for(let w=0;wgy($a(d.tree),w=>p.valueOf(w)),b=w=>sy(I().filter(O=>ay(O,w)));function T(w,O){let A=ky(w)?I().find(F=>F.path===w.path):b(w)[0];if(!A)throw new Error(ky(w)?`${O}: the element is no longer in the panel`:`${O}: nothing in the panel matches { ${uy(w)} }`);if(A.disabled)throw new Error(`${O}: the ${A.type} is disabled`);return A}function E(w,O,A){let F=typeof w=="object"&&w!==null&&"$callback"in w?w.$callback:null;typeof F=="string"&&t(Ge.event,{document:d.document,revision:d.revision,callback:F,args:O,...A===void 0?{}:{edit:A}})}await Promise.resolve(typeof e=="function"?{default:e}:e).then(w=>y.boot(w)).catch(w=>a.push({kind:"plugin",message:w instanceof Error?w.message:String(w),...w instanceof Error&&w.stack?{stack:w.stack}:{}})),await x();let z=by({host:i,controls:p,resolve:T,elements:I,dispatch:E,settled:x});return{host:i,errors:a,warnings:s,get refusals(){return i.refusals},find:w=>b(w)[0]??null,findAll:b,tree:()=>d.tree?wp(d.tree):null,drawnTree:()=>d.tree,summary:()=>{let w=$a(d.tree),O=I(),A=new Map(O.filter(F=>F.type==="Tabs").map(F=>[F.path,Pp(F,w,p.valueOf(F))?.label??""]));return $y(O,A)},get persisted(){let w=O=>Object.fromEntries([...u[O]].map(([A,F])=>[A,F.value]));return{plugin:w("plugin"),workspace:w("workspace"),storage:i.data().storage}},settled:x,...z,valueOf:w=>p.valueOf(T(w,"valueOf")),async emit(w,O){t(w,O),await x()},async post(w,O){m.post(w,O),await x()},async setVisible(w){c=w,t(Ge.visibility,{visible:w}),await x()},async rerender(){y.rerender(),await x()},async unmount(){y.dispose(),o.clear(),f()}}}var wy={workspaceId:l.string().min(1).max(2048),kind:l.enum(["worktree","folder"])},SS=l.object({...wy,path:l.string().min(1).max(32*1024),branch:l.string().max(1024)}),PS=l.object({...wy,path:l.string().min(1).max(32*1024)}),TS=l.object({workspaceId:l.string().min(1).max(2048).nullable(),paneKey:l.string().min(1).max(2048),terminalId:l.string().min(1).max(tt).optional(),title:l.string().max(Gr).optional(),state:l.enum(Nn),receivedAt:l.number().finite().positive(),mainAgent:l.object({state:l.enum(Nn),outcome:l.enum(mh).optional(),stateStartedAt:l.number().finite()}).optional()}),AS=l.object({context:mp}),Op={"workspace.created":SS,"workspace.removed":PS,"agent.status.changed":TS,"workspace.changed":AS};var Wr=["terminal.send","workspace.create.before","workspace.create.after","agent.launch.before","agent.prompt.before","agent.tool.before","agent.tool.after","editor.save.before"],nC=Wr.length,ES={"terminal.send":Ce,"workspace.create.before":Ce,"workspace.create.after":Ce,"agent.launch.before":Ce,"agent.prompt.before":Ce,"agent.tool.before":Ce,"agent.tool.after":Ce,"editor.save.before":Ce};function wa(e){return Wr.some(n=>n===e)}var rC=l.object({event:l.enum(Wr).meta({...ae("Hook the worker handles with `orca.hooks.on`.",Ce),[En]:ES}),onError:l.enum(["pass","deny"]).optional().meta(ae("What Orca does when this plugin's hook throws, times out, crashes or does not start: `pass` (the default) carries on as if it passed; `deny` refuses the action, naming the plugin, so a guard fails closed. Ignored for hooks that only observe.",Ce))}).strict().meta({id:"HookContribution",description:"A hook Orca runs through the worker before (or after) it acts. Requires `main` and the `trusted-worker` execution profile."});var aC=1024*1024,sC=new TextEncoder,uC=new Uint8Array(0);var vC=16*1024*1024,hC=16*1024*1024;var OS=256*1024;var wC=16*1024,Jr=16*1024*1024;var yt=2e3,Ln=l.strictObject({deny:l.string().min(1).max(500)}),NS=l.object({terminalId:l.string().min(1).max(tt),text:l.string().max(Jr),enter:l.boolean(),inputKind:l.enum(["driving","orchestration","launch"])}),zS=l.object({kind:l.enum(["worktree","folder"]),projectId:l.string().min(1).max(2048),name:l.string().min(1).max(1024),branch:l.string().min(1).max(1024).optional(),base:l.string().min(1).max(1024).optional()}),DS=l.object({workspaceId:l.string().min(1).max(2048),kind:l.enum(["worktree","folder"]),path:l.string().min(1).max(32*1024),branch:l.string().max(1024)}),CS=l.record(l.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256).refine(e=>!e.toUpperCase().startsWith("ORCA_"),"ORCA_* variables are reserved"),l.string().max(32*1024)).refine(e=>Object.keys(e).length<=64,"at most 64 variables"),jS=l.enum(["worktree","folder"]),LS=l.object({agent:l.string().min(1).max(64),workspaceId:l.string().min(1).max(2048).nullable(),workspaceKind:jS.nullable(),terminalId:l.string().min(1).max(tt).optional(),command:l.string().min(1).max(Jr),env:CS}),US=l.object({agent:l.string().min(1).max(64).nullable(),terminalId:l.string().min(1).max(tt),prompt:l.string().max(Jr),inputKind:l.enum(["driving","orchestration","launch"])}),Iy={agent:l.string().min(1).max(64),workspaceId:l.string().min(1).max(2048).nullable(),terminalId:l.string().min(1).max(tt).optional(),tool:l.string().min(1).max(256),input:l.unknown(),callId:l.string().min(1).max(256).optional()},RS=l.object(Iy),MS=l.object({...Iy,output:l.unknown().optional()}),ZS=l.object({workspaceId:l.string().min(1).max(2048).nullable(),path:l.string().min(1).max(32*1024),languageId:l.string().min(1).max(128).optional(),text:l.string().max(Jr)}),Xr={"terminal.send":{payload:NS,result:Ln,mutable:["text","enter"],deadlineMs:yt,summary:"Text Orca, the CLI or a plugin is about to send to a terminal. A person typing (on the desktop, a phone or a paired client) is never hooked, and prompts Orca submits to an agent take `agent.prompt.before` instead. Writes to one terminal stay in order while a hook decides. Rewrite `text` or `enter` with `next`, or return `{ deny }` to refuse the send."},"workspace.create.before":{payload:zS,result:Ln,mutable:["name","branch","base"],deadlineMs:yt,summary:"A worktree or folder workspace is about to be created. Change `name`, `branch` or `base` with `next`, or return `{ deny }` to refuse it."},"workspace.create.after":{payload:DS,result:null,mutable:[],deadlineMs:yt,summary:"A worktree or folder workspace was created. Observe only: Orca does not wait for it, and results are ignored."},"agent.launch.before":{payload:LS,result:Ln,mutable:["command","env"],deadlineMs:yt,summary:"Orca is about to start an agent CLI in a terminal, from any launcher (new tab, workspace create, CLI, automation, orchestration). Change `command` or add `env` with `next`, or return `{ deny }` to refuse the launch. Restores of saved sessions are not hooked."},"agent.prompt.before":{payload:US,result:Ln,mutable:["prompt"],deadlineMs:yt,summary:"Orca is about to submit a prompt to an agent in a terminal: a launch prompt, an orchestration dispatch, an issue or task prompt, or `orca terminal send` to an agent. A prompt a person submits is never hooked, and writes to one terminal stay in order while it decides. Rewrite `prompt` with `next`, or return `{ deny }` to refuse it."},"agent.tool.before":{payload:RS,result:Ln,mutable:["input"],deadlineMs:yt,summary:"An agent in an Orca terminal is about to run a tool. Claude Code waits for the answer: return `{ deny }` to refuse the call (the agent sees the reason) or change `input` with `next`; the person is still asked as usual. Other agents only report the call, so their results are ignored. Agents on SSH or WSL hosts are not hooked yet."},"agent.tool.after":{payload:MS,result:null,mutable:[],deadlineMs:yt,summary:"An agent in an Orca terminal finished a tool call (successfully or not). Observe only: Orca does not wait for it."},"editor.save.before":{payload:ZS,result:Ln,mutable:["text"],deadlineMs:yt,summary:"The person is about to save a text file from an Orca editor tab (an explicit save, not autosave). Change `text` with `next` (format on save) or return `{ deny }` to refuse the save, which shows your reason. Edits made while the hook ran stay unsaved."}};var Ia=class{constructor(n){this.event=n}event},NC=l.object({event:l.enum(Wr),payload:l.unknown()}),Sy=l.discriminatedUnion("decision",[l.object({decision:l.literal("continue"),payload:l.unknown()}),l.object({decision:l.literal("result"),result:l.unknown()})]);async function Py(e,n){let i=n;for(let o of e){let r=await o(i,a=>new Ia(a??i));if(r instanceof Ia)i=r.event;else if(r!=null)return{decision:"result",result:r}}return{decision:"continue",payload:i}}function VS(e){return e instanceof Error?e.message:String(e)}function Ty(e,n,i="timed out"){let o,t=new Promise((r,a)=>{o=setTimeout(()=>a(new Error(`${i} after ${n}ms`)),n)});return Promise.race([e,t]).finally(()=>clearTimeout(o))}function GS(e,n,i){let o=Xr[e];if(!Ue(n)||!Ue(i))return{ok:!1,reason:"next() was given something other than the event object"};let t={...n};for(let a of o.mutable)Object.hasOwn(i,a)&&(t[a]=i[a]);let r=o.payload.safeParse(t);return r.success?{ok:!0,payload:r.data}:{ok:!1,reason:r.error.issues[0]?.message??"invalid change"}}var Np=class extends Error{};async function Ay(e){let{event:n}=e,i=Xr[n],o=e.deadlineMs??i.deadlineMs,t=e.payload;for(let r of e.participants){let a=e.now(),s=()=>Math.round(e.now()-a),u=i.result!==null&&e.failsClosed?.(r)===!0,c=(f,g=!1)=>u&&!g?(e.log(r,`hook ${n} denied after ${s()}ms (onError: deny): ${f}`),{kind:"deny",pluginKey:r,reason:`${r} failed and denies on error: ${f}`}):(e.log(r,`hook ${n} skipped after ${s()}ms: ${f}`),null),d;try{if(e.start){let f=e.startTimeoutMs??o;await Ty(e.start(r),f,"worker did not start")}d=await Ty(e.invoke(r,t,o),o)}catch(f){let g=c(VS(f),f instanceof Np);if(g)return g;continue}let p=Sy.safeParse(d);if(!p.success){let f=c("the worker answered with something other than a hook decision");if(f)return f;continue}if(p.data.decision==="continue"){let f=GS(n,t,p.data.payload);f.ok?t=f.payload:e.log(r,`hook ${n}: change ignored: ${f.reason}`);continue}if(i.result===null)continue;let m=i.result.safeParse(p.data.result);if(!m.success){e.log(r,`hook ${n}: result ignored: return next(event) or { deny: reason }`);continue}return{kind:"deny",pluginKey:r,reason:m.data.deny}}return{kind:"continue",payload:t}}function FS(e){return typeof e!="object"||e===null||!("workspaceId"in e)||"worktreeId"in e?e:{...e,worktreeId:e.workspaceId}}function qr(e,n){return typeof e=="object"&&e!==null&&n in e?Object.getOwnPropertyDescriptor(e,n)?.value:void 0}function Sa(e,n){return e.add(n),{dispose:()=>{e.delete(n)}}}var BS=new Set(Fr("worker"));function Ey(){return{commands:new Map,events:new Map,hooks:new Map,panelRequests:new Map,dataListeners:{storage:new Set,settings:new Set}}}function Oy(e){let{tables:n,hostCall:i}=e,o=async(t,r)=>{await i(t,r)};return Object.freeze({api:Object.freeze({major:Le,minor:Ch}),commands:Object.freeze({register(t,r){return n.commands.set(t,r),{dispose:()=>{n.commands.delete(t)}}}}),events:Object.freeze({on(t,r){let a=sa.get(t)??t,s=n.events.get(a)??new Set;n.events.set(a,s);let u=a!==t||t==="agent.status.changed",c=Sa(s,p=>r(u?FS(p):p));if(t!=="workspace.changed")return c;let d=!0;return i("workspace.readContext").then(p=>d&&r({context:p})).catch(()=>{}),{dispose:()=>{d=!1,c.dispose()}}}}),hooks:Object.freeze({on(t,r){if(!wa(t))throw new TypeError(`orca.hooks.on: unknown hook ${String(t)}`);if(typeof r!="function")throw new TypeError("orca.hooks.on needs a handler function");let a=n.hooks.get(t)??new Set;return n.hooks.set(t,a),Sa(a,r)}}),host:Object.freeze({call:(t,r,a)=>i(t,r,a),has:t=>BS.has(t)}),panels:Object.freeze({handle(t,r){if(vt.parse(t),typeof r!="function")throw new TypeError("orca.panels.handle needs a handler function");return n.panelRequests.set(t,r),{dispose:()=>{n.panelRequests.get(t)===r&&n.panelRequests.delete(t)}}},post(t,r,a){vt.parse(t),e.postToPanels({event:t,payload:r,...a?.panel?{panel:a.panel}:{}})}}),storage:Object.freeze({get:async t=>qr(await i("storage.get",{key:t}),"value")??null,set:(t,r)=>o("storage.set",{key:t,value:r}),delete:t=>o("storage.delete",{key:t}),keys:async()=>{let t=qr(await i("storage.keys"),"keys");return Array.isArray(t)?t.filter(r=>typeof r=="string"):[]},onDidChange:t=>Sa(n.dataListeners.storage,t)}),settings:Object.freeze({get:async t=>{let r=qr(await i("settings.get"),"settings"),a=typeof r=="object"&&r!==null?{...r}:{};return t===void 0?a:qr(a,t)},set:(t,r)=>o("settings.set",{key:t,value:r}),onDidChange:t=>Sa(n.dataListeners.settings,t)}),secrets:Object.freeze({get:async t=>{let r=qr(await i("secrets.get",{key:t}),"value");return typeof r=="string"?r:null},set:(t,r)=>o("secrets.set",{key:t,value:r}),delete:t=>o("secrets.delete",{key:t})}),grantedCapabilities:Object.freeze([...e.grantedCapabilities]),log:t=>e.log(String(t))})}var Ny={id:"test-panel",surface:"panel",contributionId:"panel"};function HS(e){return Object.hasOwn(Op,e)}function KS(e){return e instanceof Error?e.message:String(e)}async function zy(e,n){let{host:i}=n,o=new Set(n.events),t=n.hooks.map(b=>typeof b=="string"?{event:b}:b),r=new Set(t.map(b=>b.event)),a=new Set(t.filter(b=>b.onError==="deny").map(b=>b.event)),s=Ey(),u=[],c=[],d=!0,p=e.default;if(typeof p!="function")throw new TypeError(typeof e.activate=="function"?"mountWorker: the module exports activate by name, but Orca calls the default export: write `export default function activate(orca)`":"mountWorker: the module has no default-exported activate(orca) function");let m=e.deactivate;if(m!==void 0&&typeof m!="function")throw new TypeError("mountWorker: the module exports a deactivate that is not a function");let f=Oy({tables:s,hostCall:(b,T)=>i.worker.call(b,T),postToPanels:b=>{c.push(b)},log:b=>{u.push(b)},grantedCapabilities:i.capabilities}),g=i.onDataChange((b,T)=>{for(let E of s.dataListeners[b])E({key:T})});await p(f);let y=n.commands?[...s.commands.keys()].find(b=>!n.commands?.includes(b)):void 0;if(y!==void 0)throw new Error(`registered undeclared command ${y}: list it in contributes.commands`);async function x(b,T,E){let z=s.panelRequests.get(b);if(!z)throw Fe("unknown_method",`no panel handler named ${b}`);let w={...Ny,contributionId:E??Ny.contributionId};return z(T,{panel:w,signal:new AbortController().signal})}let I=i.routeRequests((b,T)=>x(b,T));return{host:i,logs:u,posts:c,get refusals(){return i.refusals},async emit(b,T){if(!HS(b))throw new Error(`emit: "${b}" is not an event Orca sends to workers`);if(!o.has(b))throw new Error(`emit: "${b}" never arrives: it is not in contributes.events`);let E=Op[b].safeParse(T);if(!E.success)throw new TypeError(`emit: that ${b} payload is not one Orca sends: ${E.error.issues[0]?.message??""}`);let z=s.events.get(sa.get(b)??b)??[];await Promise.all([...z].map(async w=>w(E.data))),await i.idle()},hooks:{async fire(b,T){if(!wa(b))throw new Error(`hooks.fire: "${b}" is not a hook Orca runs`);if(!r.has(b))throw new Error(`hooks.fire: "${b}" never runs: it is not in contributes.hooks`);let E=Xr[b].payload.safeParse(T);if(!E.success)throw new TypeError(`hooks.fire: that ${b} event is not one Orca sends: ${E.error.issues[0]?.message??""}`);let z=await Ay({event:b,payload:E.data,participants:["worker"],invoke:(w,O)=>Py(s.hooks.get(b)??[],O),log:(w,O)=>{u.push(O)},now:()=>performance.now(),failsClosed:()=>a.has(b)});return await i.idle(),z.kind==="deny"?{kind:"deny",reason:z.reason}:{kind:"continue",event:z.payload}}},async command(b,T){let E=s.commands.get(b);if(!E)throw new Error(`command: the worker registered no "${b}"`);let z=await E(T,{signal:new AbortController().signal});return await i.idle(),z},async request(b,T,E={}){let z=await x(b,T,E.panel);return await i.idle(),z},async deactivate(){if(d){d=!1,g(),I(),s.events.clear(),s.hooks.clear(),s.commands.clear(),s.panelRequests.clear();try{await(typeof m=="function"?m():void 0)}catch(b){throw new Error(`deactivate threw: ${KS(b)}`,{cause:b})}await i.idle()}}}}import{test as qj,describe as Yj,beforeEach as Qj,afterEach as eL}from"node:test";import{default as nL}from"node:assert/strict";import{runInThisContext as tP}from"node:vm";function Dy(e){if(typeof e!="object"||e===null||!("on"in e)||!("document"in e))return!1;let n=e.document;return typeof e.on=="function"&&typeof n=="object"&&n!==null&&"session"in n&&typeof n.session=="function"&&"applyEdit"in n&&typeof n.applyEdit=="function"}var He=1;var Dp=["invalid_request","invalid_params","unknown_method","capability_denied","consent_required","not_permitted","rate_limited","unavailable","action_failed","cancelled","timeout","conflict","too_large"],WS=new Set(["rate_limited","unavailable","timeout","conflict"]);function JS(e){return Dp.find(n=>n===e)??"action_failed"}function bt(e,n,i){let o=JS(e);return{code:o,message:n.slice(0,8192),retryable:WS.has(o),...i===void 0?{}:{retryAfterMs:i}}}var zp=l.number().int().nonnegative(),Cy=l.string().min(1).max(128),XS=l.object({code:l.string().max(64),message:l.string().max(8192),retryable:l.boolean(),retryAfterMs:l.number().int().nonnegative().optional()}),nj=l.discriminatedUnion("kind",[l.object({orca:l.literal(He),kind:l.literal("req"),id:zp,method:Cy,params:l.unknown().optional()}),l.object({orca:l.literal(He),kind:l.literal("res"),id:zp,result:l.unknown().optional(),error:XS.optional()}),l.object({orca:l.literal(He),kind:l.literal("evt"),event:Cy,payload:l.unknown().optional()}),l.object({orca:l.literal(He),kind:l.literal("cancel"),id:zp})]);var Vt={ready:"ready",hello:"hello",theme:"theme",ping:"ping",pong:"pong",editorKeydown:"editor.keydown",editorDocument:"editor.document",editorSubscribed:"editor.subscribed",editorMerges:"editor.merges",push:"plugin.push"},Un={applyEdit:"editor.applyEdit",flush:"editor.flush"},jy=64*1024;var qS=l.string().min(32).max(128),sj=l.object({sessionToken:qS,action:l.string().min(1),params:l.unknown().optional()}).strict();var Cp=64*1024*1024,mj=16*1024*1024;var jp=1e3,YS=l.strictObject({baseVersion:l.number().int().nonnegative(),content:l.discriminatedUnion("kind",[l.strictObject({kind:l.literal("text"),text:l.string()}),l.strictObject({kind:l.literal("bytes"),bytes:l.instanceof(ArrayBuffer)})])});function Ly(e){let n=YS.safeParse(e);return n.success?n.data:null}var Lp=bt("conflict","The file changed outside this editor; edit the latest document."),Uy=bt("too_large","The edit is larger than Orca accepts; the file keeps its last accepted edit.");var Ry="__orcaPluginFrameTransport",My="__orcaDeclarativePost";var Zy=` var domainEvents = ${JSON.stringify(gt)} var subscribed = new Set() var pluginListeners = new Map() @@ -297,6 +297,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs. } var documents = on(E.editorDocument, function (next) { if (disposed || next.version === doc.version) return + // A disk change under the tab's unsaved edits: merge it with them and send the result. + // Nothing moves unless the merge succeeds, so a later edit never acknowledges a failed one. + if (next.ancestor && merge) { + var merged + try { + merged = merge(decode(next.ancestor), decode(next.content), value) + } catch (error) { + console.error(error) + return + } + rebase(next) + value = merged + dirty = true + generation += 1 + emitReplace(value) + if (!inFlight) send().catch(function () {}) + return + } doc = next // Unaccepted work waits for its edit's conflict, where merge runs. if (dirty || inFlight) return @@ -308,6 +326,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs. var flushes = on(C.editor.flush, function () { return disposed || doc.readOnly ? undefined : flush() }) + // Orca then hands this session disk changes made under unsaved edits, instead of a banner. + if (merge) post({ kind: 'evt', event: E.editorMerges, payload: {} }) return Object.freeze({ get value() { return value }, get readOnly() { return doc.readOnly }, diff --git a/resources/plugins/types/orca-frame.d.ts b/resources/plugins/types/orca-frame.d.ts index cee1387c0b3..94f19c5b5e6 100644 --- a/resources/plugins/types/orca-frame.d.ts +++ b/resources/plugins/types/orca-frame.d.ts @@ -23,6 +23,9 @@ declare module 'orca/frame' { readonly content: EditorContent /** Bytes documents: the manifest suffix that matched, e.g. `xlsx`. */ readonly fileType?: string + /** Only for a session with `merge`: the file changed on disk while the tab had unsaved edits; + * this is the disk content those edits started from. */ + readonly ancestor?: EditorContent } /** The whole new content, made against document `baseVersion`. */ export type EditorEdit = { baseVersion: number; content: EditorContent } @@ -55,7 +58,9 @@ declare module 'orca/frame' { export type EditorSessionOptions = { decode?: (content: EditorContent) => T encode?: (value: T) => EditorContent - /** On a conflict: `base` is the last accepted value. Without it the outside document wins. */ + /** On a conflict `base` is the last accepted value; when the file changes on disk under the + * tab's unsaved edits, `base` is the disk content those edits started from and Orca skips its + * banner. Without it the outside document wins, or Orca shows its banner. */ merge?: (base: T, outside: T, mine: T) => T /** Wait after the last change before sending it; default 250. */ debounceMs?: number diff --git a/skill-guides/orca-plugin-authoring/references/recipes.md b/skill-guides/orca-plugin-authoring/references/recipes.md index 25ddcae0075..2d18cc9c5a2 100644 --- a/skill-guides/orca-plugin-authoring/references/recipes.md +++ b/skill-guides/orca-plugin-authoring/references/recipes.md @@ -140,7 +140,12 @@ test('merges an agent write that lands while an edit waits', async () => { }) ``` -Without `merge` an outside write wins and the draft is dropped. `ORCA plugin check --json` +`merge` covers both outside writes: one that lands while an edit waits (base: your last accepted +value), and one made on disk while the tab has unsaved edits (base: the disk text those edits +started from; the tab stays unsaved with the result and Orca shows no banner, for a local file +in one editor view). Without `merge` an +outside write wins and the draft is dropped, and a disk write under unsaved edits gets Orca's +Reload/Overwrite banner. `ORCA plugin check --json` then reads every file the entry loads without running it, and `ORCA plugin open --editor ` shows it on a real file. `ORCA plugin shot --editor --theme dark` saves a PNG of the editor on that diff --git a/src/cli/bundled-skill-guides.ts b/src/cli/bundled-skill-guides.ts index 069b9b7fed4..267916fb80d 100644 --- a/src/cli/bundled-skill-guides.ts +++ b/src/cli/bundled-skill-guides.ts @@ -3398,7 +3398,12 @@ const ORCA_PLUGIN_AUTHORING_RECIPES_REFERENCE_MARKDOWN = [ "})", "```", "", - "Without `merge` an outside write wins and the draft is dropped. `ORCA plugin check --json`", + "`merge` covers both outside writes: one that lands while an edit waits (base: your last accepted", + "value), and one made on disk while the tab has unsaved edits (base: the disk text those edits", + "started from; the tab stays unsaved with the result and Orca shows no banner, for a local file", + "in one editor view). Without `merge` an", + "outside write wins and the draft is dropped, and a disk write under unsaved edits gets Orca's", + "Reload/Overwrite banner. `ORCA plugin check --json`", "then reads every file the entry loads without running it, and", "`ORCA plugin open --editor ` shows it on a real file.", "`ORCA plugin shot --editor --theme dark` saves a PNG of the editor on that", diff --git a/src/renderer/src/components/editor/CustomEditorExternalChangeBanner.tsx b/src/renderer/src/components/editor/CustomEditorExternalChangeBanner.tsx new file mode 100644 index 00000000000..36734d5e79f --- /dev/null +++ b/src/renderer/src/components/editor/CustomEditorExternalChangeBanner.tsx @@ -0,0 +1,12 @@ +import type { OpenFile } from '@/store/slices/editor' +import { ExternalFileChangeBanner } from './ExternalFileChangeBanner' +import { useCustomEditorMerging } from './use-custom-editor-outside-merge' + +/** The external-change banner, hidden only while a custom editor is merging the change itself. */ +export function CustomEditorExternalChangeBanner(props: { + file: OpenFile + currentContent: string + reloadContent: (file: OpenFile) => void +}): React.JSX.Element | null { + return useCustomEditorMerging(props.file.id) ? null : +} diff --git a/src/renderer/src/components/editor/EditorEditFileSurface.tsx b/src/renderer/src/components/editor/EditorEditFileSurface.tsx index dcc8358455b..65a6e678c4a 100644 --- a/src/renderer/src/components/editor/EditorEditFileSurface.tsx +++ b/src/renderer/src/components/editor/EditorEditFileSurface.tsx @@ -18,7 +18,7 @@ import type { EditorConflictNavigation } from './useEditorConflictNavigation' import { EditorFileLoadErrorView } from './EditorFileLoadErrorView' import { RecoverableRenderErrorBoundary } from '../error-boundaries/RecoverableRenderErrorBoundary' import type { FileContent } from './editor-panel-content-types' -import { ExternalFileChangeBanner } from './ExternalFileChangeBanner' +import { CustomEditorExternalChangeBanner } from './CustomEditorExternalChangeBanner' import { PluginFileTypeSuggestion } from './PluginFileTypeSuggestion' import type { useMarkdownDocuments } from './useMarkdownDocuments' import { EditorMarkdownFileSurface } from './EditorMarkdownFileSurface' @@ -200,7 +200,7 @@ export function EditorEditFileSurface({ const currentContent = editBuffer ?? fileContent.content const externalChangeBanner = activeFile.externalMutation === 'changed' ? ( - void>(() => {}) + const mergingRef = useRef<(merging: boolean) => void>(() => {}) + const countedRef = useRef(false) const host = useMemo(() => { const created = createCustomEditorHost({ @@ -130,6 +136,7 @@ export default function PluginCustomEditorFrame({ } }, onFrameProgress: (step) => progressRef.current(step), + onMergesOutside: () => mergingRef.current(true), onKeyChord: (chord, context) => { const event = new KeyboardEvent('keydown', chord) // Why: chords are posted by frame code, so only one riding real user input may save. @@ -167,7 +174,15 @@ export default function PluginCustomEditorFrame({ ) useLayoutEffect(() => { progressRef.current = reportProgress + // Counts this view once while its session merges; text editors only. + mergingRef.current = (merging) => { + if (fileId !== undefined && !isBinary && merging !== countedRef.current) { + countedRef.current = merging + countCustomEditorMergingView(fileId, merging ? 1 : -1) + } + } }) + useCustomEditorOutsideMerge(isBinary ? undefined : fileId, host, content) const { onFrameLoad } = usePluginFrameHost({ surface: 'editor', @@ -187,7 +202,10 @@ export default function PluginCustomEditorFrame({ if (!frameKey) { return } - return () => host.reset() + return () => { + host.reset() + mergingRef.current(false) + } }, [frameKey, host]) useEffect(() => { diff --git a/src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts b/src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts index 28403f39c3c..464b1feaacc 100644 --- a/src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts +++ b/src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts @@ -185,6 +185,31 @@ describe('editor autosave changed-on-disk conflict flow', () => { }) }) + // A custom editor's Cmd+S reaches this same explicit save after flushing its frame. + it('refuses an explicit save while the banner shows, keeping the edits and the disk', async () => { + const fakeDisk = stubEditorWindowWithDisk( + createFakeEditorDisk({ '/repo/file.ts': 'agent write' }) + ) + const store = createEditorStore() + openDirtyFile(store, 'user stroke') + store.getState().setLastKnownDiskSignature('/repo/file.ts', getDiskBaselineSignature('base')) + store.getState().setExternalMutation('/repo/file.ts', 'changed') + const cleanup = attachEditorAutosaveController(store) + try { + await expect(requestEditorFileSave({ fileId: '/repo/file.ts' })).rejects.toThrow( + 'changed on disk' + ) + expect(fakeDisk.files.get('/repo/file.ts')).toBe('agent write') + expect(store.getState().editorDrafts['/repo/file.ts']).toBe('user stroke') + expect(store.getState().openFiles[0]).toMatchObject({ + isDirty: true, + externalMutation: 'changed' + }) + } finally { + cleanup() + } + }) + it("clears the changed-on-disk mark after the banner's Overwrite", async () => { const writeFile = stubEditorWindow() const store = createEditorStore() diff --git a/src/renderer/src/components/editor/plugin-custom-editor-frame-events.ts b/src/renderer/src/components/editor/plugin-custom-editor-frame-events.ts new file mode 100644 index 00000000000..f2051d3942c --- /dev/null +++ b/src/renderer/src/components/editor/plugin-custom-editor-frame-events.ts @@ -0,0 +1,28 @@ +import { readCustomEditorKeyChord } from '../../../../shared/plugins/frames/plugin-custom-editor-bridge' +import { FRAME_EVENTS } from '../../../../shared/plugins/frames/plugin-frame-bridge' +import type { PluginEvent } from '../../../../shared/plugins/frames/plugin-protocol' +import type { PluginFrameMessageContext } from '../right-sidebar/plugin-frame-host' +import type { CustomEditorHostOptions } from './plugin-custom-editor-host-types' + +/** A custom editor frame's own events. True when it announced that its session merges outside + * changes, which the host remembers for the frame's life. */ +export function handleCustomEditorFrameEvent( + event: PluginEvent, + context: PluginFrameMessageContext, + options: Pick +): boolean { + if (event.event === FRAME_EVENTS.editorMerges) { + options.onMergesOutside?.() + return true + } + if (event.event === FRAME_EVENTS.editorSubscribed) { + options.onFrameProgress?.('subscribed') + return false + } + const chord = + event.event === FRAME_EVENTS.editorKeydown ? readCustomEditorKeyChord(event.payload) : null + if (chord) { + options.onKeyChord?.(chord, context) + } + return false +} diff --git a/src/renderer/src/components/editor/plugin-custom-editor-host-types.ts b/src/renderer/src/components/editor/plugin-custom-editor-host-types.ts index 60636c201a4..28b29f915b2 100644 --- a/src/renderer/src/components/editor/plugin-custom-editor-host-types.ts +++ b/src/renderer/src/components/editor/plugin-custom-editor-host-types.ts @@ -30,6 +30,8 @@ export type CustomEditorHostOptions = { onKeyChord?: (chord: CustomEditorKeyChord, context: PluginFrameMessageContext) => void /** The frame got a document, or asked for one; `orca plugin shot --editor` waits on both. */ onFrameProgress?: (step: 'delivered' | 'subscribed') => void + /** The frame's document session merges outside changes; set once per frame. */ + onMergesOutside?: () => void /** The edit lane; every other message spends the frame's shared budget. */ budget?: PanelMessageBudget now?: () => number @@ -48,4 +50,8 @@ export type CustomEditorHost = { currentText: () => string /** A new document mounted in the frame; it must announce ready again. */ reset: () => void + /** Sends a disk change to a frame whose session merges it into the unsaved edits, and resolves + * with the merged text once the session's merged edit is in the buffer; null when the frame + * cannot or does not within the flush deadline, so the caller keeps the banner. */ + mergeOutsideChange: (diskText: string, ancestorText: string) => Promise } diff --git a/src/renderer/src/components/editor/plugin-custom-editor-host.test.ts b/src/renderer/src/components/editor/plugin-custom-editor-host.test.ts index 154c01a86c0..8fc548cda07 100644 --- a/src/renderer/src/components/editor/plugin-custom-editor-host.test.ts +++ b/src/renderer/src/components/editor/plugin-custom-editor-host.test.ts @@ -74,6 +74,27 @@ function harness( return { host, posted, send, messages, documents, answers, answerFlushes } } +function setupWith(initial: { + text: string + onMergesOutside: () => void + onKeyChord?: CustomEditorHostOptions['onKeyChord'] +}) { + const doc = { text: initial.text, readOnly: false } + const onEdit = vi.fn((text: string) => { + doc.text = text + }) + return { + ...harness({ + getDocument: () => doc, + onEdit, + onMergesOutside: initial.onMergesOutside, + flushTimeoutMs: 1_000, + ...(initial.onKeyChord ? { onKeyChord: initial.onKeyChord } : {}) + }), + onEdit + } +} + function setup(initial: { text: string readOnly?: boolean @@ -498,4 +519,64 @@ describe('custom editor document channel', () => { send(READY) expect(documents()).toHaveLength(2) }) + + it('settles a merge only on the edit made against its own version', async () => { + const onMergesOutside = vi.fn() + const onKeyChord = vi.fn() + const { host, send, documents, onEdit } = setupWith({ + text: 'a+mine', + onMergesOutside, + onKeyChord + }) + send(READY) + await expect(host.mergeOutsideChange('a+agent', 'a')).resolves.toBeNull() + send({ orca: 1, kind: 'evt', event: 'editor.merges', payload: {} }) + expect(onMergesOutside).toHaveBeenCalledOnce() + const merged = host.mergeOutsideChange('a+mine+agent', 'a') + expect(documents().at(-1)).toMatchObject({ + payload: { + version: 2, + content: { kind: 'text', text: 'a+mine+agent' }, + ancestor: { kind: 'text', text: 'a' } + } + }) + // The merge result equals the disk text just sent; it still has to reach the buffer. + send(edit('a+mine+agent', 2)) + await expect(merged).resolves.toBe('a+mine+agent') + expect(onEdit).toHaveBeenLastCalledWith('a+mine+agent') + // Events after the capability still reach their handlers (Save included). + send( + keydown({ + key: 's', + code: 'KeyS', + metaKey: true, + ctrlKey: false, + altKey: false, + shiftKey: false + }) + ) + expect(onKeyChord).toHaveBeenCalledOnce() + }) + + it('answers null when the session never acknowledges, or the frame remounts', async () => { + vi.useFakeTimers() + try { + const { host, send } = setupWith({ text: 'a', onMergesOutside: vi.fn() }) + send(READY) + send({ orca: 1, kind: 'evt', event: 'editor.merges', payload: {} }) + const silent = host.mergeOutsideChange('b', 'a') + await vi.advanceTimersByTimeAsync(1_000) + await expect(silent).resolves.toBeNull() + // A frame whose merge threw edits against the old version: refused, never the acknowledgement. + const failed = host.mergeOutsideChange('b2', 'a') + send(edit('a+typed', 1, 77)) + await vi.advanceTimersByTimeAsync(1_000) + await expect(failed).resolves.toBeNull() + const remounted = host.mergeOutsideChange('c', 'a') + host.reset() + await expect(remounted).resolves.toBeNull() + } finally { + vi.useRealTimers() + } + }) }) diff --git a/src/renderer/src/components/editor/plugin-custom-editor-host.ts b/src/renderer/src/components/editor/plugin-custom-editor-host.ts index 0cad62de77e..198100927f9 100644 --- a/src/renderer/src/components/editor/plugin-custom-editor-host.ts +++ b/src/renderer/src/components/editor/plugin-custom-editor-host.ts @@ -6,7 +6,6 @@ import { CUSTOM_EDITOR_TOO_LARGE, isCustomEditorEditAttempt, readCustomEditorEdit, - readCustomEditorKeyChord, type CustomEditorDocument, type CustomEditorEdit } from '../../../../shared/plugins/frames/plugin-custom-editor-bridge' @@ -27,6 +26,8 @@ import { structuredCloneMessageBytes } from '../../../../shared/plugins/frames/plugin-panel-message-budget' +import { handleCustomEditorFrameEvent } from './plugin-custom-editor-frame-events' +import { createPendingOutsideMerge } from './plugin-custom-editor-outside-merge' import type { CustomEditorBinaryDocument, CustomEditorEditRefusal, @@ -61,6 +62,8 @@ export function createCustomEditorHost(options: CustomEditorHostOptions): Custom let supersededIds: (number | null)[] = [] let heldTimer: ReturnType | null = null let lostEdit = false + let mergesOutside = false + const outsideMerge = createPendingOutsideMerge() // An oversized edit came after the held one, so applying the held one leaves it still lost. let lostAfterHeld = false let unapplied: CustomEditorUnappliedEdit = null @@ -151,7 +154,8 @@ export function createCustomEditorHost(options: CustomEditorHostOptions): Custom options.onBytesEdit?.(frameBinary) return null } - if (content.text !== frameText) { + // A merge's result always reaches the buffer, even when it equals the disk text just sent. + if (outsideMerge.accept(baseVersion, content.text) || content.text !== frameText) { frameText = content.text options.onEdit(content.text) } @@ -246,17 +250,9 @@ export function createCustomEditorHost(options: CustomEditorHostOptions): Custom pushDocument(true) }, onEvent(event, context) { - if (event.event === FRAME_EVENTS.editorSubscribed) { - options.onFrameProgress?.('subscribed') - return - } - const chord = - event.event === FRAME_EVENTS.editorKeydown - ? readCustomEditorKeyChord(event.payload) - : null - if (chord) { - options.onKeyChord?.(chord, context) - } + // Every event is handled; announcing merge support only adds the capability. + const merges = handleCustomEditorFrameEvent(event, context, options) + mergesOutside = mergesOutside || merges }, onResponse(response) { pendingFlushes.get(response.id)?.(response.error === undefined) @@ -266,6 +262,16 @@ export function createCustomEditorHost(options: CustomEditorHostOptions): Custom syncDocument() { pushDocument(false) }, + mergeOutsideChange(diskText, ancestorText) { + if (!ready || !mergesOutside || options.getBinaryDocument) { + return Promise.resolve(null) + } + version += 1 + const ancestor = { kind: 'text' as const, text: ancestorText } + const { readOnly } = options.getDocument() + postDocument({ version, readOnly, content: { kind: 'text', text: diskText }, ancestor }) + return outsideMerge.begin(version, flushTimeoutMs) + }, flush() { if (!ready) { return Promise.resolve(!lostEdit) @@ -301,6 +307,8 @@ export function createCustomEditorHost(options: CustomEditorHostOptions): Custom applyHeldEdit() } ready = false + mergesOutside = false + outsideMerge.cancel() frameText = null frameReadOnly = null frameBinary = null diff --git a/src/renderer/src/components/editor/plugin-custom-editor-outside-merge.ts b/src/renderer/src/components/editor/plugin-custom-editor-outside-merge.ts new file mode 100644 index 00000000000..a135ed0e127 --- /dev/null +++ b/src/renderer/src/components/editor/plugin-custom-editor-outside-merge.ts @@ -0,0 +1,45 @@ +/** + * One outside merge in flight between Orca and an editor frame. It settles only on the session's + * acknowledgement: the first accepted edit made against the merge's own document version, whose + * text is the merged result. A merge that throws, a disposed session, a remount or silence past + * the deadline settles with null, and Orca keeps its banner. + */ +export type PendingOutsideMerge = { + /** Starts a merge for the document version just sent; a previous one settles with null. */ + begin(version: number, timeoutMs: number): Promise + /** An accepted text edit; true when it is the acknowledgement, which settles the merge. */ + accept(baseVersion: number, text: string): boolean + cancel(): void +} + +export function createPendingOutsideMerge(): PendingOutsideMerge { + let pending: { version: number; settle: (text: string | null) => void } | null = null + const finish = (text: string | null): void => { + const current = pending + pending = null + current?.settle(text) + } + return { + begin(version, timeoutMs) { + finish(null) + return new Promise((resolve) => { + const timer = setTimeout(() => finish(null), timeoutMs) + pending = { + version, + settle: (text) => { + clearTimeout(timer) + resolve(text) + } + } + }) + }, + accept(baseVersion, text) { + if (pending?.version !== baseVersion) { + return false + } + finish(text) + return true + }, + cancel: () => finish(null) + } +} diff --git a/src/renderer/src/components/editor/use-custom-editor-outside-merge.test.tsx b/src/renderer/src/components/editor/use-custom-editor-outside-merge.test.tsx new file mode 100644 index 00000000000..dd569d9ea9a --- /dev/null +++ b/src/renderer/src/components/editor/use-custom-editor-outside-merge.test.tsx @@ -0,0 +1,132 @@ +// @vitest-environment happy-dom +import { act } from 'react' +import { createRoot } from 'react-dom/client' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { useAppStore } from '@/store' +import type { OpenFile } from '@/store/slices/editor' +import { getDiskBaselineSignature } from '../../../../shared/disk-baseline-signature' + +vi.mock('./ExternalFileChangeBanner', () => ({ + ExternalFileChangeBanner: () =>
banner
+})) +vi.mock('@/lib/connection-context', () => ({ getConnectionIdForFile: () => null })) + +import { CustomEditorExternalChangeBanner } from './CustomEditorExternalChangeBanner' +import { + countCustomEditorMergingView, + mergeOutsideChangeIntoEditor, + recordCustomEditorAncestor, + useCustomEditorOutsideMergeStore +} from './use-custom-editor-outside-merge' + +Reflect.set(globalThis, 'IS_REACT_ACT_ENVIRONMENT', true) + +const initialState = useAppStore.getState() +const FILE_ID = '/repo/board.sketch' + +function openTab(baseline: string): void { + useAppStore.getState().openFile({ + filePath: FILE_ID, + relativePath: 'board.sketch', + worktreeId: 'wt-1', + language: 'plaintext', + mode: 'edit' + }) + useAppStore.getState().markFileDirty(FILE_ID, true) + useAppStore.getState().setLastKnownDiskSignature(FILE_ID, getDiskBaselineSignature(baseline)) + useAppStore.getState().setExternalMutation(FILE_ID, 'changed') +} + +const tab = (): OpenFile | undefined => + useAppStore.getState().openFiles.find((file) => file.id === FILE_ID) + +/** One merging view of a local tab whose edits started from `a`. */ +function ready(): void { + openTab('a') + recordCustomEditorAncestor(FILE_ID, 'a') + countCustomEditorMergingView(FILE_ID, 1) +} + +const afterSaved: (() => void)[] = [] + +afterEach(() => { + afterSaved.splice(0).forEach((stop) => stop()) + useAppStore.setState(initialState, true) + useCustomEditorOutsideMergeStore.setState({ views: {}, busy: {}, ancestors: {} }) +}) + +describe('custom editor outside merge', () => { + it('stamps exactly the disk snapshot the acknowledged merge used, and advances the ancestor', async () => { + ready() + // The tab's saved text moves to the disk text the merge used, as the panel hears after a save. + const saved: unknown[] = [] + const onSaved = (event: Event): void => { + saved.push(event instanceof CustomEvent ? event.detail : null) + } + window.addEventListener('orca:editor-file-saved', onSaved) + afterSaved.push(() => window.removeEventListener('orca:editor-file-saved', onSaved)) + const host = { mergeOutsideChange: vi.fn().mockResolvedValue('a+mine+agent') } + await expect(mergeOutsideChangeIntoEditor(FILE_ID, host, async () => 'a+agent')).resolves.toBe( + true + ) + expect(host.mergeOutsideChange).toHaveBeenCalledWith('a+agent', 'a') + expect(tab()?.externalMutation).toBeUndefined() + expect(tab()?.lastKnownDiskSignature).toBe(getDiskBaselineSignature('a+agent')) + expect(useCustomEditorOutsideMergeStore.getState().ancestors[FILE_ID]?.text).toBe('a+agent') + expect(saved).toEqual([{ fileId: FILE_ID, content: 'a+agent', recordViewIds: [FILE_ID] }]) + }) + + it('puts the conflict back for a write that landed while the merge ran', async () => { + ready() + const reads = ['a+agent', 'a+agent+second'] + const host = { mergeOutsideChange: vi.fn().mockResolvedValue('merged') } + await mergeOutsideChangeIntoEditor(FILE_ID, host, async () => reads.shift() ?? null) + // Only the first write is stamped; the second waits for its own merge. + expect(tab()).toMatchObject({ + externalMutation: 'changed', + lastKnownDiskSignature: getDiskBaselineSignature('a+agent') + }) + }) + + it('keeps the conflict for the banner when the session never acknowledges', async () => { + ready() + const host = { mergeOutsideChange: vi.fn().mockResolvedValue(null) } + await expect(mergeOutsideChangeIntoEditor(FILE_ID, host, async () => 'a+agent')).resolves.toBe( + false + ) + expect(tab()).toMatchObject({ + externalMutation: 'changed', + lastKnownDiskSignature: getDiskBaselineSignature('a') + }) + expect(useCustomEditorOutsideMergeStore.getState().busy[FILE_ID]).toBeUndefined() + }) + + it('leaves it to the banner with no known ancestor, or two editor views', async () => { + const host = { mergeOutsideChange: vi.fn().mockResolvedValue('x') } + openTab('a') + countCustomEditorMergingView(FILE_ID, 1) + // The recorded ancestor is not the disk the tab's baseline names. + recordCustomEditorAncestor(FILE_ID, 'older') + await expect(mergeOutsideChangeIntoEditor(FILE_ID, host, async () => 'b')).resolves.toBe(false) + recordCustomEditorAncestor(FILE_ID, 'a') + countCustomEditorMergingView(FILE_ID, 1) + await expect(mergeOutsideChangeIntoEditor(FILE_ID, host, async () => 'b')).resolves.toBe(false) + expect(host.mergeOutsideChange).not.toHaveBeenCalled() + }) + + it('hides the banner only while a merge runs', async () => { + const container = document.createElement('div') + const root = createRoot(container) + // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the banner gate reads only the tab's id. + const file = { id: FILE_ID } as OpenFile + await act(async () => + root.render( + + ) + ) + expect(container.textContent).toBe('banner') + await act(async () => useCustomEditorOutsideMergeStore.setState({ busy: { [FILE_ID]: true } })) + expect(container.textContent).toBe('') + await act(async () => root.unmount()) + }) +}) diff --git a/src/renderer/src/components/editor/use-custom-editor-outside-merge.ts b/src/renderer/src/components/editor/use-custom-editor-outside-merge.ts new file mode 100644 index 00000000000..3c50eeace9f --- /dev/null +++ b/src/renderer/src/components/editor/use-custom-editor-outside-merge.ts @@ -0,0 +1,185 @@ +import { useEffect, useLayoutEffect, useRef } from 'react' +import { create } from 'zustand' +import { getConnectionIdForFile } from '@/lib/connection-context' +import { editorTabFileAccess } from '@/lib/local-file-access' +import { getRuntimeTargetForFileOwner } from '@/lib/file-owner-runtime-target' +import { readRuntimeFileContent } from '@/runtime/runtime-file-read-client' +import { useAppStore } from '@/store' +import type { OpenFile } from '@/store/slices/editor' +import { getDiskBaselineSignature } from '../../../../shared/disk-baseline-signature' +import { editorModelSiblingTabs, setEditorDiskBaseline } from './editor-save-disk-precondition' +import type { CustomEditorHost } from './plugin-custom-editor-host-types' +import { ORCA_EDITOR_FILE_SAVED_EVENT, type EditorFileSavedDetail } from './editor-autosave' + +/** + * A write to the file on disk while a custom editor tab holds unsaved edits, merged by the editor + * instead of Orca's banner. Deliberately narrow, the banner on any doubt: one mounted editor view + * of a local file with no other tab on its buffer, a session that merges, a known ancestor, and an + * acknowledged merge. Only then is the disk snapshot that merge used stamped as the baseline. + */ + +type OutsideMergeState = { + /** Mounted merging editor views per tab; the merge runs only with exactly one. */ + views: Record + /** A merge in flight per tab: the banner stays hidden until it settles. */ + busy: Record + /** The disk text the tab's unsaved edits started from: recorded while the tab is clean and + * after each acknowledged merge, with its signature to match the tab's disk baseline. */ + ancestors: Record +} + +export const useCustomEditorOutsideMergeStore = create()(() => ({ + views: {}, + busy: {}, + ancestors: {} +})) + +const patch = ( + key: K, + fileId: string, + value: OutsideMergeState[K][string] | undefined +): void => + useCustomEditorOutsideMergeStore.setState((state) => { + const next = { ...state[key] } + if (value === undefined) { + delete next[fileId] + } else { + next[fileId] = value + } + return { [key]: next } + }) + +/** A merging editor view of the tab mounted (+1) or went away (-1). */ +export function countCustomEditorMergingView(fileId: string, delta: 1 | -1): void { + const count = (useCustomEditorOutsideMergeStore.getState().views[fileId] ?? 0) + delta + patch('views', fileId, count > 0 ? count : undefined) +} + +export function recordCustomEditorAncestor(fileId: string, text: string): void { + patch('ancestors', fileId, { text, signature: getDiskBaselineSignature(text) }) +} + +/** True while the editor is taking a disk change itself, so Orca's banner stays hidden. */ +export function useCustomEditorMerging(fileId: string): boolean { + return useCustomEditorOutsideMergeStore((state) => state.busy[fileId] === true) +} + +/** The tab may merge: one merging view, a local file, no other tab sharing its buffer, and an + * ancestor that is exactly the disk the tab's baseline names. */ +function mergeAncestor(file: OpenFile): string | null { + const state = useAppStore.getState() + const merge = useCustomEditorOutsideMergeStore.getState() + const ancestor = merge.ancestors[file.id] + const local = + !file.runtimeEnvironmentId && + !file.externalSshTargetId && + !getConnectionIdForFile(file.worktreeId, file.filePath) + const alone = editorModelSiblingTabs(state, file).length === 1 + return merge.views[file.id] === 1 && + local && + alone && + ancestor && + file.lastKnownDiskSignature === ancestor.signature + ? ancestor.text + : null +} + +/** Reads the file as it is on disk now; null when it cannot be read as text. */ +async function readDiskText(fileId: string): Promise { + const state = useAppStore.getState() + const file = state.openFiles.find((openFile) => openFile.id === fileId) + const target = file + ? getRuntimeTargetForFileOwner(state, file.worktreeId, file.runtimeEnvironmentId) + : null + if (!file || !target) { + return null + } + const result = await readRuntimeFileContent({ + target, + filePath: file.filePath, + relativePath: file.relativePath, + worktreeId: file.worktreeId, + access: editorTabFileAccess(state, file) + }) + return result.isBinary ? null : result.content +} + +const liveTab = (fileId: string): OpenFile | undefined => + useAppStore.getState().openFiles.find((openFile) => openFile.id === fileId) + +/** + * One merge of the disk as it is now. On acknowledgement, stamps that exact disk snapshot as the + * baseline and its text as the new ancestor; if the disk moved on meanwhile, marks the tab changed + * again so the next round merges the newer write. Anything else leaves the conflict for the banner. + */ +export async function mergeOutsideChangeIntoEditor( + fileId: string, + host: Pick, + readDisk: (fileId: string) => Promise = readDiskText +): Promise { + const file = liveTab(fileId) + const ancestor = file ? mergeAncestor(file) : null + if (!file || ancestor === null || file.externalMutation !== 'changed') { + return false + } + patch('busy', fileId, true) + try { + const disk = await readDisk(fileId).catch(() => null) + const merged = disk === null ? null : await host.mergeOutsideChange(disk, ancestor) + if (disk === null || merged === null || liveTab(fileId)?.externalMutation !== 'changed') { + return false + } + const state = useAppStore.getState() + setEditorDiskBaseline(state, fileId, getDiskBaselineSignature(disk)) + state.setExternalMutation(fileId, null) + recordCustomEditorAncestor(fileId, disk) + // The tab's saved text (what its dirty state compares to) is now this disk text, as after a + // save; otherwise typing back to the old ancestor would look clean while disk differs. + window.dispatchEvent( + new CustomEvent(ORCA_EDITOR_FILE_SAVED_EVENT, { + detail: { fileId, content: disk, recordViewIds: [fileId] } + }) + ) + // A write that landed after the snapshot is not merged yet: put the conflict back for it. + const now = await readDisk(fileId).catch(() => null) + if (now !== disk) { + useAppStore.getState().setExternalMutation(fileId, 'changed') + } + return true + } finally { + patch('busy', fileId, undefined) + } +} + +/** Keeps the ancestor current and runs a merge each time the tab's file changes on disk. */ +export function useCustomEditorOutsideMerge( + fileId: string | undefined, + host: Pick, + /** The tab's buffer; recorded as the ancestor whenever the tab is clean (disk equals it). */ + content: string +): void { + const contentRef = useRef(content) + useLayoutEffect(() => { + contentRef.current = content + }) + const clean = useAppStore((state) => + fileId === undefined + ? false + : state.openFiles.find((openFile) => openFile.id === fileId)?.isDirty === false + ) + const changed = useAppStore( + (state) => + fileId !== undefined && + state.openFiles.find((openFile) => openFile.id === fileId)?.externalMutation === 'changed' + ) + useEffect(() => { + if (fileId !== undefined && clean) { + recordCustomEditorAncestor(fileId, contentRef.current) + } + }, [fileId, clean, content]) + useEffect(() => { + if (fileId !== undefined && changed) { + void mergeOutsideChangeIntoEditor(fileId, host) + } + }, [fileId, changed, host]) +} diff --git a/src/shared/plugins/frames/plugin-custom-editor-bridge.ts b/src/shared/plugins/frames/plugin-custom-editor-bridge.ts index 682a2355b01..95b90b7d294 100644 --- a/src/shared/plugins/frames/plugin-custom-editor-bridge.ts +++ b/src/shared/plugins/frames/plugin-custom-editor-bridge.ts @@ -32,6 +32,9 @@ export type CustomEditorDocument = { content: CustomEditorContent /** Bytes documents: the manifest suffix that matched, e.g. `xlsx`; never a path or file name. */ fileType?: string + /** Sent only to a session that merges: the file changed on disk while the tab held unsaved + * edits. `content` is the new disk text and `ancestor` the disk text those edits started from. */ + ancestor?: CustomEditorContent } const customEditorEditSchema = z.strictObject({ diff --git a/src/shared/plugins/frames/plugin-frame-bridge.ts b/src/shared/plugins/frames/plugin-frame-bridge.ts index 949f4070acb..ccd25c8582b 100644 --- a/src/shared/plugins/frames/plugin-frame-bridge.ts +++ b/src/shared/plugins/frames/plugin-frame-bridge.ts @@ -27,6 +27,8 @@ export const FRAME_EVENTS = { editorDocument: 'editor.document', /** frame → host, once: the editor asked for its document, so `plugin shot` knows it is wired. */ editorSubscribed: 'editor.subscribed', + /** frame → host, once: its document session merges outside changes into unsaved work. */ + editorMerges: 'editor.merges', /** host → frame, payload `PluginPanelPush`: a worker post, an event or a data change. */ push: 'plugin.push' } as const diff --git a/src/shared/plugins/frames/plugin-frame-document-session.test.ts b/src/shared/plugins/frames/plugin-frame-document-session.test.ts index 02235ca1425..38441166b70 100644 --- a/src/shared/plugins/frames/plugin-frame-document-session.test.ts +++ b/src/shared/plugins/frames/plugin-frame-document-session.test.ts @@ -422,4 +422,67 @@ describe('orca.document.session', () => { expect(replaced).not.toHaveBeenCalled() expect(posted().at(-1)).toEqual({ orca: 1, kind: 'res', id: 4, result: null }) }) + + it('merges a disk change made under unsaved edits, and tells Orca it does', async () => { + const merge = vi.fn( + (base: string, outside: string, mine: string) => `${outside}|${mine}|${base}` + ) + const { session, fromHost, replaced, edits, posted } = await open({ debounceMs: 0, merge }) + expect(posted()).toContainEqual( + expect.objectContaining({ kind: 'evt', event: 'editor.merges' }) + ) + session.change('a+mine') + await settle() + fromHost(accept(0)) + await settle() + // Accepted into the tab's buffer, still unsaved: the agent writes the file on disk. + fromHost({ + ...doc(2, 'a+agent'), + payload: { + version: 2, + readOnly: false, + content: { kind: 'text', text: 'a+agent' }, + ancestor: { kind: 'text', text: 'a' } + } + }) + await settle() + expect(merge).toHaveBeenCalledWith('a', 'a+agent', 'a+mine') + expect(replaced).toHaveBeenLastCalledWith('a+agent|a+mine|a') + expect(edits().at(-1)).toMatchObject({ + params: { baseVersion: 2, content: { kind: 'text', text: 'a+agent|a+mine|a' } } + }) + }) + + it('never claims to merge without a merge function', async () => { + const { posted } = await open({ debounceMs: 0 }) + expect(posted().some((message) => message.event === 'editor.merges')).toBe(false) + }) + + it('moves nothing when a disk merge throws, so the next edit cannot acknowledge it', async () => { + const merge = vi.fn(() => { + throw new Error('cannot merge') + }) + const error = vi.spyOn(console, 'error').mockImplementation(() => {}) + try { + const { session, fromHost, edits, replaced } = await open({ debounceMs: 0, merge }) + fromHost({ + ...doc(2, 'a+agent'), + payload: { + version: 2, + readOnly: false, + content: { kind: 'text', text: 'a+agent' }, + ancestor: { kind: 'text', text: 'a' } + } + }) + await settle() + expect(replaced).not.toHaveBeenCalled() + expect(session.value).toBe('a') + session.change('a+typed') + await settle() + // Still against the document before the merge: Orca refuses it and keeps its banner. + expect(edits().at(-1)).toMatchObject({ params: { baseVersion: 1 } }) + } finally { + error.mockRestore() + } + }) }) diff --git a/src/shared/plugins/frames/plugin-panel-shell-document.ts b/src/shared/plugins/frames/plugin-panel-shell-document.ts index 0ec2a0687f7..efc5b8d61da 100644 --- a/src/shared/plugins/frames/plugin-panel-shell-document.ts +++ b/src/shared/plugins/frames/plugin-panel-shell-document.ts @@ -168,6 +168,24 @@ export const PLUGIN_FRAME_DOCUMENT_SCRIPT = ` } var documents = on(E.editorDocument, function (next) { if (disposed || next.version === doc.version) return + // A disk change under the tab's unsaved edits: merge it with them and send the result. + // Nothing moves unless the merge succeeds, so a later edit never acknowledges a failed one. + if (next.ancestor && merge) { + var merged + try { + merged = merge(decode(next.ancestor), decode(next.content), value) + } catch (error) { + console.error(error) + return + } + rebase(next) + value = merged + dirty = true + generation += 1 + emitReplace(value) + if (!inFlight) send().catch(function () {}) + return + } doc = next // Unaccepted work waits for its edit's conflict, where merge runs. if (dirty || inFlight) return @@ -179,6 +197,8 @@ export const PLUGIN_FRAME_DOCUMENT_SCRIPT = ` var flushes = on(C.editor.flush, function () { return disposed || doc.readOnly ? undefined : flush() }) + // Orca then hands this session disk changes made under unsaved edits, instead of a banner. + if (merge) post({ kind: 'evt', event: E.editorMerges, payload: {} }) return Object.freeze({ get value() { return value }, get readOnly() { return doc.readOnly },