@task-handoff/node-agent 0.0.24 → 0.0.25-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/git-provisioning-helper.js +1 -0
  3. package/dist/node-update-worker.js +1 -1
  4. package/docker/entrypoint.sh +8 -0
  5. package/docker/git-provision.sh +126 -0
  6. package/docker/git-provisioning-helper.js +1 -0
  7. package/node_modules/node-pty/LICENSE +69 -0
  8. package/node_modules/node-pty/lib/conpty_console_list_agent.js +16 -0
  9. package/node_modules/node-pty/lib/conpty_console_list_agent.js.map +1 -0
  10. package/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  11. package/node_modules/node-pty/lib/eventEmitter2.js.map +1 -0
  12. package/node_modules/node-pty/lib/eventEmitter2.test.js +30 -0
  13. package/node_modules/node-pty/lib/eventEmitter2.test.js.map +1 -0
  14. package/node_modules/node-pty/lib/index.js +52 -0
  15. package/node_modules/node-pty/lib/index.js.map +1 -0
  16. package/node_modules/node-pty/lib/interfaces.js +7 -0
  17. package/node_modules/node-pty/lib/interfaces.js.map +1 -0
  18. package/node_modules/node-pty/lib/shared/conout.js +11 -0
  19. package/node_modules/node-pty/lib/shared/conout.js.map +1 -0
  20. package/node_modules/node-pty/lib/terminal.js +190 -0
  21. package/node_modules/node-pty/lib/terminal.js.map +1 -0
  22. package/node_modules/node-pty/lib/terminal.test.js +139 -0
  23. package/node_modules/node-pty/lib/terminal.test.js.map +1 -0
  24. package/node_modules/node-pty/lib/testUtils.test.js +28 -0
  25. package/node_modules/node-pty/lib/testUtils.test.js.map +1 -0
  26. package/node_modules/node-pty/lib/types.js +7 -0
  27. package/node_modules/node-pty/lib/types.js.map +1 -0
  28. package/node_modules/node-pty/lib/unixTerminal.js +346 -0
  29. package/node_modules/node-pty/lib/unixTerminal.js.map +1 -0
  30. package/node_modules/node-pty/lib/unixTerminal.test.js +351 -0
  31. package/node_modules/node-pty/lib/unixTerminal.test.js.map +1 -0
  32. package/node_modules/node-pty/lib/utils.js +39 -0
  33. package/node_modules/node-pty/lib/utils.js.map +1 -0
  34. package/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  35. package/node_modules/node-pty/lib/windowsConoutConnection.js.map +1 -0
  36. package/node_modules/node-pty/lib/windowsPtyAgent.js +320 -0
  37. package/node_modules/node-pty/lib/windowsPtyAgent.js.map +1 -0
  38. package/node_modules/node-pty/lib/windowsPtyAgent.test.js +90 -0
  39. package/node_modules/node-pty/lib/windowsPtyAgent.test.js.map +1 -0
  40. package/node_modules/node-pty/lib/windowsTerminal.js +199 -0
  41. package/node_modules/node-pty/lib/windowsTerminal.js.map +1 -0
  42. package/node_modules/node-pty/lib/windowsTerminal.test.js +219 -0
  43. package/node_modules/node-pty/lib/windowsTerminal.test.js.map +1 -0
  44. package/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  45. package/node_modules/node-pty/lib/worker/conoutSocketWorker.js.map +1 -0
  46. package/node_modules/node-pty/package.json +6 -0
  47. package/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  48. package/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  49. package/package.json +4 -1
  50. package/runtime-artifacts/{controlled-instance-runtime-0.0.24-linux-universal.manifest.json → controlled-instance-runtime-0.0.25-alpha.2-linux-universal.manifest.json} +2 -2
  51. package/runtime-artifacts/controlled-instance-runtime-0.0.25-alpha.2-linux-universal.tar.gz +0 -0
  52. package/runtime-artifacts/controlled-instance-runtime-0.0.25-alpha.2-linux-universal.tar.gz.sha256 +1 -0
  53. package/runtime-artifacts/controlled-instance-runtime-0.0.24-linux-universal.tar.gz +0 -0
  54. package/runtime-artifacts/controlled-instance-runtime-0.0.24-linux-universal.tar.gz.sha256 +0 -1
@@ -0,0 +1 @@
1
+ "use strict";var e,t=require("node:fs"),n=require("node:path"),r=require("node:child_process");function i(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:s,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);const i=s.prototype,o=Object.keys(i);for(let e=0;e<o.length;e++){const t=o[e];t in n||(n[t]=i[t].bind(n))}}const i=n?.Parent??Object;class o extends i{}function s(e){var t;const i=n?.Parent?new o:this;r(i,e),(t=i._zod).deferred??(t.deferred=[]);for(const e of i._zod.deferred)e();return i}return Object.defineProperty(o,"name",{value:e}),Object.defineProperty(s,"init",{value:r}),Object.defineProperty(s,Symbol.hasInstance,{value:t=>!!(n?.Parent&&t instanceof n.Parent)||t?._zod?.traits?.has(e)}),Object.defineProperty(s,"name",{value:e}),s}class o extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class s extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name="ZodEncodeError"}}(e=globalThis).__zod_globalConfig??(e.__zod_globalConfig={});const a=globalThis.__zod_globalConfig;function c(e){return a}function u(e){const t=Object.values(e).filter(e=>"number"==typeof e);return Object.entries(e).filter(([e,n])=>-1===t.indexOf(+e)).map(([e,t])=>t)}function d(e,t){return"bigint"==typeof t?t.toString():t}function p(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function l(e){return null==e}function f(e){const t=e.startsWith("^")?1:0,n=e.endsWith("$")?e.length-1:e.length;return e.slice(t,n)}const h=Symbol("evaluating");function m(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==h)return void 0===r&&(r=h,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function g(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function v(...e){const t={};for(const n of e){const e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function y(e){return JSON.stringify(e)}const _="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function b(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}const z=p(()=>{if(a.jitless)return!1;if("undefined"!=typeof navigator&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(e){return!1}});function w(e){if(!1===b(e))return!1;const t=e.constructor;if(void 0===t)return!0;if("function"!=typeof t)return!0;const n=t.prototype;return!1!==b(n)&&!1!==Object.prototype.hasOwnProperty.call(n,"isPrototypeOf")}function k(e){return w(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}const $=new Set(["string","number","symbol"]);function S(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function x(e,t,n){const r=new e._zod.constr(t??e._zod.def);return t&&!n?.parent||(r._zod.parent=e),r}function O(e){const t=e;if(!t)return{};if("string"==typeof t)return{error:()=>t};if(void 0!==t?.message){if(void 0!==t?.error)throw new Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,"string"==typeof t.error?{...t,error:()=>t.error}:t}const I={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function E(e,t=0){if(!0===e.aborted)return!0;for(let n=t;n<e.issues.length;n++)if(!0!==e.issues[n]?.continue)return!0;return!1}function Z(e,t=0){if(!0===e.aborted)return!0;for(let n=t;n<e.issues.length;n++)if(!1===e.issues[n]?.continue)return!0;return!1}function T(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function N(e){return"string"==typeof e?e:e?.message}function P(e,t,n){const r=e.message?e.message:N(e.inst?._zod.def?.error?.(e))??N(t?.error?.(e))??N(n.customError?.(e))??N(n.localeError?.(e))??"Invalid input",{inst:i,continue:o,input:s,...a}=e;return a.path??(a.path=[]),a.message=r,t?.reportInput&&(a.input=s),a}function j(e){return Array.isArray(e)?"array":"string"==typeof e?"string":"unknown"}function A(...e){const[t,n,r]=e;return"string"==typeof t?{message:t,code:"custom",input:n,inst:r}:{...t}}const F=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,d,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},R=i("$ZodError",F),C=i("$ZodError",F,{Parent:Error}),U=e=>(t,n,r,i)=>{const s=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},s);if(a instanceof Promise)throw new o;if(a.issues.length){const t=new(i?.Err??e)(a.issues.map(e=>P(e,s,c())));throw _(t,i?.callee),t}return a.value},J=e=>async(t,n,r,i)=>{const o=r?{...r,async:!0}:{async:!0};let s=t._zod.run({value:n,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){const t=new(i?.Err??e)(s.issues.map(e=>P(e,o,c())));throw _(t,i?.callee),t}return s.value},M=e=>(t,n,r)=>{const i=r?{...r,async:!1}:{async:!1},s=t._zod.run({value:n,issues:[]},i);if(s instanceof Promise)throw new o;return s.issues.length?{success:!1,error:new(e??R)(s.issues.map(e=>P(e,i,c())))}:{success:!0,data:s.value}},D=M(C),V=e=>async(t,n,r)=>{const i=r?{...r,async:!0}:{async:!0};let o=t._zod.run({value:n,issues:[]},i);return o instanceof Promise&&(o=await o),o.issues.length?{success:!1,error:new e(o.issues.map(e=>P(e,i,c())))}:{success:!0,data:o.value}},L=V(C),G=e=>(t,n,r)=>{const i=r?{...r,direction:"backward"}:{direction:"backward"};return U(e)(t,n,i)},W=e=>(t,n,r)=>U(e)(t,n,r),K=e=>async(t,n,r)=>{const i=r?{...r,direction:"backward"}:{direction:"backward"};return J(e)(t,n,i)},H=e=>async(t,n,r)=>J(e)(t,n,r),B=e=>(t,n,r)=>{const i=r?{...r,direction:"backward"}:{direction:"backward"};return M(e)(t,n,i)},q=e=>(t,n,r)=>M(e)(t,n,r),Y=e=>async(t,n,r)=>{const i=r?{...r,direction:"backward"}:{direction:"backward"};return V(e)(t,n,i)},X=e=>async(t,n,r)=>V(e)(t,n,r),Q=/^[cC][0-9a-z]{6,}$/,ee=/^[0-9a-z]+$/,te=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,ne=/^[0-9a-vA-V]{20}$/,re=/^[A-Za-z0-9]{27}$/,ie=/^[a-zA-Z0-9_-]{21}$/,oe=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,se=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,ae=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,ce=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ue=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,de=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,pe=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,le=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,fe=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,he=/^[A-Za-z0-9_-]*$/,me=/^https?$/,ge=/^\+[1-9]\d{6,14}$/,ve="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",ye=new RegExp(`^${ve}$`);function _e(e){const t="(?:[01]\\d|2[0-3]):[0-5]\\d";return"number"==typeof e.precision?-1===e.precision?`${t}`:0===e.precision?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}const be=/^-?\d+$/,ze=/^-?\d+(?:\.\d+)?$/,we=/^(?:true|false)$/i,ke=/^[^A-Z]*$/,$e=/^[^a-z]*$/,Se=i("$ZodCheck",(e,t)=>{var n;e._zod??(e._zod={}),e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),xe={number:"number",bigint:"bigint",object:"date"},Oe=i("$ZodCheckLessThan",(e,t)=>{Se.init(e,t);const n=xe[typeof t.value];e._zod.onattach.push(e=>{const n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??Number.POSITIVE_INFINITY;t.value<r&&(t.inclusive?n.maximum=t.value:n.exclusiveMaximum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:n,code:"too_big",maximum:"object"==typeof t.value?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Ie=i("$ZodCheckGreaterThan",(e,t)=>{Se.init(e,t);const n=xe[typeof t.value];e._zod.onattach.push(e=>{const n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??Number.NEGATIVE_INFINITY;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:"too_small",minimum:"object"==typeof t.value?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Ee=i("$ZodCheckMultipleOf",(e,t)=>{Se.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw new Error("Cannot mix number and bigint in multiple_of check.");("bigint"==typeof n.value?n.value%t.value===BigInt(0):0===function(e,t){const n=e/t,r=Math.round(n),i=Number.EPSILON*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}(n.value,t.value))||n.issues.push({origin:typeof n.value,code:"not_multiple_of",divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ze=i("$ZodCheckNumberFormat",(e,t)=>{Se.init(e,t),t.format=t.format||"float64";const n=t.format?.includes("int"),r=n?"int":"number",[i,o]=I[t.format];e._zod.onattach.push(e=>{const r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=o,n&&(r.pattern=be)}),e._zod.check=s=>{const a=s.value;if(n){if(!Number.isInteger(a))return void s.issues.push({expected:r,format:t.format,code:"invalid_type",continue:!1,input:a,inst:e});if(!Number.isSafeInteger(a))return void(a>0?s.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:r,inclusive:!0,continue:!t.abort}):s.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:r,inclusive:!0,continue:!t.abort}))}a<i&&s.issues.push({origin:"number",input:a,code:"too_small",minimum:i,inclusive:!0,inst:e,continue:!t.abort}),a>o&&s.issues.push({origin:"number",input:a,code:"too_big",maximum:o,inclusive:!0,inst:e,continue:!t.abort})}}),Te=i("$ZodCheckMaxLength",(e,t)=>{var n;Se.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value;return!l(t)&&void 0!==t.length}),e._zod.onattach.push(e=>{const n=e._zod.bag.maximum??Number.POSITIVE_INFINITY;t.maximum<n&&(e._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{const r=n.value;if(r.length<=t.maximum)return;const i=j(r);n.issues.push({origin:i,code:"too_big",maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Ne=i("$ZodCheckMinLength",(e,t)=>{var n;Se.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value;return!l(t)&&void 0!==t.length}),e._zod.onattach.push(e=>{const n=e._zod.bag.minimum??Number.NEGATIVE_INFINITY;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{const r=n.value;if(r.length>=t.minimum)return;const i=j(r);n.issues.push({origin:i,code:"too_small",minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Pe=i("$ZodCheckLengthEquals",(e,t)=>{var n;Se.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value;return!l(t)&&void 0!==t.length}),e._zod.onattach.push(e=>{const n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{const r=n.value,i=r.length;if(i===t.length)return;const o=j(r),s=i>t.length;n.issues.push({origin:o,...s?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),je=i("$ZodCheckStringFormat",(e,t)=>{var n,r;Se.init(e,t),e._zod.onattach.push(e=>{const n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??(n.patterns=new Set),n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,t.pattern.test(n.value)||n.issues.push({origin:"string",code:"invalid_format",format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),Ae=i("$ZodCheckRegex",(e,t)=>{je.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,t.pattern.test(n.value)||n.issues.push({origin:"string",code:"invalid_format",format:"regex",input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Fe=i("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=ke),je.init(e,t)}),Re=i("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=$e),je.init(e,t)}),Ce=i("$ZodCheckIncludes",(e,t)=>{Se.init(e,t);const n=S(t.includes),r=new RegExp("number"==typeof t.position?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{const t=e._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Ue=i("$ZodCheckStartsWith",(e,t)=>{Se.init(e,t);const n=new RegExp(`^${S(t.prefix)}.*`);t.pattern??(t.pattern=n),e._zod.onattach.push(e=>{const t=e._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Je=i("$ZodCheckEndsWith",(e,t)=>{Se.init(e,t);const n=new RegExp(`.*${S(t.suffix)}$`);t.pattern??(t.pattern=n),e._zod.onattach.push(e=>{const t=e._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),Me=i("$ZodCheckOverwrite",(e,t)=>{Se.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}});class De{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if("function"==typeof e)return e(this,{execution:"sync"}),void e(this,{execution:"async"});const t=e.split("\n").filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>" ".repeat(2*this.indent)+e);for(const e of r)this.content.push(e)}compile(){const e=Function,t=this?.args;return new e(...t,[...(this?.content??[""]).map(e=>` ${e}`)].join("\n"))}}const Ve={major:4,minor:4,patch:3},Le=i("$ZodType",(e,t)=>{var n;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Ve;const r=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&r.unshift(e);for(const t of r)for(const n of t._zod.onattach)n(e);if(0===r.length)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const t=(e,t,n)=>{let r,i=E(e);for(const s of t){if(s._zod.def.when){if(Z(e))continue;if(!s._zod.def.when(e))continue}else if(i)continue;const t=e.issues.length,a=s._zod.check(e);if(a instanceof Promise&&!1===n?.async)throw new o;if(r||a instanceof Promise)r=(r??Promise.resolve()).then(async()=>{await a,e.issues.length!==t&&(i||(i=E(e,t)))});else{if(e.issues.length===t)continue;i||(i=E(e,t))}}return r?r.then(()=>e):e},n=(n,i,s)=>{if(E(n))return n.aborted=!0,n;const a=t(i,r,s);if(a instanceof Promise){if(!1===s.async)throw new o;return a.then(t=>e._zod.parse(t,s))}return e._zod.parse(a,s)};e._zod.run=(i,s)=>{if(s.skipChecks)return e._zod.parse(i,s);if("backward"===s.direction){const t=e._zod.parse({value:i.value,issues:[]},{...s,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,s)):n(t,i,s)}const a=e._zod.parse(i,s);if(a instanceof Promise){if(!1===s.async)throw new o;return a.then(e=>t(e,r,s))}return t(a,r,s)}}m(e,"~standard",()=>({validate:t=>{try{const n=D(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch(n){return L(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:"zod",version:1}))}),Ge=i("$ZodString",(e,t)=>{var n;Le.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??(n=e._zod.bag,new RegExp(`^${n?`[\\s\\S]{${n?.minimum??0},${n?.maximum??""}}`:"[\\s\\S]*"}$`)),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch(r){}return"string"==typeof n.value||n.issues.push({expected:"string",code:"invalid_type",input:n.value,inst:e}),n}}),We=i("$ZodStringFormat",(e,t)=>{je.init(e,t),Ge.init(e,t)}),Ke=i("$ZodGUID",(e,t)=>{t.pattern??(t.pattern=se),We.init(e,t)}),He=i("$ZodUUID",(e,t)=>{if(t.version){const e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(void 0===e)throw new Error(`Invalid UUID version: "${t.version}"`);t.pattern??(t.pattern=ae(e))}else t.pattern??(t.pattern=ae());We.init(e,t)}),Be=i("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=ce),We.init(e,t)}),qe=i("$ZodURL",(e,t)=>{We.init(e,t),e._zod.check=n=>{try{const r=n.value.trim();if(!t.normalize&&t.protocol?.source===me.source&&!/^https?:\/\//i.test(r))return void n.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:n.value,inst:e,continue:!t.abort});const i=new URL(r);return t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(":")?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),void(t.normalize?n.value=i.href:n.value=r)}catch(r){n.issues.push({code:"invalid_format",format:"url",input:n.value,inst:e,continue:!t.abort})}}}),Ye=i("$ZodEmoji",(e,t)=>{t.pattern??(t.pattern=new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),We.init(e,t)}),Xe=i("$ZodNanoID",(e,t)=>{t.pattern??(t.pattern=ie),We.init(e,t)}),Qe=i("$ZodCUID",(e,t)=>{t.pattern??(t.pattern=Q),We.init(e,t)}),et=i("$ZodCUID2",(e,t)=>{t.pattern??(t.pattern=ee),We.init(e,t)}),tt=i("$ZodULID",(e,t)=>{t.pattern??(t.pattern=te),We.init(e,t)}),nt=i("$ZodXID",(e,t)=>{t.pattern??(t.pattern=ne),We.init(e,t)}),rt=i("$ZodKSUID",(e,t)=>{t.pattern??(t.pattern=re),We.init(e,t)}),it=i("$ZodISODateTime",(e,t)=>{t.pattern??(t.pattern=function(e){const t=_e({precision:e.precision}),n=["Z"];e.local&&n.push(""),e.offset&&n.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const r=`${t}(?:${n.join("|")})`;return new RegExp(`^${ve}T(?:${r})$`)}(t)),We.init(e,t)}),ot=i("$ZodISODate",(e,t)=>{t.pattern??(t.pattern=ye),We.init(e,t)}),st=i("$ZodISOTime",(e,t)=>{t.pattern??(t.pattern=new RegExp(`^${_e(t)}$`)),We.init(e,t)}),at=i("$ZodISODuration",(e,t)=>{t.pattern??(t.pattern=oe),We.init(e,t)}),ct=i("$ZodIPv4",(e,t)=>{t.pattern??(t.pattern=ue),We.init(e,t),e._zod.bag.format="ipv4"}),ut=i("$ZodIPv6",(e,t)=>{t.pattern??(t.pattern=de),We.init(e,t),e._zod.bag.format="ipv6",e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:"invalid_format",format:"ipv6",input:n.value,inst:e,continue:!t.abort})}}}),dt=i("$ZodCIDRv4",(e,t)=>{t.pattern??(t.pattern=pe),We.init(e,t)}),pt=i("$ZodCIDRv6",(e,t)=>{t.pattern??(t.pattern=le),We.init(e,t),e._zod.check=n=>{const r=n.value.split("/");try{if(2!==r.length)throw new Error;const[e,t]=r;if(!t)throw new Error;const n=Number(t);if(`${n}`!==t)throw new Error;if(n<0||n>128)throw new Error;new URL(`http://[${e}]`)}catch{n.issues.push({code:"invalid_format",format:"cidrv6",input:n.value,inst:e,continue:!t.abort})}}});function lt(e){if(""===e)return!0;if(/\s/.test(e))return!1;if(e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}const ft=i("$ZodBase64",(e,t)=>{t.pattern??(t.pattern=fe),We.init(e,t),e._zod.bag.contentEncoding="base64",e._zod.check=n=>{lt(n.value)||n.issues.push({code:"invalid_format",format:"base64",input:n.value,inst:e,continue:!t.abort})}}),ht=i("$ZodBase64URL",(e,t)=>{t.pattern??(t.pattern=he),We.init(e,t),e._zod.bag.contentEncoding="base64url",e._zod.check=n=>{(function(e){if(!he.test(e))return!1;const t=e.replace(/[-_]/g,e=>"-"===e?"+":"/");return lt(t.padEnd(4*Math.ceil(t.length/4),"="))})(n.value)||n.issues.push({code:"invalid_format",format:"base64url",input:n.value,inst:e,continue:!t.abort})}}),mt=i("$ZodE164",(e,t)=>{t.pattern??(t.pattern=ge),We.init(e,t)}),gt=i("$ZodJWT",(e,t)=>{We.init(e,t),e._zod.check=n=>{(function(e,t=null){try{const n=e.split(".");if(3!==n.length)return!1;const[r]=n;if(!r)return!1;const i=JSON.parse(atob(r));return!("typ"in i&&"JWT"!==i?.typ||!i.alg||t&&(!("alg"in i)||i.alg!==t))}catch{return!1}})(n.value,t.alg)||n.issues.push({code:"invalid_format",format:"jwt",input:n.value,inst:e,continue:!t.abort})}}),vt=i("$ZodNumber",(e,t)=>{Le.init(e,t),e._zod.pattern=e._zod.bag.pattern??ze,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch(e){}const i=n.value;if("number"==typeof i&&!Number.isNaN(i)&&Number.isFinite(i))return n;const o="number"==typeof i?Number.isNaN(i)?"NaN":Number.isFinite(i)?void 0:"Infinity":void 0;return n.issues.push({expected:"number",code:"invalid_type",input:i,inst:e,...o?{received:o}:{}}),n}}),yt=i("$ZodNumberFormat",(e,t)=>{Ze.init(e,t),vt.init(e,t)}),_t=i("$ZodBoolean",(e,t)=>{Le.init(e,t),e._zod.pattern=we,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Boolean(n.value)}catch(e){}const i=n.value;return"boolean"==typeof i||n.issues.push({expected:"boolean",code:"invalid_type",input:i,inst:e}),n}}),bt=i("$ZodUnknown",(e,t)=>{Le.init(e,t),e._zod.parse=e=>e}),zt=i("$ZodNever",(e,t)=>{Le.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:e}),t)});function wt(e,t,n){e.issues.length&&t.issues.push(...T(n,e.issues)),t.value[n]=e.value}const kt=i("$ZodArray",(e,t)=>{Le.init(e,t),e._zod.parse=(n,r)=>{const i=n.value;if(!Array.isArray(i))return n.issues.push({expected:"array",code:"invalid_type",input:i,inst:e}),n;n.value=Array(i.length);const o=[];for(let e=0;e<i.length;e++){const s=i[e],a=t.element._zod.run({value:s,issues:[]},r);a instanceof Promise?o.push(a.then(t=>wt(t,n,e))):wt(a,n,e)}return o.length?Promise.all(o).then(()=>n):n}});function $t(e,t,n,r,i,o){const s=n in r;if(e.issues.length){if(i&&o&&!s)return;t.issues.push(...T(n,e.issues))}s||i?void 0===e.value?s&&(t.value[n]=void 0):t.value[n]=e.value:e.issues.length||t.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[n]})}function St(e){const t=Object.keys(e.shape);for(const n of t)if(!e.shape?.[n]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${n}": expected a Zod schema`);const n=(r=e.shape,Object.keys(r).filter(e=>"optional"===r[e]._zod.optin&&"optional"===r[e]._zod.optout));var r;return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function xt(e,t,n,r,i,o){const s=[],a=i.keySet,c=i.catchall._zod,u=c.def.type,d="optional"===c.optin,p="optional"===c.optout;for(const i in t){if("__proto__"===i)continue;if(a.has(i))continue;if("never"===u){s.push(i);continue}const o=c.run({value:t[i],issues:[]},r);o instanceof Promise?e.push(o.then(e=>$t(e,n,i,t,d,p))):$t(o,n,i,t,d,p)}return s.length&&n.issues.push({code:"unrecognized_keys",keys:s,input:t,inst:o}),e.length?Promise.all(e).then(()=>n):n}const Ot=i("$ZodObject",(e,t)=>{Le.init(e,t);const n=Object.getOwnPropertyDescriptor(t,"shape");if(!n?.get){const e=t.shape;Object.defineProperty(t,"shape",{get:()=>{const n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}const r=p(()=>St(t));m(e._zod,"propValues",()=>{const e=t.shape,n={};for(const t in e){const r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(const e of r.values)n[t].add(e)}}return n});const i=b,o=t.catchall;let s;e._zod.parse=(t,n)=>{s??(s=r.value);const a=t.value;if(!i(a))return t.issues.push({expected:"object",code:"invalid_type",input:a,inst:e}),t;t.value={};const c=[],u=s.shape;for(const e of s.keys){const r=u[e],i="optional"===r._zod.optin,o="optional"===r._zod.optout,s=r._zod.run({value:a[e],issues:[]},n);s instanceof Promise?c.push(s.then(n=>$t(n,t,e,a,i,o))):$t(s,t,e,a,i,o)}return o?xt(c,a,t,n,r.value,e):c.length?Promise.all(c).then(()=>t):t}}),It=i("$ZodObjectJIT",(e,t)=>{Ot.init(e,t);const n=e._zod.parse,r=p(()=>St(t));let i;const o=b,s=!a.jitless,c=s&&z.value,u=t.catchall;let d;e._zod.parse=(a,p)=>{d??(d=r.value);const l=a.value;return o(l)?s&&c&&!1===p?.async&&!0!==p.jitless?(i||(i=(e=>{const t=new De(["shape","payload","ctx"]),n=r.value,i=e=>{const t=y(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write("const input = payload.value;");const o=Object.create(null);let s=0;for(const e of n.keys)o[e]="key_"+s++;t.write("const newResult = {};");for(const r of n.keys){const n=o[r],s=y(r),a=e[r],c="optional"===a?._zod?.optin,u="optional"===a?._zod?.optout;t.write(`const ${n} = ${i(r)};`),c&&u?t.write(`\n if (${n}.issues.length) {\n if (${s} in input) {\n payload.issues = payload.issues.concat(${n}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${s}, ...iss.path] : [${s}]\n })));\n }\n }\n \n if (${n}.value === undefined) {\n if (${s} in input) {\n newResult[${s}] = undefined;\n }\n } else {\n newResult[${s}] = ${n}.value;\n }\n \n `):c?t.write(`\n if (${n}.issues.length) {\n payload.issues = payload.issues.concat(${n}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${s}, ...iss.path] : [${s}]\n })));\n }\n \n if (${n}.value === undefined) {\n if (${s} in input) {\n newResult[${s}] = undefined;\n }\n } else {\n newResult[${s}] = ${n}.value;\n }\n \n `):t.write(`\n const ${n}_present = ${s} in input;\n if (${n}.issues.length) {\n payload.issues = payload.issues.concat(${n}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${s}, ...iss.path] : [${s}]\n })));\n }\n if (!${n}_present && !${n}.issues.length) {\n payload.issues.push({\n code: "invalid_type",\n expected: "nonoptional",\n input: undefined,\n path: [${s}]\n });\n }\n\n if (${n}_present) {\n if (${n}.value === undefined) {\n newResult[${s}] = undefined;\n } else {\n newResult[${s}] = ${n}.value;\n }\n }\n\n `)}t.write("payload.value = newResult;"),t.write("return payload;");const a=t.compile();return(t,n)=>a(e,t,n)})(t.shape)),a=i(a,p),u?xt([],l,a,p,d,e):a):n(a,p):(a.issues.push({expected:"object",code:"invalid_type",input:l,inst:e}),a)}});function Et(e,t,n,r){for(const n of e)if(0===n.issues.length)return t.value=n.value,t;const i=e.filter(e=>!E(e));return 1===i.length?(t.value=i[0].value,i[0]):(t.issues.push({code:"invalid_union",input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>P(e,r,c())))}),t)}const Zt=i("$ZodUnion",(e,t)=>{Le.init(e,t),m(e._zod,"optin",()=>t.options.some(e=>"optional"===e._zod.optin)?"optional":void 0),m(e._zod,"optout",()=>t.options.some(e=>"optional"===e._zod.optout)?"optional":void 0),m(e._zod,"values",()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),m(e._zod,"pattern",()=>{if(t.options.every(e=>e._zod.pattern)){const e=t.options.map(e=>e._zod.pattern);return new RegExp(`^(${e.map(e=>f(e.source)).join("|")})$`)}});const n=1===t.options.length?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let o=!1;const s=[];for(const e of t.options){const t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)s.push(t),o=!0;else{if(0===t.issues.length)return t;s.push(t)}}return o?Promise.all(s).then(t=>Et(t,r,e,i)):Et(s,r,e,i)}}),Tt=i("$ZodDiscriminatedUnion",(e,t)=>{t.inclusive=!1,Zt.init(e,t);const n=e._zod.parse;m(e._zod,"propValues",()=>{const e={};for(const n of t.options){const r=n._zod.propValues;if(!r||0===Object.keys(r).length)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(const[t,n]of Object.entries(r)){e[t]||(e[t]=new Set);for(const r of n)e[t].add(r)}}return e});const r=p(()=>{const e=t.options,n=new Map;for(const r of e){const e=r._zod.propValues?.[t.discriminator];if(!e||0===e.size)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(const t of e){if(n.has(t))throw new Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,o)=>{const s=i.value;if(!b(s))return i.issues.push({code:"invalid_type",expected:"object",input:s,inst:e}),i;const a=r.value.get(s?.[t.discriminator]);return a?a._zod.run(i,o):t.unionFallback||"backward"===o.direction?n(i,o):(i.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:t.discriminator,options:Array.from(r.value.keys()),input:s,path:[t.discriminator],inst:e}),i)}}),Nt=i("$ZodIntersection",(e,t)=>{Le.init(e,t),e._zod.parse=(e,n)=>{const r=e.value,i=t.left._zod.run({value:r,issues:[]},n),o=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||o instanceof Promise?Promise.all([i,o]).then(([t,n])=>jt(e,t,n)):jt(e,i,o)}});function Pt(e,t){if(e===t)return{valid:!0,data:e};if(e instanceof Date&&t instanceof Date&&+e===+t)return{valid:!0,data:e};if(w(e)&&w(t)){const n=Object.keys(t),r=Object.keys(e).filter(e=>-1!==n.indexOf(e)),i={...e,...t};for(const n of r){const r=Pt(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};const n=[];for(let r=0;r<e.length;r++){const i=Pt(e[r],t[r]);if(!i.valid)return{valid:!1,mergeErrorPath:[r,...i.mergeErrorPath]};n.push(i.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function jt(e,t,n){const r=new Map;let i;for(const n of t.issues)if("unrecognized_keys"===n.code){i??(i=n);for(const e of n.keys)r.has(e)||r.set(e,{}),r.get(e).l=!0}else e.issues.push(n);for(const t of n.issues)if("unrecognized_keys"===t.code)for(const e of t.keys)r.has(e)||r.set(e,{}),r.get(e).r=!0;else e.issues.push(t);const o=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(o.length&&i&&e.issues.push({...i,keys:o}),E(e))return e;const s=Pt(t.value,n.value);if(!s.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(s.mergeErrorPath)}`);return e.value=s.data,e}const At=i("$ZodEnum",(e,t)=>{Le.init(e,t);const n=u(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=new RegExp(`^(${n.filter(e=>$.has(typeof e)).map(e=>"string"==typeof e?S(e):e.toString()).join("|")})$`),e._zod.parse=(t,i)=>{const o=t.value;return r.has(o)||t.issues.push({code:"invalid_value",values:n,input:o,inst:e}),t}}),Ft=i("$ZodLiteral",(e,t)=>{if(Le.init(e,t),0===t.values.length)throw new Error("Cannot create literal schema with no valid values");const n=new Set(t.values);e._zod.values=n,e._zod.pattern=new RegExp(`^(${t.values.map(e=>"string"==typeof e?S(e):e?S(e.toString()):String(e)).join("|")})$`),e._zod.parse=(r,i)=>{const o=r.value;return n.has(o)||r.issues.push({code:"invalid_value",values:t.values,input:o,inst:e}),r}}),Rt=i("$ZodTransform",(e,t)=>{Le.init(e,t),e._zod.optin="optional",e._zod.parse=(n,r)=>{if("backward"===r.direction)throw new s(e.constructor.name);const i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new o;return n.value=i,n.fallback=!0,n}});function Ct(e,t){return void 0===t&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}const Ut=i("$ZodOptional",(e,t)=>{Le.init(e,t),e._zod.optin="optional",e._zod.optout="optional",m(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),m(e._zod,"pattern",()=>{const e=t.innerType._zod.pattern;return e?new RegExp(`^(${f(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if("optional"===t.innerType._zod.optin){const r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>Ct(e,r)):Ct(i,r)}return void 0===e.value?e:t.innerType._zod.run(e,n)}}),Jt=i("$ZodExactOptional",(e,t)=>{Ut.init(e,t),m(e._zod,"values",()=>t.innerType._zod.values),m(e._zod,"pattern",()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),Mt=i("$ZodNullable",(e,t)=>{Le.init(e,t),m(e._zod,"optin",()=>t.innerType._zod.optin),m(e._zod,"optout",()=>t.innerType._zod.optout),m(e._zod,"pattern",()=>{const e=t.innerType._zod.pattern;return e?new RegExp(`^(${f(e.source)}|null)$`):void 0}),m(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>null===e.value?e:t.innerType._zod.run(e,n)}),Dt=i("$ZodDefault",(e,t)=>{Le.init(e,t),e._zod.optin="optional",m(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if("backward"===n.direction)return t.innerType._zod.run(e,n);if(void 0===e.value)return e.value=t.defaultValue,e;const r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Vt(e,t)):Vt(r,t)}});function Vt(e,t){return void 0===e.value&&(e.value=t.defaultValue),e}const Lt=i("$ZodPrefault",(e,t)=>{Le.init(e,t),e._zod.optin="optional",m(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>("backward"===n.direction||void 0===e.value&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Gt=i("$ZodNonOptional",(e,t)=>{Le.init(e,t),m(e._zod,"values",()=>{const e=t.innerType._zod.values;return e?new Set([...e].filter(e=>void 0!==e)):void 0}),e._zod.parse=(n,r)=>{const i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>Wt(t,e)):Wt(i,e)}});function Wt(e,t){return e.issues.length||void 0!==e.value||e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t}),e}const Kt=i("$ZodCatch",(e,t)=>{Le.init(e,t),e._zod.optin="optional",m(e._zod,"optout",()=>t.innerType._zod.optout),m(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if("backward"===n.direction)return t.innerType._zod.run(e,n);const r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>P(e,n,c()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>P(e,n,c()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),Ht=i("$ZodPipe",(e,t)=>{Le.init(e,t),m(e._zod,"values",()=>t.in._zod.values),m(e._zod,"optin",()=>t.in._zod.optin),m(e._zod,"optout",()=>t.out._zod.optout),m(e._zod,"propValues",()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if("backward"===n.direction){const r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Bt(e,t.in,n)):Bt(r,t.in,n)}const r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Bt(e,t.out,n)):Bt(r,t.out,n)}});function Bt(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}const qt=i("$ZodReadonly",(e,t)=>{Le.init(e,t),m(e._zod,"propValues",()=>t.innerType._zod.propValues),m(e._zod,"values",()=>t.innerType._zod.values),m(e._zod,"optin",()=>t.innerType?._zod?.optin),m(e._zod,"optout",()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if("backward"===n.direction)return t.innerType._zod.run(e,n);const r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Yt):Yt(r)}});function Yt(e){return e.value=Object.freeze(e.value),e}const Xt=i("$ZodCustom",(e,t)=>{Se.init(e,t),Le.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{const r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Qt(t,n,r,e));Qt(i,n,r,e)}});function Qt(e,t,n,r){if(!e){const e={code:"custom",input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(A(e))}}var en;(en=globalThis).__zod_globalRegistry??(en.__zod_globalRegistry=new class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){const n=t[0];return this._map.set(e,n),n&&"object"==typeof n&&"id"in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){const t=this._map.get(e);return t&&"object"==typeof t&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){const t=e._zod.parent;if(t){const n={...this.get(t)??{}};delete n.id;const r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}});const tn=globalThis.__zod_globalRegistry;function nn(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...O(t)})}function rn(e,t){return new Oe({check:"less_than",...O(t),value:e,inclusive:!1})}function on(e,t){return new Oe({check:"less_than",...O(t),value:e,inclusive:!0})}function sn(e,t){return new Ie({check:"greater_than",...O(t),value:e,inclusive:!1})}function an(e,t){return new Ie({check:"greater_than",...O(t),value:e,inclusive:!0})}function cn(e,t){return new Ee({check:"multiple_of",...O(t),value:e})}function un(e,t){return new Te({check:"max_length",...O(t),maximum:e})}function dn(e,t){return new Ne({check:"min_length",...O(t),minimum:e})}function pn(e,t){return new Pe({check:"length_equals",...O(t),length:e})}function ln(e){return new Me({check:"overwrite",tx:e})}function fn(e){let t=e?.target??"draft-2020-12";return"draft-4"===t&&(t="draft-04"),"draft-7"===t&&(t="draft-07"),{processors:e.processors??{},metadataRegistry:e?.metadata??tn,target:t,unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}),io:e?.io??"output",counter:0,seen:new Map,cycles:e?.cycles??"ref",reused:e?.reused??"inline",external:e?.external??void 0}}function hn(e,t,n={path:[],schemaPath:[]}){var r;const i=e._zod.def,o=t.seen.get(e);if(o)return o.count++,n.schemaPath.includes(e)&&(o.cycle=n.path),o.schema;const s={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,s);const a=e._zod.toJSONSchema?.();if(a)s.schema=a;else{const r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,s.schema,r);else{const n=s.schema,o=t.processors[i.type];if(!o)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);o(e,t,n,r)}const o=e._zod.parent;o&&(s.ref||(s.ref=o),hn(o,t,r),t.seen.get(o).isParent=!0)}const c=t.metadataRegistry.get(e);return c&&Object.assign(s.schema,c),"input"===t.io&&vn(e)&&(delete s.schema.examples,delete s.schema.default),"input"===t.io&&"_prefault"in s.schema&&((r=s.schema).default??(r.default=s.schema._prefault)),delete s.schema._prefault,t.seen.get(e).schema}function mn(e,t){const n=e.seen.get(t);if(!n)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=new Map;for(const t of e.seen.entries()){const n=e.metadataRegistry.get(t[0])?.id;if(n){const e=r.get(n);if(e&&e!==t[0])throw new Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}const i=t=>{if(t[1].schema.$ref)return;const r=t[1],{ref:i,defId:o}=(t=>{const r="draft-2020-12"===e.target?"$defs":"definitions";if(e.external){const n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};const o=t[1].defId??t[1].schema.id??"schema"+e.counter++;return t[1].defId=o,{defId:o,ref:`${i("__shared")}#/${r}/${o}`}}if(t[1]===n)return{ref:"#"};const i=`#/${r}/`,o=t[1].schema.id??"__schema"+e.counter++;return{defId:o,ref:i+o}})(t);r.def={...r.schema},o&&(r.defId=o);const s=r.schema;for(const e in s)delete s[e];s.$ref=i};if("throw"===e.cycles)for(const t of e.seen.entries()){const e=t[1];if(e.cycle)throw new Error(`Cycle detected: #/${e.cycle?.join("/")}/<root>\n\nSet the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const n of e.seen.entries()){const r=n[1];if(t===n[0]){i(n);continue}if(e.external){const r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){i(n);continue}}const o=e.metadataRegistry.get(n[0])?.id;(o||r.cycle||r.count>1&&"ref"===e.reused)&&i(n)}}function gn(e,t){const n=e.seen.get(t);if(!n)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=t=>{const n=e.seen.get(t);if(null===n.ref)return;const i=n.def??n.schema,o={...i},s=n.ref;if(n.ref=null,s){r(s);const n=e.seen.get(s),a=n.schema;if(!a.$ref||"draft-07"!==e.target&&"draft-04"!==e.target&&"openapi-3.0"!==e.target?Object.assign(i,a):(i.allOf=i.allOf??[],i.allOf.push(a)),Object.assign(i,o),t._zod.parent===s)for(const e in i)"$ref"!==e&&"allOf"!==e&&(e in o||delete i[e]);if(a.$ref&&n.def)for(const e in i)"$ref"!==e&&"allOf"!==e&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}const a=t._zod.parent;if(a&&a!==s){r(a);const t=e.seen.get(a);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(const e in i)"$ref"!==e&&"allOf"!==e&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(const t of[...e.seen.entries()].reverse())r(t[0]);const i={};if("draft-2020-12"===e.target?i.$schema="https://json-schema.org/draft/2020-12/schema":"draft-07"===e.target?i.$schema="http://json-schema.org/draft-07/schema#":"draft-04"===e.target?i.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){const n=e.external.registry.get(t)?.id;if(!n)throw new Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);const o=e.metadataRegistry.get(t)?.id;void 0!==o&&i.id===o&&delete i.id;const s=e.external?.defs??{};for(const t of e.seen.entries()){const e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,s[e.defId]=e.def)}e.external||Object.keys(s).length>0&&("draft-2020-12"===e.target?i.$defs=s:i.definitions=s);try{const n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t["~standard"],jsonSchema:{input:yn(t,"input",e.processors),output:yn(t,"output",e.processors)}},enumerable:!1,writable:!1}),n}catch(e){throw new Error("Error converting schema to JSON.")}}function vn(e,t){const n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);const r=e._zod.def;if("transform"===r.type)return!0;if("array"===r.type)return vn(r.element,n);if("set"===r.type)return vn(r.valueType,n);if("lazy"===r.type)return vn(r.getter(),n);if("promise"===r.type||"optional"===r.type||"nonoptional"===r.type||"nullable"===r.type||"readonly"===r.type||"default"===r.type||"prefault"===r.type)return vn(r.innerType,n);if("intersection"===r.type)return vn(r.left,n)||vn(r.right,n);if("record"===r.type||"map"===r.type)return vn(r.keyType,n)||vn(r.valueType,n);if("pipe"===r.type)return!!e._zod.traits.has("$ZodCodec")||vn(r.in,n)||vn(r.out,n);if("object"===r.type){for(const e in r.shape)if(vn(r.shape[e],n))return!0;return!1}if("union"===r.type){for(const e of r.options)if(vn(e,n))return!0;return!1}if("tuple"===r.type){for(const e of r.items)if(vn(e,n))return!0;return!(!r.rest||!vn(r.rest,n))}return!1}const yn=(e,t,n={})=>r=>{const{libraryOptions:i,target:o}=r??{},s=fn({...i??{},target:o,io:t,processors:n});return hn(e,s),mn(s,e),gn(s,e)},_n={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},bn=(e,t,n,r)=>{const i=e._zod.def;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType},zn=i("ZodISODateTime",(e,t)=>{it.init(e,t),Gn.init(e,t)});const wn=i("ZodISODate",(e,t)=>{ot.init(e,t),Gn.init(e,t)});const kn=i("ZodISOTime",(e,t)=>{st.init(e,t),Gn.init(e,t)});const $n=i("ZodISODuration",(e,t)=>{at.init(e,t),Gn.init(e,t)});const Sn=(e,t)=>{R.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{value:t=>function(e,t=e=>e.message){const n={_errors:[]},r=(e,i=[])=>{for(const o of e.issues)if("invalid_union"===o.code&&o.errors.length)o.errors.map(e=>r({issues:e},[...i,...o.path]));else if("invalid_key"===o.code)r({issues:o.issues},[...i,...o.path]);else if("invalid_element"===o.code)r({issues:o.issues},[...i,...o.path]);else{const e=[...i,...o.path];if(0===e.length)n._errors.push(t(o));else{let r=n,i=0;for(;i<e.length;){const n=e[i];i===e.length-1?(r[n]=r[n]||{_errors:[]},r[n]._errors.push(t(o))):r[n]=r[n]||{_errors:[]},r=r[n],i++}}}};return r(e),n}(e,t)},flatten:{value:t=>function(e,t=e=>e.message){const n={},r=[];for(const i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,d,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,d,2)}},isEmpty:{get:()=>0===e.issues.length}})},xn=i("ZodError",Sn,{Parent:Error}),On=U(xn),In=J(xn),En=M(xn),Zn=V(xn),Tn=G(xn),Nn=W(xn),Pn=K(xn),jn=H(xn),An=B(xn),Fn=q(xn),Rn=Y(xn),Cn=X(xn),Un=new WeakMap;function Jn(e,t,n){const r=Object.getPrototypeOf(e);let i=Un.get(r);if(i||(i=new Set,Un.set(r,i)),!i.has(t)){i.add(t);for(const e in n){const t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){const n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}const Mn=i("ZodType",(e,t)=>(Le.init(e,t),Object.assign(e["~standard"],{jsonSchema:{input:yn(e,"input"),output:yn(e,"output")}}),e.toJSONSchema=((e,t={})=>n=>{const r=fn({...n,processors:t});return hn(e,r),mn(r,e),gn(r,e)})(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>On(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>En(e,t,n),e.parseAsync=async(t,n)=>In(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>Zn(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>Tn(e,t,n),e.decode=(t,n)=>Nn(e,t,n),e.encodeAsync=async(t,n)=>Pn(e,t,n),e.decodeAsync=async(t,n)=>jn(e,t,n),e.safeEncode=(t,n)=>An(e,t,n),e.safeDecode=(t,n)=>Fn(e,t,n),e.safeEncodeAsync=async(t,n)=>Rn(e,t,n),e.safeDecodeAsync=async(t,n)=>Cn(e,t,n),Jn(e,"ZodType",{check(...e){const t=this.def;return this.clone(v(t,{checks:[...t.checks??[],...e.map(e=>"function"==typeof e?{_zod:{check:e,def:{check:"custom"},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return x(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(function(e,t={}){return function(e,t,n){return new Gr({type:"custom",check:"custom",fn:t,...O(n)})}(0,e,t)}(e,t))},superRefine(e,t){return this.check(function(e,t){return function(e,t){const n=function(e,t){const n=new Se({check:"custom",...O(t)});return n._zod.check=e,n}(t=>(t.addIssue=e=>{if("string"==typeof e)t.issues.push(A(e,t.value,n._zod.def));else{const r=e;r.fatal&&(r.continue=!1),r.code??(r.code="custom"),r.input??(r.input=t.value),r.inst??(r.inst=n),r.continue??(r.continue=!n._zod.def.abort),t.issues.push(A(r))}},e(t.value,t)),t);return n}(e,t)}(e,t))},overwrite(e){return this.check(ln(e))},optional(){return jr(this)},exactOptional(){return new Ar({type:"optional",innerType:this})},nullable(){return Rr(this)},nullish(){return jr(Rr(this))},nonoptional(e){return function(e,t){return new Jr({type:"nonoptional",innerType:e,...O(t)})}(this,e)},array(){return zr(this)},or(e){return new $r({type:"union",options:[this,e],...O(void 0)})},and(e){return new Or({type:"intersection",left:this,right:e})},transform(e){return Vr(this,new Nr({type:"transform",transform:e}))},default(e){return t=e,new Cr({type:"default",innerType:this,get defaultValue(){return"function"==typeof t?t():k(t)}});var t},prefault(e){return t=e,new Ur({type:"prefault",innerType:this,get defaultValue(){return"function"==typeof t?t():k(t)}});var t},catch(e){return new Mr({type:"catch",innerType:this,catchValue:"function"==typeof(t=e)?t:()=>t});var t},pipe(e){return Vr(this,e)},readonly(){return new Lr({type:"readonly",innerType:this})},describe(e){const t=this.clone();return tn.add(t,{description:e}),t},meta(...e){if(0===e.length)return tn.get(this);const t=this.clone();return tn.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get:()=>tn.get(e)?.description,configurable:!0}),e)),Dn=i("_ZodString",(e,t)=>{Ge.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n)=>{const r=n;r.type="string";const{minimum:i,maximum:o,format:s,patterns:a,contentEncoding:c}=e._zod.bag;if("number"==typeof i&&(r.minLength=i),"number"==typeof o&&(r.maxLength=o),s&&(r.format=_n[s]??s,""===r.format&&delete r.format,"time"===s&&delete r.format),c&&(r.contentEncoding=c),a&&a.size>0){const e=[...a];1===e.length?r.pattern=e[0].source:e.length>1&&(r.allOf=[...e.map(e=>({..."draft-07"===t.target||"draft-04"===t.target||"openapi-3.0"===t.target?{type:"string"}:{},pattern:e.source}))])}})(e,t,n);const n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Jn(e,"_ZodString",{regex(...e){return this.check(function(e,t){return new Ae({check:"string_format",format:"regex",...O(t),pattern:e})}(...e))},includes(...e){return this.check(function(e,t){return new Ce({check:"string_format",format:"includes",...O(t),includes:e})}(...e))},startsWith(...e){return this.check(function(e,t){return new Ue({check:"string_format",format:"starts_with",...O(t),prefix:e})}(...e))},endsWith(...e){return this.check(function(e,t){return new Je({check:"string_format",format:"ends_with",...O(t),suffix:e})}(...e))},min(...e){return this.check(dn(...e))},max(...e){return this.check(un(...e))},length(...e){return this.check(pn(...e))},nonempty(...e){return this.check(dn(1,...e))},lowercase(e){return this.check(function(e){return new Fe({check:"string_format",format:"lowercase",...O(e)})}(e))},uppercase(e){return this.check(function(e){return new Re({check:"string_format",format:"uppercase",...O(e)})}(e))},trim(){return this.check(ln(e=>e.trim()))},normalize(...e){return this.check(function(e){return ln(t=>t.normalize(e))}(...e))},toLowerCase(){return this.check(ln(e=>e.toLowerCase()))},toUpperCase(){return this.check(ln(e=>e.toUpperCase()))},slugify(){return this.check(ln(e=>function(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}(e)))}})}),Vn=i("ZodString",(e,t)=>{Ge.init(e,t),Dn.init(e,t),e.email=t=>e.check(function(e,t){return new Wn({type:"string",format:"email",check:"string_format",abort:!1,...O(t)})}(0,t)),e.url=t=>e.check(function(e,t){return new Bn({type:"string",format:"url",check:"string_format",abort:!1,...O(t)})}(0,t)),e.jwt=t=>e.check(function(e,t){return new dr({type:"string",format:"jwt",check:"string_format",abort:!1,...O(t)})}(0,t)),e.emoji=t=>e.check(function(e,t){return new qn({type:"string",format:"emoji",check:"string_format",abort:!1,...O(t)})}(0,t)),e.guid=t=>e.check(nn(Kn,t)),e.uuid=t=>e.check(function(e,t){return new Hn({type:"string",format:"uuid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.uuidv4=t=>e.check(function(e,t){return new Hn({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...O(t)})}(0,t)),e.uuidv6=t=>e.check(function(e,t){return new Hn({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...O(t)})}(0,t)),e.uuidv7=t=>e.check(function(e,t){return new Hn({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...O(t)})}(0,t)),e.nanoid=t=>e.check(function(e,t){return new Yn({type:"string",format:"nanoid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.guid=t=>e.check(nn(Kn,t)),e.cuid=t=>e.check(function(e,t){return new Xn({type:"string",format:"cuid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.cuid2=t=>e.check(function(e,t){return new Qn({type:"string",format:"cuid2",check:"string_format",abort:!1,...O(t)})}(0,t)),e.ulid=t=>e.check(function(e,t){return new er({type:"string",format:"ulid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.base64=t=>e.check(function(e,t){return new ar({type:"string",format:"base64",check:"string_format",abort:!1,...O(t)})}(0,t)),e.base64url=t=>e.check(function(e,t){return new cr({type:"string",format:"base64url",check:"string_format",abort:!1,...O(t)})}(0,t)),e.xid=t=>e.check(function(e,t){return new tr({type:"string",format:"xid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.ksuid=t=>e.check(function(e,t){return new nr({type:"string",format:"ksuid",check:"string_format",abort:!1,...O(t)})}(0,t)),e.ipv4=t=>e.check(function(e,t){return new rr({type:"string",format:"ipv4",check:"string_format",abort:!1,...O(t)})}(0,t)),e.ipv6=t=>e.check(function(e,t){return new ir({type:"string",format:"ipv6",check:"string_format",abort:!1,...O(t)})}(0,t)),e.cidrv4=t=>e.check(function(e,t){return new or({type:"string",format:"cidrv4",check:"string_format",abort:!1,...O(t)})}(0,t)),e.cidrv6=t=>e.check(function(e,t){return new sr({type:"string",format:"cidrv6",check:"string_format",abort:!1,...O(t)})}(0,t)),e.e164=t=>e.check(function(e,t){return new ur({type:"string",format:"e164",check:"string_format",abort:!1,...O(t)})}(0,t)),e.datetime=t=>e.check(function(e){return function(e,t){return new zn({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...O(t)})}(0,e)}(t)),e.date=t=>e.check(function(e){return function(e,t){return new wn({type:"string",format:"date",check:"string_format",...O(t)})}(0,e)}(t)),e.time=t=>e.check(function(e){return function(e,t){return new kn({type:"string",format:"time",check:"string_format",precision:null,...O(t)})}(0,e)}(t)),e.duration=t=>e.check(function(e){return function(e,t){return new $n({type:"string",format:"duration",check:"string_format",...O(t)})}(0,e)}(t))});function Ln(e){return function(e,t){return new Vn({type:"string",...O(t)})}(0,e)}const Gn=i("ZodStringFormat",(e,t)=>{We.init(e,t),Dn.init(e,t)}),Wn=i("ZodEmail",(e,t)=>{Be.init(e,t),Gn.init(e,t)}),Kn=i("ZodGUID",(e,t)=>{Ke.init(e,t),Gn.init(e,t)}),Hn=i("ZodUUID",(e,t)=>{He.init(e,t),Gn.init(e,t)}),Bn=i("ZodURL",(e,t)=>{qe.init(e,t),Gn.init(e,t)}),qn=i("ZodEmoji",(e,t)=>{Ye.init(e,t),Gn.init(e,t)}),Yn=i("ZodNanoID",(e,t)=>{Xe.init(e,t),Gn.init(e,t)}),Xn=i("ZodCUID",(e,t)=>{Qe.init(e,t),Gn.init(e,t)}),Qn=i("ZodCUID2",(e,t)=>{et.init(e,t),Gn.init(e,t)}),er=i("ZodULID",(e,t)=>{tt.init(e,t),Gn.init(e,t)}),tr=i("ZodXID",(e,t)=>{nt.init(e,t),Gn.init(e,t)}),nr=i("ZodKSUID",(e,t)=>{rt.init(e,t),Gn.init(e,t)}),rr=i("ZodIPv4",(e,t)=>{ct.init(e,t),Gn.init(e,t)}),ir=i("ZodIPv6",(e,t)=>{ut.init(e,t),Gn.init(e,t)}),or=i("ZodCIDRv4",(e,t)=>{dt.init(e,t),Gn.init(e,t)}),sr=i("ZodCIDRv6",(e,t)=>{pt.init(e,t),Gn.init(e,t)}),ar=i("ZodBase64",(e,t)=>{ft.init(e,t),Gn.init(e,t)}),cr=i("ZodBase64URL",(e,t)=>{ht.init(e,t),Gn.init(e,t)}),ur=i("ZodE164",(e,t)=>{mt.init(e,t),Gn.init(e,t)}),dr=i("ZodJWT",(e,t)=>{gt.init(e,t),Gn.init(e,t)}),pr=i("ZodNumber",(e,t)=>{vt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n)=>{const r=n,{minimum:i,maximum:o,format:s,multipleOf:a,exclusiveMaximum:c,exclusiveMinimum:u}=e._zod.bag;"string"==typeof s&&s.includes("int")?r.type="integer":r.type="number";const d="number"==typeof u&&u>=(i??Number.NEGATIVE_INFINITY),p="number"==typeof c&&c<=(o??Number.POSITIVE_INFINITY),l="draft-04"===t.target||"openapi-3.0"===t.target;d?l?(r.minimum=u,r.exclusiveMinimum=!0):r.exclusiveMinimum=u:"number"==typeof i&&(r.minimum=i),p?l?(r.maximum=c,r.exclusiveMaximum=!0):r.exclusiveMaximum=c:"number"==typeof o&&(r.maximum=o),"number"==typeof a&&(r.multipleOf=a)})(e,t,n),Jn(e,"ZodNumber",{gt(e,t){return this.check(sn(e,t))},gte(e,t){return this.check(an(e,t))},min(e,t){return this.check(an(e,t))},lt(e,t){return this.check(rn(e,t))},lte(e,t){return this.check(on(e,t))},max(e,t){return this.check(on(e,t))},int(e){return this.check(hr(e))},safe(e){return this.check(hr(e))},positive(e){return this.check(sn(0,e))},nonnegative(e){return this.check(an(0,e))},negative(e){return this.check(rn(0,e))},nonpositive(e){return this.check(on(0,e))},multipleOf(e,t){return this.check(cn(e,t))},step(e,t){return this.check(cn(e,t))},finite(){return this}});const n=e._zod.bag;e.minValue=Math.max(n.minimum??Number.NEGATIVE_INFINITY,n.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(n.maximum??Number.POSITIVE_INFINITY,n.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(n.format??"").includes("int")||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function lr(e){return function(e,t){return new pr({type:"number",checks:[],...O(t)})}(0,e)}const fr=i("ZodNumberFormat",(e,t)=>{yt.init(e,t),pr.init(e,t)});function hr(e){return function(e,t){return new fr({type:"number",check:"number_format",abort:!1,format:"safeint",...O(t)})}(0,e)}const mr=i("ZodBoolean",(e,t)=>{_t.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(e,t,n)=>((e,t,n)=>{n.type="boolean"})(0,0,t)});function gr(e){return function(e,t){return new mr({type:"boolean",...O(t)})}(0,e)}const vr=i("ZodUnknown",(e,t)=>{bt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(e,t,n)=>{}});function yr(){return new vr({type:"unknown"})}const _r=i("ZodNever",(e,t)=>{zt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(e,t,n)=>((e,t,n)=>{n.not={}})(0,0,t)});const br=i("ZodArray",(e,t)=>{kt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=n,o=e._zod.def,{minimum:s,maximum:a}=e._zod.bag;"number"==typeof s&&(i.minItems=s),"number"==typeof a&&(i.maxItems=a),i.type="array",i.items=hn(o.element,t,{...r,path:[...r.path,"items"]})})(e,t,n,r),e.element=t.element,Jn(e,"ZodArray",{min(e,t){return this.check(dn(e,t))},nonempty(e){return this.check(dn(1,e))},max(e,t){return this.check(un(e,t))},length(e,t){return this.check(pn(e,t))},unwrap(){return this.element}})});function zr(e,t){return function(e,t,n){return new br({type:"array",element:t,...O(n)})}(0,e,t)}const wr=i("ZodObject",(e,t)=>{It.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=n,o=e._zod.def;i.type="object",i.properties={};const s=o.shape;for(const e in s)i.properties[e]=hn(s[e],t,{...r,path:[...r.path,"properties",e]});const a=new Set(Object.keys(s)),c=new Set([...a].filter(e=>{const n=o.shape[e]._zod;return"input"===t.io?void 0===n.optin:void 0===n.optout}));c.size>0&&(i.required=Array.from(c)),"never"===o.catchall?._zod.def.type?i.additionalProperties=!1:o.catchall?o.catchall&&(i.additionalProperties=hn(o.catchall,t,{...r,path:[...r.path,"additionalProperties"]})):"output"===t.io&&(i.additionalProperties=!1)})(e,t,n,r),m(e,"shape",()=>t.shape),Jn(e,"ZodObject",{keyof(){return Er(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:yr()})},loose(){return this.clone({...this._zod.def,catchall:yr()})},strict(){return this.clone({...this._zod.def,catchall:function(e,t){return new _r({type:"never",...O(t)})}(0,e)});var e},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return function(e,t){if(!w(t))throw new Error("Invalid input to extend: expected a plain object");const n=e._zod.def.checks;if(n&&n.length>0){const n=e._zod.def.shape;for(const e in t)if(void 0!==Object.getOwnPropertyDescriptor(n,e))throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}const r=v(e._zod.def,{get shape(){const n={...e._zod.def.shape,...t};return g(this,"shape",n),n}});return x(e,r)}(this,e)},safeExtend(e){return function(e,t){if(!w(t))throw new Error("Invalid input to safeExtend: expected a plain object");const n=v(e._zod.def,{get shape(){const n={...e._zod.def.shape,...t};return g(this,"shape",n),n}});return x(e,n)}(this,e)},merge(e){return function(e,t){if(e._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");const n=v(e._zod.def,{get shape(){const n={...e._zod.def.shape,...t._zod.def.shape};return g(this,"shape",n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]});return x(e,n)}(this,e)},pick(e){return function(e,t){const n=e._zod.def,r=n.checks;if(r&&r.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");return x(e,v(e._zod.def,{get shape(){const e={};for(const r in t){if(!(r in n.shape))throw new Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return g(this,"shape",e),e},checks:[]}))}(this,e)},omit(e){return function(e,t){const n=e._zod.def,r=n.checks;if(r&&r.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");const i=v(e._zod.def,{get shape(){const r={...e._zod.def.shape};for(const e in t){if(!(e in n.shape))throw new Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return g(this,"shape",r),r},checks:[]});return x(e,i)}(this,e)},partial(...e){return function(e,t,n){const r=t._zod.def.checks;if(r&&r.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");const i=v(t._zod.def,{get shape(){const r=t._zod.def.shape,i={...r};if(n)for(const t in n){if(!(t in r))throw new Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:"optional",innerType:r[t]}):r[t])}else for(const t in r)i[t]=e?new e({type:"optional",innerType:r[t]}):r[t];return g(this,"shape",i),i},checks:[]});return x(t,i)}(Pr,this,e[0])},required(...e){return function(e,t,n){const r=v(t._zod.def,{get shape(){const r=t._zod.def.shape,i={...r};if(n)for(const t in n){if(!(t in i))throw new Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:"nonoptional",innerType:r[t]}))}else for(const t in r)i[t]=new e({type:"nonoptional",innerType:r[t]});return g(this,"shape",i),i}});return x(t,r)}(Jr,this,e[0])}})});function kr(e,t){const n={type:"object",shape:e??{},...O(t)};return new wr(n)}const $r=i("ZodUnion",(e,t)=>{Zt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def,o=!1===i.inclusive,s=i.options.map((e,n)=>hn(e,t,{...r,path:[...r.path,o?"oneOf":"anyOf",n]}));o?n.oneOf=s:n.anyOf=s})(e,t,n,r),e.options=t.options}),Sr=i("ZodDiscriminatedUnion",(e,t)=>{$r.init(e,t),Tt.init(e,t)});function xr(e,t,n){return new Sr({type:"union",options:t,discriminator:e,...O(n)})}const Or=i("ZodIntersection",(e,t)=>{Nt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def,o=hn(i.left,t,{...r,path:[...r.path,"allOf",0]}),s=hn(i.right,t,{...r,path:[...r.path,"allOf",1]}),a=e=>"allOf"in e&&1===Object.keys(e).length,c=[...a(o)?o.allOf:[o],...a(s)?s.allOf:[s]];n.allOf=c})(e,t,n,r)}),Ir=i("ZodEnum",(e,t)=>{At.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n)=>{const r=u(e._zod.def.entries);r.every(e=>"number"==typeof e)&&(n.type="number"),r.every(e=>"string"==typeof e)&&(n.type="string"),n.enum=r})(e,0,n),e.enum=t.entries,e.options=Object.values(t.entries);const n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{const i={};for(const r of e){if(!n.has(r))throw new Error(`Key ${r} not found in enum`);i[r]=t.entries[r]}return new Ir({...t,checks:[],...O(r),entries:i})},e.exclude=(e,r)=>{const i={...t.entries};for(const t of e){if(!n.has(t))throw new Error(`Key ${t} not found in enum`);delete i[t]}return new Ir({...t,checks:[],...O(r),entries:i})}});function Er(e,t){const n=Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e;return new Ir({type:"enum",entries:n,...O(t)})}const Zr=i("ZodLiteral",(e,t)=>{Ft.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n)=>{const r=e._zod.def,i=[];for(const e of r.values)if(void 0===e){if("throw"===t.unrepresentable)throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if("bigint"==typeof e){if("throw"===t.unrepresentable)throw new Error("BigInt literals cannot be represented in JSON Schema");i.push(Number(e))}else i.push(e);if(0===i.length);else if(1===i.length){const e=i[0];n.type=null===e?"null":typeof e,"draft-04"===t.target||"openapi-3.0"===t.target?n.enum=[e]:n.const=e}else i.every(e=>"number"==typeof e)&&(n.type="number"),i.every(e=>"string"==typeof e)&&(n.type="string"),i.every(e=>"boolean"==typeof e)&&(n.type="boolean"),i.every(e=>null===e)&&(n.type="null"),n.enum=i})(e,t,n),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function Tr(e,t){return new Zr({type:"literal",values:Array.isArray(e)?e:[e],...O(t)})}const Nr=i("ZodTransform",(e,t)=>{Rt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(e,t,n)=>((e,t)=>{if("throw"===t.unrepresentable)throw new Error("Transforms cannot be represented in JSON Schema")})(0,e),e._zod.parse=(n,r)=>{if("backward"===r.direction)throw new s(e.constructor.name);n.addIssue=r=>{if("string"==typeof r)n.issues.push(A(r,n.value,t));else{const t=r;t.fatal&&(t.continue=!1),t.code??(t.code="custom"),t.input??(t.input=n.value),t.inst??(t.inst=e),n.issues.push(A(t))}};const i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}}),Pr=i("ZodOptional",(e,t)=>{Ut.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bn(e,t,0,r),e.unwrap=()=>e._zod.def.innerType});function jr(e){return new Pr({type:"optional",innerType:e})}const Ar=i("ZodExactOptional",(e,t)=>{Jt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bn(e,t,0,r),e.unwrap=()=>e._zod.def.innerType}),Fr=i("ZodNullable",(e,t)=>{Mt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def,o=hn(i.innerType,t,r),s=t.seen.get(e);"openapi-3.0"===t.target?(s.ref=i.innerType,n.nullable=!0):n.anyOf=[o,{type:"null"}]})(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Rr(e){return new Fr({type:"nullable",innerType:e})}const Cr=i("ZodDefault",(e,t)=>{Dt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))})(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap}),Ur=i("ZodPrefault",(e,t)=>{Lt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType,"input"===t.io&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))})(e,t,n,r),e.unwrap=()=>e._zod.def.innerType}),Jr=i("ZodNonOptional",(e,t)=>{Gt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType})(e,t,0,r),e.unwrap=()=>e._zod.def.innerType}),Mr=i("ZodCatch",(e,t)=>{Kt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def;let o;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType;try{o=i.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}n.default=o})(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap}),Dr=i("ZodPipe",(e,t)=>{Ht.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def,o=i.in._zod.traits.has("$ZodTransform"),s="input"===t.io?o?i.out:i.in:i.out;hn(s,t,r),t.seen.get(e).ref=s})(e,t,0,r),e.in=t.in,e.out=t.out});function Vr(e,t){return new Dr({type:"pipe",in:e,out:t})}const Lr=i("ZodReadonly",(e,t)=>{qt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(t,n,r)=>((e,t,n,r)=>{const i=e._zod.def;hn(i.innerType,t,r),t.seen.get(e).ref=i.innerType,n.readOnly=!0})(e,t,n,r),e.unwrap=()=>e._zod.def.innerType}),Gr=i("ZodCustom",(e,t)=>{Xt.init(e,t),Mn.init(e,t),e._zod.processJSONSchema=(e,t,n)=>((e,t)=>{if("throw"===t.unrepresentable)throw new Error("Custom types cannot be represented in JSON Schema")})(0,e)}),Wr=Ln().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Kr=Ln().datetime(),Hr=lr().int().nonnegative(),Br=Er(["https-token","ssh-key"]),qr=Er(["operation-only","instance-retained"]),Yr=Er(["enabled","disabled"]),Xr=Er(["pending","synced","deferred","revoking","revoked"]),Qr=kr({scheme:Er(["https","ssh"]),host:Ln().trim().min(1).max(253),port:lr().int().min(1).max(65535).optional(),pathPrefix:Ln().min(1).max(2048).default("/")}).strict();function ei(e){throw new Error(`Invalid Git credential scope: ${e}`)}function ti(e){const t=e.trim().replace(/^\[|\]$/g,"");(!t||t.includes("*")||/[/?#@\s]/.test(t))&&ei("host is invalid");try{const e=new URL(t.includes(":")?`http://[${t}]/`:`http://${t}/`).hostname.replace(/^\[|\]$/g,"").toLowerCase();return(!e||e.length>253||e.includes("*"))&&ei("host is invalid"),e}catch{ei("host is invalid")}}function ni(e){try{return decodeURIComponent(e)}catch{ei("path contains invalid percent encoding")}}function ri(e){const t=e?.trim()||"/";(t.includes("?")||t.includes("#")||t.includes("\\")||t.includes("\0"))&&ei("path contains an unsupported delimiter");const n=(t.startsWith("/")?t:`/${t}`).split("/").filter(Boolean);for(const e of n){const t=ni(e);("."===t||".."===t||t.includes("/")||t.includes("\\")||t.includes("\0"))&&ei("path contains an unsafe segment")}return 0===n.length?"/":`/${n.join("/")}/`}function ii(e){const t=Qr.parse(e),n="https"===t.scheme?443:22;return Qr.parse({scheme:t.scheme,host:ti(t.host),...void 0===t.port||t.port===n?{}:{port:t.port},pathPrefix:ri(t.pathPrefix)})}function oi(e){return ri(e.replace(/\.git\/?$/,""))}const si=kr({id:Wr,name:Ln().trim().min(1).max(160),kind:Br,scope:Qr,secretSet:Tr(!0),status:Yr,revision:Hr,createdAt:Kr,updatedAt:Kr}).strict(),ai=xr("kind",[kr({kind:Tr("https-token"),username:Ln().trim().min(1).max(240),token:Ln().min(1).max(8192)}).strict(),kr({kind:Tr("ssh-key"),privateKey:Ln().min(1).max(131072),passphrase:Ln().max(8192).optional(),pinnedKnownHosts:Ln().min(1).max(131072)}).strict()]);kr({name:Ln().trim().min(1).max(160),scope:Qr,secret:ai}).strict().superRefine((e,t)=>{"https"===e.scope.scheme!=("https-token"===e.secret.kind)&&t.addIssue({code:"custom",path:["scope","scheme"],message:"Credential kind must match the remote scheme."});try{ii(e.scope)}catch(e){t.addIssue({code:"custom",path:["scope"],message:e instanceof Error?e.message:"Invalid Git scope."})}}),kr({name:Ln().trim().min(1).max(160).optional(),scope:Qr.optional(),secret:ai.optional(),status:Yr.optional()}).strict().refine(e=>Object.keys(e).length>0,"At least one credential field must be updated."),kr({items:zr(si).max(1e4)}).strict(),kr({instanceId:Wr,credentialId:Wr,credentialRevision:Hr,assignmentRevision:Hr,status:Xr,authorizedAt:Kr,updatedAt:Kr}).strict();const ci=kr({credential:si,secret:ai}).strict().superRefine((e,t)=>{e.credential.kind!==e.secret.kind&&t.addIssue({code:"custom",path:["secret","kind"],message:"Credential payload kind mismatch."})});kr({instanceId:Wr,generation:Hr,credentialIds:zr(Wr).max(256).transform(e=>[...new Set(e)].sort()),updatedAt:Kr}).strict(),kr({remoteUrl:Ln().trim().min(1).max(4096)}).strict(),xr("status",[kr({status:Tr("ok"),username:Ln().min(1).max(240),password:Ln().min(1).max(8192)}).strict(),kr({status:Er(["none","ambiguous","unsupported","missing-host-key","rejected"])}).strict()]),kr({remoteUrl:Ln().trim().min(1).max(4096)}).strict(),xr("status",[kr({status:Tr("ok"),invocationId:Wr,publicIdentity:Ln().min(1).max(131072),pinnedKnownHosts:Ln().min(1).max(131072)}).strict(),kr({status:Er(["none","ambiguous","unsupported","missing-host-key","rejected"])}).strict()]),kr({invocationId:Wr,frame:Ln().min(1).max(1048576)}).strict(),kr({frame:Ln().min(1).max(1048576)}).strict();const ui=kr({operationId:Wr,retention:qr,payload:ci}).strict();function di(e){return`'${e.replace(/'/g,"'\\''")}'`}function pi(e){const t=e.replace(/-/g,"_").toUpperCase();return Object.assign(new Error(`TASK_HANDOFF_GIT_PROVISIONING_ERROR=${t}`),{code:t})}function li(e,r=process.env.TASK_HANDOFF_GIT_RUNTIME_DIR||"/run/task-handoff/git-runtime"){const i=function(e){return t.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()&&e.name.startsWith("credential-")).sort((e,t)=>e.name.localeCompare(t.name)).flatMap(r=>{const i=n.join(e,r.name),o=n.join(i,"scope.json");if(!t.existsSync(o))return[];const s=t.existsSync(n.join(i,"token")),a=t.existsSync(n.join(i,"public-identity"));return s||a?[{candidate:{id:r.name,kind:s?"https-token":"ssh-key",scope:JSON.parse(t.readFileSync(o,"utf8")),status:"enabled",...a?{pinnedKnownHosts:t.existsSync(n.join(i,"known_hosts"))}:{}},directory:i}]:[]})}(r),o=function(e,t){let n;try{n=function(e){const t=e.trim();if(t&&!t.includes("\0")||ei("remote is empty or invalid"),/^https?:\/\//i.test(t)||/^ssh:\/\//i.test(t)){let e;ri(t.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]+/i,"").split(/[?#]/,1)[0]||"/");try{e=new URL(t)}catch{ei("remote URL is invalid")}"https:"!==e.protocol&&"ssh:"!==e.protocol&&ei("remote scheme is unsupported"),(e.password||"https:"===e.protocol&&e.username)&&ei("HTTPS userinfo is forbidden"),(e.search||e.hash)&&ei("query and fragment are forbidden");const n="https:"===e.protocol?"https":"ssh",r=e.port?Number(e.port):void 0;return{...ii({scheme:n,host:e.hostname,port:r,pathPrefix:oi(e.pathname)}),original:t}}/^[a-z][a-z0-9+.-]*:\/\//i.test(t)&&ei("remote scheme is unsupported");const n=/^(?:([^@/:\s]+)@)?([^/:\s]+):(.+)$/.exec(t);n||ei("remote must use HTTPS, ssh://, or scp-like SSH syntax");const[,,r,i]=n;return(i.includes("?")||i.includes("#"))&&ei("query and fragment are forbidden"),{...ii({scheme:"ssh",host:r,pathPrefix:oi(i)}),original:t}}(e)}catch(e){return{status:"unsupported",reason:e instanceof Error?e.message:"Unsupported Git remote."}}const r=t.filter(e=>"enabled"===e.status).filter(e=>"https"===n.scheme==("https-token"===e.kind)).filter(e=>function(e,t){const n=ii(e);return n.scheme===t.scheme&&n.host===t.host&&n.port===t.port&&("/"===n.pathPrefix||t.pathPrefix.startsWith(n.pathPrefix))}(e.scope,n)).map(e=>({candidate:e,specificity:ii(e.scope).pathPrefix.length}));if(0===r.length)return{status:"none",remote:n};const i=Math.max(...r.map(e=>e.specificity)),o=r.filter(e=>e.specificity===i).map(e=>e.candidate);if(o.length>1)return{status:"ambiguous",remote:n,credentialIds:o.map(e=>e.id).sort()};const s=o[0];return"ssh-key"===s.kind&&!0!==s.pinnedKnownHosts?{status:"missing-host-key",remote:n,credentialId:s.id}:{status:"unique",remote:n,credential:s}}(e,i.map(e=>e.candidate));if("unique"!==o.status)throw pi("none"===o.status?"credential-missing":o.status);const s=i.find(e=>e.candidate.id===o.credential.id);if(!s)throw pi("credential-missing");return s.directory}async function fi(e){const i=function(e){if(!Array.isArray(e)||e.some(e=>"string"!=typeof e||e.includes("\0")))return;const t=e;let n,r="";const i=[];for(let e=0;e<t.length;e+=1){const o=t[e];if("-p"===o&&/^\d+$/.test(t[e+1]||"")&&void 0===n){const r=Number(t[++e]);if(r<1||r>65535)return;n=String(r);continue}if("-4"!==o&&"-6"!==o)if("-o"!==o||"SendEnv=GIT_PROTOCOL"!==t[e+1]){if("-oSendEnv=GIT_PROTOCOL"!==o){if(o.startsWith("-"))return;if(r=o,e+=1,e!==t.length-1)return;break}i.push(o)}else i.push("-o",t[++e]);else i.push(o)}if(!r||!/^(?:[a-zA-Z0-9._-]+@)?[^@\s]+$/.test(r))return;const o=r.replace(/^[^@]+@/,""),s=function(e){const t=/^(git-upload-pack|git-receive-pack|git-upload-archive) ([\s\S]+)$/.exec(e);if(!t)return;const n=t[2];let r;if(n.startsWith("'")){if(!n.endsWith("'"))return;if(r=n.slice(1,-1).replace(/'\\''/g,"'"),di(r)!==n)return}else{if(!/^[a-zA-Z0-9._~@%+,:\/-]+$/.test(n))return;r=n}return!r||/[\0-\x1f\x7f]/.test(r)?void 0:{service:t[1],repository:r}}(t.at(-1)||"");if(!o||!s)return;const a=`${s.service} ${di(s.repository)}`;return{remote:`ssh://${o}${n?`:${n}`:""}/${encodeURIComponent(s.repository.replace(/^\/+/,"")).replace(/%2F/gi,"/")}`,args:[...i,...n?["-p",n]:[],r,a]}}(e);if(!i)throw pi("remote-unsupported");const o=li(i.remote),s=n.join(o,"agent.sock"),a=n.join(o,"public-identity"),c=n.join(o,"known_hosts");if(!t.existsSync(s))throw pi("ssh-agent-unavailable");if(!t.existsSync(c)||0===t.statSync(c).size)throw pi("host-key-required");return function(e,t,n={}){return new Promise((t,i)=>{const o={...process.env};delete o.SSH_AUTH_SOCK,Object.assign(o,n);const s=r.spawn("ssh",e,{stdio:"inherit",shell:!1,env:o});s.once("error",i),s.once("close",(e,n)=>0===e?t():i(Object.assign(new Error("Git SSH transport failed."),{exitCode:e,signal:n})))})}(["-F","/dev/null","-oBatchMode=yes","-oPasswordAuthentication=no","-oKbdInteractiveAuthentication=no","-oIdentitiesOnly=yes","-oIdentityFile=none","-oStrictHostKeyChecking=yes",`-oUserKnownHostsFile=${c}`,"-oGlobalKnownHostsFile=/dev/null",`-oIdentityAgent=${s}`,"-i",a,...i.args],0,{SSH_AUTH_SOCK:s})}kr({operationId:Wr,instanceId:Wr,remoteUrl:Ln().trim().min(1).max(4096),ref:xr("type",[kr({type:Er(["branch","tag"]),name:Ln().trim().min(1).max(240)}).strict(),kr({type:Tr("commit"),commit:Ln().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict()]),clone:kr({depth:lr().int().positive().max(1e5).optional(),submodules:gr().default(!1),lfs:gr().default(!1),subdirectory:Ln().trim().max(240).refine(e=>!e.startsWith("/")&&!e.split("/").some(e=>".."===e),"subdirectory must be a relative path within the repository").transform(e=>e.split("/").filter(e=>e&&"."!==e).join("/")).default("")}).strict(),credentials:zr(ui).max(256).default([])}).strict(),async function(){const[e,...r]=process.argv.slice(2);if("credential"===e)return async function(e){if("get"!==e)return;const r=function(e){const t="https"===e.protocol?"https":void 0,n="string"==typeof e.host?e.host.trim():"",r="string"==typeof e.path?e.path.replace(/^\/+/,""):"";return t&&n?`${t}://${n}/${r}`:void 0}(await new Promise(e=>{let t="";process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{t+=e}),process.stdin.on("end",()=>e(Object.fromEntries(t.split(/\r?\n/).flatMap(e=>{const t=e.indexOf("=");return t>0?[[e.slice(0,t),e.slice(t+1)]]:[]}))))}));if(!r)throw pi("remote-unsupported");let i;try{i=li(r)}catch(e){if("CREDENTIAL_MISSING"===e.code)return void process.stderr.write(`${e.message}\n`);throw e}const o=t.readFileSync(n.join(i,"username"),"utf8"),s=t.readFileSync(n.join(i,"token"),"utf8");process.stdout.write(`username=${o}\npassword=${s}\n\n`)}(r[0]);if("ssh"===e)return fi(r);throw new Error("TASK_HANDOFF_GIT_PROVISIONING_ERROR=REMOTE_UNSUPPORTED")}().catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("node:fs"),t=require("node:path"),{spawnSync:n}=require("node:child_process"),{Command:r,InvalidArgumentError:o}=require("commander"),a=require("semver"),i=require("write-file-atomic"),{ControlPlaneHealthResponseSchema:s}=require("../packages/protocol/src/control-plane.ts");function c(e){const t=s.safeParse(e);return t.success?t.data.data.build.packageVersion:void 0}const d=(new r).name("task-handoff-node-update-worker").description("Apply a detached TaskHandoff node update.").requiredOption("--job-file <path>","persisted update job file").requiredOption("--target-version <version>","exact semantic version",function(e){if(e.trim()!==e||/^[v=]/.test(e)||null===a.valid(e))throw new o("must be an exact semantic version");return e}).option("--service <name>","systemd service to restart","task-handoff-node-agent.service").option("--npm-command <path>","npm executable",process.env.TASK_HANDOFF_NPM_COMMAND||"npm").option("--control-plane-health-url <url>","local control-plane health endpoint",function(e){let t;try{t=new URL(e)}catch{throw new o("must be a valid loopback HTTP URL")}if(!["http:","https:"].includes(t.protocol)||!["127.0.0.1","localhost","::1"].includes(t.hostname))throw new o("must be a valid loopback HTTP URL");return t.toString()}).parse(process.argv).opts(),f=d.jobFile,l=d.targetVersion,u=d.service,p=d.npmCommand,h=d.controlPlaneHealthUrl,m=new Set(["succeeded","degraded","failed"]),w=new Set(["@task-handoff/node-agent","@task-handoff/server"]);function g(n,r){const o=JSON.parse(e.readFileSync(f,"utf8"));process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK&&require(t.resolve(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK))({jobFile:f,observed:o});const a=`${f}.worker-lock`;e.mkdirSync(a);try{const t=JSON.parse(e.readFileSync(f,"utf8"));if(m.has(t.status)||!n.includes(t.status))return!1;const o="function"==typeof r?r(t):r,a={...t,...o,updatedAt:(new Date).toISOString()};return i.sync(f,`${JSON.stringify(a,null,2)}\n`,{encoding:"utf8"}),!0}finally{e.rmdirSync(a)}}function v(e,t){const r=n(e,t,{stdio:"inherit"});if(0!==r.status)throw new Error(`${e} exited with status ${r.status??"unknown"}`)}function S(n,r,o){const a=o?t.join(r,...o.split("/"),"node_modules",...n.split("/"),"package.json"):t.join(r,...n.split("/"),"package.json");try{return JSON.parse(e.readFileSync(a,"utf8")).version}catch(e){if("ENOENT"===e?.code)return;throw e}}function y(e,t){const n=S(e,t);if(n!==l)throw new Error(`Updated ${e} verification failed: expected ${l}, found ${n||"unknown"}.`)}function E(e){const t=n(p,["view",`${e}@${l}`,"dist.integrity","--json"],{encoding:"utf8"});if(0!==t.status)throw new Error(`Could not verify the ${e} npm artifact integrity.`);let r;try{r=JSON.parse(t.stdout)}catch{throw new Error(`npm returned invalid ${e} artifact integrity metadata.`)}if("string"!=typeof r||!/^sha(?:256|384|512)-[A-Za-z0-9+/=]+$/.test(r))throw new Error(`npm returned invalid ${e} artifact integrity metadata.`);return r}!async function(){try{g(["queued"],e=>({status:"updating-node",rollout:{...e.rollout,phase:"updating-node"},startedAt:(new Date).toISOString(),error:void 0}))||process.exit(0);const t=function(){const t=JSON.parse(e.readFileSync(f,"utf8")),n=`@${l}#`;if("string"!=typeof t.artifactRef||!t.artifactRef.startsWith("npm:")||!t.artifactRef.includes(n))throw new Error(`Update job does not pin npm integrity for version ${l}.`);const r=t.artifactRef.indexOf(n),o=t.artifactRef.slice(4,r),a=t.artifactRef.slice(r+n.length);if(!w.has(o)||!a)throw new Error("Update job does not identify a supported immutable npm artifact.");const i=E(o);if(i!==a)throw new Error(`${o} npm artifact integrity mismatch: expected ${a}, found ${String(i||"unknown")}.`);return{packageName:o,integrity:i}}(),r=t.packageName,o=n(p,["prefix","--global"],{encoding:"utf8"});if(0!==o.status)throw new Error("Could not determine the npm global prefix.");const a=o.stdout.trim(),i=n(p,["root","--global"],{encoding:"utf8"});if(0!==i.status)throw new Error("Could not determine the npm global module root.");const s=i.stdout.trim(),d=[r];"@task-handoff/server"===r&&void 0!==S("@task-handoff/node-agent",s)&&d.push("@task-handoff/node-agent");const m=new Map([[r,t.integrity]]);for(const e of d.slice(1))m.set(e,E(e));for(const e of d){if(v(p,["install","--global","--prefix",a,`${e}@${l}`]),E(e)!==m.get(e))throw new Error(`${e} npm artifact integrity changed during installation.`);y(e,s)}if("@task-handoff/server"===r&&function(e){for(const t of["@task-handoff/control-plane","@task-handoff/node-agent","@task-handoff/controlled-instance"]){const n=S(t,e,"@task-handoff/server")||S(t,e);if(n!==l)throw new Error(`Updated @task-handoff/server does not provide ${t} ${l}; found ${n||"unknown"}.`)}}(s),"@task-handoff/server"===r){if(!h)throw new Error("A control-plane health URL is required for a complete server update.");v("systemctl",["restart","task-handoff-control-plane.service"]),await async function(t,n=6e4){const r=Date.now()+n;let o="not reachable";for(;Date.now()<r;){try{if(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE){const t=c(JSON.parse(e.readFileSync(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE,"utf8")));if(t===l)return;o=`reported version ${String(t||"unknown")}`,await new Promise(e=>setTimeout(e,10));continue}const n=await fetch(t,{headers:{"cache-control":"no-cache"},signal:AbortSignal.timeout(2e3)}),r=c(await n.json().catch(()=>({})));if(n.ok&&r===l)return;o=n.ok?`reported version ${String(r||"unknown")}`:`returned HTTP ${n.status}`}catch(e){o=e instanceof Error?e.message:String(e)}await new Promise(e=>setTimeout(e,500))}throw new Error(`Control plane did not become healthy at ${t} with version ${l}: ${o}.`)}(h)}g(["updating-node"],e=>({status:"restarting-node",rollout:{...e.rollout,phase:"restarting-node"}}))||process.exit(0),v("systemctl",["restart",u])}catch(e){g(["queued","updating-node","restarting-node"],t=>({status:"failed",rollout:{...t.rollout,phase:"failed"},error:{code:"NODE_UPDATE_FAILED",message:e instanceof Error?e.message:String(e),retryable:!1},completedAt:(new Date).toISOString()})),console.error(e),process.exit(1)}}();
2
+ "use strict";var e=require("node:fs"),t=require("node:path"),n=require("node:child_process"),i=require("commander"),o=require("semver"),r=require("write-file-atomic"),a=require("node:crypto"),s=require("zod"),c=require("node:os");function m(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function d(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){var n=!1;try{n=this instanceof e}catch{}return n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,i.get?i:{enumerable:!0,get:function(){return e[t]}})}),n}var l={};const u=20971520,p=512e3,g=p,z=u,f=41943040,b=s.z.string().trim().min(1).max(80),y=s.z.enum(["app-session","ai-session"]),h=s.z.enum(["image","file"]),x={scopeType:s.z.enum(["session","create-request"]),scopeId:s.z.string().trim().min(1).max(160),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120)};s.z.object({...x,size:s.z.coerce.number().int().positive().max(u)}).strict();const I=s.z.string().regex(/^cia_[a-f0-9]{24}$/);s.z.object({attachmentId:I,...x,size:s.z.number().int().positive().max(u)}).strict(),s.z.object({offset:s.z.coerce.number().int().nonnegative()}).strict(),s.z.object({attachmentId:I,offset:s.z.number().int().nonnegative()}),s.z.object({id:I,kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().positive().max(u),expiresAt:s.z.string().datetime()});const A=s.z.object({id:s.z.string().trim().min(1).max(120),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)}),v=s.z.enum(["available","expired","missing"]),S=A.extend({contentState:v.default("available")}).strict(),k=s.z.object({id:s.z.string().trim().min(1).max(240),text:s.z.string(),attachments:s.z.array(S).max(6).default([])}).strict(),j=s.z.enum(["running","waiting","idle","failed"]);s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(120),unread:s.z.boolean(),sessionUpdatedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict();const w=s.z.enum(["thinking","tool","editing","approval","responding","unknown"]),C=s.z.object({id:s.z.string().trim().min(1).max(240).optional(),kind:s.z.string().trim().min(1).max(80).optional(),name:s.z.string().trim().min(1).max(120),inputPreview:s.z.string().trim().max(500).optional(),startedAt:s.z.string().datetime().optional()}).strict(),R=s.z.enum(["running","completed","failed","waiting"]),N=s.z.object({id:s.z.string().trim().min(1).max(240),turnId:s.z.string().trim().min(1).max(240)}).strict(),E=N.extend({type:s.z.literal("user-message"),text:s.z.string(),attachments:s.z.array(S).max(6).optional()}).strict(),T=N.extend({type:s.z.literal("ai-message"),text:s.z.string()}).strict(),P=N.extend({type:s.z.literal("activity"),activityKind:s.z.string().trim().min(1).max(120),title:s.z.string().trim().min(1).max(240),status:R.optional(),summary:s.z.string().max(4e3).optional(),input:s.z.string().max(1e5).optional(),output:s.z.string().max(1e6).optional(),paths:s.z.array(s.z.string().trim().min(1).max(4096)).max(500).optional(),exitCode:s.z.number().int().optional(),durationMs:s.z.number().int().nonnegative().optional()}).strict(),_=s.z.discriminatedUnion("type",[E,T,P]);s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),items:s.z.array(_),generatedAt:s.z.string().datetime()}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),turnId:s.z.string().trim().min(1).max(240),items:s.z.array(_),generatedAt:s.z.string().datetime()}).strict();const O=s.z.enum(["pending-init","running","interrupted","completed","errored","shutdown","not-found"]),L=s.z.enum(["started","interacted","interrupted"]),M=s.z.object({threadId:s.z.string().trim().min(1).max(240),path:s.z.string().trim().max(4096).optional(),status:O,activity:L.optional(),message:s.z.string().trim().max(1e3).optional(),updatedAt:s.z.string().datetime()}).strict(),D=s.z.object({toolCalls:s.z.number().int().min(0).default(0),edits:s.z.number().int().min(0).default(0),approvals:s.z.number().int().min(0).default(0)}).strict().default({toolCalls:0,edits:0,approvals:0}),F=s.z.object({send:s.z.boolean().optional(),interrupt:s.z.boolean().optional(),approval:s.z.boolean().optional(),fork:s.z.boolean().optional(),openApp:s.z.boolean().optional(),close:s.z.boolean().optional()}).strict(),U=s.z.object({kind:s.z.literal("fork"),parentProviderSessionId:s.z.string().trim().min(1).max(240),throughTurnId:s.z.string().trim().min(1).max(240).optional()}).strict(),V=s.z.union([A.extend({source:s.z.object({type:s.z.literal("inline"),encoding:s.z.literal("base64"),data:s.z.string().min(1).max(31457280)}).strict()}).strict().superRefine((e,t)=>{const n="image"===e.kind?u:p;(e.size<=0||("file"===e.kind?e.size>=n:e.size>n))&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["size"],message:`Inline ${e.kind} must be between 1 byte and ${n} bytes.`})}),A.extend({source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),$=A.extend({sourceType:s.z.enum(["inline","runtime-path"])}).strict(),q=s.z.union([s.z.object({id:s.z.string().trim().min(1).max(120),kind:h.optional(),source:s.z.object({type:s.z.literal("upload-ref")}).strict().default({type:"upload-ref"})}).strict(),s.z.object({id:s.z.string().trim().min(1).max(120),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),B=s.z.enum(["auto","queue","steer","immediate"]),H=s.z.enum(["ask","auto-review","full-access"]),G=s.z.enum(["review","rename","goal","compact"]);s.z.object({command:G,argument:s.z.string().trim().max(4e3).optional()}).strict().superRefine((e,t)=>{"rename"!==e.command||e.argument||t.addIssue({code:"custom",path:["argument"],message:"Rename requires a thread name."}),"review"!==e.command&&"compact"!==e.command||!e.argument||t.addIssue({code:"custom",path:["argument"],message:`${e.command} does not accept an argument.`})}),s.z.object({command:G,value:s.z.string().max(4e3).optional(),turnId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.enum(["skill","app","plugin"]);const K=s.z.object({name:s.z.string().trim().min(1).max(240),path:s.z.string().trim().min(1).max(4096)}),W=s.z.discriminatedUnion("kind",[K.extend({kind:s.z.literal("skill"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/"),"Skill paths must be absolute.")}).strict(),K.extend({kind:s.z.literal("app"),path:s.z.string().trim().min(7).max(4096).regex(/^app:\/\/[^\s/]+$/,"App paths must use app://<id>.")}).strict(),K.extend({kind:s.z.literal("plugin"),path:s.z.string().trim().min(10).max(4096).regex(/^plugin:\/\/[^\s/]+$/,"Plugin paths must use plugin://<id>.")}).strict()]),Y=s.z.array(W).max(20).default([]),X=s.z.enum(["plugin","skill","file","directory","app"]),J=s.z.object({kind:X,name:s.z.string().trim().min(1).max(240),description:s.z.string().trim().max(1e3).optional(),path:s.z.string().trim().min(1).max(4096),icon:s.z.string().trim().max(4096).optional()}).strict().superRefine((e,t)=>{"skill"!==e.kind||e.path.startsWith("/")||t.addIssue({code:"custom",path:["path"],message:"Skill paths must be absolute."}),"app"!==e.kind||/^app:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"App paths must use app://<id>."}),"plugin"!==e.kind||/^plugin:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"Plugin paths must use plugin://<id>."}),"file"!==e.kind&&"directory"!==e.kind||!e.path.startsWith("/")&&!e.path.split(/[\\/]+/).includes("..")||t.addIssue({code:"custom",path:["path"],message:"File and directory paths must be relative to the session cwd."})}),Z=s.z.object({category:s.z.enum(["skills","plugins","apps","files"]),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(2e3)}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),cwd:s.z.string().trim().min(1).max(4096),candidates:s.z.array(J).max(1e3).default([]),diagnostics:s.z.array(Z).max(20).default([])}).strict(),s.z.object({query:s.z.string().trim().max(240).default("")}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),cwd:s.z.string().trim().min(1).max(4096),query:s.z.string().trim().max(240),requestId:s.z.string().trim().min(1).max(160),candidates:s.z.array(J.refine(e=>"file"===e.kind||"directory"===e.kind,"File search only returns files and directories.")).max(200).default([]),complete:s.z.boolean().default(!1)}).strict();const Q=s.z.object({message:s.z.string().trim().min(1).max(2e4),mode:B.optional(),permissionMode:H.optional()}),ee=Q.extend({attachments:s.z.array(V).max(6).default([]),references:Y}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>f&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),te=Q.extend({attachments:s.z.array(q).max(6).default([]),references:Y}).strict(),ne=s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e),"Runtime paths must be absolute in the target controlled instance.")}).strict();ee.extend({agent:b,cwd:ne,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),clientRequestId:s.z.string().trim().min(1).max(160)}).strict();const ie=s.z.object({mode:s.z.enum(["current-folder","worktree"]),branch:s.z.string().trim().min(1).max(1024)}).strict();te.extend({agent:b,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),gitSelection:ie.optional(),clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict();const oe=s.z.object({mode:s.z.enum(["current","managed-worktree"]).default("current")}).strict().default({mode:"current"});s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),throughTurnId:s.z.string().trim().min(1).max(240).optional(),workspace:oe.optional().default({mode:"current"})}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["opened","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120),creationSource:y}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["closed","already-closed"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:y}).strict(),s.z.object({code:s.z.enum(["invalid-request","not-found","unsupported","provider-unavailable","materialization-failed","open-app-failed","close-failed","conflict"]),message:s.z.string().trim().min(1).max(4e3),retryable:s.z.boolean().default(!1),aiSessionId:s.z.string().trim().min(1).max(120).optional(),providerSessionId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.object({decision:s.z.enum(["allow","deny","skip"])}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),queueIds:s.z.array(s.z.string().trim().min(1).max(120)).max(100)}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),message:s.z.string().trim().min(1).max(2e4)}).strict(),s.z.object({code:s.z.string().trim().min(1).max(160),message:s.z.string(),instanceId:s.z.string().trim().min(1).max(160).optional(),nodeId:s.z.string().trim().min(1).max(160).optional(),route:s.z.string().trim().min(1).max(4096).optional()}).strict();const re=s.z.object({id:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional(),message:s.z.string().trim().min(1).max(2e4),attachments:s.z.array($).max(6).default([]),references:Y,permissionMode:H.optional(),status:s.z.enum(["queued","sending","failed"]).default("queued"),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),error:s.z.string().trim().max(4e3).optional()}).strict(),ae=s.z.object({revision:s.z.number().int().min(0).default(0),pendingCount:s.z.number().int().min(0).default(0),items:s.z.array(re).max(100).default([])}).strict().default({revision:0,pendingCount:0,items:[]}),se=s.z.enum(["control","realtime","adapter-snapshot","transcript-tail","transcript-scan","process-scan","app-session"]),ce=s.z.object({id:s.z.string().trim().min(1).max(240),status:s.z.enum(["running","completed"]),startedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),me=s.z.object({id:s.z.string().trim().min(1).max(240),providerTurnId:s.z.string().trim().max(240).optional(),source:se.optional(),userPrompt:s.z.string().trim().optional(),userMessages:s.z.array(k).max(100).optional(),status:s.z.enum(["queued","running","waiting","completed","failed"]).default("running"),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),contextCompactions:s.z.array(ce).max(20).optional(),revision:s.z.number().int().min(0).default(0),sourcePriority:s.z.number().int().min(0).max(100).optional(),snapshotVersion:s.z.number().int().min(0).optional(),observedAt:s.z.string().datetime().optional(),startedAt:s.z.string().datetime().optional(),updatedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),de=me.pick({id:!0,providerTurnId:!0,userPrompt:!0,userMessages:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,contextCompactions:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).strict(),le=s.z.object({id:s.z.string().trim().min(1).max(120),agent:b,creationSource:y.default("app-session"),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:U.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:F.optional(),activeTurnId:s.z.string().trim().max(240).optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(me).max(50).optional(),status:j.default("running"),phase:w.default("unknown"),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),currentTool:C.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).default(0),subAgents:s.z.array(M).max(50).default([]),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),startedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional(),error:s.z.string().trim().max(4e3).optional(),counters:D,queue:ae}).strict();le.pick({id:!0,appBindingKeys:!0,cwd:!0,error:!0,providerMeta:!0,queue:!0,subAgents:!0}).strict();const ue=me.pick({id:!0,providerTurnId:!0,status:!0,phase:!0,revision:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).extend({bodyRevision:s.z.string().trim().min(1).max(64)}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turns:s.z.array(ue).max(50)}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turn:me}).strict();const pe=s.z.object({session:le,provider:s.z.string().trim().min(1).max(80),action:s.z.enum(["send","queue","steer","interrupt","approval"]),decision:s.z.enum(["allow","deny","skip"]).optional(),turnId:s.z.string().trim().min(1).max(240).optional(),providerTurnId:s.z.string().trim().min(1).max(240).optional(),queueId:s.z.string().trim().min(1).max(120).optional()}).strict(),ge=pe.omit({session:!0}).extend({sessionId:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional()}).strict();s.z.union([ge,pe.transform(function(e){const t=e.session.turns?.at(-1),n=(e.queueId?e.session.queue?.items.find(t=>t.id===e.queueId)?.messageId:void 0)||("send"===e.action||"queue"===e.action||"steer"===e.action?t?.userMessages?.at(-1)?.id:void 0);return ge.parse({sessionId:e.session.id,provider:e.provider,action:e.action,...e.decision?{decision:e.decision}:{},...e.turnId||e.session.activeTurnId||t?.id?{turnId:e.turnId||e.session.activeTurnId||t?.id}:{},...e.providerTurnId||t?.providerTurnId?{providerTurnId:e.providerTurnId||t?.providerTurnId}:{},...e.queueId?{queueId:e.queueId}:{},...n?{messageId:n}:{}})})]);const ze=s.z.object({id:s.z.string().trim().min(1).max(120),agent:b,creationSource:y,providerSessionId:s.z.string().trim().min(1).max(240),lineage:U.optional(),title:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),lastMessage:s.z.string().trim().optional(),cwd:s.z.string().trim().min(1).max(4096),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),lastActiveAt:s.z.string().datetime(),archivedAt:s.z.string().datetime()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),items:s.z.array(ze).max(500).default([])}).strict(),s.z.object({items:s.z.array(ze).max(500).default([])}).strict(),s.z.object({item:ze,turns:s.z.array(de).max(50).default([])}).strict(),s.z.object({disposition:s.z.enum(["resumed","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120).optional(),creationSource:y}).strict();const fe=me.omit({userMessages:!0}),be=le.pick({id:!0,agent:!0,creationSource:!0,appSessionId:!0,appId:!0,providerSessionId:!0,lineage:!0,providerMeta:!0,appBindingKeys:!0,actions:!0,activeTurnId:!0,title:!0,cwd:!0,cwdFolderId:!0,userPrompt:!0,turns:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,lastMessageItemId:!0,currentTool:!0,toolCallsSinceLastMessage:!0,subAgents:!0,queue:!0,startedAt:!0,updatedAt:!0,error:!0}).extend({turns:s.z.array(fe).max(50).optional(),detailRevision:s.z.string().trim().min(1).max(64).optional(),turnsRevision:s.z.string().trim().min(1).max(64).optional(),turnCount:s.z.number().int().min(0).optional(),subAgentCount:s.z.number().int().min(0).optional(),lastUserMessageAt:s.z.string().datetime().optional()}).strict(),ye=s.z.object({runningCount:s.z.number().int().min(0).default(0),waitingCount:s.z.number().int().min(0).default(0),staleCount:s.z.number().int().min(0).default(0),sessions:s.z.array(be).default([]),updatedAt:s.z.string().datetime()}).strict();s.z.object({streamId:s.z.string().trim().min(1).max(240),revision:s.z.number().int().min(0),lastEventAt:s.z.string().datetime(),snapshot:ye}).strict(),ye.pick({runningCount:!0,waitingCount:!0,staleCount:!0,updatedAt:!0}).extend({idleCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),revision:s.z.number().int().min(0).optional()});const he=s.z.enum(["provider-event","app-session-created","app-session-updated","app-session-deleted","discovery-scan","control-action","heartbeat-sync","startup"]),xe=s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().min(0),previousRevision:s.z.number().int().min(0).optional(),traceId:s.z.string().trim().min(1).max(160),generatedAt:s.z.string().datetime(),reason:he}).strict(),Ie=s.z.object({meta:xe,snapshot:ye}).strict(),Ae=s.z.object({meta:xe,upserted:s.z.array(be).default([]),removed:s.z.array(s.z.string().trim().min(1).max(120)).default([])}).strict(),ve=s.z.object({meta:xe,sessionIds:s.z.array(s.z.string().trim().min(1).max(120)).default([]),expiresAt:s.z.string().datetime()}).strict();s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240).optional(),turnId:s.z.string().trim().min(1).max(240),itemId:s.z.string().trim().min(1).max(240),delta:s.z.string().min(1),generatedAt:s.z.string().datetime()}).strict().omit({instanceId:!0,nodeId:!0,providerSessionId:!0}).strict(),s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),item:_,generatedAt:s.z.string().datetime()}).strict(),s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),sinceRevision:s.z.number().int().min(0),latestRevision:s.z.number().int().min(0),earliestRetainedRevision:s.z.number().int().min(0),syncRequired:s.z.boolean().default(!1),events:s.z.array(s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("ai-session.snapshot"),payload:Ie}).strict(),s.z.object({type:s.z.literal("ai-session.patch"),payload:Ae}).strict(),s.z.object({type:s.z.literal("ai-session.removed"),payload:ve}).strict()])).default([])}).strict();const Se=s.z.object({source:se,sourcePriority:s.z.number().int().min(0).max(100).optional(),observedAt:s.z.string().datetime().optional(),snapshotVersion:s.z.number().int().min(0).optional()}).strict(),ke=Se.extend({type:s.z.literal("snapshot"),agent:s.z.string().trim().min(1).max(80),creationSource:y.optional(),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:U.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:F.optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),activeTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(me).max(50).optional(),status:j.optional(),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:C.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(M).max(50).optional(),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),replaceActivity:s.z.boolean().optional()}).strict(),je=Se.extend({type:s.z.literal("event"),sessionId:s.z.string().trim().min(1).max(120),kind:s.z.enum(["lifecycle","send-ack","turn-started","user-message","assistant-message","approval-requested","turn-completed","session-error","tool-activity","sub-agent-activity","context-compaction"]),activeTurnId:s.z.string().trim().max(240).optional(),providerTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),userMessage:k.optional(),text:s.z.string().optional(),itemId:s.z.string().trim().max(240).optional(),status:j.optional(),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:C.nullable().optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(M).max(50).optional(),contextCompaction:ce.optional(),counters:s.z.object({toolCalls:s.z.number().int().min(0).optional(),edits:s.z.number().int().min(0).optional(),approvals:s.z.number().int().min(0).optional()}).strict().optional()}).strict().superRefine((e,t)=>{if("session-error"!==e.kind||e.error||t.addIssue({code:"custom",path:["error"],message:"session-error events require error"}),"context-compaction"===e.kind?e.contextCompaction||t.addIssue({code:"custom",path:["contextCompaction"],message:"context-compaction events require contextCompaction"}):void 0!==e.contextCompaction&&t.addIssue({code:"custom",path:["contextCompaction"],message:"contextCompaction is only valid for context-compaction events"}),"send-ack"!==e.kind&&"user-message"!==e.kind&&void 0!==e.userMessage&&t.addIssue({code:"custom",path:["userMessage"],message:"userMessage is only valid for send-ack and user-message events"}),"sub-agent-activity"===e.kind?e.subAgents||t.addIssue({code:"custom",path:["subAgents"],message:"sub-agent-activity events require subAgents"}):void 0!==e.subAgents&&t.addIssue({code:"custom",path:["subAgents"],message:"subAgents is only valid for sub-agent-activity events"}),"tool-activity"!==e.kind)return void 0!==e.currentTool&&t.addIssue({code:"custom",path:["currentTool"],message:"currentTool is only valid for tool-activity events"}),void(void 0!==e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"toolCallsSinceLastMessage is only valid for tool-activity events"}));"currentTool"in e||t.addIssue({code:"custom",path:["currentTool"],message:"tool-activity events require currentTool"}),void 0===e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"tool-activity events require toolCallsSinceLastMessage"})});s.z.discriminatedUnion("type",[ke,je]);const we=s.z.union([s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("interval").default("interval"),intervalMs:s.z.number().int().min(1e3)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("daily"),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("weekly"),weekdays:s.z.array(s.z.number().int().min(0).max(6)).min(1).max(7),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict()]),Ce=s.z.union([we,s.z.object({type:s.z.literal("file-change"),roots:s.z.array(s.z.string().trim().min(1).max(4096)).min(1).max(50),globs:s.z.array(s.z.string().trim().min(1).max(500)).min(1).max(100),ignore:s.z.array(s.z.string().trim().min(1).max(500)).max(100).optional(),debounceMs:s.z.number().int().min(100).max(6e4).default(1500)}).strict(),s.z.object({type:s.z.literal("ai-session"),agent:s.z.string().trim().min(1).max(80).optional(),statuses:s.z.array(s.z.enum(["running","waiting","idle","failed"])).max(20).optional(),phases:s.z.array(s.z.enum(["thinking","tool","editing","approval","responding","unknown"])).max(20).optional()}).strict()]),Re=s.z.object({promptTemplate:s.z.string().trim().min(1).max(2e4)}).strict(),Ne=s.z.object({cooldownMs:s.z.number().int().min(0).max(864e5).optional(),maxConcurrentRuns:s.z.number().int().min(1).max(20).default(1),whenBusy:s.z.enum(["skip","queue"]).default("skip")}).strict(),Ee=s.z.object({configHash:s.z.string().trim().min(8).max(80),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(1e3).optional(),source:Ce,action:Re,policy:Ne.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),Te=s.z.object({type:s.z.literal("ai-session"),aiSessionId:s.z.string().trim().min(1).max(160)}).strict(),Pe=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),origin:s.z.enum(["control-plane","controlled-instance"]).default("controlled-instance"),enabled:s.z.boolean().default(!0),target:Te,localName:s.z.string().trim().min(1).max(160).optional(),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),_e=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),status:s.z.enum(["idle","running","disabled","error"]).default("idle"),lastTriggeredAt:s.z.string().datetime().optional(),lastCompletedAt:s.z.string().datetime().optional(),lastSkippedAt:s.z.string().datetime().optional(),lastError:s.z.string().trim().max(4e3).optional(),runCount:s.z.number().int().min(0).default(0),skippedCount:s.z.number().int().min(0).default(0)}).strict(),Oe=s.z.object({id:s.z.string().trim().min(1).max(160),configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),eventType:s.z.enum(["manual","schedule","file-change","ai-session"]),status:s.z.enum(["started","completed","failed","skipped"]),target:Te,promptPreview:s.z.string().trim().max(500),eventSummary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),startedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),configs:s.z.array(Ee).default([]),deployments:s.z.array(Pe).default([]),runtime:s.z.array(_e).default([]),recentRuns:s.z.array(Oe).default([])}).strict();const Le=s.z.object({instanceId:s.z.string().trim().min(1).max(160),instanceName:s.z.string().trim().min(1).max(160),deployment:Pe,runtime:_e.optional()}).strip(),Me=Oe.extend({instanceName:s.z.string().trim().min(1).max(160).optional()}).strip(),De=s.z.object({configHash:s.z.string().trim().min(8).max(80),config:Ee,deploymentCount:s.z.number().int().min(0),enabledCount:s.z.number().int().min(0),runningCount:s.z.number().int().min(0),errorCount:s.z.number().int().min(0),ownedByControlPlane:s.z.boolean(),controlPlaneDeploymentCount:s.z.number().int().min(0),deployments:s.z.array(Le),recentRuns:s.z.array(Me)}).strip();s.z.object({updatedAt:s.z.string().datetime(),triggers:s.z.array(De)}).strip(),s.z.object({name:Ee.shape.name,description:Ee.shape.description,source:Ce,action:Re,policy:Ne.partial().optional()}).strict(),s.z.object({scope:s.z.enum(["node","instance"]),nodeId:s.z.string().trim().min(1).max(160).optional(),instanceId:s.z.string().trim().min(1).max(160).optional(),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(4e3)}).strip();const Fe=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Proxy protocol version must use YYYY-MM-DD format."),Ue=s.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ve=s.z.string().datetime(),$e=s.z.string().trim().min(32).max(4096),qe=s.z.string().trim().max(2048).transform((e,t)=>{try{return function(e){const t=new URL(e.trim());if("https:"!==t.protocol||t.username||t.password||"/"!==t.pathname||t.search||t.hash)throw new Error("Proxy origin must be an HTTPS origin without credentials, path, query, or fragment.");return t.origin}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});s.z.string().trim().min(1).max(4096).transform((e,t)=>{try{return function(e){const t=e.trim();if(!t.startsWith("/")||t.startsWith("//")||t.includes("\\")||/%25/i.test(t))throw new Error("Proxy route must be a single-encoded node-agent relative route.");const n=t.split("?",1)[0];let i,o;try{i=n.split("/").map(e=>decodeURIComponent(e))}catch{throw new Error("Proxy route contains invalid percent encoding.")}if(i.some(e=>".."===e||"."===e))throw new Error("Proxy route cannot traverse outside the node-agent API.");try{o=new URL(t,"https://node-agent.invalid")}catch{throw new Error("Proxy route is invalid.")}if("https://node-agent.invalid"!==o.origin||o.username||o.password)throw new Error("Proxy route cannot select an absolute upstream URL.");return`${o.pathname}${o.search}`}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});const Be=s.z.enum(Object.values({ProtocolUnsupported:"CONTROL_PLANE_PROXY_PROTOCOL_UNSUPPORTED",InviteInvalid:"CONTROL_PLANE_PROXY_INVITE_INVALID",InviteExpired:"CONTROL_PLANE_PROXY_INVITE_EXPIRED",InviteConsumed:"CONTROL_PLANE_PROXY_INVITE_CONSUMED",InviteRevoked:"CONTROL_PLANE_PROXY_INVITE_REVOKED",TargetUnavailable:"CONTROL_PLANE_PROXY_TARGET_UNAVAILABLE",TargetMismatch:"CONTROL_PLANE_PROXY_TARGET_MISMATCH",BindingUnknown:"CONTROL_PLANE_PROXY_BINDING_UNKNOWN",BindingRevoked:"CONTROL_PLANE_PROXY_BINDING_REVOKED",BindingIdentityConflict:"CONTROL_PLANE_PROXY_BINDING_IDENTITY_CONFLICT",AuthenticationFailed:"CONTROL_PLANE_PROXY_AUTHENTICATION_FAILED",RouteInvalid:"CONTROL_PLANE_PROXY_ROUTE_INVALID",HeaderInvalid:"CONTROL_PLANE_PROXY_HEADER_INVALID",ResourceLimit:"CONTROL_PLANE_PROXY_RESOURCE_LIMIT",SnapshotRequired:"CONTROL_PLANE_PROXY_SNAPSHOT_REQUIRED",Unavailable:"CONTROL_PLANE_PROXY_UNAVAILABLE",TransportFailed:"CONTROL_PLANE_PROXY_TRANSPORT_FAILED"})),He=s.z.object({code:Be,message:s.z.string().trim().min(1).max(2048),retryable:s.z.boolean(),details:s.z.record(s.z.string(),s.z.unknown()).optional()}).strict(),Ge=s.z.enum(["active","revoked"]),Ke=s.z.object({id:Ue,targetNodeId:Ue,status:Ge,createdBy:Ue,expiresAt:Ve,revokedAt:Ve.optional(),createdAt:Ve,updatedAt:Ve}).strict();s.z.object({targetNodeId:Ue,expiresInSeconds:s.z.number().int().min(60).max(3600).default(600)}).strict(),s.z.object({invite:Ke,token:s.z.string().trim().min(24).max(512),proxyOrigin:qe,protocolVersion:Fe}).strict();const We=s.z.enum(["active","revoked"]),Ye=s.z.object({id:Ue,claimId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,bindingKeyId:Ue,status:We,revision:s.z.number().int().positive(),lastError:He.optional(),revokedAt:Ve.optional(),createdAt:Ve,updatedAt:Ve}).strict();s.z.object({protocolVersion:Fe,inviteToken:s.z.string().trim().min(24).max(512).optional(),claimId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue.optional(),bindingKeyId:Ue,credential:$e}).strict(),s.z.object({sourceControlPlaneId:Ue,bindingKeyId:Ue,credential:$e}).strict();const Xe=s.z.object({id:Ue,name:s.z.string().trim().min(1).max(160),status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:Ve.optional(),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({})}).strict(),Je=s.z.object({protocolVersion:Fe,binding:Ye,streamId:Ue,revision:s.z.number().int().nonnegative(),observedAt:Ve,target:Xe}).strict(),Ze=s.z.object({type:s.z.literal("control-plane-proxy.event"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,revision:s.z.number().int().positive(),source:s.z.object({id:s.z.string().trim().min(1).max(512),seq:s.z.number().int().nonnegative()}).strict(),target:Xe,event:s.z.object({type:s.z.string().trim().min(1).max(240),topic:s.z.string().trim().min(1).max(240),createdAt:Ve}).strict()}).strict(),Qe=s.z.object({type:s.z.literal("control-plane-proxy.events.ready"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative()}).strict(),et=s.z.object({type:s.z.literal("control-plane-proxy.snapshot-required"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,sinceRevision:s.z.number().int().nonnegative(),latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative(),error:He}).strict();s.z.discriminatedUnion("type",[Ze,Qe,et]),s.z.object({protocolVersion:Fe,binding:Ye,target:Je.shape.target}).strict(),s.z.object({id:Ue,claimId:Ue,proxyOrigin:qe,requestedName:s.z.string().trim().min(1).max(160).optional(),sourceControlPlaneId:Ue,targetNodeId:Ue.optional(),bindingKeyId:Ue,credential:$e,status:s.z.enum(["pending","compensation-required"]),createdAt:Ve,updatedAt:Ve,expiresAt:Ve}).strict().omit({credential:!0}),s.z.object({id:Ue,nodeId:Ue,proxyOrigin:qe,proxyBindingId:Ue,targetNodeId:Ue,sourceControlPlaneId:Ue,bindingKeyId:Ue,credential:$e,createdAt:Ve,updatedAt:Ve}).strict();const tt=s.z.string().trim().min(1).max(120),nt=s.z.object({agent:tt,actions:s.z.object({create:s.z.boolean().default(!1),send:s.z.boolean().default(!1),queue:s.z.boolean().default(!1),steer:s.z.boolean().default(!1),interrupt:s.z.boolean().default(!1),archive:s.z.boolean().default(!1),delete:s.z.boolean().default(!1),fork:s.z.boolean().default(!1),approvalDecisions:s.z.array(s.z.enum(["allow","deny","skip"])).max(3).default([])}).passthrough(),timeline:s.z.object({sessionRead:s.z.boolean().default(!1),turnRead:s.z.boolean().default(!1),liveItems:s.z.boolean().default(!1)}).passthrough()}).passthrough(),it=s.z.array(nt).max(100).default([]),ot="2026-08-23",rt=new Set(["2026-08-01","2026-08-16","2026-08-17","2026-08-20",ot]),at=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Protocol version must use YYYY-MM-DD format."),st=s.z.string().trim().min(1).max(120);function ct(){return{features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}}}const mt=s.z.object({sessionReadAgents:s.z.array(st).max(100).default([]),turnReadAgents:s.z.array(st).max(100).default([]),liveItemAgents:s.z.array(st).max(100).default([])}).passthrough(),dt=s.z.object({metadataAgents:s.z.array(st).max(100).default([]),contentAgents:s.z.array(st).max(100).default([]),uploadAgents:s.z.array(st).max(100).default([]),retentionSettings:s.z.boolean().default(!1),fileSizeLimitSettings:s.z.boolean().default(!1)}).passthrough(),lt=s.z.object({appRuntime:s.z.boolean().default(!1),tty:s.z.boolean().default(!1),gui:s.z.boolean().default(!1),browser:s.z.boolean().default(!1),screenshots:s.z.boolean().default(!1),logs:s.z.boolean().default(!1),aiSessionWorkspaceSelection:s.z.boolean().default(!1),aiSessionPersistenceSettings:s.z.boolean().default(!1),gitCliCredentialBroker:s.z.boolean().optional(),gitCredentialProxy:s.z.boolean().optional(),aiSessionTimeline:mt.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:dt.optional(),aiSessionProviders:it.optional()}).passthrough(),ut=s.z.object({features:lt.default(function(){return{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}})}).passthrough();function pt(e){const t={features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}};if(!e||"object"!=typeof e||Array.isArray(e))return t;const n=e,i=n.features;if(!i||"object"!=typeof i||Array.isArray(i))return t;const o=i,r={appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]};for(const e of["appRuntime","tty","gui","browser","screenshots","logs","aiSessionWorkspaceSelection","aiSessionPersistenceSettings","gitCliCredentialBroker","gitCredentialProxy"]){const t=s.z.boolean().safeParse(o[e]);t.success&&(r[e]=t.data)}const a=mt.safeParse(o.aiSessionTimeline);a.success&&(r.aiSessionTimeline=a.data);const c=dt.safeParse(o.aiSessionConversationAttachments);c.success&&(r.aiSessionConversationAttachments=c.data);const m=it.safeParse(o.aiSessionProviders);return m.success&&(r.aiSessionProviders=m.data),ut.parse({...n,features:{...o,...r}})}function gt(e){return pt(e).features.aiSessionConversationAttachments}function zt(e){return pt(e).features.aiSessionProviders}function ft(e,t){const n=gt(e);return"metadata"===t?n.metadataAgents:"content"===t?n.contentAgents:n.uploadAgents}function bt(e){return pt(e).features.aiSessionTimeline}function yt(e,t){const n=bt(e);return"session-read"===t?n.sessionReadAgents:"turn-read"===t?n.turnReadAgents:n.liveItemAgents}const ht=s.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),xt=s.z.string().datetime(),It=s.z.record(s.z.string(),s.z.string()).default({}),At=s.z.record(s.z.string(),s.z.string()).default({}),vt=s.z.object({encoding:s.z.enum(["utf8","base64"]),data:s.z.string()}).strict().superRefine((e,t)=>{"base64"===e.encoding&&Buffer.from(e.data,"base64").toString("base64")!==e.data&&t.addIssue({code:"custom",path:["data"],message:"Node tunnel binary body must use canonical base64 encoding."})}),St=/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/,kt=/^sha256:([a-fA-F0-9]{64})$/,jt=/^(?:localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::[1-9][0-9]{0,4})?$/,wt=/^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*$/;function Ct(e){const t=e.trim();if(!t||t.length>512||t.includes("://")||/\s/.test(t))throw new Error("Docker image reference must not contain a URL scheme or whitespace.");const n=t.indexOf("@");if(-1!==n&&n!==t.lastIndexOf("@"))throw new Error("Docker image reference contains more than one digest separator.");const i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=i?kt.exec(i):void 0;if(i&&!r)throw new Error("Docker image digest must use sha256 followed by 64 hexadecimal characters.");const a=o.lastIndexOf("/"),s=o.lastIndexOf(":"),c=s>a,m=c?o.slice(s+1):void 0,d=c?o.slice(0,s):o;if(m&&!St.test(m))throw new Error("Docker image tag is invalid.");if(!m&&!r)throw new Error("Docker image reference must include an explicit tag or sha256 digest.");const l=d.split("/");if(!l.length||l.some(e=>!e))throw new Error("Docker image repository path is invalid.");const u=l.length>1&&(l[0].includes(".")||l[0].includes(":")||"localhost"===l[0]),p=u?l.slice(1):l;if(u&&!jt.test(l[0].toLowerCase()))throw new Error("Docker image registry host or port is invalid.");if(!p.length||p.some(e=>!wt.test(e)))throw new Error("Docker image repository names must be lowercase and use valid separators.");const g=l.map((e,t)=>u&&0===t?e.toLowerCase():e).join("/"),z=r?`sha256:${r[1].toLowerCase()}`:void 0;return`${g}${m?`:${m}`:""}${z?`@${z}`:""}`}function Rt(e){const t=Ct(e),n=t.indexOf("@"),i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=o.lastIndexOf("/"),a=o.lastIndexOf(":"),s=a>r;return{reference:t,repository:s?o.slice(0,a):o,tag:s?o.slice(a+1):void 0,digest:i}}const Nt=s.z.string().trim().min(1).max(512).transform((e,t)=>{try{return Ct(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}}),Et=s.z.string().trim().transform((e,t)=>{const n=kt.exec(e);return n?`sha256:${n[1].toLowerCase()}`:(t.addIssue({code:"custom",message:"Docker image digest must use sha256 followed by 64 hexadecimal characters."}),s.z.NEVER)}),Tt=s.z.object({codexModelHash:ht.nullable().optional(),claudeModelHash:ht.nullable().optional(),opencodeModelHash:ht.nullable().optional()}).strict().default({}),Pt=s.z.object({imageId:ht,tag:s.z.string().trim().min(1).max(128).regex(St).optional()}).strict(),_t=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("image"),imageSelection:Pt}).strict(),s.z.object({type:s.z.literal("template"),environmentTemplateId:ht}).strict()]),Ot=s.z.enum(["creating","ready","failed","deleting"]),Lt=s.z.enum(["linux","darwin","win32","freebsd","openbsd","aix","sunos","unknown"]),Mt=s.z.enum(["x64","arm64","arm","ia32","ppc64","s390x","riscv64","unknown"]),Dt=s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048),phase:s.z.enum(["validate","commit","inspect","security-check","persist","delete","recovery"]).optional()}).strict(),Ft=s.z.object({templateId:ht,nodeId:ht,imageId:Et,name:s.z.string().trim().min(1).max(160),platform:Lt,architecture:Mt}).strict(),Ut=s.z.enum(["data","agent-home","workspace"]),Vt=s.z.object({deleteVolumes:s.z.boolean()}).strict(),$t=s.z.object({role:Ut,name:s.z.string().trim().min(1).max(255),mountPath:s.z.string().trim().startsWith("/").max(4096),status:s.z.enum(["deleted","retained","missing","failed"]),error:s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048)}).strict().optional()}).strict(),qt=s.z.object({instanceId:ht,containerDeleted:s.z.boolean(),completed:s.z.boolean(),deletedVolumes:s.z.array($t),retainedVolumes:s.z.array($t),volumeResults:s.z.array($t)}).strict(),Bt={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"};function Ht(e,t){if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;return{imageId:"string"==typeof t.imageId&&Bt[t.imageId]||t.imageId,..."string"==typeof t.tag?{tag:t.tag}:{}}}if("string"==typeof t)return{imageId:Bt[t]||t}}const Gt=s.z.object({id:ht,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),source:s.z.enum(["builtin","custom"]),availability:s.z.enum(["available","missing-dependency"]),capabilities:s.z.object({automation:s.z.enum(["cdp"]).optional(),supportsCwdSelection:s.z.boolean().default(!1)}).strict().default({supportsCwdSelection:!1}),diagnosticCode:s.z.enum(["APP_EXECUTABLE_NOT_FOUND"]).optional()}).strict(),Kt=s.z.object({code:s.z.enum(["APP_CATALOG_INVALID"]),message:s.z.string().trim().min(1).max(500)}).strict(),Wt=s.z.object({items:s.z.array(Gt).max(256),observedAt:xt,issues:s.z.array(Kt).max(32).default([])}).strict(),Yt=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),sourceInstanceId:ht,nodeId:ht,imageId:Et.optional(),internalTag:s.z.string().trim().min(1).max(512).optional(),platform:Lt.optional(),architecture:Mt.optional(),sizeBytes:s.z.number().int().nonnegative().optional(),status:Ot,error:Dt.optional(),createdAt:xt,updatedAt:xt}).strict().superRefine((e,t)=>{if("ready"===e.status)for(const n of["imageId","internalTag","platform","architecture","sizeBytes"])void 0===e[n]&&t.addIssue({code:"custom",path:[n],message:`Ready environment template requires ${n}.`});"failed"!==e.status||e.error||t.addIssue({code:"custom",path:["error"],message:"Failed environment template requires an error diagnostic."})}),Xt=s.z.enum(["apt","dnf","brew","npm"]),Jt=s.z.enum(["user","passwordless-sudo","root"]),Zt=s.z.object({platform:Lt,arch:Mt,installers:s.z.array(Xt).max(8),privilege:Jt,installerAccess:s.z.object({npmGlobalWritable:s.z.boolean().optional()}).strict().optional()}).strict(),Qt=s.z.enum(["installed","not-installed","broken","unsupported"]),en=s.z.enum(["recipe","bundled","external","none"]),tn=s.z.object({code:s.z.enum(["BUNDLED","EXTERNALLY_MANAGED","ALREADY_INSTALLED","NOT_INSTALLED","UNSUPPORTED_PLATFORM","INSTALLER_UNAVAILABLE","INSTALLER_NOT_WRITABLE","INSUFFICIENT_PRIVILEGE","OPERATION_IN_PROGRESS"]),message:s.z.string().trim().min(1).max(500)}).strict(),nn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),description:s.z.string().trim().max(500).optional(),state:Qt,managementSource:en,version:s.z.string().trim().max(120).optional(),canInstall:s.z.boolean(),canUninstall:s.z.boolean(),installReason:tn.optional(),uninstallReason:tn.optional(),activeJobId:ht.optional()}).strict(),on=s.z.enum(["install","uninstall"]),rn=s.z.enum(["queued","running","succeeded","failed","cancelled","interrupted"]),an=s.z.object({current:s.z.number().finite().nonnegative().optional(),total:s.z.number().finite().positive().optional(),unit:s.z.string().trim().min(1).max(40).optional()}).strict().refine(e=>void 0===e.total||void 0===e.current||e.current<=e.total,{message:"Progress current must not exceed total.",path:["current"]}),sn=s.z.object({executable:s.z.string().trim().min(1).max(4096),args:s.z.array(s.z.string().max(4096)).max(128)}).strict(),cn=s.z.object({code:s.z.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),message:s.z.string().trim().min(1).max(4096),retryable:s.z.boolean(),sessionIds:s.z.array(ht).max(64).optional()}).strict(),mn=s.z.object({id:ht,requestId:ht.optional(),appId:ht,operation:on,state:rn,phase:s.z.string().trim().min(1).max(120).optional(),progress:an.optional(),command:sn.optional(),logTail:s.z.string().max(32768).optional(),logTruncated:s.z.boolean().optional(),error:cn.optional(),requestedAt:xt,startedAt:xt.optional(),finishedAt:xt.optional(),updatedAt:xt}).strict(),dn=s.z.object({streamId:ht,sequence:s.z.number().int().nonnegative(),capabilities:Zt,apps:s.z.array(nn).max(256),activeJobs:s.z.array(mn).max(256),recentJobs:s.z.array(mn).max(256),observedAt:xt}).strict(),ln=s.z.object({requestId:ht.optional()}).strict(),un=s.z.object({job:mn}).strict(),pn=s.z.object({type:s.z.literal("app-management"),streamId:ht,sequence:s.z.number().int().nonnegative(),observedAt:xt,job:mn.optional(),snapshot:dn.optional()}).strict().refine(e=>void 0!==e.job||void 0!==e.snapshot,{message:"An app management event requires a job or snapshot."}),gn=s.z.object({component:s.z.enum(["control-plane","node-agent","controlled-instance"]),packageName:s.z.string().trim().max(160).optional(),packageVersion:s.z.string().trim().max(80).optional(),protocolVersion:at.optional(),buildId:s.z.string().trim().max(160).optional(),builtAt:s.z.string().trim().max(120).optional(),gitCommit:s.z.string().trim().max(120).optional(),imageRef:s.z.string().trim().max(512).optional(),imageDigest:s.z.string().trim().max(240).optional()}).strict(),zn=s.z.object({data:s.z.object({ok:s.z.literal(!0),role:s.z.literal("control-plane"),protocolVersion:at,build:gn.extend({component:s.z.literal("control-plane"),packageVersion:s.z.string().trim().min(1).max(80)}).loose(),serverTime:xt}).loose()}).loose(),fn=s.z.enum(["stable","beta","alpha"]),bn=s.z.object({packageName:s.z.literal("@task-handoff/controlled-instance"),version:s.z.string().trim().min(1).max(80),platform:s.z.string().trim().min(1).max(40),arch:s.z.string().trim().min(1).max(40),formatVersion:s.z.number().int().positive(),launcherAbi:s.z.number().int().positive(),entrypoint:s.z.string().trim().min(1).max(512),sha256:s.z.string().regex(/^[a-f0-9]{64}$/)}).strict(),yn=s.z.object({code:s.z.enum(["INSTANCE_RUNTIME_VERSION_MISMATCH","INSTANCE_RUNTIME_ARTIFACT_UNAVAILABLE","INSTANCE_RUNTIME_ARTIFACT_INVALID","INSTANCE_RUNTIME_INSTALL_FAILED","INSTANCE_RUNTIME_RESTART_FAILED","INSTANCE_RUNTIME_VERIFICATION_FAILED","INSTANCE_BASE_RUNTIME_INCOMPATIBLE","NODE_UPDATE_PREFLIGHT_FAILED","NODE_UPDATE_FAILED","LEGACY_INSTANCE_UPDATE_RETIRED"]),message:s.z.string().trim().min(1).max(4096),expectedVersion:s.z.string().trim().min(1).max(80).optional(),actualVersion:s.z.string().trim().min(1).max(80).optional(),retryable:s.z.boolean().default(!1)}).strict(),hn=s.z.object({desiredVersion:s.z.string().trim().min(1).max(80),actualVersion:s.z.string().trim().min(1).max(80).optional(),phase:s.z.enum(["pending","draining","installing","restarting","verifying","matched","failed"]),attempt:s.z.number().int().nonnegative().default(0),lastAttemptAt:xt.optional(),matchedAt:xt.optional(),error:yn.optional()}).strict(),xn=s.z.object({runningInstanceCount:s.z.number().int().nonnegative(),stoppedInstanceCount:s.z.number().int().nonnegative(),activeInstanceCount:s.z.number().int().nonnegative(),restartInstanceCount:s.z.number().int().nonnegative(),runningInstanceIds:s.z.array(ht).max(1024).default([]),stoppedInstanceIds:s.z.array(ht).max(1024).default([]),activeInstanceIds:s.z.array(ht).max(1024).default([])}).strict(),In=s.z.object({phase:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),desiredVersion:s.z.string().trim().min(1).max(80),nodeVersion:s.z.string().trim().min(1).max(80).optional(),expectedInstanceIds:s.z.array(ht).max(1024).default([]),expectedInstanceCount:s.z.number().int().nonnegative(),matchedInstanceCount:s.z.number().int().nonnegative(),pendingInstanceCount:s.z.number().int().nonnegative(),failedInstanceCount:s.z.number().int().nonnegative(),deferredInstanceCount:s.z.number().int().nonnegative().default(0)}).strict(),An=s.z.object({channel:fn.default("stable")}).strict(),vn=s.z.object({source:s.z.literal("npm"),channel:fn,currentVersion:s.z.string().trim().max(240).optional(),availableVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(bn).default([]),impact:xn,updateAvailable:s.z.boolean(),supported:s.z.boolean().default(!0),reason:s.z.string().trim().max(2048).optional(),checkedAt:xt,preflightToken:s.z.string().trim().min(16).max(240).optional()}).strict(),Sn=s.z.object({id:ht,nodeId:ht,source:s.z.literal("npm"),channel:fn,fromVersion:s.z.string().trim().max(240).optional(),toVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(bn).default([]),impact:xn,rollout:In,status:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),error:yn.optional(),startedAt:xt.optional(),completedAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict(),kn=s.z.object({channel:fn,targetVersion:s.z.string().trim().min(1).max(240),preflightToken:s.z.string().trim().min(16).max(240)}).strict(),jn=s.z.object({type:s.z.enum(["branch","tag"]),name:s.z.string().trim().min(1).max(240)}).strict(),wn=s.z.object({type:s.z.literal("commit"),commit:s.z.string().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict(),Cn=s.z.discriminatedUnion("type",[jn,wn]),Rn=s.z.object({type:s.z.enum(["none","ssh-key","https-token"]).default("none"),secretId:s.z.string().trim().min(1).max(120).optional()}).strict(),Nn=s.z.object({depth:s.z.number().int().positive().max(1e5).optional(),submodules:s.z.boolean().default(!1),lfs:s.z.boolean().default(!1),subdirectory:s.z.string().trim().max(240).refine(e=>!e.startsWith("/")&&!e.split("/").some(e=>".."===e),"subdirectory must be a relative path within the repository").transform(e=>e.split("/").filter(e=>e&&"."!==e).join("/")).default("")}).strict(),En=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""}),defaultImageSelection:Pt.optional(),labels:It,createdAt:xt,updatedAt:xt}).strict(),Tn=s.z.object({id:ht,nodeId:ht,name:s.z.string().trim().min(1).max(160),path:s.z.string().trim().min(1).max(4096),defaultImageSelection:Pt.optional(),labels:It,createdAt:xt,updatedAt:xt}).strict(),Pn=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("git-repository"),repositoryId:ht.optional(),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("git-template"),url:s.z.string().trim().min(1).max(2048),templateId:s.z.string().trim().min(1).max(120).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("local-folder"),localFolderId:ht.optional(),path:s.z.string().trim().min(1).max(4096),ownerNodeId:ht.optional()}).strict()]);function _n(e){const t=Pn.parse(e);return"local-folder"===t.type?t:Pn.parse({...t,auth:{type:"none"}})}const On=_n,Ln=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]),path:s.z.string().trim().min(1).max(4096).default("/workspace"),volumeName:s.z.string().trim().max(240).optional(),readOnly:s.z.boolean().default(!1)}).strict(),Mn=s.z.enum(["codex","claude","opencode"]),Dn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),source:Pn,defaultImageSelection:Pt.optional(),defaultNodeId:ht.optional(),workspacePolicy:Ln,labels:It,createdAt:xt,updatedAt:xt}).strict(),Fn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),endpoint:s.z.string().trim().min(1).max(2048),key:s.z.string().trim().min(1).max(4096),model:s.z.string().trim().min(1).max(240),app:Mn,enabled:s.z.boolean().default(!0),order:s.z.number().int().min(0).max(1e6).default(0),labels:It,createdAt:xt,updatedAt:xt}).strict(),Un=Fn,Vn=Fn.omit({key:!0}).extend({keyPreview:s.z.string().trim().min(1).max(160),keySet:s.z.boolean()}).strict(),$n=Vn.extend({referenceCount:s.z.number().int().min(0)}).strict(),qn=s.z.object({instanceId:ht,codexModelHash:ht.optional(),claudeModelHash:ht.optional(),opencodeModelHash:ht.optional(),updatedAt:xt}).strict(),Bn=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("control-plane"),name:Fn.shape.name,enabled:Fn.shape.enabled,order:Fn.shape.order}).strict(),s.z.object({type:s.z.literal("node"),nodeId:ht,name:Fn.shape.name,enabled:Fn.shape.enabled,order:Fn.shape.order,referenceCount:s.z.number().int().min(0)}).strict()]),Hn=s.z.object({id:ht,model:Vn,locations:s.z.array(Bn).min(1),referenceCount:s.z.number().int().min(0).default(0)}).strict(),Gn=s.z.object({nodeId:ht,code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2e3)}).strict(),Kn=s.z.object({models:s.z.array(Hn),nodeDiagnostics:s.z.array(Gn).default([]),updatedAt:xt}).strict(),Wn=Fn.omit({id:!0,createdAt:!0,updatedAt:!0}).strict(),Yn=Wn.partial().strict(),Xn=Fn,Jn=s.z.object({modelSelection:Tt,codexModelHash:ht.optional(),claudeModelHash:ht.optional(),opencodeModelHash:ht.optional()}).strict(),Zn=s.z.enum(["market","custom"]),Qn=s.z.enum(["active","deprecated","yanked"]),ei=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("builtin"),key:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({kind:s.z.literal("remote"),url:s.z.string().trim().url().max(2048),mediaType:s.z.enum(["image/png","image/jpeg","image/webp"]).optional(),digest:Et.optional()}).strict()]),ti=s.z.array(s.z.string().trim().min(1).max(80)).default([]),ni=s.z.array(s.z.string().trim().min(1).max(120)).default([]),ii=s.z.record(s.z.string().trim().min(2).max(35),s.z.string().trim().min(1).max(4096)),oi=s.z.object({os:s.z.string().trim().min(1).max(40),architecture:s.z.string().trim().min(1).max(40),digest:Et.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional()}).strict(),ri=s.z.object({name:s.z.string().trim().min(1).max(128).regex(St),version:s.z.string().trim().min(1).max(160).optional(),reference:Nt,manifestDigest:Et.optional(),publishedAt:xt.optional(),platforms:s.z.array(oi).default([]),status:Qn.default("active")}).strict(),ai=s.z.object({id:ht,publisher:s.z.string().trim().min(1).max(160),slug:s.z.string().trim().min(1).max(160),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().min(1).max(4096),localizedDescriptions:ii.optional(),cover:ei.optional(),repository:s.z.string().trim().min(1).max(512),defaultTag:s.z.string().trim().min(1).max(128).regex(St),tags:s.z.array(ri).min(1),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,status:Qn.default("active")}).strict().superRefine((e,t)=>{e.tags.some(t=>t.name===e.defaultTag)||t.addIssue({code:"custom",path:["defaultTag"],message:"Market defaultTag must identify one of the image tags."})}),si=s.z.object({protocolVersion:at,catalogId:ht,revision:s.z.string().trim().min(1).max(240),source:s.z.enum(["embedded","remote","cache"]),generatedAt:xt,expiresAt:xt.optional(),items:s.z.array(ai)}).strict(),ci=s.z.object({source:s.z.enum(["embedded","remote","cache"]),state:s.z.enum(["ready","refreshing","stale","failed"]),revision:s.z.string().trim().min(1).max(240),updatedAt:xt,error:s.z.string().trim().max(4096).optional()}).strict(),mi=s.z.object({id:ht,origin:s.z.literal("custom"),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei.optional(),reference:Nt,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,createdAt:xt,updatedAt:xt}).strict(),di=mi,li=s.z.object({name:s.z.string().trim().min(1).max(128).regex(St),version:s.z.string().trim().min(1).max(160).optional(),reference:Nt,manifestDigest:Et.optional(),status:Qn}).strict(),ui=s.z.object({id:ht,origin:Zn,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),availableTags:s.z.array(li),reference:Nt,digest:Et.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,readOnly:s.z.boolean(),lifecycleStatus:Qn.optional(),market:s.z.object({catalogId:ht,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional()}).strict(),pi=s.z.object({id:ht,origin:Zn,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei.optional(),repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),requestedReference:Nt,resolvedDigest:Et.optional(),resolvedReference:Nt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,market:s.z.object({catalogId:ht,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional(),createdAt:xt,updatedAt:xt}).strict(),gi=s.z.object({phase:s.z.enum(["checking-image","pulling-image","resolving-image","ready","failed"]),requestedReference:Nt,generation:s.z.number().int().nonnegative().default(0),error:s.z.string().trim().max(4096).optional(),startedAt:xt,updatedAt:xt}).strict(),zi=s.z.object({instanceId:ht,generation:s.z.number().int().nonnegative(),requestedReference:Nt,sequence:s.z.number().int().nonnegative(),observedAt:xt}).strict(),fi=zi.extend({data:s.z.string().min(1).max(65536),replay:s.z.boolean().optional()}).strict(),bi=zi.extend({outcome:s.z.enum(["succeeded","failed"])}).strict(),yi=zi.extend({status:s.z.enum(["connecting","pulling","extracting","complete","failed"]),layers:s.z.object({total:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),downloaded:s.z.number().int().nonnegative(),downloading:s.z.number().int().nonnegative(),extracting:s.z.number().int().nonnegative()}).strict(),bytes:s.z.object({current:s.z.number().finite().nonnegative(),total:s.z.number().finite().positive()}).strict().optional(),percent:s.z.number().finite().min(0).max(100).optional(),message:s.z.string().trim().min(1).max(500),terminalTail:s.z.string().max(262144).optional(),terminalTruncated:s.z.boolean().optional()}).strict();function hi(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","origin","name","description","localizedDescriptions","cover","reference","repository","tag","image","registry","pullPolicy","capabilities","optionalApps","defaultEnv","labels","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({imageId:"string"==typeof n.id?n.id:void 0,field:e});const o="string"==typeof n.id?n.id:void 0,r="string"==typeof n.image?n.image:void 0;void 0!==r&&t?.({imageId:o,field:"image"}),Object.prototype.hasOwnProperty.call(n,"registry")&&t?.({imageId:o,field:"registry"});let a,s="string"==typeof n.reference?n.reference:r;if(s)try{s=Ct(s)}catch{if(!s.includes("@")&&s.lastIndexOf(":")<=s.lastIndexOf("/"))try{s=Ct(`${s}:latest`),t?.({imageId:o,field:"reference:implicit-latest"})}catch{}}try{a=s?Rt(s):void 0}catch{}return{id:n.id,origin:"custom",name:n.name,description:n.description,localizedDescriptions:n.localizedDescriptions,cover:so(n.cover,["kind","key","url","mediaType","digest"]),reference:a?.reference??s,repository:a?.repository??n.repository,tag:a?.tag??n.tag,pullPolicy:n.pullPolicy??"if-not-present",capabilities:n.capabilities,optionalApps:n.optionalApps,defaultEnv:n.defaultEnv,labels:n.labels,createdAt:n.createdAt,updatedAt:n.updatedAt}}const xi=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("direct")}).strict(),s.z.object({kind:s.z.literal("control-plane-proxy"),proxyId:ht,proxyBindingId:ht,targetNodeId:ht}).strict()]),Ii=s.z.object({pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative(),nextRetryAt:xt.optional()}).strict(),Ai=s.z.object({nodeId:ht,inviteId:ht.optional()}).strict(),vi=s.z.discriminatedUnion("status",[s.z.object({id:ht,status:s.z.literal("pending")}).strict(),s.z.object({id:ht,status:s.z.literal("completed"),nodeId:ht}).strict()]),Si=s.z.object({reachability:s.z.enum(["unknown","reachable","unreachable"]),bindingStatus:s.z.enum(["unknown","active","revoked"]),bindingRevision:s.z.number().int().positive().optional(),streamId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().nonnegative().optional(),observedAt:xt.optional(),target:Xe.optional(),lastError:He.optional(),updatedAt:xt}).strict(),ki=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),connectionMode:s.z.enum(["local-ipc","local-loopback","direct-http","reverse-wss","control-plane-proxy"]).default("direct-http"),connectionPath:xi.default({kind:"direct"}),connectionEnabled:s.z.boolean().default(!0),auth:s.z.object({mode:s.z.enum(["local-static-key","paired-hmac","proxy-binding"]).default("local-static-key"),keyId:ht.optional(),secret:s.z.string().trim().max(4096).optional(),pairedAt:xt.optional(),pairing:s.z.object({status:s.z.enum(["pending","paired","expired"]).default("pending"),joinToken:s.z.string().trim().max(4096).optional(),expiresAt:xt.optional()}).strict().optional()}).strict().default({mode:"local-static-key"}),endpoint:s.z.string().trim().max(2048).optional(),controlEndpoint:s.z.string().trim().max(2048).optional(),containerEndpoint:s.z.string().trim().max(2048).optional(),publicWebBase:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),proxyState:Si.optional(),appInventory:Wt.optional(),labels:It,lastSeenAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict().superRefine((e,t)=>{"control-plane-proxy"===e.connectionPath.kind&&"control-plane-proxy"!==e.connectionMode&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy paths require control-plane-proxy connection mode."}),"control-plane-proxy"===e.connectionMode&&"control-plane-proxy"!==e.connectionPath.kind&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy nodes require a control-plane-proxy connection path."})}),ji=s.z.object({nodeId:ht,status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:xt.nullable(),connectionPhase:s.z.enum(["connecting","handshaking","healthy","reconnecting","suspect","offline"]).nullable(),connectionDiagnostics:Ii.nullable(),proxyState:Si.nullable()}).strict(),wi=s.z.object({id:ht,nodeId:ht,name:s.z.string().trim().min(1).max(160),type:s.z.enum(["docker","kubernetes","local"]),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),accessStrategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),labels:It,createdAt:xt,updatedAt:xt}).strict(),Ci=s.z.object({instanceId:ht,runtimeKind:s.z.literal("docker"),state:s.z.enum(["pending","available","stopped","unavailable"]),sampledAt:xt,cpu:s.z.object({usagePercent:s.z.number().nonnegative()}).strict().optional(),memory:s.z.object({usageBytes:s.z.number().nonnegative(),limitBytes:s.z.number().nonnegative().optional(),usagePercent:s.z.number().nonnegative().optional()}).strict().optional(),network:s.z.object({rxBytes:s.z.number().nonnegative(),txBytes:s.z.number().nonnegative()}).strict().optional(),blockIo:s.z.object({readBytes:s.z.number().nonnegative(),writeBytes:s.z.number().nonnegative()}).strict().optional(),pids:s.z.number().int().nonnegative().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),Ri=s.z.object({registry:s.z.boolean().default(!1),runtimeBroker:s.z.boolean().default(!1),workspaceProvisioning:s.z.object({docker:s.z.boolean().default(!1),kubernetes:s.z.boolean().default(!1),local:s.z.boolean().default(!1)}).strip().default({docker:!1,kubernetes:!1,local:!1})}).strip(),Ni=s.z.object({modelEndpointProbe:s.z.boolean().optional(),aiSessionHistoryLimit:s.z.boolean().optional(),aiSessionAttachmentRetention:s.z.boolean().optional(),aiSessionFileAttachmentLimit:s.z.boolean().optional(),folderPlaces:s.z.boolean().optional(),localFolderNameUpdate:s.z.boolean().optional(),managedGitCredentials:Ri.optional()}).strip();function Ei(e){const t=Ni.safeParse(e),n=t.success?t.data:{};return{...n,managedGitCredentials:Ri.parse(n.managedGitCredentials||{})}}const Ti=s.z.object({status:s.z.enum(["healthy","congested","recovering"]),activeOutputs:s.z.number().int().nonnegative(),bufferedBytes:s.z.number().int().nonnegative(),peakBufferedBytes:s.z.number().int().nonnegative(),coalescedEvents:s.z.number().int().nonnegative(),oversizedEvents:s.z.number().int().nonnegative().optional(),peakEventBytes:s.z.number().int().nonnegative().optional(),congestedSince:xt.optional(),lastCongestedAt:xt.optional()}).strip(),Pi=s.z.object({ok:s.z.boolean().optional(),role:s.z.string().optional(),nodeId:ht.optional(),platform:Lt.optional(),arch:Mt.optional(),protocolVersion:at.optional(),capabilities:Ni.optional(),build:gn.strip().optional(),process:s.z.object({pid:s.z.number().int().positive(),startIdentity:s.z.string().trim().min(1).optional()}).strip().optional(),listener:s.z.object({host:s.z.string().trim().min(1),port:s.z.number().int().min(1).max(65535)}).strip().optional(),instanceProxy:s.z.object({requests:s.z.number().int().nonnegative(),active:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),aborted:s.z.number().int().nonnegative(),limitRejected:s.z.number().int().nonnegative(),responseBytes:s.z.number().nonnegative(),totalDurationMs:s.z.number().nonnegative(),maxResponseBytes:s.z.number().int().nonnegative()}).partial().strip().optional(),eventTransport:Ti.optional(),serverTime:xt.optional()}).strip(),_i=s.z.object({bindScope:s.z.enum(["loopback","all-ipv4"]),port:s.z.number().int().min(1).max(65535)}).strict(),Oi=_i.extend({host:s.z.enum(["127.0.0.1","0.0.0.0"]),status:s.z.enum(["listening","error"]),source:s.z.enum(["bootstrap","persisted"]),error:s.z.string().trim().max(2048).optional()}).strict(),Li=_i,Mi=s.z.object({nodeId:ht,joinToken:s.z.string().trim().min(1),expiresAt:xt}).passthrough(),Di=s.z.object({nodeId:ht,keyId:ht,secret:s.z.string().regex(/^[A-Za-z0-9_-]{32,128}$/),pairedAt:xt}).strict(),Fi=s.z.object({id:ht,keyId:ht,name:s.z.string().trim().min(1).max(160).optional(),pairedAt:xt,updatedAt:xt,current:s.z.boolean()}).passthrough(),Ui=s.z.object({keyId:ht,revoked:s.z.literal(!0),revokedAt:xt}).strict(),Vi=s.z.object({id:ht,pairingKeyId:ht,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:xt,updatedAt:xt,status:s.z.enum(["disabled","connecting","connected","reconnecting","failed"]),pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative().optional(),nextRetryAt:xt.optional(),lastConnectedAt:xt.optional(),lastDisconnectedAt:xt.optional(),error:s.z.string().optional()}).passthrough(),$i=s.z.object({pairing:Fi,connection:s.z.object({id:ht,pairingKeyId:ht,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:xt,updatedAt:xt}).passthrough(),tunnel:s.z.object({status:s.z.enum(["disabled","saved","connecting","connected","failed"]),error:s.z.string().trim().max(2048).optional()}).passthrough()}).passthrough(),qi=s.z.object({deleted:s.z.boolean().optional()}).passthrough(),Bi=s.z.object({repository:s.z.string().trim().optional(),tag:s.z.string().trim().optional(),id:s.z.string().trim(),createdSince:s.z.string().trim().optional(),size:s.z.string().trim().optional(),sizeBytes:s.z.number().int().nonnegative().optional(),reference:s.z.string().trim().min(1),repoDigests:s.z.array(s.z.string().trim().min(1).max(512)).default([])}).passthrough(),Hi=s.z.object({image:ui,status:s.z.enum(["available","pull-required","unknown"]),localImage:Bi.optional(),localSizeBytes:s.z.number().int().nonnegative().optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),Gi=s.z.lazy(()=>s.z.object({name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096),children:s.z.array(Gi)}).passthrough()),Ki=s.z.object({kind:s.z.enum(["home","root"]),name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096)}).passthrough(),Wi=s.z.object({status:s.z.number().int().min(100).max(599).optional(),headers:s.z.record(s.z.string(),s.z.string()).optional(),bodyBase64:s.z.string().optional()}).passthrough(),Yi=s.z.object({strategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),vnc:s.z.string().trim().max(2048).optional(),tty:s.z.string().trim().max(2048).optional(),logs:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict(),Xi=s.z.object({...Yi.shape}).strict(),Ji=s.z.object({strategy:s.z.enum(["control-plane-proxy","direct-port","node-proxy","kubernetes-ingress","kubernetes-port-forward"]).default("control-plane-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),ws:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict().default({strategy:"control-plane-proxy",status:"unknown"}),Zi=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]).optional(),status:s.z.enum(["unknown","pending","ready","failed"]).default("unknown"),path:s.z.string().trim().max(4096).optional(),resolvedCommit:s.z.string().trim().max(120).optional(),error:s.z.string().trim().max(2048).optional()}).passthrough(),Qi=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),projectId:ht.optional(),source:Pn,sourceSnapshot:s.z.record(s.z.string(),s.z.unknown()).default({}),modelSelection:Tt,nodeId:ht,runtimeId:ht,imageSelection:Pt.optional(),environmentSource:_t.optional(),environmentTemplateOrigin:Ft.optional(),imageSnapshot:pi.optional(),imageProvisioning:gi.optional(),stateRevision:s.z.number().int().min(0).default(0),processIncarnationId:s.z.string().trim().min(1).max(120).optional(),status:s.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]).default("created"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),connectionStatus:s.z.enum(["unknown","online","offline","endpoint-unreachable"]).default("unknown"),agentStatus:s.z.enum(["unknown","online","offline"]).default("unknown"),targetStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),uiAccessStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),protocolVersion:at.optional(),instanceVersion:s.z.string().trim().max(80).optional(),build:gn.optional(),runtimeVersion:hn.optional(),ready:s.z.boolean().default(!1),capabilities:ut.default(ct),appInventory:Wt.optional(),config:s.z.object({autoImportAgentConfigs:s.z.boolean().default(!0),defaultCodexPermissionMode:H.default("ask"),aiSessionHistoryLimit:s.z.number().int().min(1).max(500).default(50),aiSessionAttachmentRetentionDays:s.z.number().int().min(0).max(365).default(30),aiSessionMaxFileAttachmentBytes:s.z.number().int().positive().max(z).default(g)}).strict().default({autoImportAgentConfigs:!0,defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:g}),workspace:Zi.default({status:"unknown"}),target:Yi.default({strategy:"direct-port",status:"unknown"}),access:Ji,apps:s.z.object({runningCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),updatedAt:xt.optional(),revision:s.z.number().int().min(0).optional()}).strict().default({runningCount:0,problemCount:0}),aiSessions:ye.default(()=>({runningCount:0,waitingCount:0,staleCount:0,sessions:[],updatedAt:(new Date).toISOString()})),triggers:s.z.object({enabledCount:s.z.number().int().min(0).default(0),runningCount:s.z.number().int().min(0).default(0),errorCount:s.z.number().int().min(0).default(0),configs:s.z.array(s.z.object({configHash:s.z.string().trim().min(1),config:Ee,deployments:s.z.array(Pe).default([]),runtime:s.z.array(_e).default([])}).strict()).default([]),recentRuns:s.z.array(Oe).default([])}).strict().optional(),runtime:s.z.object({kind:s.z.string().trim().max(80).optional(),containerName:s.z.string().trim().max(240).optional(),containerId:s.z.string().trim().max(240).optional(),workspacePath:s.z.string().trim().max(4096).optional(),pid:s.z.number().int().positive().optional(),port:s.z.number().int().positive().max(65535).optional(),labels:s.z.record(s.z.string(),s.z.string()).default({})}).strict().default({labels:{}}),registrationToken:s.z.string().trim().min(1).max(240).optional(),lastHeartbeatAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict(),eo=s.z.union([Qi.transform(e=>({instance:e,gitWorkspaceProvisioningOperationId:void 0})),s.z.object({instance:Qi,gitWorkspaceProvisioningOperationId:ht.optional()}).strict()]),to=s.z.preprocess(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e;return t.instance&&"object"==typeof t.instance&&!Array.isArray(t.instance)?{instance:io(t.instance),..."string"==typeof t.gitWorkspaceProvisioningOperationId?{gitWorkspaceProvisioningOperationId:t.gitWorkspaceProvisioningOperationId}:{}}:io(t)},eo),no=s.z.object({instanceId:Qi.shape.id,revision:s.z.number().int().min(0),updatedAt:xt,status:Qi.shape.status.unwrap(),health:Qi.shape.health.unwrap(),connectionStatus:Qi.shape.connectionStatus.unwrap(),accessStatus:s.z.enum(["reachable","endpoint-unreachable"]),imageProvisioning:gi.optional(),workspace:Zi,runtime:Qi.shape.runtime.unwrap(),runtimeVersion:hn.optional(),ready:s.z.boolean(),lastHeartbeatAt:xt.optional()}).strict();function io(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(Object.keys(Qi.shape)),o={};for(const[e,r]of Object.entries(n))i.has(e)?o[e]=r:t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e});if(n.capabilities&&"object"==typeof n.capabilities&&!Array.isArray(n.capabilities)){const e={...n.capabilities};Object.prototype.hasOwnProperty.call(e,"apps")&&(t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:"capabilities.apps"}),delete e.apps),o.capabilities=pt(e)}else o.capabilities=pt(void 0);o.appInventory=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["observedAt","items","issues"].includes(e))&&t?.({instanceId:n,field:"appInventory"});const o={observedAt:i.observedAt,items:Array.isArray(i.items)?i.items.map(e=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).some(e=>!["id","name","kind","source","availability","capabilities","diagnosticCode"].includes(e))&&t?.({instanceId:n,field:"appInventory.items"});const i=so(e,["id","name","kind","source","availability","diagnosticCode"]);return!i||"object"!=typeof i||Array.isArray(i)?i:{...i,capabilities:so(e.capabilities,["automation","supportsCwdSelection"])}}):i.items,issues:Array.isArray(i.issues)?i.issues.map(e=>so(e,["code","message"])):i.issues},r=Wt.safeParse(o);return r.success?r.data:void 0}(n.appInventory,t,"string"==typeof n.id?n.id:void 0),o.source=ao(n.source,t,"string"==typeof n.id?n.id:void 0),o.sourceSnapshot=n.sourceSnapshot&&"object"==typeof n.sourceSnapshot&&!Array.isArray(n.sourceSnapshot)?n.sourceSnapshot:{},o.build=oo(gn,n.build,"build",t,"string"==typeof n.id?n.id:void 0),o.aiSessions=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=Array.isArray(i.sessions)?i.sessions.flatMap((e,i)=>{const o=oo(be,e,`aiSessions.sessions.${i}`,t,n);return o?[o]:[]}):[],r={runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,waitingCount:"number"==typeof i.waitingCount&&Number.isInteger(i.waitingCount)&&i.waitingCount>=0?i.waitingCount:0,staleCount:"number"==typeof i.staleCount&&Number.isInteger(i.staleCount)&&i.staleCount>=0?i.staleCount:0,sessions:o,updatedAt:xt.safeParse(i.updatedAt).success?i.updatedAt:(new Date).toISOString()};return Object.keys(i).some(e=>!["runningCount","waitingCount","staleCount","sessions","updatedAt"].includes(e))&&t?.({instanceId:n,field:"aiSessions"}),ye.parse(r)}(n.aiSessions,t,"string"==typeof n.id?n.id:void 0),o.triggers=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["enabledCount","runningCount","errorCount","configs","recentRuns"].includes(e))&&t?.({instanceId:n,field:"triggers"});const o=(e,i,o)=>Array.isArray(e)?e.flatMap((e,r)=>{const a=oo(i,e,`${o}.${r}`,t,n);return a?[a]:[]}):[],r=Array.isArray(i.configs)?i.configs.flatMap((e,i)=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];const r=e;Object.keys(r).some(e=>!["configHash","config","deployments","runtime"].includes(e))&&t?.({instanceId:n,field:`triggers.configs.${i}`});const a=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return;const o=e,r=so(o,["configHash","name","description","createdAt","updatedAt"]);if(o.source&&"object"==typeof o.source&&!Array.isArray(o.source)){const e=o.source,t="schedule"===e.type?"interval"===e.scheduleKind?["type","scheduleKind","intervalMs"]:"daily"===e.scheduleKind?["type","scheduleKind","timeOfDay","timezone"]:["type","scheduleKind","weekdays","timeOfDay","timezone"]:"file-change"===e.type?["type","roots","globs","ignore","debounceMs"]:["type","agent","statuses","phases"];r.source=so(e,t)}return r.action=so(o.action,["promptTemplate"]),r.policy=so(o.policy,["cooldownMs","maxConcurrentRuns","whenBusy"]),oo(Ee,r,t,n,i)}(r.config,`triggers.configs.${i}.config`,t,n);return"string"==typeof r.configHash&&a?[{configHash:r.configHash,config:a,deployments:o(r.deployments,Pe,`triggers.configs.${i}.deployments`),runtime:o(r.runtime,_e,`triggers.configs.${i}.runtime`)}]:[]}):[];return{enabledCount:"number"==typeof i.enabledCount&&Number.isInteger(i.enabledCount)&&i.enabledCount>=0?i.enabledCount:0,runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,errorCount:"number"==typeof i.errorCount&&Number.isInteger(i.errorCount)&&i.errorCount>=0?i.errorCount:0,configs:r,recentRuns:o(i.recentRuns,Oe,"triggers.recentRuns")}}(n.triggers,t,"string"==typeof n.id?n.id:void 0),o.apps=oo(Qi.shape.apps.unwrap(),so(n.apps,["runningCount","problemCount","updatedAt","revision"]),"apps",t,"string"==typeof n.id?n.id:void 0)||{runningCount:0,problemCount:0},o.config=oo(Qi.shape.config.unwrap(),so(n.config,["autoImportAgentConfigs","defaultCodexPermissionMode","aiSessionHistoryLimit","aiSessionAttachmentRetentionDays","aiSessionMaxFileAttachmentBytes"]),"config",t,"string"==typeof n.id?n.id:void 0)||{autoImportAgentConfigs:!0,defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:g},o.modelSelection=oo(Tt.unwrap(),so(n.modelSelection,["codexModelHash","claudeModelHash","opencodeModelHash"]),"modelSelection",t,"string"==typeof n.id?n.id:void 0)||{},o.imageSnapshot=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return e;const o=e,r=hi(o),{reference:a,...s}=r,c=o.requestedReference??a;let m;try{m="string"==typeof c?Rt(c):void 0}catch{}const d={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"},l="string"==typeof o.id?o.id:"string"==typeof t?t:void 0,u="market"===o.origin||l&&d[l]?"market":"custom";return void 0===o.image&&void 0===o.reference||n?.({instanceId:i,field:"imageSnapshot.reference"}),{...s,id:l&&d[l]?d[l]:l,origin:u,repository:m?.repository??o.repository,tag:m?.tag??o.tag,requestedReference:m?.reference??c,resolvedDigest:o.resolvedDigest,resolvedReference:o.resolvedReference,downloadSizeBytes:o.downloadSizeBytes,market:"market"===u?so(o.market,["catalogId","catalogRevision","publisher","version"])??{catalogId:"task_handoff_embedded",catalogRevision:"legacy",publisher:"task-handoff"}:void 0}}(n.imageSnapshot,n.imageId,t,"string"==typeof n.id?n.id:void 0);const r="string"==typeof n.imageId?{img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"}[n.imageId]||n.imageId:void 0,a=so(n.imageSelection,["imageId","tag"]);o.imageSelection=a||(r?{imageId:r,tag:o.imageSnapshot?.tag}:void 0),o.imageProvisioning=oo(gi,so(n.imageProvisioning,["phase","requestedReference","generation","error","startedAt","updatedAt"]),"imageProvisioning",t,"string"==typeof n.id?n.id:void 0),o.runtimeVersion=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=e=>{if("string"!=typeof e)return;const t=e.trim();return t&&t.length<=80?t:void 0},r=o(i.desiredVersion);if(!r)return void t?.({instanceId:n,field:"runtimeVersion.desiredVersion"});const a=new Set(hn.shape.phase.options),s="string"==typeof i.phase?i.phase:"pending",c=a.has(s)?s:{idle:"pending",queued:"pending",checking:"pending",downloading:"installing",updating:"installing",completed:"matched",succeeded:"matched",ready:"matched",error:"failed"}[s]||"pending";let m;if(c!==s&&t?.({instanceId:n,field:"runtimeVersion.phase"}),i.error&&"object"==typeof i.error&&!Array.isArray(i.error)){const e=i.error,r="string"==typeof e.message?e.message.trim().slice(0,4096):"";if(r){const i=new Set(yn.shape.code.options),a="string"==typeof e.code&&i.has(e.code)?e.code:"INSTANCE_RUNTIME_INSTALL_FAILED";a!==e.code&&t?.({instanceId:n,field:"runtimeVersion.error.code"});const s=o(e.expectedVersion),c=o(e.actualVersion);m={code:a,message:r,...s?{expectedVersion:s}:{},...c?{actualVersion:c}:{},retryable:!0===e.retryable}}else t?.({instanceId:n,field:"runtimeVersion.error"})}"string"==typeof i.error&&i.error.trim()&&(m={code:"INSTANCE_RUNTIME_INSTALL_FAILED",message:i.error.trim().slice(0,4096),expectedVersion:r,...o(i.actualVersion)?{actualVersion:o(i.actualVersion)}:{},retryable:!1});const d=o(i.actualVersion),l=xt.safeParse(i.lastAttemptAt),u=xt.safeParse(i.matchedAt);return void 0===i.lastAttemptAt||l.success||t?.({instanceId:n,field:"runtimeVersion.lastAttemptAt"}),void 0===i.matchedAt||u.success||t?.({instanceId:n,field:"runtimeVersion.matchedAt"}),{desiredVersion:r,...d?{actualVersion:d}:{},phase:c,attempt:"number"==typeof i.attempt&&Number.isInteger(i.attempt)&&i.attempt>=0?i.attempt:0,...l.success?{lastAttemptAt:l.data}:{},...u.success?{matchedAt:u.data}:{},...m?{error:m}:{}}}(n.runtimeVersion,t,"string"==typeof n.id?n.id:void 0),o.workspace=oo(Zi,n.workspace,"workspace",t,"string"==typeof n.id?n.id:void 0)||{status:"unknown"},o.environmentSource=oo(_t,n.environmentSource,"environmentSource",t,"string"==typeof n.id?n.id:void 0),o.environmentTemplateOrigin=oo(Ft,n.environmentTemplateOrigin,"environmentTemplateOrigin",t,"string"==typeof n.id?n.id:void 0),o.runtime=oo(Qi.shape.runtime.unwrap(),n.runtime,"runtime",t,"string"==typeof n.id?n.id:void 0)||{labels:{}},o.target=oo(Yi,so(n.target??n.endpoints,["strategy","web","api","vnc","tty","logs","status"]),"target",t,"string"==typeof n.id?n.id:void 0)||{strategy:"direct-port",status:"unknown"},o.access=oo(Ji,so(n.access,["strategy","web","api","ws","status"]),"access",t,"string"==typeof n.id?n.id:void 0)||{strategy:"control-plane-proxy",status:"unknown"};for(const[e,i]of Object.entries(Qi.shape))Object.prototype.hasOwnProperty.call(o,e)&&!i.safeParse(o[e]).success&&i.safeParse(void 0).success&&(delete o[e],t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e}));return o}function oo(e,t,n,i,o){if(!t||"object"!=typeof t||Array.isArray(t))return;let r=structuredClone(t),a=!1;for(let t=0;t<20;t+=1){const t=e.safeParse(r);if(t.success)return a&&i?.({instanceId:o,field:n}),t.data;let s=!1;for(const e of t.error.issues){if("unrecognized_keys"!==e.code)continue;const t=ro(r,e.path);if(t&&"object"==typeof t&&!Array.isArray(t))for(const n of e.keys)Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0,a=!0)}if(!s){const a=structuredClone(r);let s=!1;for(const e of t.error.issues){if(!e.path.length||"string"!=typeof e.path.at(-1))continue;const t=ro(a,e.path.slice(0,-1)),n=e.path.at(-1);t&&"object"==typeof t&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0)}if(s){const t=e.safeParse(a);if(t.success)return i?.({instanceId:o,field:n}),t.data}break}}i?.({instanceId:o,field:n})}function ro(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function ao(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return e;const i=e,o=i.type,r=Pn.options.find(e=>e.shape.type.value===o);if(!r)return e;const a="local-folder"===o?["type","localFolderId","path","ownerNodeId"]:"git-template"===o?["type","url","templateId","ref","auth","clone"]:["type","repositoryId","url","provider","ref","auth","clone"],s=so(i,a);if("local-folder"!==o){const e=function(e,t,n){const i=e&&"object"==typeof e&&!Array.isArray(e)?e:void 0,o=Cn.safeParse(so(i,["type","name","commit"]));if(o.success)return o.data;const r="string"==typeof i?.commit?i.commit.trim():"",a="string"==typeof i?.name?i.name.trim():"",s=r?Cn.safeParse({type:"commit",commit:r}):a?Cn.safeParse({type:"tag"===i?.type?"tag":"branch",name:a}):Cn.safeParse({type:"branch",name:"main"});return s.success?(t?.({instanceId:n,field:"source.ref"}),s.data):void 0}(i.ref,t,n),o=oo(Rn,so(i.auth,["type","secretId"]),"source.auth",t,n),r=oo(Nn,so(i.clone,["depth","submodules","lfs","subdirectory"]),"source.clone",t,n);e?s.ref=e:delete s.ref,o?s.auth=o:delete s.auth,r?s.clone=r:delete s.clone}const c=oo(r,s,"source",t,n);return c?(Object.keys(i).some(e=>!a.includes(e))&&t?.({instanceId:n,field:"source"}),c):s}function so(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e;return Object.fromEntries(t.filter(e=>Object.prototype.hasOwnProperty.call(n,e)).map(e=>[e,n[e]]))}const co=s.z.object({instanceId:ht.optional(),projectId:ht.optional(),source:Pn.optional(),nodeId:ht.optional(),runtimeId:ht.optional(),imageSelection:Pt.optional(),instanceVersion:s.z.string().trim().max(80).optional(),protocolVersion:at,build:gn.optional(),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),capabilities:ut.default(ct),appInventory:Wt.optional(),target:Xi.optional(),workspace:Zi.default({status:"unknown"}),registrationToken:s.z.string().trim().max(240).optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{rt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol register payload requires appInventory."})}),mo=s.z.object({status:Qi.shape.status.optional(),health:Qi.shape.health.optional(),protocolVersion:at,build:gn.optional(),capabilities:Qi.shape.capabilities.optional(),appInventory:Wt.optional(),apps:Qi.shape.apps.optional(),aiSessions:Qi.shape.aiSessions.optional(),triggers:Qi.shape.triggers.optional(),workspace:Zi.optional(),target:Xi.optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{rt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol heartbeat payload requires appInventory."})}),lo=s.z.enum(["web","telegram","wechat","dingding","lark"]),uo=s.z.object({id:ht,channel:lo,name:s.z.string().trim().min(1).max(160),enabled:s.z.boolean().default(!1),token:s.z.string().trim().max(4096).optional(),defaultChatId:s.z.string().trim().max(240).optional(),allowedUserIds:s.z.array(s.z.string().trim().min(1).max(240)).default([]),pollIntervalMs:s.z.number().int().positive().max(6e4).default(3e3),settings:s.z.record(s.z.string(),s.z.unknown()).default({}),createdAt:xt,updatedAt:xt}).strict(),po=s.z.object({id:ht,channel:lo,bridgeId:ht.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional(),activeProjectId:ht.optional(),activeInstanceId:ht.optional(),activeAiSessionId:s.z.string().trim().min(1).max(120).optional(),lastUsedAt:xt,createdAt:xt,updatedAt:xt}).strict(),go=s.z.object({source:s.z.object({type:s.z.literal("chat-gateway").default("chat-gateway"),channel:lo,bridgeId:ht.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional()}).strict(),message:s.z.object({text:s.z.string().trim().max(2e4).default(""),attachments:s.z.array(V).max(6).default([])}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>f&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),target:s.z.object({instanceId:ht,aiSessionId:s.z.string().trim().min(1).max(120)}).strict().optional()}).strict(),zo=s.z.object({id:ht,instanceId:ht,projectId:ht.optional(),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().max(240).optional(),result:s.z.string().default(""),timeoutMs:s.z.number().positive().optional(),source:s.z.string().trim().max(120).optional(),kind:s.z.enum(["task","approval"]).default("task"),status:s.z.enum(["pending","unreachable"]).default("pending"),error:s.z.string().trim().max(2048).optional(),lastSeenAt:xt}).strict();var fo,bo,yo=d(Object.freeze({__proto__:null,AiSessionConversationAttachmentCapabilitiesSchema:dt,AiSessionProviderCapabilitiesSchema:it,AiSessionProviderCapabilitySchema:nt,AiSessionTimelineCapabilitiesSchema:mt,AppInstallPrivilegeSchema:Jt,AppInstallerSchema:Xt,AppManagementCommandSchema:sn,AppManagementErrorSchema:cn,AppManagementEventSchema:pn,AppManagementJobResponseSchema:un,AppManagementJobSchema:mn,AppManagementJobStateSchema:rn,AppManagementOperationRequestSchema:ln,AppManagementOperationSchema:on,AppManagementProgressSchema:an,AppManagementSnapshotSchema:dn,ApplyUpdateRequestSchema:kn,BuildInfoSchema:gn,CONTROL_PLANE_PROTOCOL_VERSION:ot,ChatBridgeConfigSchema:uo,ChatChannelSchema:lo,ChatGatewayMessageSchema:go,ChatSessionBindingSchema:po,ControlPlaneHealthResponseSchema:zn,ControlledInstanceCapabilitiesSchema:ut,ControlledInstanceFeatureCapabilitiesSchema:lt,ControlledInstanceHeartbeatSchema:mo,ControlledInstanceRegisterSchema:co,ControlledInstanceSchema:Qi,CreateNodeModelSchema:Wn,CustomImageProfileSchema:mi,DEFAULT_IMAGE_COVER:{kind:"builtin",key:"default-image-cover"},DeployNodeModelSchema:Xn,DockerImageDigestSchema:Et,DockerImageReferenceSchema:Nt,EnvironmentSourceSchema:_t,EnvironmentTemplateErrorSchema:Dt,EnvironmentTemplateOriginSchema:Ft,EnvironmentTemplateSchema:Yt,EnvironmentTemplateStatusSchema:Ot,FederatedModelGroupSchema:Hn,FederatedModelRegistrySchema:Kn,FinalComputerArchSchema:Mt,FinalComputerCapabilitiesSchema:Zt,FinalComputerPlatformSchema:Lt,GitAuthSchema:Rn,GitCloneOptionsSchema:Nn,GitRefSchema:Cn,GitRepositorySchema:En,ImageCoverSchema:ei,ImageOriginSchema:Zn,ImageProfileSchema:di,ImageProvisioningSchema:gi,ImagePullProgressSchema:yi,ImagePullTerminalEventType:{Output:"image.pull.terminal.output",Finished:"image.pull.terminal.finished",Progress:"image.pull.progress",Snapshot:"image.pull.snapshot"},ImagePullTerminalFinishedSchema:bi,ImagePullTerminalOutputSchema:fi,ImageSelectionSchema:Pt,InstanceAccessSchema:Ji,InstanceAppInventoryIssueSchema:Kt,InstanceAppInventoryItemSchema:Gt,InstanceAppInventorySchema:Wt,InstanceDeleteInputSchema:Vt,InstanceDeleteResultSchema:qt,InstanceImageSnapshotSchema:pi,InstanceLifecycleEventType:{Snapshot:"instance.lifecycle.snapshot"},InstanceLifecycleSnapshotSchema:no,InstanceResourceMetricsEventType:{Snapshot:"instance.metrics.snapshot"},InstanceResourceMetricsSchema:Ci,InstanceTargetSchema:Yi,InstanceVolumeDispositionSchema:$t,InstanceVolumeRoleSchema:Ut,LEGACY_MARKET_IMAGE_IDS:Bt,LocalDockerImageSchema:Bi,MARKET_CATALOG_PROTOCOL_VERSION:"2026-07-29",ManagedAppActionReasonSchema:tn,ManagedAppManagementSourceSchema:en,ManagedAppProjectionSchema:nn,ManagedAppStateSchema:Qt,MarketCatalogSnapshotSchema:si,MarketCatalogStatusSchema:ci,MarketImagePlatformArtifactSchema:oi,MarketImageSchema:ai,MarketImageTagSchema:ri,MarketLifecycleStatusSchema:Qn,ModelAppSchema:Mn,ModelConfigSchema:Fn,ModelLocationSchema:Bn,ModelRegistryNodeDiagnosticSchema:Gn,ModelSelectionSchema:Tt,NODE_TUNNEL_PROTOCOL_VERSION:"2026-08-01",NodeAgentCapabilitiesSchema:Ni,NodeAgentControlPlaneConnectionCreateResultSchema:$i,NodeAgentControlPlaneConnectionSchema:Vi,NodeAgentControlPlanePairingSchema:Fi,NodeAgentDeleteResponseSchema:qi,NodeAgentEventTransportHealthSchema:Ti,NodeAgentExternalListenerConfigSchema:_i,NodeAgentExternalListenerSchema:Oi,NodeAgentHealthSchema:Pi,NodeAgentInstanceLifecycleResultSchema:to,NodeAgentInstanceProxyRawResponseSchema:Wi,NodeAgentManagedGitCapabilitiesSchema:Ri,NodeAgentPairingCompleteResultSchema:Di,NodeAgentPairingInviteResponseSchema:Mi,NodeAgentPairingSelfRevokeResultSchema:Ui,NodeConnectionDiagnosticsSchema:Ii,NodeConnectionPathSchema:xi,NodeControlPlaneProxyStateSchema:Si,NodeFolderPlaceSchema:Ki,NodeFolderTreeEntrySchema:Gi,NodeImageAvailabilitySchema:Hi,NodeJoinInviteStatusSchema:vi,NodeJoinedEventSchema:Ai,NodeLocalFolderSchema:Tn,NodeModelAssignmentSchema:qn,NodeModelConfigSchema:Un,NodeModelPublicRecordSchema:$n,NodeRolloutSummarySchema:In,NodeRuntimeSchema:wi,NodeSchema:ki,NodeStateProjectionEventSchema:ji,NodeTunnelRequestBodySchema:vt,NodeUpdateImpactSchema:xn,PendingRouteSchema:zo,ProjectSchema:Dn,ProjectSourceSchema:Pn,ProtocolVersionSchema:at,PublicModelConfigSchema:Vn,RuntimeArtifactIdentitySchema:bn,RuntimeConvergenceErrorSchema:yn,RuntimeVersionStateSchema:hn,SelectableImageSchema:ui,SelectableImageTagSchema:li,UpdateChannelSchema:fn,UpdateCheckRequestSchema:An,UpdateCheckResultSchema:vn,UpdateJobSchema:Sn,UpdateNodeAgentExternalListenerSchema:Li,UpdateNodeModelAssignmentSchema:Jn,UpdateNodeModelSchema:Yn,WorkspacePolicySchema:Ln,WorkspaceStatusSchema:Zi,aiSessionConversationAttachmentCapabilities:gt,aiSessionConversationAttachmentCapabilityAgents:ft,aiSessionProviderCapabilities:zt,aiSessionProviderCapability:function(e,t){return zt(e).find(e=>e.agent===t)},aiSessionTimelineCapabilities:bt,aiSessionTimelineCapabilityAgents:yt,controlledInstanceAcceptsTraffic:function(e){return!1!==e.ready&&(!e.runtimeVersion||["matched","failed"].includes(e.runtimeVersion.phase))},decodeNodeTunnelRequestBody:function(e){if(null==e)return;const t=vt.parse(e);return"utf8"===t.encoding?t.data:Buffer.from(t.data,"base64")},encodeNodeTunnelRequestBody:function(e){if(null!=e){if("string"==typeof e)return{encoding:"utf8",data:e};if(Buffer.isBuffer(e))return{encoding:"base64",data:e.toString("base64")};if(e instanceof ArrayBuffer)return{encoding:"base64",data:Buffer.from(e).toString("base64")};if(ArrayBuffer.isView(e))return{encoding:"base64",data:Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64")};throw new TypeError("Node tunnel request body must be a string or binary buffer.")}},migrateLegacyImageSelection:Ht,modelConfigHash:function(e){const t={app:Mn.parse(e.app),endpoint:Fn.shape.endpoint.parse(e.endpoint),key:Fn.shape.key.parse(e.key),model:Fn.shape.model.parse(e.model)};return`mdl_${a.createHash("sha256").update(JSON.stringify(t)).digest("hex")}`},normalizeControlledInstanceCapabilities:pt,normalizeDockerImageReference:Ct,normalizeNodeAgentCapabilities:Ei,parseDockerImageReference:Rt,parseStoredControlledInstance:function(e,t){return Qi.parse(io(e,t))},projectSourceWithoutGitCredential:_n,projectSourceWithoutLegacyGitSecretId:On,safeParseStoredControlledInstance:function(e,t){return Qi.safeParse(io(e,t))},sanitizeCrossVersionControlledInstanceHeartbeat:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=["status","health","protocolVersion","build","capabilities","appInventory","apps","aiSessions","triggers","workspace","target","processIncarnationId"],i=new Set(n);for(const n of Object.keys(e))i.has(n)||t?.({field:n,action:"ignored"});return so(e,n)},sanitizeCrossVersionControlledInstanceRegister:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["instanceId","projectId","source","nodeId","runtimeId","imageSelection","instanceVersion","protocolVersion","build","controlMode","capabilities","appInventory","target","workspace","registrationToken","processIncarnationId"],o=new Set([...i,"imageId"]);for(const e of Object.keys(n))o.has(e)||t?.({field:e,action:"ignored"});return Object.prototype.hasOwnProperty.call(n,"imageId")&&t?.({field:"imageId",action:"migrated"}),{...so(n,i),imageSelection:Ht(n.imageSelection,n.imageId)}},sanitizeStoredControlledInstance:io,sanitizeStoredEnvironmentTemplate:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","sourceInstanceId","nodeId","imageId","internalTag","platform","architecture","sizeBytes","status","error","createdAt","updatedAt"]),o="string"==typeof n.id?n.id:void 0;for(const e of Object.keys(n))i.has(e)||t?.({templateId:o,field:e});const r=so(n,[...i]);if(n.error&&"object"==typeof n.error&&!Array.isArray(n.error)){const e=n.error;for(const n of Object.keys(e))["code","message","phase"].includes(n)||t?.({templateId:o,field:`error.${n}`});r.error=so(e,["code","message","phase"])}return r},sanitizeStoredImageProfile:hi,sanitizeStoredMarketCatalogSnapshot:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["protocolVersion","catalogId","revision","source","generatedAt","expiresAt","items"];for(const e of Object.keys(n))i.includes(e)||t?.({field:e});const o=Array.isArray(n.items)?n.items.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return t?.({field:"items"}),[];const n=e,i=["id","publisher","slug","name","description","localizedDescriptions","cover","repository","defaultTag","tags","capabilities","optionalApps","defaultEnv","labels","status"];for(const e of Object.keys(n))i.includes(e)||t?.({itemId:"string"==typeof n.id?n.id:void 0,field:e});const o=ai.safeParse(so(n,i));return o.success?[o.data]:(t?.({itemId:"string"==typeof n.id?n.id:void 0,field:"invalid-record"}),[])}):n.items;return{...so(n,i),items:o}},sanitizeStoredNode:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","connectionMode","connectionPath","connectionEnabled","auth","endpoint","controlEndpoint","containerEndpoint","publicWebBase","status","health","capabilities","proxyState","appInventory","labels","lastSeenAt","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({field:e});const o=n.auth&&"object"==typeof n.auth&&!Array.isArray(n.auth)?so(n.auth,["mode","keyId","secret","pairedAt","pairing"]):n.auth;o&&"object"==typeof o&&"pairing"in o&&(o.pairing=so(o.pairing,["status","joinToken","expiresAt"]));const r=n.connectionPath&&"object"==typeof n.connectionPath&&!Array.isArray(n.connectionPath)?"control-plane-proxy"===n.connectionPath.kind?so(n.connectionPath,["kind","proxyId","proxyBindingId","targetNodeId"]):so(n.connectionPath,["kind"]):{kind:"direct"},a=n.proxyState&&"object"==typeof n.proxyState&&!Array.isArray(n.proxyState)?so(n.proxyState,["reachability","bindingStatus","bindingRevision","streamId","revision","observedAt","target","lastError","updatedAt"]):n.proxyState;if(a&&"object"==typeof a){const e=a;e.target=so(e.target,["id","name","status","health","lastSeenAt","capabilities"]),e.lastError=so(e.lastError,["code","message","retryable","details"])}return{...Object.fromEntries(Object.entries(n).filter(([e])=>i.has(e))),auth:o,connectionPath:r,proxyState:a}},sanitizeStoredNodeLocalFolder:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,...i}=t;return{...i,defaultImageSelection:Ht(t.defaultImageSelection,n)}},sanitizeStoredProject:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,defaultRuntimeId:i,...o}=t;return{...o,source:ao(t.source),defaultImageSelection:Ht(t.defaultImageSelection,n)}},supportsAiSessionAttachmentRetentionSettings:function(e){return gt(e).retentionSettings},supportsAiSessionConversationAttachmentCapability:function(e,t,n){return ft(e,n).includes(t)},supportsAiSessionFileSizeLimitSettings:function(e){return!0===gt(e).fileSizeLimitSettings},supportsAiSessionPersistenceSettings:function(e){return pt(e).features.aiSessionPersistenceSettings},supportsAiSessionTimelineCapability:function(e,t,n){return yt(e,n).includes(t)},supportsAiSessionWorkspaceSelection:function(e){return pt(e).features.aiSessionWorkspaceSelection},supportsGitCliCredentialBroker:function(e){const t=pt(e).features;return t.gitCredentialProxy||t.gitCliCredentialBroker},supportsGitCredentialProxy:function(e){return pt(e).features.gitCredentialProxy},supportsNodeAiSessionFileAttachmentLimit:function(e){return!0===Ni.safeParse(e).data?.aiSessionFileAttachmentLimit},supportsNodeFolderPlaces:function(e){return!0===Ni.safeParse(e).data?.folderPlaces},supportsNodeGitCredentialRuntimeBroker:function(e){return Ei(e).managedGitCredentials.runtimeBroker},supportsNodeGitWorkspaceProvisioning:function(e,t){return Ei(e).managedGitCredentials.workspaceProvisioning[t]},supportsNodeLocalFolderNameUpdate:function(e){return!0===Ni.safeParse(e).data?.localFolderNameUpdate},supportsNodeManagedGitCredentialRegistry:function(e){return Ei(e).managedGitCredentials.registry}})),ho=function(){if(bo)return fo;bo=1;const t=e,{spawnSync:i}=n;return fo={processStartIdentity:function(e,n=process.platform){if(Number.isInteger(e)&&!(e<=0)){if("linux"===n)try{const n=t.readFileSync(`/proc/${e}/stat`,"utf8"),i=n.lastIndexOf(")");if(i<0)return;const o=n.slice(i+2).trim().split(/\s+/)[19];return o?`linux:${o}`:void 0}catch{return}if(["darwin","freebsd","openbsd","aix","sunos"].includes(n)){const t=i("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:1e3}),o=0===t.status?t.stdout.trim().replace(/\s+/g," "):"";return o?`${n}:${o}`:void 0}if("win32"===n){const t=i("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`],{encoding:"utf8",timeout:2e3}),n=0===t.status?t.stdout.trim():"";return/^\d+$/.test(n)?`win32:${n}`:void 0}}}}}();class xo extends Error{code;lockPath;owner;constructor(e,t,n={}){const i=t?.pid?` pid ${t.pid}`:"";super(`${n.label||"Process"} is already running${i}. Lock: ${e}`),this.name="ProcessSingletonError",this.code=n.code||"PROCESS_ALREADY_RUNNING",this.lockPath=e,this.owner=t}}function Io(e){return t.join(e,"owner.json")}function Ao(e){return t.join(e,"initializing.json")}function vo(e){return t.join(e,"recovering.json")}function So(e){return Number.isInteger(e)&&Number(e)>0}const ko=function(t){try{const n=JSON.parse(e.readFileSync(Io(t),"utf8"));if(So(n.pid)&&"string"==typeof n.startTime){const e=n;return{pid:e.pid,hostname:"string"==typeof e.hostname&&e.hostname?e.hostname:c.hostname(),component:e.component||"server-update",command:"string"==typeof e.command?e.command:"",acquiredAt:"string"==typeof e.createdAt&&Number.isFinite(Date.parse(e.createdAt))?e.createdAt:new Date(0).toISOString(),token:"string"==typeof e.token&&e.token?e.token:`legacy:${e.pid}:${e.startTime}`,startIdentity:e.startTime.startsWith("linux:")?e.startTime:`linux:${e.startTime}`}}if(!(So(n.pid)&&"string"==typeof n.hostname&&n.hostname&&"string"==typeof n.command&&"string"==typeof n.acquiredAt&&Number.isFinite(Date.parse(n.acquiredAt))&&"string"==typeof n.token&&n.token))return;return n}catch{return}};function jo(e){if(!So(e))return!1;try{return process.kill(Number(e),0),!0}catch(e){return"EPERM"===e.code}}function wo(e){if(!e||!jo(e.pid))return!1;if(!e.startIdentity)return!0;const t=ho.processStartIdentity(e.pid);return void 0===t||t===e.startIdentity}function Co(n,i){const o=t.join(n,`.owner-${i.token}.tmp`);e.writeFileSync(o,`${JSON.stringify(i,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"});const r=No(n);if(r?.token!==i.token)throw To(o),new Error(`Process lock initialization was superseded: ${n}`);e.renameSync(o,Io(n)),To(Ao(n))}function Ro(n,i,o){const r=ko(n);if(r?.token!==i.token)return!1;const s={...i};for(const[e,t]of Object.entries(o))void 0===t?delete s[e]:Object.assign(s,{[e]:t});const c=t.join(n,`.owner-update-${i.token}-${a.randomUUID()}.tmp`);try{if(e.writeFileSync(c,`${JSON.stringify(s,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"}),ko(n)?.token!==i.token)return!1;e.renameSync(c,Io(n));for(const e of Object.keys(i))delete i[e];return Object.assign(i,s),!0}catch(e){if("ENOENT"===e.code)return!1;throw e}finally{To(c)}}function No(t){try{return JSON.parse(e.readFileSync(Ao(t),"utf8"))}catch{return}}function Eo(e){const t=No(e);return So(t?.pid)&&wo({pid:t.pid,startIdentity:t.startIdentity})}function To(t){try{e.unlinkSync(t)}catch(e){if("ENOENT"!==e.code)throw e}}function Po(){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,20)}function _o(t){try{const n=No(t),i=Date.parse(n?.startedAt||"");return Number.isFinite(i)?Math.max(0,Date.now()-i):Math.max(0,Date.now()-e.statSync(t).mtimeMs)}catch{return 0}}function Oo(n,i){try{return e.writeFileSync(vo(n),`${JSON.stringify({token:i,pid:process.pid,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),!0}catch(o){if("EEXIST"===o.code)return!!function(n){const i=vo(n),o=Lo(i),r=Date.parse(o?.startedAt||"");if(jo(o?.pid)||Number.isFinite(r)&&Date.now()-r<2e3)return!1;const s=t.join(n,`.recovering-${a.randomUUID()}.stale`);try{e.renameSync(i,s)}catch(e){if(["ENOENT","EEXIST"].includes(e.code||""))return!1;throw e}const c=Lo(s);if(c?.token===o?.token)return To(s),!0;try{e.linkSync(s,i)}catch(e){if("EEXIST"!==e.code)throw e}finally{To(s)}return!1}(n)&&Oo(n,i);if("ENOENT"===o.code)return!1;throw o}}function Lo(t){try{return JSON.parse(e.readFileSync(t,"utf8"))}catch{return}}function Mo(e,t){return Lo(vo(e))?.token===t}const Do="/run/task-handoff-server-update.lock";function Fo(t){const n={};if(!e.existsSync(t))return n;for(const i of e.readFileSync(t,"utf8").split(/\r?\n/)){if(!i||i.startsWith("#"))continue;const e=i.indexOf("=");e>0&&(n[i.slice(0,e)]=i.slice(e+1))}return n}var Uo,Vo=d(Object.freeze({__proto__:null,SERVER_UPDATE_LOCK_PATH:Do,acquireServerUpdateLock:function(n=Do,i={}){return function(n,i={}){e.mkdirSync(t.dirname(n),{recursive:!0});const o=ho.processStartIdentity(process.pid),r={pid:process.pid,hostname:c.hostname(),command:process.argv.join(" "),acquiredAt:(new Date).toISOString(),token:a.randomUUID(),...void 0!==i.component?{component:i.component}:{},...o?{startIdentity:o}:{},...void 0!==i.dataDir?{dataDir:i.dataDir}:{},...void 0!==i.host?{host:i.host}:{},...void 0!==i.port?{port:i.port}:{},...void 0!==i.instanceId?{instanceId:i.instanceId}:{}};for(let t=0;t<5;t+=1)try{return e.mkdirSync(n),e.writeFileSync(Ao(n),`${JSON.stringify({token:r.token,pid:r.pid,startIdentity:r.startIdentity,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),Co(n,r),{lockPath:n,owner:r,updateDetails:e=>Ro(n,r,e),release(){const t=ko(n);t?.token===r.token&&e.rmSync(n,{recursive:!0,force:!0})}}}catch(o){if("EEXIST"!==o.code)throw o;const r=ko(n);if(wo(r))throw new xo(n,r,i.error);if(!r&&(Eo(n)||_o(n)<(i.incompleteLockStaleMs??2e3))){if(t+1<5){Po();continue}throw new xo(n,void 0,i.error)}const s=a.randomUUID();if(!Oo(n,s)){if(t+1<5){Po();continue}throw new xo(n,ko(n),i.error)}const c=ko(n);if(wo(c))throw To(vo(n)),new xo(n,c,i.error);if(r?.token&&c?.token!==r.token){To(vo(n));continue}if(!Mo(n,s))continue;e.rmSync(n,{recursive:!0,force:!0})}const s=ko(n);throw new xo(n,s,i.error)}(n,{component:"server-update",incompleteLockStaleMs:i.legacyGraceMs??3e4,error:{label:"TaskHandoff server update",code:"SERVER_UPDATE_ALREADY_RUNNING"}}).release},cleanUpServerUpdateLockOnSignals:function(e){const t=new Map;for(const n of["SIGINT","SIGTERM","SIGHUP"]){const i=()=>{e(),process.removeListener(n,i),process.kill(process.pid,n)};t.set(n,i),process.on(n,i)}return()=>{for(const[e,n]of t)process.removeListener(e,n)}},currentServerInstallArgs:function(t={}){const n=Fo(t.controlPlaneEnvFile||"/etc/task-handoff/control-plane.env"),i=Fo(t.nodeAgentEnvFile||"/etc/task-handoff/node-agent.env");return["--service-user",(o=t.nodeAgentUnitFile||"/etc/systemd/system/task-handoff-node-agent.service",e.existsSync(o)&&e.readFileSync(o,"utf8").match(/^User=(.+)$/m)?.[1]||"root"),"--control-plane-data-dir",n.TASK_HANDOFF_CONTROL_PLANE_DATA_DIR||"/var/lib/task-handoff/control-plane","--node-agent-data-dir",i.TASK_HANDOFF_NODE_AGENT_DATA_DIR||"/var/lib/task-handoff/node-agent","--control-plane-host",n.TASK_HANDOFF_CONTROL_PLANE_HOST||"0.0.0.0","--control-plane-port",n.TASK_HANDOFF_CONTROL_PLANE_PORT||"8081","--node-agent-host",i.TASK_HANDOFF_NODE_AGENT_HOST||"127.0.0.1","--node-agent-port",i.TASK_HANDOFF_NODE_AGENT_PORT||"8091","--node-agent-ipc-path",i.TASK_HANDOFF_NODE_AGENT_IPC_PATH||"/run/task-handoff/node-agent.sock","--auth-mode",n.TASK_HANDOFF_CONTROL_PLANE_AUTH_MODE||"password",...n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR?["--static-dir",n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR]:[]];var o},globalPrefixFromModulePath:function(e){let n=t.resolve(e);for(;n!==t.dirname(n);){if("node_modules"===t.basename(n)&&"lib"===t.basename(t.dirname(n)))return t.dirname(t.dirname(n));n=t.dirname(n)}}})),$o=function(){if(Uo)return l;Uo=1,Object.defineProperty(l,"__esModule",{value:!0});const a=e,s=t,{spawnSync:c}=n,{Command:m,InvalidArgumentError:d}=i,u=o,p=r,{ControlPlaneHealthResponseSchema:g}=yo,{acquireServerUpdateLock:z,cleanUpServerUpdateLockOnSignals:f,globalPrefixFromModulePath:b}=Vo;function y(e){const t=g.safeParse(e);return t.success?t.data.data.build.packageVersion:void 0}function h(e){if(!s.isAbsolute(e))throw new d("must be an absolute path");return s.resolve(e)}const x=(new m).name("task-handoff-node-update-worker").description("Apply a detached TaskHandoff node update.").requiredOption("--job-file <path>","persisted update job file").requiredOption("--target-version <version>","exact semantic version",function(e){if(e.trim()!==e||/^[v=]/.test(e)||null===u.valid(e))throw new d("must be an exact semantic version");return e}).option("--service <name>","systemd service to restart","task-handoff-node-agent.service").option("--npm-command <path>","npm executable",process.env.TASK_HANDOFF_NPM_COMMAND||"npm").option("--control-plane-health-url <url>","local control-plane health endpoint",function(e){let t;try{t=new URL(e)}catch{throw new d("must be a valid loopback HTTP URL")}if(!["http:","https:"].includes(t.protocol)||!["127.0.0.1","localhost","::1"].includes(t.hostname))throw new d("must be a valid loopback HTTP URL");return t.toString()}).option("--install-prefix <path>","authoritative npm global prefix",h).option("--node-agent-ipc-path <path>","node-agent readiness socket",h).option("--registry <url>","npm registry URL").option("--standalone","complete the temporary job after service verification").parse(process.argv).opts(),I=x.jobFile,A=x.targetVersion,v=x.service,S=x.npmCommand,k=x.controlPlaneHealthUrl,j=x.installPrefix,w=x.nodeAgentIpcPath,C=x.registry,R=new Set(["succeeded","degraded","failed"]),N=new Set(["@task-handoff/node-agent","@task-handoff/server"]),E=["/etc/task-handoff/control-plane.env","/etc/task-handoff/node-agent.env","/etc/systemd/system/task-handoff-control-plane.service","/etc/systemd/system/task-handoff-node-agent.service"];function T(e,t){const n=JSON.parse(a.readFileSync(I,"utf8"));process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK&&function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(s.resolve(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK))({jobFile:I,observed:n});const i=`${I}.worker-lock`;a.mkdirSync(i);try{const n=JSON.parse(a.readFileSync(I,"utf8"));if(R.has(n.status)||!e.includes(n.status))return!1;const i="function"==typeof t?t(n):t,o={...n,...i,updatedAt:(new Date).toISOString()};return p.sync(I,`${JSON.stringify(o,null,2)}\n`,{encoding:"utf8"}),!0}finally{a.rmdirSync(i)}}function P(e,t){const n=c(e,t,{stdio:"inherit"});if(0!==n.status)throw new Error(`${e} exited with status ${n.status??"unknown"}`)}function _(e,t,n){const i=n?s.join(t,...n.split("/"),"node_modules",...e.split("/"),"package.json"):s.join(t,...e.split("/"),"package.json");try{return JSON.parse(a.readFileSync(i,"utf8")).version}catch(e){if("ENOENT"===e?.code)return;throw e}}function O(e,t){const n=_(e,t);if(n!==A)throw new Error(`Updated ${e} verification failed: expected ${A}, found ${n||"unknown"}.`)}function L(e){const t=["view",`${e}@${A}`,"dist.integrity","--json"];C&&t.push("--registry",C);const n=c(S,t,{encoding:"utf8"});if(0!==n.status)throw new Error(`Could not verify the ${e} npm artifact integrity.`);let i;try{i=JSON.parse(n.stdout)}catch{throw new Error(`npm returned invalid ${e} artifact integrity metadata.`)}if("string"!=typeof i||!/^sha(?:256|384|512)-[A-Za-z0-9+/=]+$/.test(i))throw new Error(`npm returned invalid ${e} artifact integrity metadata.`);return i}async function M(e,t=A,n=6e4){const i=Date.now()+n;let o="not reachable";for(;Date.now()<i;){try{if(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE){const e=y(JSON.parse(a.readFileSync(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE,"utf8")));if(e===t)return;o=`reported version ${String(e||"unknown")}`,await new Promise(e=>setTimeout(e,10));continue}const n=await fetch(e,{headers:{"cache-control":"no-cache"},signal:AbortSignal.timeout(2e3)}),i=y(await n.json().catch(()=>({})));if(n.ok&&i===t)return;o=n.ok?`reported version ${String(i||"unknown")}`:`returned HTTP ${n.status}`}catch(e){o=e instanceof Error?e.message:String(e)}await new Promise(e=>setTimeout(e,500))}throw new Error(`Control plane did not become healthy at ${e} with version ${t}: ${o}.`)}function D(e,t=3e4){const n=Date.now()+t;for(;Date.now()<n;){try{if(a.statSync(e).isSocket())return}catch{}Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250)}throw new Error(`Node agent socket was not ready after ${t}ms: ${e}`)}function F(e,t,n){const i=["install","--global","--prefix",e,`${t}@${n}`];C&&i.push("--registry",C),P(S,i)}return async function(){let e,t,n;try{if(!T(["queued"],e=>({status:"updating-node",rollout:{...e.rollout,phase:"updating-node"},startedAt:(new Date).toISOString(),error:void 0})))return;e=z(process.env.TASK_HANDOFF_SERVER_UPDATE_LOCK_PATH||void 0),t=f(e);const i=function(){const e=JSON.parse(a.readFileSync(I,"utf8")),t=`@${A}#`;if("string"!=typeof e.artifactRef||!e.artifactRef.startsWith("npm:")||!e.artifactRef.includes(t))throw new Error(`Update job does not pin npm integrity for version ${A}.`);const n=e.artifactRef.indexOf(t),i=e.artifactRef.slice(4,n),o=e.artifactRef.slice(n+t.length);if(!N.has(i)||!o)throw new Error("Update job does not identify a supported immutable npm artifact.");const r=L(i);if(r!==o)throw new Error(`${i} npm artifact integrity mismatch: expected ${o}, found ${String(r||"unknown")}.`);return{packageName:i,integrity:r}}(),o=i.packageName,r=b(process.argv[1]);if(j&&r&&j!==r)throw Object.assign(new Error(`Update prefix ${j} does not match the running package prefix ${r}.`),{code:"UPDATE_INSTALL_PREFIX_MISMATCH"});const m=r?void 0:c(S,["prefix","--global"],{encoding:"utf8"});if(m&&0!==m.status)throw new Error("Could not determine the npm global prefix.");const d=j||r||m?.stdout.trim();if(!d)throw new Error("Could not determine the npm global prefix.");const l=c(S,["root","--global","--prefix",d],{encoding:"utf8"});if(0!==l.status)throw new Error("Could not determine the npm global module root.");const u=l.stdout.trim(),g=[o];"@task-handoff/server"===o&&void 0!==_("@task-handoff/node-agent",u)&&g.push("@task-handoff/node-agent");const y=new Map(g.map(e=>[e,_(e,u)])),h="@task-handoff/server"===o?function(){const e=process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CONFIGURATION_ROOT;return e?E.map(t=>s.join(e,t.slice(1))):E}().map(e=>{try{const t=a.statSync(e);return{file:e,contents:a.readFileSync(e),mode:t.mode}}catch(t){if("ENOENT"===t?.code)return{file:e};throw t}}):[];let C=!1;n=async()=>{for(const e of[...g].reverse()){const t=y.get(e);t&&F(d,e,t)}if("@task-handoff/server"===o){C&&(function(e){for(const t of e)t.contents?(a.mkdirSync(s.dirname(t.file),{recursive:!0}),p.sync(t.file,t.contents,{mode:t.mode})):a.rmSync(t.file,{force:!0})}(h),P("systemctl",["daemon-reload"])),P("systemctl",["restart","task-handoff-control-plane.service"]);const e=y.get("@task-handoff/server");k&&e&&await M(k,e)}P("systemctl",["restart",v]),w&&D(w)};const R=new Map([[o,i.integrity]]);for(const e of g.slice(1))R.set(e,L(e));for(const e of g){if(F(d,e,A),L(e)!==R.get(e))throw new Error(`${e} npm artifact integrity changed during installation.`);O(e,u)}if("@task-handoff/server"===o){if(function(e){for(const t of["@task-handoff/control-plane","@task-handoff/node-agent","@task-handoff/controlled-instance"]){const n=_(t,e,"@task-handoff/server")||_(t,e);if(n!==A)throw new Error(`Updated @task-handoff/server does not provide ${t} ${A}; found ${n||"unknown"}.`)}}(u),!k)throw new Error("A control-plane health URL is required for a complete server update.");C=!0,function(e){P(s.join(e,"bin","task-handoff"),["install","--preserve-current","--materialize-only"])}(d),P("systemctl",["restart","task-handoff-control-plane.service"]),await M(k)}if(!T(["updating-node"],e=>({status:"restarting-node",rollout:{...e.rollout,phase:"restarting-node"}})))return;P("systemctl",["restart",v]),w&&D(w),x.standalone&&T(["restarting-node"],e=>({status:"succeeded",rollout:{...e.rollout,phase:"succeeded",nodeVersion:A},completedAt:(new Date).toISOString()}))}catch(e){let t;if(n)try{await n()}catch(e){t=e}const i=[e instanceof Error?e.message:String(e),t?`Rollback failed: ${t instanceof Error?t.message:String(t)}`:void 0].filter(Boolean).join(" ");T(["queued","updating-node","restarting-node"],t=>({status:"failed",rollout:{...t.rollout,phase:"failed"},error:{code:e&&"object"==typeof e&&"code"in e&&"string"==typeof e.code?e.code:"NODE_UPDATE_FAILED",message:i,retryable:e&&"object"==typeof e&&"code"in e&&"SERVER_UPDATE_ALREADY_RUNNING"===e.code},completedAt:(new Date).toISOString()})),console.error(e),process.exitCode=1}finally{t?.(),e?.()}}(),l}(),qo=m($o);module.exports=qo;
@@ -31,6 +31,11 @@ load_private_config() {
31
31
  fi
32
32
  }
33
33
 
34
+ if [ -n "${TASK_HANDOFF_WORKSPACE_SUBDIRECTORY:-}" ]; then
35
+ export TASK_HANDOFF_WORKSPACE="${TASK_HANDOFF_WORKSPACE:-/workspace}/${TASK_HANDOFF_WORKSPACE_SUBDIRECTORY}"
36
+ unset TASK_HANDOFF_WORKSPACE_SUBDIRECTORY
37
+ fi
38
+
34
39
  if [ "$(id -u)" = "0" ] && [ "${TASK_HANDOFF_PRIVILEGE_DROPPED:-0}" != "1" ]; then
35
40
  load_private_config
36
41
  mkdir -p /data /home/agent
@@ -56,6 +61,9 @@ mkdir -p \
56
61
  "${TASK_HANDOFF_WORKSPACE:-/workspace}"
57
62
 
58
63
  bootstrap_workspace() {
64
+ if [ "${TASK_HANDOFF_SKIP_WORKSPACE_BOOTSTRAP:-false}" = "true" ]; then
65
+ return
66
+ fi
59
67
  local workspace="${TASK_HANDOFF_WORKSPACE:-/workspace}"
60
68
  local mode="${TASK_HANDOFF_WORKSPACE_MODE:-}"
61
69
  local git_url="${TASK_HANDOFF_GIT_URL:-}"