From cb031c45173bbfd65ee0dd5eecf0906cf942dccb Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sun, 1 Nov 2026 22:35:01 -0800 Subject: [PATCH] fix(plugins): merge disk writes into a custom editor's unsaved edits (#37343) * fix(plugins): merge disk writes into a custom editor's unsaved edits A write to the file on disk while a custom editor tab had unsaved edits never reached the editor: the buffer kept the edits, Orca showed its Reload/Overwrite banner, and the session's merge never ran. Now a frame whose document session has merge announces it (editor.merges), and Orca sends it the new disk text with the text the edits started from (editor.document with ancestor). The session merges, posts the result, and the tab stays unsaved with it; the banner is skipped. Without merge the banner decides as before. * test(editor): an explicit save under the changed-on-disk banner keeps the edits * fix(plugins): make the outside merge exact, and narrow it to where it is - The host settles a merge only on the session's edit made against the merge's own document version, and always commits that result to the buffer (even when it equals the disk text); silence past the 1 s flush deadline, a remount or a throwing merge leave the banner and the suspended autosave in place. - Orca stamps exactly the disk snapshot the acknowledged merge used and records it as the next ancestor; a write that landed meanwhile puts the conflict back for its own merge. - The ancestor is the tab's disk text recorded while clean and advanced on acknowledged merges, and must match the tab's disk baseline. - Only a local file in one merging editor view, with no other tab on its buffer, takes this path; anything else gets the banner. - Frame events keep reaching their handlers after the merge capability. * fix(plugins): move nothing on a failed disk merge; advance the saved text on success A merge that throws now leaves the session's document, baseline and version untouched, so the user's next edit goes out against the old version: Orca refuses it and keeps the banner instead of taking it as the merge's acknowledgement. After an acknowledged merge the tab's saved text moves to the disk text it used, so typing back to the old ancestor no longer looks clean. * chore(plugins): regenerate the testing bundle on main --- docs/reference/plugin-authoring.md | 7 +- .../plugins/declarative/orca-testing.mjs | 22 ++- resources/plugins/types/orca-frame.d.ts | 7 +- .../references/recipes.md | 7 +- src/cli/bundled-skill-guides.ts | 7 +- .../CustomEditorExternalChangeBanner.tsx | 12 ++ .../editor/EditorEditFileSurface.tsx | 4 +- .../editor/PluginCustomEditorFrame.tsx | 20 +- .../editor-autosave-conflict-flow.test.ts | 25 +++ .../plugin-custom-editor-frame-events.ts | 28 +++ .../editor/plugin-custom-editor-host-types.ts | 6 + .../editor/plugin-custom-editor-host.test.ts | 81 ++++++++ .../editor/plugin-custom-editor-host.ts | 34 ++-- .../plugin-custom-editor-outside-merge.ts | 45 +++++ .../use-custom-editor-outside-merge.test.tsx | 132 +++++++++++++ .../editor/use-custom-editor-outside-merge.ts | 185 ++++++++++++++++++ .../frames/plugin-custom-editor-bridge.ts | 3 + .../plugins/frames/plugin-frame-bridge.ts | 2 + .../plugin-frame-document-session.test.ts | 63 ++++++ .../frames/plugin-panel-shell-document.ts | 20 ++ 20 files changed, 689 insertions(+), 21 deletions(-) create mode 100644 src/renderer/src/components/editor/CustomEditorExternalChangeBanner.tsx create mode 100644 src/renderer/src/components/editor/plugin-custom-editor-frame-events.ts create mode 100644 src/renderer/src/components/editor/plugin-custom-editor-outside-merge.ts create mode 100644 src/renderer/src/components/editor/use-custom-editor-outside-merge.test.tsx create mode 100644 src/renderer/src/components/editor/use-custom-editor-outside-merge.ts 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 },