@tripwire-sh/cli 0.1.11 → 0.1.13

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 (2) hide show
  1. package/dist/tripwire.js +17 -10
  2. package/package.json +1 -1
package/dist/tripwire.js CHANGED
@@ -225,7 +225,7 @@ ${t.join(`
225
225
  }
226
226
  `)}return y.write("payload.value = newResult;"),y.write("return payload;"),y.compile()},i,a=lo,c=!nt.jitless,l=c&&tb.value,d=t.catchall,f;e._zod.parse=(m,h)=>{f??(f=n.value);let g=m.value;if(!a(g))return m.issues.push({expected:"object",code:"invalid_type",input:g,inst:e}),m;if(c&&l&&h?.async===!1&&h.jitless!==!0){if(!i)i=s(t.shape);if(m=i(m,h),!d)return m;return dS([],g,m,h,f,e,h?.abortEarly===!0)}return r(m,h)}});function w_(e,t,r,n){for(let s of e)if(s.issues.length===0)return t.value=s.value,t;let o=e.filter((s)=>!At(s));if(o.length===1)return t.value=o[0].value,o[0];return t.issues.push({code:"invalid_union",input:t.value,inst:r,errors:e.map((s)=>s.issues.map((i)=>or(i,n,ut())))}),t}var kp=P("$ZodUnion",(e,t)=>{me.init(e,t),re(e,"optin",(n)=>n.def.options.some((o)=>o._zod.optin==="defaulted")?"defaulted":n.def.options.some((o)=>o._zod.optin!==void 0)?"optional":void 0),re(e,"optout",(n)=>n.def.options.some((o)=>o._zod.optout==="optional")?"optional":void 0),re(e,"values",(n)=>{if(n.def.options.every((o)=>o._zod.values))return new Set(n.def.options.flatMap((o)=>Array.from(o._zod.values)));return}),re(e,"pattern",(n)=>{if(n.def.options.every((o)=>o._zod.pattern)){let o=n.def.options.map((s)=>s._zod.pattern);return new RegExp(`^(${o.map((s)=>Zr(s.source)).join("|")})$`)}return});let r=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(n,o)=>{if(r)return r(n,o);let s=!1,i=[];for(let a of t.options){let c=a._zod.run({value:n.value,issues:[]},o);if(c instanceof Promise)i.push(c),s=!0;else{if(c.issues.length===0)return c;i.push(c)}}if(!s)return w_(i,n,e,o);return Promise.all(i).then((a)=>w_(a,n,e,o))}});function yL(e){let t=new Map;for(let r of e.options){let n=r._zod.propValues?.[e.discriminator];if(!n||n.size===0)throw Error(`Invalid discriminated union option at index "${e.options.indexOf(r)}"`);for(let o of n)if(t.has(o)){if(o!==void 0)throw Error(`Duplicate discriminator value "${String(o)}"`);t.set(o,null)}else t.set(o,r)}return t}var fS=P("$ZodDiscriminatedUnion",(e,t)=>{t.inclusive=!1,kp.init(e,t);let r=e._zod.parse;re(e,"propValues",(o)=>{let s={},i=0;for(let a of o.def.options){let c=a._zod.propValues;if(!c||Object.keys(c).length===0)throw Error(`Invalid discriminated union option at index "${o.def.options.indexOf(a)}"`);if(c[o.def.discriminator]?.has(void 0))i++;for(let[u,l]of Object.entries(c)){if(!Object.prototype.hasOwnProperty.call(s,u))kt(s,u,new Set);for(let d of l)s[u].add(d)}}if(!o.def.unionFallback&&i>1)s[o.def.discriminator]?.delete(void 0);return s}),t.options.forEach((o,s)=>{let i=As(o._zod.def);if(i&&!Object.prototype.hasOwnProperty.call(i,t.discriminator))throw Error(`Invalid discriminated union option at index "${s}"`)});let n=Is(()=>yL(t));e._zod.parse=(o,s)=>{let i=o.value;if(!lo(i))return o.issues.push({code:"invalid_type",expected:"object",input:i,inst:e}),o;let a=i?.[t.discriminator],c=n.value.get(a);if(c&&(a!==void 0||s.direction!=="backward"))return c._zod.run(o,s);if(t.unionFallback||s.direction==="backward")return r(o,s);return o.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:t.discriminator,options:Array.from(n.value.keys()).filter((u)=>n.value.get(u)!==null),input:i,path:[t.discriminator],inst:e}),o}}),mS=P("$ZodIntersection",(e,t)=>{me.init(e,t),e._zod.parse=(r,n)=>{let o=r.value,s=t.left._zod.run({value:o,issues:[]},n),i=t.right._zod.run({value:o,issues:[]},n);if(s instanceof Promise||i instanceof Promise)return Promise.all([s,i]).then(([c,u])=>b_(r,c,u));return b_(r,s,i)}});function wp(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(Ln(e)&&Ln(t)){let r=Object.keys(t),n=Object.keys(e).filter((s)=>r.indexOf(s)!==-1),o={...e,...t};if(Object.prototype.hasOwnProperty.call(o,"__proto__"))delete o.__proto__;for(let s of n){if(s==="__proto__")continue;let i=wp(e[s],t[s]);if(!i.valid)return{valid:!1,mergeErrorPath:[s,...i.mergeErrorPath]};o[s]=i.data}return{valid:!0,data:o}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let r=[];for(let n=0;n<e.length;n++){let o=e[n],s=t[n],i=wp(o,s);if(!i.valid)return{valid:!1,mergeErrorPath:[n,...i.mergeErrorPath]};r.push(i.data)}return{valid:!0,data:r}}return{valid:!1,mergeErrorPath:[]}}function b_(e,t,r){let n=new Map,o,s=new Map,i=(u,l)=>{let d;if(u.code==="unrecognized_keys"&&!u.path?.length)o??(o=u),d=u.keys;else if(u.code==="invalid_key"&&u.origin==="record"&&u.path?.length===1){let f=String(u.path[0]);if(!s.has(f))s.set(f,u);d=[f]}else return!1;for(let f of d){if(!n.has(f))n.set(f,{});n.get(f)[l]=!0}return!0};for(let u of t.issues)if(!i(u,"l"))e.issues.push(u);for(let u of r.issues)if(!i(u,"r"))e.issues.push(u);let a=[...n].filter(([,u])=>u.l&&u.r).map(([u])=>u);if(a.length){let u=o?a.filter((l)=>o.keys.includes(l)):[];if(u.length)e.issues.push({...o,keys:u});for(let l of a)if(!u.includes(l)&&s.has(l))e.issues.push(s.get(l))}let c=wp(t.value,r.value);if(!c.valid){if(At(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var hS=P("$ZodTuple",(e,t)=>{me.init(e,t);let r=t.items,n=nt.memoizer;n?.attach(e),e._zod.parse=(o,s)=>{let i=o.value;if(!Array.isArray(i))return o.issues.push({input:i,inst:e,expected:"tuple",code:"invalid_type"}),o;o.value=n?n.alloc(e,o,[],s):[];let a=[],c=__(r,"optin"),u=__(r,"optout");if(!t.rest){if(i.length<c)return o.issues.push({code:"too_small",minimum:c,inclusive:!0,input:i,inst:e,origin:"array"}),o;if(i.length>r.length)o.issues.push({code:"too_big",maximum:r.length,inclusive:!0,input:i,inst:e,origin:"array"})}let l=Array(r.length),d=t.rest?s?.abortEarly:void 0,f=!1;for(let m=0;m<r.length;m++){let h=r[m]._zod.run({value:i[m],issues:[]},s);if(h instanceof Promise)a.push(h.then((g)=>{l[m]=g}));else if(l[m]=h,d&&!f&&h.issues.length)f=At(h)}if(t.rest&&!f){let m=r.length-1,h=i.slice(r.length),g=o.issues.length;for(let y of h){if(d&&o.issues.length!==g){if(At(o,g))break;g=o.issues.length}m++;let b=t.rest._zod.run({value:y,issues:[]},s);if(b instanceof Promise)a.push(b.then((E)=>S_(E,o,m)));else S_(b,o,m)}}if(a.length)return Promise.all(a).then(()=>v_(l,o,r,i,u));return v_(l,o,r,i,u)}});function __(e,t){for(let r=e.length-1;r>=0;r--)if(!(t==="optin"?e[r]._zod.optin!==void 0:e[r]._zod.optout==="optional"))return r+1;return 0}function S_(e,t,r){if(e.issues.length)t.issues.push(...nr(r,e.issues));t.value[r]=e.value}function v_(e,t,r,n,o){for(let s=0;s<r.length;s++){let i=e[s],a=s<n.length;if(!a&&s>=o&&r[s]._zod.optin==="optional"){t.value.length=s;break}if(i.issues.length){if(!a&&s>=o){t.value.length=s;break}t.issues.push(...nr(s,i.issues))}t.value[s]=i.value}for(let s=t.value.length-1;s>=n.length;s--)if(r[s]._zod.optout==="optional"&&t.value[s]===void 0)t.value.length=s;else break;return t}var gS=P("$ZodRecord",(e,t)=>{me.init(e,t);let r=nt.memoizer;r?.attach(e),e._zod.parse=(n,o)=>{let s=n.value;if(!Ln(s))return n.issues.push({expected:"record",code:"invalid_type",input:s,inst:e}),n;let i=[],a=t.keyType._zod.values;if(a&&!t.partial){n.value=r?r.alloc(e,n,{},o):{};let c=new Set;for(let l of a)if(typeof l==="string"||typeof l==="number"||typeof l==="symbol"){if(c.add(typeof l==="number"?l.toString():l),l==="__proto__")continue;let d=t.keyType._zod.run({value:l,issues:[]},o);if(d instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(d.issues.length){n.issues.push({code:"invalid_key",origin:"record",issues:d.issues.map((h)=>or(h,o,ut())),input:l,path:[l],inst:e});continue}let f=d.value;if(f==="__proto__")continue;let m=t.valueType._zod.run({value:s[l],issues:[]},o);if(m instanceof Promise)i.push(m.then((h)=>{if(h.issues.length)n.issues.push(...nr(l,h.issues));n.value[f]=h.value}));else{if(m.issues.length)n.issues.push(...nr(l,m.issues));n.value[f]=m.value}}let u;for(let l in s)if(!c.has(l))if(t.mode==="loose"){if(l==="__proto__")continue;n.value[l]=s[l]}else u=u??[],u.push(l);if(u&&u.length>0)n.issues.push({code:"unrecognized_keys",input:s,inst:e,keys:u,continue:!0})}else{n.value=r?r.alloc(e,n,{},o):{};let c;for(let u of Reflect.ownKeys(s)){if(u==="__proto__")continue;if(!Object.prototype.propertyIsEnumerable.call(s,u))continue;let l=t.keyType._zod.run({value:u,issues:[]},o);if(l instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(typeof u==="string"&&po.test(u)&&l.issues.length){let h=t.keyType._zod.run({value:Number(u),issues:[]},o);if(h instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(h.issues.length===0)l=h}if(l.issues.length){if(t.mode==="loose")n.value[u]=s[u];else if(a)c=c??[],c.push(u);else n.issues.push({code:"invalid_key",origin:"record",issues:l.issues.map((h)=>or(h,o,ut())),input:u,path:[u],inst:e});continue}let f=l.value;if(f==="__proto__")continue;let m=t.valueType._zod.run({value:s[u],issues:[]},o);if(m instanceof Promise)i.push(m.then((h)=>{if(h.issues.length)n.issues.push(...nr(u,h.issues));n.value[f]=h.value}));else{if(m.issues.length)n.issues.push(...nr(u,m.issues));n.value[f]=m.value}}if(c&&c.length>0)n.issues.push({code:"unrecognized_keys",input:s,inst:e,keys:c,continue:!0})}if(i.length)return Promise.all(i).then(()=>n);return n}});var yS=P("$ZodEnum",(e,t)=>{me.init(e,t);let r=Os(t.entries),n=new Set(r);e._zod.values=n,re(e,"pattern",(o)=>{let s=Os(o.def.entries).filter((i)=>rb.has(typeof i));return new RegExp(s.length?`^(${s.map((i)=>Ir(i.toString())).join("|")})$`:"^[^\\s\\S]$")}),e._zod.parse=(o,s)=>{let i=o.value;if(n.has(i))return o;return o.issues.push({code:"invalid_value",values:r,input:i,inst:e}),o}}),wS=P("$ZodLiteral",(e,t)=>{me.init(e,t);let r=new Set(t.values);e._zod.values=r,re(e,"pattern",(n)=>{let o=n.def.values;return new RegExp(o.length?`^(${o.map((s)=>typeof s==="string"?Ir(s):s?Ir(s.toString()):String(s)).join("|")})$`:"^[^\\s\\S]$")}),e._zod.parse=(n,o)=>{let s=n.value;if(r.has(s))return n;return n.issues.push({code:"invalid_value",values:t.values,input:s,inst:e}),n}});var bS=P("$ZodTransform",(e,t)=>{me.init(e,t),e._zod.optin="optional",nt.memoizer?.guard(e),e._zod.parse=(r,n)=>{if(n.direction==="backward")throw new Rs(e.constructor.name);let o=t.transform(r.value,r);if(n.async)return(o instanceof Promise?o:Promise.resolve(o)).then((i)=>(r.value=i,r));if(o instanceof Promise)throw new sr;return r.value=o,r}});function k_(e,t){return e.value=t.issues.length?void 0:t.value,e}var xp=P("$ZodOptional",(e,t)=>{me.init(e,t),re(e,"optin",(r)=>r.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),e._zod.optout="optional",re(e,"values",(r)=>{let n=r.def.innerType._zod.values;return n?new Set([...n,void 0]):void 0}),re(e,"pattern",(r)=>{let n=r.def.innerType._zod.pattern;return n?new RegExp(`^(${Zr(n.source)})?$`):void 0}),e._zod.parse=(r,n)=>{if(r.value===void 0){if(t.innerType._zod.optin!=="defaulted")return r;let o=t.innerType._zod.run({value:r.value,issues:[]},n);if(o instanceof Promise)return o.then((s)=>k_(r,s));return k_(r,o)}return t.innerType._zod.run(r,n)}}),_S=P("$ZodExactOptional",(e,t)=>{xp.init(e,t),re(e,"values",(r)=>r.def.innerType._zod.values),re(e,"pattern",(r)=>r.def.innerType._zod.pattern),e._zod.parse=(r,n)=>t.innerType._zod.run(r,n)}),SS=P("$ZodNullable",(e,t)=>{me.init(e,t),re(e,"optin",(r)=>r.def.innerType._zod.optin),re(e,"optout",(r)=>r.def.innerType._zod.optout),re(e,"pattern",(r)=>{let n=r.def.innerType._zod.pattern;return n?new RegExp(`^(${Zr(n.source)}|null)$`):void 0}),re(e,"values",(r)=>r.def.innerType._zod.values?new Set([...r.def.innerType._zod.values,null]):void 0),e._zod.parse=(r,n)=>{if(r.value===null)return r;return t.innerType._zod.run(r,n)}}),vS=P("$ZodDefault",(e,t)=>{me.init(e,t),e._zod.optin="defaulted",re(e,"values",(r)=>r.def.innerType._zod.values),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);if(r.value===void 0)return r.value=t.defaultValue,r;let o=t.innerType._zod.run(r,n);if(o instanceof Promise)return o.then((s)=>x_(s,t));return x_(o,t)}});function x_(e,t){if(e.value===void 0)e.value=t.defaultValue;return e}var kS=P("$ZodPrefault",(e,t)=>{me.init(e,t),e._zod.optin="defaulted",re(e,"values",(r)=>r.def.innerType._zod.values),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);if(r.value===void 0)r.value=t.defaultValue;return t.innerType._zod.run(r,n)}}),xS=P("$ZodNonOptional",(e,t)=>{me.init(e,t),re(e,"values",(r)=>{let n=r.def.innerType._zod.values;return n?new Set([...n].filter((o)=>o!==void 0)):void 0}),e._zod.parse=(r,n)=>{let o=t.innerType._zod.run(r,n);if(o instanceof Promise)return o.then((s)=>$_(s,e));return $_(o,e)}});function $_(e,t){if(!e.issues.length&&e.value===void 0)e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t});return e}function E_(e,t,r,n){if(!t.issues.length){if(e.value=t.value,t.memo)e.memo=!0;return e}return e.value=r.catchValue({...t,value:e.value,error:{issues:t.issues.map((o)=>or(o,n,ut()))},input:e.value}),e}var $S=P("$ZodCatch",(e,t)=>{me.init(e,t),re(e,"optin",(r)=>r.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),re(e,"optout",(r)=>r.def.innerType._zod.optout),re(e,"values",(r)=>r.def.innerType._zod.values),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);let o=t.innerType._zod.run({value:r.value,issues:[]},n);if(o instanceof Promise)return o.then((s)=>E_(r,s,t,n));return E_(r,o,t,n)}});var $p=P("$ZodPipe",(e,t)=>{me.init(e,t),re(e,"values",(r)=>r.def.in._zod.values),re(e,"optin",(r)=>r.def.in._zod.optin),re(e,"optout",(r)=>r.def.out._zod.optout),re(e,"propValues",(r)=>r.def.in._zod.propValues),e._zod.parse=(r,n)=>{if(n.direction==="backward"){let s=t.out._zod.run(r,n);if(s instanceof Promise)return s.then((i)=>Ga(i,t.in,n));return Ga(s,t.in,n)}let o=t.in._zod.run(r,n);if(o instanceof Promise)return o.then((s)=>Ga(s,t.out,n));return Ga(o,t.out,n)}});function Ga(e,t,r){if(e.issues.some((n)=>n.code!=="unrecognized_keys"))return e.aborted=!0,e;return t._zod.run({value:e.value,issues:e.issues},r)}var ES=P("$ZodPreprocess",(e,t)=>{$p.init(e,t)}),TS=P("$ZodReadonly",(e,t)=>{me.init(e,t),re(e,"propValues",(r)=>r.def.innerType._zod.propValues),re(e,"values",(r)=>r.def.innerType._zod.values),re(e,"optin",(r)=>r.def.innerType?._zod?.optin),re(e,"optout",(r)=>r.def.innerType?._zod?.optout),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);let o=t.innerType._zod.run(r,n);if(o instanceof Promise)return o.then(T_);return T_(o)}});function T_(e){if(!e.memo)e.value=Object.freeze(e.value);return e}function wL(e){let t=e._zod.def,r=t.pattern,n=!!t.format?.includes("int"),o,s;for(let a of t.checks??[]){let c=a._zod.def;if(c.pattern)r=c.pattern;n||(n=!!c.format?.includes("int"));let u=c.minimum??c.length,l=c.maximum??c.length;if(u!==void 0&&(o===void 0||u>o))o=u;if(l!==void 0&&(s===void 0||l<s))s=l}if(r)return r.source;if(o!==void 0&&s!==void 0&&o>s)return"(?!)";if(o!==void 0||s!==void 0)return Yb({minimum:o,maximum:s}).source;let i=e._zod.pattern;return(n&&i===po?Ka:i)?.source}function bp(e){let t=e._zod.def,r=e._zod.pattern?.source,n=t.innerType??e._zod.innerType;if(n){let o=n._zod.pattern?.source,s=bp(n);if(r&&o&&s&&s!==o)return r.replace(Zr(o),()=>Zr(s));return r}if(t.options){let o=t.options.map(bp);if(o.every(Boolean))return`^(${o.map((s)=>Zr(s)).join("|")})$`}return wL(e)}var OS=P("$ZodTemplateLiteral",(e,t)=>{me.init(e,t);let r=[];for(let n of t.parts)if(typeof n==="object"&&n!==null){let o=bp(n);if(!o)throw Error(`Invalid template literal part, no pattern found: ${[...n._zod.traits].shift()}`);r.push(Zr(o))}else if(n===null||nb.has(typeof n))r.push(Ir(`${n}`));else throw Error(`Invalid template literal part: ${n}`);e._zod.pattern=new RegExp(`^${r.join("")}$`),e._zod.parse=(n,o)=>{if(typeof n.value!=="string")return n.issues.push({input:n.value,inst:e,expected:"string",code:"invalid_type"}),n;if(e._zod.pattern.lastIndex=0,!e._zod.pattern.test(n.value))return n.issues.push({input:n.value,inst:e,code:"invalid_format",format:t.format??"template_literal",pattern:e._zod.pattern.source}),n;return n}});var PS=P("$ZodLazy",(e,t)=>{me.init(e,t),Jw(e._zod,"innerType",()=>{let r=t;if(!r._cachedInner)r._cachedInner=t.getter();return r._cachedInner}),re(e,"pattern",(r)=>r.innerType?._zod?.pattern),re(e,"propValues",(r)=>r.innerType?._zod?.propValues),re(e,"optin",(r)=>r.innerType?._zod?.optin??void 0),re(e,"optout",(r)=>r.innerType?._zod?.optout??void 0),e._zod.parse=(r,n)=>e._zod.innerType._zod.run(r,n)}),IS=P("$ZodCustom",(e,t)=>{He.init(e,t),me.init(e,t),e._zod.parse=(r,n)=>r,e._zod.check=(r)=>{let n=r.value,o=t.fn(n);if(o instanceof Promise)return o.then((s)=>O_(s,r,n,e));O_(o,r,n,e);return}});function O_(e,t,r,n){if(!e){let o={code:"custom",input:r,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};if(n._zod.def.params)o.params=n._zod.def.params;t.issues.push(jn(o))}}class RS extends Error{constructor(){super("Cannot parse a reference cycle that closes through a transform");this.name="ZodCyclicError"}}var Tp="~memo",AS=[];function CS(e){return e!==null&&typeof e==="object"}function Ep(e){return e.map((t)=>t.path?{...t,path:t.path.slice()}:{...t})}var zS=new WeakMap,Ns=0,rc=1,Ls=2;function nc(e,t,r){let n=zS.get(e);if(n!==void 0)return n?Ls:Ns;if(t.has(e))return Ls;t.add(e);let o=Ns,s=(l)=>{if(o!==Ls&&l?._zod){let d=nc(l,t,r);if(d>o)o=d}},i=(l,d)=>{let f=Ns;for(let m of Reflect.ownKeys(l)){let h=Object.getOwnPropertyDescriptor(l,m);if(d&&!h.enumerable)continue;let g=h.get?rc:h.value?._zod?nc(h.value,t,r):Ns;if(g>f)f=g}return f},a=(l)=>{if(l>o)o=l},c=e._zod.def,u=c.type;switch(u){case"object":{let l=As(c);a(l?i(l,!0):rc),s(c.catchall);break}case"array":s(c.element);break;case"tuple":for(let l of c.items)s(l);s(c.rest);break;case"record":case"map":s(c.keyType),s(c.valueType);break;case"set":s(c.valueType);break;case"union":for(let l of c.options)s(l);break;case"intersection":s(c.left),s(c.right);break;case"optional":case"nullable":case"default":case"prefault":case"catch":case"readonly":case"nonoptional":case"promise":case"success":s(c.innerType);break;case"pipe":s(c.in),s(c.out);break;case"function":s(c.input),s(c.output);break;case"lazy":{let l=c._cachedInner??(r?e._zod.innerType:void 0);a(l?nc(l,t,!1):rc);break}case"template_literal":case"string":case"number":case"int":case"boolean":case"bigint":case"symbol":case"undefined":case"null":case"void":case"never":case"any":case"unknown":case"date":case"nan":case"enum":case"literal":case"file":case"transform":case"custom":break;default:for(let l in c){let d=Object.getOwnPropertyDescriptor(c,l);if(!d||d.get)continue;let f=d.value;if(!f||typeof f!=="object")continue;if(f._zod)s(f);else if(Array.isArray(f))for(let m of f)s(m)}}return t.delete(e),bL(e,o)}function bL(e,t){if(t!==rc)zS.set(e,t===Ls);return t}function _L(e,t){let r=e.buckets.get(t);if(!r)r=new WeakMap,e.buckets.set(t,r);return r}var ec,tc=[],SL={alloc(e,t,r){let n=ec;if(!n)return r;ec=void 0;let o={value:r,issues:null};return n.set(t.value,o),tc.push(o),r},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let r=e._zod.parse,n=(o,s)=>{if(s.direction!=="backward"&&vL(s,o.value))throw new RS;return r(o,s)};if(e._zod.parse=n,e._zod.run===r)e._zod.run=n})},attach(e){var t;let r,n=!1,o,s;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let i=e._zod.parse,a=(c,u)=>{if(r===void 0){let b=nc(e,new Set,!1);if(b===Ns){if(e._zod.parse=i,e._zod.run===a)e._zod.run=i;return i(c,u)}if(b===Ls||n)r=!0;else n=!0}let l=c.value;if(!CS(l))return i(c,u);let d=u[Tp];if(!d)d={buckets:new WeakMap,backEdges:void 0},u[Tp]=d;let f;if(o===u)f=s;else f=_L(d,e),o=u,s=f;let m=f.get(l);if(m){if(c.value=m.value,m.issues){if(m.issues.length)c.issues.push(...Ep(m.issues))}else c.memo=!0,d.backEdges??(d.backEdges=new WeakSet),d.backEdges.add(m.value);return c}ec=f;let h=tc.length,g=i(c,u);ec=void 0;let y=tc.length>h?tc.pop():void 0;if(g instanceof Promise)return g.then((b)=>{if(y)y.issues=b.issues.length?Ep(b.issues):AS;return b});if(y)y.issues=g.issues.length?Ep(g.issues):AS;return g};if(e._zod.parse=a,e._zod.run===i)e._zod.run=a})}};function Op(){return SL}function vL(e,t){let r=e[Tp]?.backEdges;return r!==void 0&&CS(t)&&r.has(t)}var kL=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function t(s){return e[s]??null}let r={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",currency_code:"currency code",credit_card:"credit card number",iban:"IBAN",jwt:"JWT",template_literal:"input"},n={nan:"NaN"};function o(s,i){if(s==="number"&&typeof i==="number"&&!Number.isFinite(i))return String(i);return n[s]??s}return(s)=>{switch(s.code){case"invalid_type":{let i=o(s.expected),a=cb(s.input),c=o(a,s.input);return`Invalid input: expected ${i}, received ${c}`}case"invalid_value":if(s.values.length===1)return`Invalid input: expected ${rp(s.values[0])}`;return`Invalid option: expected one of ${Qd(s.values,"|")}`;case"too_big":{let i=s.exact?"exactly ":s.inclusive?"<=":"<",a=t(s.origin);if(a)return`Too big: expected ${s.origin??"value"} to have ${i}${s.maximum.toString()} ${a.unit??"elements"}`;return`Too big: expected ${s.origin??"value"} to be ${i}${s.maximum.toString()}`}case"too_small":{let i=s.exact?"exactly ":s.inclusive?">=":">",a=t(s.origin);if(a)return`Too small: expected ${s.origin} to have ${i}${s.minimum.toString()} ${a.unit}`;return`Too small: expected ${s.origin} to be ${i}${s.minimum.toString()}`}case"invalid_format":{let i=s;if(i.format==="starts_with")return`Invalid string: must start with "${i.prefix}"`;if(i.format==="ends_with")return`Invalid string: must end with "${i.suffix}"`;if(i.format==="includes")return`Invalid string: must include "${i.includes}"`;if(i.format==="regex")return`Invalid string: must match pattern ${i.pattern}`;return`Invalid ${r[i.format]??s.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${s.divisor}`;case"unrecognized_keys":return`Unrecognized key${s.keys.length>1?"s":""}: ${Qd(s.keys,", ")}`;case"invalid_key":return`Invalid key in ${s.origin}`;case"invalid_union":if(s.options&&Array.isArray(s.options)&&s.options.length>0)return`Invalid discriminator value. Expected ${s.options.map((a)=>`'${a}'`).join(" | ")}`;if(s.inclusive===!1)return"Invalid input: more than one option matched";return"Invalid input";case"invalid_element":return`Invalid value in ${s.origin}`;default:return"Invalid input"}}};function Pp(){return{localeError:kL()}}var NS;class LS{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let r=t[0];if(this._map.set(e,r),r&&typeof r==="object"&&"id"in r)this._idmap.set(r.id,e);return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);if(t&&typeof t==="object"&&"id"in t)this._idmap.delete(t.id);return this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let r={...this.get(t)??{}};delete r.id;let n={...r,...this._map.get(e)};return Object.keys(n).length?n:void 0}return this._map.get(e)}has(e){return this._map.has(e)}}function jS(){return new LS}(NS=globalThis).__zod_globalRegistry??(NS.__zod_globalRegistry=jS());var Br=globalThis.__zod_globalRegistry;function Ip(e){if(e.checks)e.checks=[...e.checks];return e}function DS(e,t){return new e(Ip({type:"string",...U(t)}))}function MS(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...U(t)})}function qS(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...U(t)})}function FS(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...U(t)})}function US(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...U(t)})}function WS(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...U(t)})}function VS(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...U(t)})}function Ap(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...U(t)})}function ZS(e,t){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...U(t)})}function BS(e,t){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...U(t)})}function KS(e,t){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...U(t)})}function HS(e,t){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...U(t)})}function GS(e,t){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...U(t)})}function JS(e,t){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...U(t)})}function YS(e,t){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...U(t)})}function XS(e,t){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...U(t)})}function QS(e,t){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...U(t)})}function ev(e,t){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...U(t)})}function tv(e,t){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...U(t)})}function rv(e,t){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...U(t)})}function nv(e,t){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...U(t)})}function ov(e,t){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...U(t)})}function sv(e,t){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...U(t)})}function oc(e,t){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...U(t)})}function sc(e,t){return new e({type:"string",format:"date",check:"string_format",...U(t)})}function ic(e,t){return new e({type:"string",format:"time",check:"string_format",precision:null,...U(t)})}function ac(e,t){return new e({type:"string",format:"duration",check:"string_format",...U(t)})}function iv(e,t){return new e(Ip({type:"number",checks:[],...U(t)}))}function av(e,t){return new e(Ip({type:"number",coerce:!0,checks:[],...U(t)}))}function cv(e,t){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...U(t)})}function uv(e,t){return new e({type:"boolean",...U(t)})}function lv(e,t){return new e({type:"null",...U(t)})}function dv(e){return new e({type:"any"})}function pv(e){return new e({type:"unknown"})}function fv(e,t){return new e({type:"never",...U(t)})}function cc(e,t){return new hp({check:"less_than",...U(t),value:e,inclusive:!1})}function js(e,t){return new hp({check:"less_than",...U(t),value:e,inclusive:!0})}function uc(e,t){return new gp({check:"greater_than",...U(t),value:e,inclusive:!1})}function Ds(e,t){return new gp({check:"greater_than",...U(t),value:e,inclusive:!0})}function lc(e,t){return new r_({check:"multiple_of",...U(t),value:e})}function dc(e,t){return new o_({check:"max_length",...U(t),maximum:e})}function mo(e,t){return new s_({check:"min_length",...U(t),minimum:e})}function pc(e,t){return new i_({check:"length_equals",...U(t),length:e})}function Rp(e,t){return new a_({check:"string_format",format:"regex",...U(t),pattern:e})}function Cp(e){return new c_({check:"string_format",format:"lowercase",...U(e)})}function zp(e){return new u_({check:"string_format",format:"uppercase",...U(e)})}function Np(e,t){return new l_({check:"string_format",format:"includes",...U(t),includes:e})}function Lp(e,t){return new d_({check:"string_format",format:"starts_with",...U(t),prefix:e})}function jp(e,t){return new p_({check:"string_format",format:"ends_with",...U(t),suffix:e})}function Kr(e){return new f_({check:"overwrite",tx:e})}function Dp(e){return Kr((t)=>t.normalize(e))}function Mp(){return Kr((e)=>e.trim())}function qp(){return Kr((e)=>e.toLowerCase())}function Fp(){return Kr((e)=>e.toUpperCase())}function Up(){return Kr((e)=>eb(e))}function mv(e,t,r){return new e({type:"array",element:t,...U(r)})}function hv(e,t,r){let n=U(r);return n.abort??(n.abort=!0),new e({type:"custom",check:"custom",fn:t,...n})}function gv(e,t,r){return new e({type:"custom",check:"custom",fn:t,...U(r)})}function yv(e,t){let r=xL((n)=>(n.addIssue=(o)=>{if(typeof o==="string")n.issues.push(jn(o,n.value,r._zod.def));else{let s=o;if(s.fatal)s.continue=!1;if(s.code??(s.code="custom"),!("input"in s))s.input=n.value;s.inst??(s.inst=r),s.continue??(s.continue=!r._zod.def.abort),n.issues.push(jn(s))}},e(n.value,n)),t);return r}function xL(e,t){let r=new He({check:"custom",...U(t)});return r._zod.check=e,r}function Ms(e,...t){for(let r of t)for(let n of Reflect.ownKeys(r))if(Object.prototype.propertyIsEnumerable.call(r,n))kt(e,n,r[n]);return e}function Fs(e){let t=e?.target??"draft-2020-12";if(t==="draft-4")t="draft-04";if(t==="draft-7")t="draft-07";return{processors:e.processors??{},metadataRegistry:e?.metadata??Br,target:t,unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}),io:e?.io??"output",counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??"ref",reused:e?.reused??"inline",intersections:[],deferred:[],external:e?.external??void 0}}function Ve(e,t,r,n,o){let s=typeof t.unrepresentable==="function"?t.unrepresentable({zodSchema:e,path:n.path,message:o}):t.unrepresentable;if(s==="any")return!1;if(s===void 0||s==="throw")throw Error(o);return Object.assign(r,s),!0}function ve(e,t,r={path:[],schemaPath:[]}){var n;let o=e._zod.def,s=t.seen.get(e);if(s){if(s.count++,r.schemaPath.includes(e))s.cycle=r.path;return s.schema}let i={schema:{},count:1,cycle:void 0,path:r.path};t.seen.set(e,i),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let a=e._zod.toJSONSchema?.();if(a)i.schema=a;else{let l={...r,schemaPath:[...r.schemaPath,e],path:r.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,i.schema,l);else{let f=i.schema,m=t.processors[o.type];if(!m)throw Error(`[toJSONSchema]: Non-representable type encountered: ${o.type}`);m(e,t,f,l)}let d=e._zod.parent;if(d){if(!i.ref)i.ref=d;ve(d,t,l),t.seen.get(d).isParent=!0}}let c=t.metadataRegistry.get(e);if(c)Ms(i.schema,c);if(t.io==="input"&&ot(e))delete i.schema.examples,delete i.schema.default;if(t.io==="input"&&"_prefault"in i.schema)(n=i.schema).default??(n.default=i.schema._prefault);return delete i.schema._prefault,t.seen.get(e).schema}function wv(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Us(e,t){let r=e.seen.get(t);if(!r)throw Error("Unprocessed schema. This is a bug in Zod.");if(e.external&&e.sharedDefsExtractedFor===e.external)return;let n=new Map;for(let i of e.seen.entries()){let a=e.metadataRegistry.get(i[0])?.id;if(a){let c=n.get(a);if(c&&c!==i[0])throw Error(`Duplicate schema id "${a}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);n.set(a,i[0])}}let o=(i)=>{let a=e.target==="draft-2020-12"?"$defs":"definitions";if(e.external){let d=e.external.registry.get(i[0])?.id,f=e.external.uri??((h)=>h);if(d)return{ref:f(d)};let m=i[1].defId??i[1].schema.id??`schema${e.counter++}`;return i[1].defId=m,{defId:m,ref:`${f("__shared")}#/${a}/${wv(m)}`}}let c="#",u=`${c}/${a}/`;if(i[1]===r&&!i[1].schema.id)return{ref:c};let l=i[1].schema.id??`__schema${e.counter++}`;return{defId:l,ref:u+wv(l)}},s=(i)=>{if(i[1].schema.$ref)return;let a=i[1],{ref:c,defId:u}=o(i);if(a.def={...a.schema},u)a.defId=u;let l=a.schema;for(let d in l)delete l[d];l.$ref=c};if(e.cycles==="throw")for(let i of e.seen.entries()){let a=i[1];if(a.cycle)throw Error(`Cycle detected: #/${a.cycle?.join("/")}/<root>
227
227
 
228
- Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let i of e.seen.entries()){let a=i[1];if(t===i[0]){s(i);continue}if(e.external){let u=e.external.registry.get(i[0])?.id;if(t!==i[0]&&u){s(i);continue}}if(e.metadataRegistry.get(i[0])?.id){s(i);continue}if(a.cycle){s(i);continue}if(a.count>1){if(e.reused==="ref")s(i)}}if(e.external)e.sharedDefsExtractedFor=e.external}function Sv(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let r=[];for(let n of t){if(!n||typeof n!=="object")return;Sv(n);let o=Object.keys(n);if(o.length!==1||o[0]!=="type")return;let s=n.type;for(let i of Array.isArray(s)?s:[s]){if(typeof i!=="string")return;if(!r.includes(i))r.push(i)}}delete e.anyOf,e.type=r.length===1?r[0]:r}var vv=new Set(["type","properties","required","additionalProperties"]),bv=["oneOf","anyOf"];function _v(e){let t=e.additionalProperties;if(t===void 0||t===!1||typeof t!=="object"||t===null)return null;return Object.keys(t).length?t:null}function Wp(e){let t=[];for(let s of e){if(typeof s!=="object"||s.type!=="object")return null;for(let i in s)if(!vv.has(i))return null;t.push(s)}let r={},n=new Set;for(let s of t){for(let i in s.properties){if(Object.prototype.hasOwnProperty.call(r,i))continue;let a=[];for(let u of t){let l=u.properties?.[i]??_v(u);if(l===null||l===void 0)continue;if(!a.some((d)=>JSON.stringify(d)===JSON.stringify(l)))a.push(l)}let c=a.length===1?a[0]:Wp(a)??{allOf:a};kt(r,i,c)}for(let i of s.required??[])n.add(i)}let o={type:"object",properties:r};if(n.size)o.required=[...n];if(t.every((s)=>s.additionalProperties===!1))o.additionalProperties=!1;else{let s=[];for(let i of t){let a=_v(i);if(a&&!s.some((c)=>JSON.stringify(c)===JSON.stringify(a)))s.push(a)}if(s.length===1)o.additionalProperties=s[0];else if(s.length>1)o.additionalProperties={allOf:s}}return o}function $L(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let o of vv)if(o in e)return;let r=t.filter((o)=>bv.some((s)=>Array.isArray(o[s]))),n=null;if(!r.length)n=Wp(t);else{let o=r[0],s=bv.find((c)=>Array.isArray(o[c]));if(Object.keys(o).length!==1)return;let i=t.filter((c)=>c!==o),a=o[s].map((c)=>Wp([...i,c]));if(a.some((c)=>!c))return;n={[s]:a}}if(!n)return;delete e.allOf,Ms(e,n)}function Ws(e,t){let r=e.seen.get(t);if(!r)throw Error("Unprocessed schema. This is a bug in Zod.");let n=(a)=>{let c=e.seen.get(a);if(c.ref===null)return;let u=c.def??c.schema,l={...u},d=c.ref;if(c.ref=null,d){n(d);let m=e.seen.get(d),h=m.schema;if(h.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"))u.allOf=u.allOf??[],u.allOf.push(h);else Ms(u,h);if(Ms(u,l),a._zod.parent===d)for(let y in u){if(y==="$ref"||y==="allOf")continue;if(!(y in l))delete u[y]}if(h.$ref&&m.def)for(let y in u){if(y==="$ref"||y==="allOf")continue;if(y in m.def&&JSON.stringify(u[y])===JSON.stringify(m.def[y]))delete u[y]}}let f=a._zod.parent;if(f&&f!==d){n(f);let m=e.seen.get(f);if(m?.schema.$ref){if(u.$ref=m.schema.$ref,m.def)for(let h in u){if(h==="$ref"||h==="allOf")continue;if(h in m.def&&JSON.stringify(u[h])===JSON.stringify(m.def[h]))delete u[h]}}}e.override({zodSchema:a,jsonSchema:u,path:c.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let a of[...e.seen.entries()].reverse())n(a[0]);if(e.target!=="openapi-3.0")for(let a of e.seen.entries())Sv(a[1].def??a[1].schema);for(let a of e.deferred)a();if(e.intersections.length){let a=new Map;for(let c of e.seen.values())for(let u of[c.schema,c.def]){let l=u?.allOf;if(!Array.isArray(l))continue;let d=a.get(l);if(d)d.push(u);else a.set(l,[u])}for(let c of e.intersections)for(let u of a.get(c)??[])$L(u)}}let o={};if(e.target==="draft-2020-12")o.$schema="https://json-schema.org/draft/2020-12/schema";else if(e.target==="draft-07")o.$schema="http://json-schema.org/draft-07/schema#";else if(e.target==="draft-04")o.$schema="http://json-schema.org/draft-04/schema#";else if(e.target==="openapi-3.0");if(e.external?.uri){let a=e.external.registry.get(t)?.id;if(!a)throw Error("Schema is missing an `id` property");o.$id=e.external.uri(a)}Ms(o,r.defId?r.schema:r.def??r.schema);let s=e.metadataRegistry.get(t)?.id;if(s!==void 0&&o.id===s)delete o.id;let i=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let a of e.seen.entries()){let c=a[1];if(c.def&&c.defId){if(c.def.id===c.defId)delete c.def.id;kt(i,c.defId,c.def)}}if(e.external)e.sharedEmitDoneFor=e.external;if(e.external);else if(Object.keys(i).length>0)if(e.target==="draft-2020-12")o.$defs=i;else o.definitions=i;try{let a=JSON.parse(JSON.stringify(o));return Object.defineProperty(a,"~standard",{value:{...t["~standard"],jsonSchema:{input:qs(t,"input",e.processors),output:qs(t,"output",e.processors)}},enumerable:!1,writable:!1}),a}catch(a){throw Error("Error converting schema to JSON.")}}function ot(e,t){let r=t??{seen:new Set};if(r.seen.has(e))return!1;r.seen.add(e);let n=e._zod.def;if(n.type==="transform")return!0;if(n.type==="array")return ot(n.element,r);if(n.type==="set")return ot(n.valueType,r);if(n.type==="lazy")return ot(n.getter(),r);if(n.type==="promise"||n.type==="optional"||n.type==="nonoptional"||n.type==="nullable"||n.type==="readonly"||n.type==="default"||n.type==="prefault"||n.type==="catch")return ot(n.innerType,r);if(n.type==="intersection")return ot(n.left,r)||ot(n.right,r);if(n.type==="record"||n.type==="map")return ot(n.keyType,r)||ot(n.valueType,r);if(n.type==="pipe"){if(e._zod.traits.has("$ZodCodec"))return!0;return ot(n.in,r)||ot(n.out,r)}if(n.type==="object"){for(let o in n.shape)if(ot(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(ot(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(ot(o,r))return!0;if(n.rest&&ot(n.rest,r))return!0;return!1}return!1}var kv=(e,t={})=>(r)=>{let n=Fs({...r,processors:t});return ve(e,n),Us(n,e),Ws(n,e)},qs=(e,t,r={})=>(n)=>{let{libraryOptions:o,target:s}=n??{},i=Fs({...o??{},target:s,io:t,processors:r});return ve(e,i),Us(i,e),Ws(i,e)};var ho=(e,t,r)=>{if(e[t]===void 0||r>e[t])e[t]=r},go=(e,t,r)=>{if(e[t]===void 0||r<e[t])e[t]=r},xv=(e,t)=>{ho(e,"minimum",t),go(e,"maximum",t)},Pv=(e,t)=>{if(e.multipleOf??(e.multipleOf=[]),!e.multipleOf.includes(t))e.multipleOf.push(t)},Iv=(e,t)=>{e.patterns??(e.patterns=new Set),e.patterns.add(t)},Av=(e,t)=>{e.mime=e.mime?e.mime.filter((r)=>t.includes(r)):[...t]},Rv=(e,t)=>{if(e.format=t,t.includes("int"))e.isInt=!0},$v=(e,t)=>ho(e,"minimum",t.minimum),Ev=(e,t)=>go(e,"maximum",t.maximum),Tv=(e)=>(t,r)=>{Rv(t,r.format);let[n,o]=e[r.format];ho(t,"minimum",n),go(t,"maximum",o)},EL={greater_than:(e,t)=>ho(e,t.inclusive?"minimum":"exclusiveMinimum",t.value),less_than:(e,t)=>go(e,t.inclusive?"maximum":"exclusiveMaximum",t.value),multiple_of:(e,t)=>Pv(e,t.value),number_format:Tv(Na),bigint_format:Tv(np),min_length:$v,max_length:Ev,length_equals:(e,t)=>xv(e,t.length),min_size:$v,max_size:Ev,size_equals:(e,t)=>xv(e,t.size),string_format:(e,t)=>{if(Rv(e,t.format),t.pattern)Iv(e,t.pattern);if(t.format==="base64"||t.format==="base64url")e.contentEncoding=t.format;if(t.local||t.precision===-1)e.laxFormat=!0},mime_type:(e,t)=>Av(e,t.mime)};function lt(e){let t={},r=e._zod.def,n=e._zod.traits.has("$ZodCheck")?[e,...r.checks??[]]:r.checks??[];for(let s of n)EL[s._zod.def.check]?.(t,s._zod.def);let o=e._zod.bag;if(o.minimum!==void 0)ho(t,"minimum",o.minimum);if(o.exclusiveMinimum!==void 0)ho(t,"exclusiveMinimum",o.exclusiveMinimum);if(o.maximum!==void 0)go(t,"maximum",o.maximum);if(o.exclusiveMaximum!==void 0)go(t,"exclusiveMaximum",o.exclusiveMaximum);if(o.multipleOf!==void 0)Pv(t,o.multipleOf);if(o.format!==void 0){if(t.format??(t.format=o.format),o.format.includes("int"))t.isInt=!0}if(o.mime)Av(t,o.mime);for(let s of o.patterns??[])Iv(t,s);return t}var TL={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},OL=new Map([[Sp,Ub],[Qa,Wb]]),Cv=(e)=>OL.get(e)??e,Bp=(e,t,r,n)=>{let o=r;o.type="string";let{minimum:s,maximum:i,format:a,patterns:c,contentEncoding:u,laxFormat:l}=lt(e);if(typeof s==="number")o.minLength=s;if(typeof i==="number")o.maxLength=i;if(a){if(o.format=TL[a]??a,o.format==="")delete o.format;if(a==="time"||l)delete o.format}if(u)o.contentEncoding=u;if(c&&c.size>0){let d=[...c].map(Cv);if(d.length===1)o.pattern=d[0].source;else if(d.length>1)o.allOf=[...d.map((f)=>({...t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0"?{type:"string"}:{},pattern:f.source}))]}},Kp=(e,t,r,n)=>{let o=r,{minimum:s,maximum:i,multipleOf:a,exclusiveMaximum:c,exclusiveMinimum:u,isInt:l}=lt(e);o.type=l?"integer":"number";let d=typeof u==="number"&&u>=(s??Number.NEGATIVE_INFINITY),f=typeof c==="number"&&c<=(i??Number.POSITIVE_INFINITY),m=t.target==="draft-04"||t.target==="openapi-3.0";if(d)if(m)o.minimum=u,o.exclusiveMinimum=!0;else o.exclusiveMinimum=u;else if(typeof s==="number")o.minimum=s;if(f)if(m)o.maximum=c,o.exclusiveMaximum=!0;else o.exclusiveMaximum=c;else if(typeof i==="number")o.maximum=i;if(a){let h=new Set;for(let b of a)if(Number.isFinite(b)&&b!==0)h.add(Math.abs(b));else Ve(e,t,o,n,`A multipleOf divisor of ${b} cannot be represented in JSON Schema`);let[g,...y]=h;if(g!==void 0)o.multipleOf=g;if(y.length)o.allOf=[...o.allOf??[],...y.map((b)=>({multipleOf:b}))]}},Hp=(e,t,r,n)=>{r.type="boolean"},zv=(e,t,r,n)=>{Ve(e,t,r,n,"BigInt cannot be represented in JSON Schema")},Nv=(e,t,r,n)=>{Ve(e,t,r,n,"Symbols cannot be represented in JSON Schema")},Gp=(e,t,r,n)=>{if(t.target==="openapi-3.0")r.type="string",r.nullable=!0,r.enum=[null];else r.type="null"},Lv=(e,t,r,n)=>{Ve(e,t,r,n,"Undefined cannot be represented in JSON Schema")},jv=(e,t,r,n)=>{Ve(e,t,r,n,"Void cannot be represented in JSON Schema")},Jp=(e,t,r,n)=>{r.not={}},Yp=(e,t,r,n)=>{},Xp=(e,t,r,n)=>{},Dv=(e,t,r,n)=>{Ve(e,t,r,n,"Date cannot be represented in JSON Schema")},Qp=(e,t,r,n)=>{let o=e._zod.def,s=Os(o.entries);if(s.length===0){r.not={};return}if(s.every((i)=>typeof i==="number"))r.type="number";if(s.every((i)=>typeof i==="string"))r.type="string";r.enum=s},ef=(e,t,r,n)=>{let o=e._zod.def;if(o.values.length===0){r.not={};return}let s=[];for(let i of o.values)if(i===void 0){if(Ve(e,t,r,n,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof i==="bigint"){if(Ve(e,t,r,n,"BigInt literals cannot be represented in JSON Schema"))return;s.push(Number(i))}else s.push(i);if(s.length===0);else if(s.length===1){let i=s[0];if(r.type=i===null?"null":typeof i,t.target==="draft-04"||t.target==="openapi-3.0")r.enum=[i];else r.const=i}else{if(s.every((i)=>typeof i==="number"))r.type="number";if(s.every((i)=>typeof i==="string"))r.type="string";if(s.every((i)=>typeof i==="boolean"))r.type="boolean";if(s.every((i)=>i===null))r.type="null";r.enum=s}},Mv=(e,t,r,n)=>{Ve(e,t,r,n,"NaN cannot be represented in JSON Schema")},tf=(e,t,r,n)=>{let o=r,s=e._zod.pattern;if(!s)throw Error("Pattern not found in template literal");o.type="string",o.pattern=s.source},qv=(e,t,r,n)=>{let o=r;o.type="string",o.format="binary",o.contentEncoding="binary";let{minimum:s,maximum:i,mime:a}=lt(e);if(s!==void 0)o.minLength=s;if(i!==void 0)o.maxLength=i;if(!a)return;if(a.length===0)o.not={};else if(a.length===1)o.contentMediaType=a[0];else o.anyOf=a.map((c)=>({contentMediaType:c}))},Fv=(e,t,r,n)=>{r.type="boolean"},rf=(e,t,r,n)=>{Ve(e,t,r,n,"Custom types cannot be represented in JSON Schema")},Uv=(e,t,r,n)=>{Ve(e,t,r,n,"Function types cannot be represented in JSON Schema")},nf=(e,t,r,n)=>{Ve(e,t,r,n,"Transforms cannot be represented in JSON Schema")},Wv=(e,t,r,n)=>{Ve(e,t,r,n,"Map cannot be represented in JSON Schema")},Vv=(e,t,r,n)=>{Ve(e,t,r,n,"Set cannot be represented in JSON Schema")},of=(e,t,r,n)=>{let o=r,s=e._zod.def,{minimum:i,maximum:a}=lt(e);if(typeof i==="number")o.minItems=i;if(typeof a==="number")o.maxItems=a;o.type="array",o.items=ve(s.element,t,{...n,path:[...n.path,"items"]})};function Vs(e){let t=e._zod.def;if(t.type==="pipe"&&t.in._zod.traits.has("$ZodTransform"))return Vs(t.out);if(t.type==="catch")return Vs(t.innerType);return e._zod.optin}var sf=(e,t,r,n)=>{let o=r,s=e._zod.def,i=s.shape;if(Object.getOwnPropertySymbols(i).length&&Ve(e,t,o,n,"Symbol keys cannot be represented in JSON Schema"))return;o.type="object",o.properties={};for(let u in i)kt(o.properties,u,ve(i[u],t,{...n,path:[...n.path,"properties",u]}));let c=[];for(let u of Object.keys(i)){let l=s.shape[u];if(t.io==="input"?Vs(l)===void 0:l._zod.optout===void 0)c.push(u)}if(c.length>0)o.required=c;if(s.catchall?._zod.def.type==="never")o.additionalProperties=!1;else if(!s.catchall){if(t.io==="output")o.additionalProperties=!1}else if(s.catchall)o.additionalProperties=ve(s.catchall,t,{...n,path:[...n.path,"additionalProperties"]})},af=(e,t,r,n)=>{let o=e._zod.def,s=o.inclusive===!1,i=o.options.map((a,c)=>ve(a,t,{...n,path:[...n.path,s?"oneOf":"anyOf",c]}));if(s)r.oneOf=i;else r.anyOf=i},cf=(e,t,r,n)=>{let o=e._zod.def,s=ve(o.left,t,{...n,path:[...n.path,"allOf",0]}),i=ve(o.right,t,{...n,path:[...n.path,"allOf",1]}),a=(u)=>("allOf"in u)&&Object.keys(u).length===1,c=[...a(s)?s.allOf:[s],...a(i)?i.allOf:[i]];r.allOf=c,t.intersections.push(c)},uf=(e,t,r,n)=>{let o=r,s=e._zod.def;o.type="array";let i=t.target==="draft-2020-12"?"prefixItems":"items",a=t.target==="draft-2020-12"?"items":t.target==="openapi-3.0"?"items":"additionalItems",c=s.items.map((g,y)=>ve(g,t,{...n,path:[...n.path,i,y]})),u=s.rest?ve(s.rest,t,{...n,path:[...n.path,a,...t.target==="openapi-3.0"?[s.items.length]:[]]}):null,l=s.items.length;while(l>0){let g=s.items[l-1];if(!(t.io==="input"?Vs(g)!==void 0:g._zod.optout==="optional"))break;l--}let d=s.items.length,f=!s.rest;if(t.target==="draft-2020-12"){if(o.prefixItems=c,f)o.items=!1;else if(u)o.items=u;if(l>0)o.minItems=l;if(f)o.maxItems=d}else if(t.target==="openapi-3.0"){if(o.items={anyOf:c},u)o.items.anyOf.push(u);if(l>0)o.minItems=l;if(f)o.maxItems=d}else{if(o.items=c,f)o.additionalItems=!1;else if(u)o.additionalItems=u;if(l>0)o.minItems=l;if(f)o.maxItems=d}let{minimum:m,maximum:h}=lt(e);if(typeof m==="number")o.minItems=m;if(typeof h==="number")o.maxItems=h};function Vp(e,t,r){if(t.$ref){if(r.has(t))return t;r.add(t);let h=e.get(t)?.def;if(!h)return t;let g=Vp(e,h,r);return g===h?t:g}for(let h of["anyOf","oneOf"]){let g=t[h];if(!Array.isArray(g))continue;let y=g.map((b)=>Vp(e,b,r));if(y.some((b,E)=>b!==g[E]))t={...t,[h]:y}}let n=Array.isArray(t.type)?t.type:[t.type],o=!n.includes("string")&&n.some((h)=>h==="number"||h==="integer"),s=t.enum??(t.const!==void 0?[t.const]:void 0);if(!o&&!s?.some((h)=>typeof h==="number"))return t;let{minimum:i,maximum:a,exclusiveMinimum:c,exclusiveMaximum:u,multipleOf:l,format:d,id:f,...m}=t;if(m.enum)m.enum=m.enum.map((h)=>typeof h==="number"?String(h):h);else if(typeof m.const==="number")m.const=String(m.const);if(!o)return m;if(m.type="string",!s)m.pattern=(n.includes("number")?po:Ka).source;return m}var Zp=new WeakMap;function PL(e){let t=new Map;for(let n of e.seen.values())if(n.def&&!t.has(n.schema))t.set(n.schema,n);let r=new Map;for(let n of Zp.get(e)??[]){let o=e.seen.get(n),s=(o?.def??o?.schema)?.propertyNames;if(!s||s===!0||r.has(s))continue;let i=Vp(t,s,new Set);if(i!==s)r.set(s,i)}if(!r.size)return;for(let n of e.seen.values())for(let o of[n.schema,n.def]){let s=o&&r.get(o.propertyNames);if(s)o.propertyNames=s}}var lf=(e,t,r,n)=>{let o=r,s=e._zod.def;o.type="object";let i=s.keyType,a=lt(i).patterns;if(s.mode==="loose"&&a&&a.size>0){let l=ve(s.valueType,t,{...n,path:[...n.path,"patternProperties","*"]});o.patternProperties={};for(let d of a)kt(o.patternProperties,Cv(d).source,l)}else{if(t.target==="draft-07"||t.target==="draft-2020-12"){o.propertyNames=ve(s.keyType,t,{...n,path:[...n.path,"propertyNames"]});let l=Zp.get(t);if(!l)l=[],Zp.set(t,l),t.deferred.push(()=>PL(t));l.push(e)}o.additionalProperties=ve(s.valueType,t,{...n,path:[...n.path,"additionalProperties"]})}let c=i._zod.values,u=t.io==="input"&&Vs(s.valueType)!==void 0;if(c&&!s.partial&&!u){let l=[...c].filter((d)=>typeof d==="string"||typeof d==="number");if(l.length>0)o.required=l.map(String)}},df=(e,t,r,n)=>{let o=e._zod.def,s=ve(o.innerType,t,n),i=t.seen.get(e);if(t.target==="openapi-3.0")i.ref=o.innerType,r.nullable=!0;else r.anyOf=[s,{type:"null"}]},pf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},ff=Symbol();function Zv(e,t,r,n,o){let s=!1,i=JSON.stringify(e,(a,c)=>{if(typeof c!=="bigint")return c;return s=!0,null});if(!s)return JSON.parse(i);return Ve(t,r,n,o,"BigInt defaults cannot be represented in JSON Schema"),ff}var mf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType;let i=Zv(o.defaultValue,e,t,r,n);if(i!==ff)r.default=i},hf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);if(s.ref=o.innerType,t.io!=="input")return;let i=Zv(o.defaultValue,e,t,r,n);if(i!==ff)r._prefault=i},gf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType;let i;try{i=o.catchValue(void 0)}catch{Ve(e,t,r,n,"Dynamic catch values are not supported in JSON Schema");return}r.default=i},yf=(e,t,r,n)=>{let o=e._zod.def,s=o.in._zod.traits.has("$ZodTransform"),i=t.io==="input"?s?o.out:o.in:o.out;ve(i,t,n);let a=t.seen.get(e);a.ref=i},wf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType,r.readOnly=!0},Bv=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},fc=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},bf=(e,t,r,n)=>{let o=e._zod.innerType;ve(o,t,n);let s=t.seen.get(e);s.ref=o},Ov={string:Bp,number:Kp,boolean:Hp,bigint:zv,symbol:Nv,null:Gp,undefined:Lv,void:jv,never:Jp,any:Yp,unknown:Xp,date:Dv,enum:Qp,literal:ef,nan:Mv,template_literal:tf,file:qv,success:Fv,custom:rf,function:Uv,transform:nf,map:Wv,set:Vv,array:of,object:sf,union:af,intersection:cf,tuple:uf,record:lf,nullable:df,nonoptional:pf,default:mf,prefault:hf,catch:gf,pipe:yf,readonly:wf,promise:Bv,optional:fc,lazy:bf};function Kv(e,t){if("_idmap"in e){let n=e,o=Fs({...t,processors:Ov}),s={};for(let c of n._idmap.entries()){let[u,l]=c;ve(l,o)}let i={},a={registry:n,uri:t?.uri,defs:s};o.external=a;for(let c of n._idmap.entries()){let[u,l]=c;Us(o,l),kt(i,u,Ws(o,l))}if(Object.keys(s).length>0){let c=o.target==="draft-2020-12"?"$defs":"definitions";i.__shared={[c]:s}}return{schemas:i}}let r=Fs({...t,processors:Ov});return ve(e,r),Us(r,e),Ws(r,e)}var Hv=new WeakSet([Object.prototype,Error.prototype]);function mc(e,t,r){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let n=r(this);return Object.defineProperty(this,t,{value:n,configurable:!0,writable:!0}),n},set(n){Object.defineProperty(this,t,{value:n,configurable:!0,writable:!0})}})}var DL=(e,t)=>{gb.init(e,t),e.name="ZodError";let r=Object.getPrototypeOf(e);if(Hv.has(r))return;Hv.add(r),mc(r,"format",(n)=>(o)=>lp(n,o)),mc(r,"flatten",(n)=>(o)=>up(n,o)),mc(r,"addIssue",(n)=>(o)=>{n.issues.push(o),n.message=JSON.stringify(n.issues,Ps,2)}),mc(r,"addIssues",(n)=>(o)=>{n.issues.push(...o),n.message=JSON.stringify(n.issues,Ps,2)}),Object.defineProperty(r,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}})};var $t=P("ZodError",DL,void 0,{Parent:Error});var Gv=Ua($t),Jv=Wa($t),Yv=Cs($t),Xv=Va($t),Qv=bb($t),ek=_b($t),tk=Sb($t),rk=vb($t),nk=kb($t),ok=xb($t),sk=$b($t),ik=Eb($t);function qL(){if(!nt.localeError)ut(Pp())}function Zs(){if(!nt.memoizer)ut({memoizer:Op()})}var ye=P("ZodType",(e,t)=>(qL(),me.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(xt(t,{checks:[...t.checks??[],...e.map((r)=>typeof r==="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Ht(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Rj(e,t))},superRefine(e,t){return this.check(Cj(e,t))},overwrite(e){return this.check(Kr(e))},optional(){return Ee(this)},exactOptional(){return yj(this)},nullable(){return ck(this)},nullish(){return Ee(ck(this))},nonoptional(e){return kj(this,e)},array(){return v(this)},or(e){return ee([this,e])},and(e){return yc(this,e)},transform(e){return uk(this,gk(e))},default(e){return _j(this,e)},prefault(e){return vj(this,e)},catch(e){return $j(this,e)},pipe(e){return uk(this,e)},readonly(){return Oj(this)},describe(e){let t=this.clone();return Br.add(t,{description:e}),t},meta(...e){if(e.length===0)return Br.get(this);let t=this.clone();return Br.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get "~standard"(){return qa(this,"~standard",{..._p(this),jsonSchema:{input:qs(this,"input"),output:qs(this,"output")}})},set "~standard"(e){Pr(this,"~standard",e)},parse:function e(t,r){return Gv(this,t,r,{callee:e})},parseAsync:async function e(t,r){return await Jv(this,t,r,{callee:e})},safeParse(e,t){return Yv(this,e,t)},async safeParseAsync(e,t){return Xv(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){Pr(this,"spa",e)},validate(e,t){return Za(this,e,t)},validateAsync(e,t){return Ba(this,e,t)},encode:function e(t,r){return Qv(this,t,r,{callee:e})},decode:function e(t,r){return ek(this,t,r,{callee:e})},encodeAsync:async function e(t,r){return await tk(this,t,r,{callee:e})},decodeAsync:async function e(t,r){return await rk(this,t,r,{callee:e})},safeEncode(e,t){return nk(this,e,t)},safeDecode(e,t){return ok(this,e,t)},async safeEncodeAsync(e,t){return sk(this,e,t)},async safeDecodeAsync(e,t){return ik(this,e,t)},toJSONSchema(e){return kv(this,{})(e)},get description(){return Br.get(this)?.description},get _def(){return this._zod.def}}),lk=P("_ZodString",(e,t)=>{Xa.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Bp(e,r,n,o)},lb({format:(e)=>lt(e).format??null,minLength:(e)=>lt(e).minimum??null,maxLength:(e)=>lt(e).maximum??null},{regex(...e){return this.check(Rp(...e))},includes(...e){return this.check(Np(...e))},startsWith(...e){return this.check(Lp(...e))},endsWith(...e){return this.check(jp(...e))},min(...e){return this.check(mo(...e))},max(...e){return this.check(dc(...e))},length(...e){return this.check(pc(...e))},nonempty(...e){return this.check(mo(1,...e))},lowercase(e){return this.check(Cp(e))},uppercase(e){return this.check(zp(e))},trim(){return this.check(Mp())},normalize(...e){return this.check(Dp(...e))},toLowerCase(){return this.check(qp())},toUpperCase(){return this.check(Fp())},slugify(){return this.check(Up())}})),dk=P("ZodString",(e,t)=>{Xa.init(e,t),lk.init(e,t)},{email(e){return this.check(MS(FL,e))},url(e){return this.check(Ap(pk,e))},jwt(e){return this.check(sv(nj,e))},emoji(e){return this.check(ZS(WL,e))},guid(e){return this.check(qS(UL,e))},uuid(e){return this.check(FS(hc,e))},uuidv4(e){return this.check(US(hc,e))},uuidv6(e){return this.check(WS(hc,e))},uuidv7(e){return this.check(VS(hc,e))},nanoid(e){return this.check(BS(VL,e))},cuid(e){return this.check(KS(ZL,e))},cuid2(e){return this.check(HS(BL,e))},ulid(e){return this.check(GS(KL,e))},base64(e){return this.check(rv(ej,e))},base64url(e){return this.check(nv(tj,e))},xid(e){return this.check(JS(HL,e))},ksuid(e){return this.check(YS(GL,e))},ipv4(e){return this.check(XS(JL,e))},ipv6(e){return this.check(QS(YL,e))},cidrv4(e){return this.check(ev(XL,e))},cidrv6(e){return this.check(tv(QL,e))},e164(e){return this.check(ov(rj,e))},datetime(e){return this.check(oc(Bs,e))},date(e){return this.check(sc(Ks,e))},time(e){return this.check(ic(Hs,e))},duration(e){return this.check(ac(Gs,e))}});function p(e){return DS(dk,e)}var Pe=P("ZodStringFormat",(e,t)=>{xe.init(e,t),lk.init(e,t)}),Bs=P("ZodISODateTime",(e,t)=>{W_.init(e,t),Pe.init(e,t)}),Ks=P("ZodISODate",(e,t)=>{V_.init(e,t),Pe.init(e,t)}),Hs=P("ZodISOTime",(e,t)=>{Z_.init(e,t),Pe.init(e,t)}),Gs=P("ZodISODuration",(e,t)=>{B_.init(e,t),Pe.init(e,t)}),FL=P("ZodEmail",(e,t)=>{R_.init(e,t),Pe.init(e,t)});var UL=P("ZodGUID",(e,t)=>{I_.init(e,t),Pe.init(e,t)});var hc=P("ZodUUID",(e,t)=>{A_.init(e,t),Pe.init(e,t)});var pk=P("ZodURL",(e,t)=>{N_.init(e,t),Pe.init(e,t)});function Js(e){return Ap(pk,e)}var WL=P("ZodEmoji",(e,t)=>{L_.init(e,t),Pe.init(e,t)});var VL=P("ZodNanoID",(e,t)=>{j_.init(e,t),Pe.init(e,t)});var ZL=P("ZodCUID",(e,t)=>{D_.init(e,t),Pe.init(e,t)});var BL=P("ZodCUID2",(e,t)=>{M_.init(e,t),Pe.init(e,t)});var KL=P("ZodULID",(e,t)=>{q_.init(e,t),Pe.init(e,t)});var HL=P("ZodXID",(e,t)=>{F_.init(e,t),Pe.init(e,t)});var GL=P("ZodKSUID",(e,t)=>{U_.init(e,t),Pe.init(e,t)});var JL=P("ZodIPv4",(e,t)=>{K_.init(e,t),Pe.init(e,t)});var YL=P("ZodIPv6",(e,t)=>{G_.init(e,t),Pe.init(e,t)});var XL=P("ZodCIDRv4",(e,t)=>{J_.init(e,t),Pe.init(e,t)});var QL=P("ZodCIDRv6",(e,t)=>{Y_.init(e,t),Pe.init(e,t)});var ej=P("ZodBase64",(e,t)=>{Q_.init(e,t),Pe.init(e,t)});var tj=P("ZodBase64URL",(e,t)=>{eS.init(e,t),Pe.init(e,t)});var rj=P("ZodE164",(e,t)=>{tS.init(e,t),Pe.init(e,t)});var nj=P("ZodJWT",(e,t)=>{rS.init(e,t),Pe.init(e,t)});var gc=P("ZodNumber",(e,t)=>{vp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Kp(e,r,n,o),e.isFinite=!0},lb({minValue:(e)=>{let{minimum:t,exclusiveMinimum:r}=lt(e);return Math.max(t??Number.NEGATIVE_INFINITY,r??Number.NEGATIVE_INFINITY)},maxValue:(e)=>{let{maximum:t,exclusiveMaximum:r}=lt(e);return Math.min(t??Number.POSITIVE_INFINITY,r??Number.POSITIVE_INFINITY)},isInt:(e)=>{let{isInt:t,multipleOf:r}=lt(e);return!!t||!!r?.some(Number.isSafeInteger)},format:(e)=>lt(e).format??null},{gt(e,t){return this.check(uc(e,t))},gte(e,t){return this.check(Ds(e,t))},min(e,t){return this.check(Ds(e,t))},lt(e,t){return this.check(cc(e,t))},lte(e,t){return this.check(js(e,t))},max(e,t){return this.check(js(e,t))},int(e){return this.check(ak(e))},safe(e){return this.check(ak(e))},positive(e){return this.check(uc(0,e))},nonnegative(e){return this.check(Ds(0,e))},negative(e){return this.check(cc(0,e))},nonpositive(e){return this.check(js(0,e))},multipleOf(e,t){return this.check(lc(e,t))},step(e,t){return this.check(lc(e,t))},finite(){return this}}));function O(e){return iv(gc,e)}var oj=P("ZodNumberFormat",(e,t)=>{nS.init(e,t),gc.init(e,t)});function ak(e){return cv(oj,e)}var fk=P("ZodBoolean",(e,t)=>{oS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Hp(e,r,n,o)});function N(e){return uv(fk,e)}var sj=P("ZodNull",(e,t)=>{sS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Gp(e,r,n,o)});function wo(e){return lv(sj,e)}var ij=P("ZodAny",(e,t)=>{iS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Yp(e,r,n,o)});function mk(){return dv(ij)}var aj=P("ZodUnknown",(e,t)=>{aS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Xp(e,r,n,o)});function ne(){return pv(aj)}var cj=P("ZodNever",(e,t)=>{cS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Jp(e,r,n,o)});function uj(e){return fv(cj,e)}var lj=P("ZodArray",(e,t)=>{Zs(),uS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>of(e,r,n,o),e.element=t.element},{min(e,t){return this.check(mo(e,t))},nonempty(e){return this.check(mo(1,e))},max(e,t){return this.check(dc(e,t))},length(e,t){return this.check(pc(e,t))},unwrap(){return this.element}});function v(e,t){return mv(lj,e,t)}var vf=P("ZodObject",(e,t)=>{Zs(),pS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>sf(e,r,n,o),VN(e,"shape",(r)=>r._zod.def.shape,!1)},{keyof(){return z(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(xt(this._zod.def,{catchall:e}))},passthrough(){return this.clone(xt(this._zod.def,{catchall:ne()}))},loose(){return this.clone(xt(this._zod.def,{catchall:ne()}))},strict(){return this.clone(xt(this._zod.def,{catchall:uj()}))},strip(){return this.clone(xt(this._zod.def,{catchall:void 0}))},extend(e){return LN(this,e)},safeExtend(e){return jN(this,e)},merge(e){return DN(this,e)},pick(e){return zN(this,e)},omit(e){return NN(this,e)},partial(...e){return ib(xf,this,e[0])},exactPartial(...e){return ib(yk,this,e[0],"exactPartial")},required(...e){return MN(wk,this,e[0])}});function w(e,t){let r={type:"object",shape:e??{},...U(t)};return new vf(r)}function de(e,t){return new vf({type:"object",shape:e,catchall:ne(),...U(t)})}var hk=P("ZodUnion",(e,t)=>{kp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>af(e,r,n,o),e.options=t.options});function ee(e,t){return new hk({type:"union",options:e,...U(t)})}var dj=P("ZodDiscriminatedUnion",(e,t)=>{hk.init(e,t),fS.init(e,t)});function Ct(e,t,r){return new dj({type:"union",options:t,discriminator:e,...U(r)})}var pj=P("ZodIntersection",(e,t)=>{mS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>cf(e,r,n,o)});function yc(e,t){return new pj({type:"intersection",left:e,right:t})}var fj=P("ZodTuple",(e,t)=>{Zs(),hS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>uf(e,r,n,o)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw Error(".partial() cannot be used on tuple schemas containing refinements");return this.clone({...e,items:e.items.map((t)=>new xf({type:"optional",innerType:t}))})}});function mj(e,t,r){let n=t instanceof me,o=n?r:t;return new fj({type:"tuple",items:e,rest:n?t:null,...U(o)})}var _f=P("ZodRecord",(e,t)=>{Zs(),gS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>lf(e,r,n,o),e.keyType=t.keyType,e.valueType=t.valueType});function K(e,t,r){if(!t||!t._zod)return new _f({type:"record",keyType:p(),valueType:e,...U(t)});return new _f({type:"record",keyType:e,valueType:t,...U(r)})}function kf(e,t,r){return new _f({type:"record",keyType:e,valueType:t,...U(r),partial:!0})}var Sf=P("ZodEnum",(e,t)=>{yS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(n,o,s)=>Qp(e,n,o,s),e.enum=t.entries,e.options=[...e._zod.values];let r=new Set(Object.keys(t.entries));e.extract=(n,o)=>{let s={};for(let i of n)if(r.has(i))s[i]=t.entries[i];else throw Error(`Key ${i} not found in enum`);return new Sf({...t,checks:[],...U(o),entries:s})},e.exclude=(n,o)=>{let s={...t.entries};for(let i of n)if(r.has(i))delete s[i];else throw Error(`Key ${i} not found in enum`);return new Sf({...t,checks:[],...U(o),entries:s})}});function z(e,t){let r=Array.isArray(e)?Object.fromEntries(e.map((n)=>[n,n])):e;return new Sf({type:"enum",entries:r,...U(t)})}var hj=P("ZodLiteral",(e,t)=>{wS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>ef(e,r,n,o),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function C(e,t){return new hj({type:"literal",values:Array.isArray(e)?e:[e],...U(t)})}var gj=P("ZodTransform",(e,t)=>{Zs(),bS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>nf(e,r,n,o),e._zod.parse=(r,n)=>{if(n.direction==="backward")throw new Rs(e.constructor.name);r.addIssue=(s)=>{if(typeof s==="string")r.issues.push(jn(s,r.value,t));else{let i=s;if(i.fatal)i.continue=!1;if(i.code??(i.code="custom"),!("input"in i))i.input=r.value;i.inst??(i.inst=e),r.issues.push(jn(i))}};let o=t.transform(r.value,r);if(o instanceof Promise)return o.then((s)=>(r.value=s,r));return r.value=o,r}});function gk(e){return new gj({type:"transform",transform:e})}var xf=P("ZodOptional",(e,t)=>{xp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>fc(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function Ee(e){return new xf({type:"optional",innerType:e})}var yk=P("ZodExactOptional",(e,t)=>{_S.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>fc(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function yj(e){return new yk({type:"optional",innerType:e})}var wj=P("ZodNullable",(e,t)=>{SS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>df(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function ck(e){return new wj({type:"nullable",innerType:e})}var bj=P("ZodDefault",(e,t)=>{vS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>mf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function _j(e,t){return new bj({type:"default",innerType:e,get defaultValue(){return typeof t==="function"?t():tp(t)}})}var Sj=P("ZodPrefault",(e,t)=>{kS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>hf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function vj(e,t){return new Sj({type:"prefault",innerType:e,get defaultValue(){return typeof t==="function"?t():tp(t)}})}var wk=P("ZodNonOptional",(e,t)=>{xS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>pf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function kj(e,t){return new wk({type:"nonoptional",innerType:e,...U(t)})}var xj=P("ZodCatch",(e,t)=>{$S.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>gf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function $j(e,t){return new xj({type:"catch",innerType:e,catchValue:typeof t==="function"?t:db(t)})}var bk=P("ZodPipe",(e,t)=>{$p.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>yf(e,r,n,o),e.in=t.in,e.out=t.out});function uk(e,t){return new bk({type:"pipe",in:e,out:t})}var Ej=P("ZodPreprocess",(e,t)=>{bk.init(e,t),ES.init(e,t)}),Tj=P("ZodReadonly",(e,t)=>{TS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>wf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function Oj(e){return new Tj({type:"readonly",innerType:e})}var Pj=P("ZodTemplateLiteral",(e,t)=>{OS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>tf(e,r,n,o)});function Ij(e,t){return new Pj({type:"template_literal",parts:e,...U(t)})}var Aj=P("ZodLazy",(e,t)=>{PS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>bf(e,r,n,o),e.unwrap=()=>e._zod.def.getter()});function $f(e){return new Aj({type:"lazy",getter:e})}var _k=P("ZodCustom",(e,t)=>{IS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>rf(e,r,n,o)});function wc(e,t){return hv(_k,e??(()=>!0),t)}function Rj(e,t={}){return gv(_k,e,t)}function Cj(e,t){return yv(e,t)}function dt(e){let t=$f(()=>ee([p(e),O(),N(),wo(),v(t),K(p(),t)]));return t}function bc(e,t){return new Ej({type:"pipe",in:gk(e),out:t})}var vk={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};var Sk;(function(e){})(Sk||(Sk={}));function kk(e){return oc(Bs,e)}function Nj(e){return sc(Ks,e)}function Lj(e){return ic(Hs,e)}function jj(e){return ac(Gs,e)}function Dj(e){return av(gc,e)}var $k={name:"@tripwire-sh/cli",version:"0.1.11",description:"Set up Tripwire in your coding agents and manage it from the terminal",type:"module",imports:{"#/*":"./src/*"},license:"MIT",repository:{type:"git",url:"git+https://github.com/Boring-Software-Inc/v2.git",directory:"apps/cli"},homepage:"https://tripwire.sh",bin:{tripwire:"dist/tripwire.js"},files:["dist"],engines:{node:">=20.12"},publishConfig:{access:"public"},scripts:{build:"bun build src/index.ts --target node --format esm --minify --outfile dist/tripwire.js",typecheck:"tsc --noEmit"},devDependencies:{"@clack/prompts":"^1.7.0","@modelcontextprotocol/sdk":"^1.32.1","@tripwire/contracts":"workspace:*",commander:"^14.0.3","jsonc-parser":"^3.3.1",picocolors:"^1.1.1",yaml:"^2.9.0",zod:"^4.0.0"}};var _c=$k.version,q="tripwire",Ys="tripwire-get-started",Ek="tripwire-workflows",Xs="tripwire-cli",qj="https://mcp.tripwire.sh/mcp",Fj="https://app.tripwire.sh/api/auth",Tk="offline_access tripwire:read tripwire:configure tripwire:moderate tripwire:admin";function bo(e){return e.TRIPWIRE_MCP_URL||qj}function Ok(e){return(e.TRIPWIRE_AUTH_URL||Fj).replace(/\/+$/,"")}var Uj="urn:ietf:params:oauth:grant-type:device_code",Wj=w({device_code:p(),user_code:p(),verification_uri:p(),verification_uri_complete:p().optional(),expires_in:O(),interval:O().optional()}),Ik=w({access_token:p().min(1),refresh_token:p().min(1).optional(),expires_in:O().optional(),token_type:p().optional()}),Tf=w({error:p(),error_description:p().optional()});class Ef extends Error{constructor(){super("Session expired. Run tripwire login.");this.name="SessionExpiredError"}}class Qs extends Error{constructor(){super("Tripwire is not reachable right now. Try again in a minute.");this.name="AuthUnreachableError"}}var Ak={fetch:(e,t)=>fetch(e,t),sleep:(e)=>new Promise((t)=>setTimeout(t,e)),now:()=>Date.now()};async function Sc(e,t,r){let n=await e.fetch(t,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:new URLSearchParams(r).toString()}),o=await n.text(),s={error:"invalid_response",error_description:o.slice(0,200)};try{let i=dt().safeParse(JSON.parse(o));return{status:n.status,body:i.success?i.data:s,headers:n.headers}}catch{return{status:n.status,body:s,headers:n.headers}}}function Rk(e,t){let r=Tf.safeParse(e);if(!r.success)return Error(t);return Error(r.data.error_description?`${r.data.error}: ${r.data.error_description}`:r.data.error)}async function Ck(e,t,r){let{status:n,body:o}=await Sc(e,`${t}/device/code`,{client_id:Xs,scope:Tk,resource:r}),s=Wj.safeParse(o);if(n>=400||!s.success)throw Rk(o,`Device authorization failed (HTTP ${n})`);return s.data}function zk(e,t,r,n,o){let s=t.refresh_token??o;return{accessToken:t.access_token,refreshToken:s,expiresAt:t.expires_in?e.now()+t.expires_in*1000:void 0,mcpUrl:n,authUrl:r}}var Pk=5000;function Vj(e,t){let r=(e.get("retry-after")??e.get("x-retry-after"))?.trim();if(!r)return null;if(/^\d+$/.test(r))return Number(r)*1000;let n=Date.parse(r);return Number.isNaN(n)?null:Math.max(0,n-t)}async function Nk(e,t,r,n){let o=(n.interval??5)*1000,s=null,i=e.now()+n.expires_in*1000;while(e.now()<i){await e.sleep(Math.min(Math.max(o,s??0),i-e.now())),s=null;let{status:a,body:c,headers:u}=await Sc(e,`${t}/oauth2/token`,{grant_type:Uj,device_code:n.device_code,client_id:Xs,resource:r}),l=Ik.safeParse(c);if(a<400&&l.success)return zk(e,l.data,t,r);if(a===429){if(s=Vj(u,e.now()),s===null)o+=Pk;continue}let d=Tf.safeParse(c),f=d.success?d.data.error:"";if(f==="authorization_pending")continue;if(f==="slow_down"){o+=Pk;continue}if(f==="access_denied")throw Error("Sign-in was denied in the browser");if(f==="expired_token")throw Error("The code expired. Run tripwire login again.");throw Rk(c,`Token request failed (HTTP ${a})`)}throw Error("The code expired. Run tripwire login again.")}async function Lk(e,t){if(!t.refreshToken)throw new Ef;let{status:r,body:n}=await Sc(e,`${t.authUrl}/oauth2/token`,{grant_type:"refresh_token",refresh_token:t.refreshToken,client_id:Xs,resource:t.mcpUrl}).catch(()=>{throw new Qs}),o=Ik.safeParse(n);if(r>=400||!o.success){let s=Tf.safeParse(n);throw(r===400||r===401)&&s.success&&s.data.error!=="invalid_response"?new Ef:new Qs}return zk(e,o.data,t.authUrl,t.mcpUrl,t.refreshToken)}async function jk(e,t){let r=t.refreshToken??t.accessToken;await Sc(e,`${t.authUrl}/oauth2/revoke`,{token:r,client_id:Xs}).catch(()=>{return})}import{stripVTControlCharacters as GF}from"node:util";var Zj=z(["pending","approved","rejected"]),Kie=Zj.options;var ei=[{id:"github",label:"GitHub",status:"live",signIn:"social",reviews:!0},{id:"opengit",label:"OpenGit",status:"live",paused:!0},{id:"gitlab",label:"GitLab",status:"planned"},{id:"origin",label:"ORIGIN",status:"planned"}];function Dk(e){return e.status==="live"}var ti=z(ei.filter(Dk).map((e)=>e.id)),Jie=ei.filter((e)=>Dk(e)&&!("paused"in e)).map((e)=>e.label),Yie=ei.filter((e)=>e.status==="planned").map((e)=>e.label),Xie=ei.filter((e)=>("signIn"in e)).map((e)=>e.id);var Bj=Object.fromEntries(ei.map((e)=>[e.id,e]));var vc=w({owner:p(),name:p(),fullName:p()}),Kj=w({id:p(),login:p(),name:p(),type:z(["Organization","User"]),avatarUrl:p(),repoAccess:z(["all","selected"]),repoCount:O(),installedAt:pe.datetime()}),Hj=w({id:p(),owner:p(),name:p(),fullName:p(),private:N(),pushedAt:pe.datetime(),openFlags:O(),stars:O()}),tae=w({accounts:v(Kj),repos:v(Hj)});var ri=z(["change-request.opened","change-request.updated","change-request.closed","comment.created","push","schedule.matched","installation.created","installation.deleted","installation-repositories.added","installation-repositories.removed"]),Mk=w({login:p(),externalId:p(),avatarUrl:p().optional()}),Of=w({number:O().int(),title:p(),headSha:p(),baseRef:p().optional(),headRef:p().optional(),draft:N().optional(),url:p()}),Gj=w({externalId:p(),body:p(),url:p(),subjectNumber:O().int(),byTripwire:N().optional()}),Jj=w({ref:p(),headSha:p(),commitCount:O().int(),url:p().optional()}),xc=z(["issue","change-request"]),Yj=w({kind:xc,number:O().int(),title:p(),url:p(),state:z(["open","closed"]),author:p(),labels:v(p()),locked:N(),updatedAt:pe.datetime()}),Xj=w({workflowId:p(),nodeId:p(),tickId:p()}),_o={id:p(),forge:ti,deliveryId:p(),repo:vc,repoExternalId:p().optional(),installationExternalId:p().optional(),actor:Mk,occurredAt:pe.datetime(),receivedAt:pe.datetime()},kc={id:p(),forge:ti,deliveryId:p(),actor:Mk,occurredAt:pe.datetime(),receivedAt:pe.datetime(),installation:w({externalId:p(),account:p(),accountType:z(["User","Organization"]).optional()}),repositories:v(w({externalId:p(),owner:p(),name:p(),fullName:p(),private:N()}))},qk=Ct("kind",[w({..._o,kind:C("change-request.opened"),changeRequest:Of}),w({..._o,kind:C("change-request.updated"),changeRequest:Of}),w({..._o,kind:C("change-request.closed"),changeRequest:Of}),w({..._o,kind:C("comment.created"),comment:Gj}),w({..._o,kind:C("push"),push:Jj}),w({..._o,kind:C("schedule.matched"),schedule:Xj,thread:Yj}),w({...kc,kind:C("installation.created")}),w({...kc,kind:C("installation.deleted")}),w({...kc,kind:C("installation-repositories.added")}),w({...kc,kind:C("installation-repositories.removed")})]),Qj=ri.extract(["change-request.opened","change-request.updated","change-request.closed"]),iae=Qj.options;var eD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tD=["sun","mon","tue","wed","thu","fri","sat"],rD=[{name:"minute",range:"0 to 59",min:0,max:59},{name:"hour",range:"0 to 23",min:0,max:23},{name:"day of month",range:"1 to 31",min:1,max:31},{name:"month",range:"1 to 12 or jan to dec",min:1,max:12,names:eD,nameBase:1},{name:"day of week",range:"0 to 7 or sun to sat",min:0,max:7,names:tD,nameBase:0}];function Pf(e,t){let r=e.toLowerCase(),n=t.names?.indexOf(r)??-1;if(n>=0)return n+(t.nameBase??0);if(!/^\d+$/.test(e))return null;let o=Number(e);return o>=t.min&&o<=t.max?o:null}function nD(e,t){let r=new Set;for(let n of e.split(",")){let o=n.split("/"),[s="",i]=o;if(o.length>2||s.split("-").length>2)return{ok:!1,error:`${t.name} must be a number, a range like 1-5 or a step like */15`};let a=i===void 0?1:Number(i);if(!(Number.isInteger(a)&&a>=1))return{ok:!1,error:`${t.name} step must be a whole number of 1 or more, like */15`};let c,u;if(s==="*")c=t.min,u=t.max;else if(s.includes("-")){let[l="",d=""]=s.split("-");c=Pf(l,t),u=Pf(d,t)}else c=Pf(s,t),u=i===void 0?c:t.max;if(c===null||u===null)return{ok:!1,error:`${t.name} must be ${t.range}`};if(c>u)return{ok:!1,error:`${t.name} range must go from low to high, like 1-5`};for(let l=c;l<=u;l+=a)r.add(l)}return{ok:!0,values:[...r].sort((n,o)=>n-o)}}function Dn(e){let t=e.trim().split(/\s+/);if(t.length!==5)return{ok:!1,error:"use five fields: minute hour day month weekday"};let r=[];for(let[u,l]of rD.entries()){let d=nD(t[u]??"",l);if(!d.ok)return d;r.push(d.values)}let[n=[],o=[],s=[],i=[],a=[]]=r,c=[...new Set(a.map((u)=>u===7?0:u))].sort((u,l)=>u-l);return{ok:!0,spec:{minutes:n,hours:o,days:s,months:i,weekdays:c,daysRestricted:!(t[2]??"*").startsWith("*"),weekdaysRestricted:!(t[4]??"*").startsWith("*")}}}function ni(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}var Fk=new Map;function oD(e){let t=Fk.get(e);if(t)return t;let r=new Intl.DateTimeFormat("en-US",{timeZone:e,hourCycle:"h23",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"});return Fk.set(e,r),r}function Rf(e,t){let r=oD(t).formatToParts(e),n=(o)=>Number(r.find((s)=>s.type===o)?.value??"0");return{year:n("year"),month:n("month"),day:n("day"),hour:n("hour"),minute:n("minute")}}function If(e,t){let r=Rf(new Date(e),t),n=Date.UTC(r.year,r.month-1,r.day,r.hour,r.minute),o=e-(e%60000+60000)%60000;return n-o}function Uk(e,t){let r=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute),n=[r-If(r-129600000,t),r-If(r+129600000,t),r-If(r,t)].sort((o,s)=>o-s);for(let o of n){let s=Rf(new Date(o),t);if(s.year===e.year&&s.month===e.month&&s.day===e.day&&s.hour===e.hour&&s.minute===e.minute)return new Date(o)}return null}function $c(e,t,r){let n=e.days.includes(t),o=e.weekdays.includes(r);if(e.daysRestricted&&e.weekdaysRestricted)return n||o;return n&&o}function sD(e,t){return $c(e,t.getUTCDate(),t.getUTCDay())}var iD=Array.from({length:217},(e,t)=>({day:t%31+1,weekday:Math.floor(t/31)}));function Af(e){let t=iD.map(({day:r,weekday:n})=>$c(e,r,n)?"1":"0").join("");return[e.minutes,e.hours,e.months].map((r)=>r.join(",")).concat(t).join(" ")}function Wk(e,t){let r=Dn(e),n=Dn(t);return r.ok&&n.ok&&Af(r.spec)===Af(n.spec)}var aD=1830,cD=180;function uD(e,t){let r=Uk(e,t);if(r)return r;let n=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute);for(let o=1;o<=cD;o++){let s=new Date(n+o*60000),i=Uk({year:s.getUTCFullYear(),month:s.getUTCMonth()+1,day:s.getUTCDate(),hour:s.getUTCHours(),minute:s.getUTCMinutes()},t);if(i)return i}return null}function Vk(e){let{minutes:t,hours:r}=e,n=t.slice(1).map((s,i)=>s-(t[i]??0));if(r.some((s)=>r.includes((s+1)%24)))n.push(60-(t.at(-1)??0)+(t[0]??0));return n.length>0?Math.min(...n):1440}function Cf(e,t,r){let n=Rf(r,t),o=new Date(Date.UTC(n.year,n.month-1,n.day));for(let s=0;s<=aD;s++){if(e.months.includes(o.getUTCMonth()+1)&&sD(e,o))for(let i of e.hours)for(let a of e.minutes){let c=uD({year:o.getUTCFullYear(),month:o.getUTCMonth()+1,day:o.getUTCDate(),hour:i,minute:a},t);if(c&&c.getTime()>r.getTime())return c}o.setUTCDate(o.getUTCDate()+1)}return null}var zt=5,Ie=$f(()=>ee([p(),O(),N(),wo(),v(Ie),K(p(),Ie)])),Oc=w({x:O(),y:O()}),lD=z(["all-of","any-of","not"]),dD=z(["block","comment","label","request-review","send-to-moderation","webhook","discord","lock","close","remove-label","post-comment"]),pD=["comment"];function Bk(e){return pD.includes(e)}var pae=w({url:Js().meta({secret:!0}).describe("webhook url"),signingSecret:p().min(1).optional().meta({secret:!0}).describe("signing secret")}),fae=w({url:Js().meta({secret:!0}).describe("discord webhook url")}),So=15,Pc=p().regex(/^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$/,{error:(e)=>`${String(e.input)} is not a GitHub username`}),zf=p().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,99}$/,{error:(e)=>`${String(e.input)} is not a team slug`}),Nf=w({id:O().int().positive().optional(),login:Pc}),mae=w({id:O().int().positive(),login:Pc,avatarUrl:p(),permission:p().min(1)}),hae=w({name:p().min(1),color:p().regex(/^[0-9a-fA-F]{6}$/),description:p().nullable()}),fD=bc((e)=>p().safeParse(e).success?{login:e}:e,Nf);function Kk(e,t){return e.id!==void 0&&t.id!==void 0?e.id===t.id:e.login.toLowerCase()===t.login.toLowerCase()}var oi=w({reviewers:v(fD).max(So,`ask at most ${So} people`).default([]),teamReviewers:v(zf).max(So,`ask at most ${So} teams`).default([])}),Hk=oi.superRefine((e,t)=>{let r=e.reviewers.length+e.teamReviewers.length;if(r===0)t.addIssue({code:"custom",message:"add at least one person or team to ask"});if(r>So)t.addIssue({code:"custom",message:`ask at most ${So} people and teams`})}),Gr=w({labels:v(p().trim().min(1)).min(1,"choose at least one label")}),Zk=5000,Ic=w({message:p().trim().min(1,"write a message").max(Zk,`keep it under ${Zk} characters`)}),mD=z(["resolved","off-topic","too heated","spam"]),Gk=w({reason:mD.optional()}),si={hours:3600000,days:86400000,weeks:604800000,months:2592000000};function Lf(e){return e.n*si[e.unit]}var Ac=52*si.weeks,hD=3650*si.days,gD=z(["hours","days","weeks"]),yD=z(["hours","days","weeks","months"]),wD=w({n:O().int().min(1),unit:gD}).refine((e)=>Lf(e)<=Ac,{message:"runs at least once a year"}),ir="UTC",Rc=p().min(1).refine(ni,{error:(e)=>`${String(e.input)} is not an IANA timezone, like Europe/Berlin`}),Ec=p().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use 24-hour HH:MM, like 07:30"),jf=z(["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]),bD=Ct("preset",[w({preset:C("hourly"),minute:O().int().min(0).max(59)}),w({preset:C("daily"),at:Ec}),w({preset:C("weekdays"),at:Ec}),w({preset:C("weekly"),on:jf,at:Ec}),w({preset:C("monthly"),day:O().int().min(1).max(28),at:Ec})]),Cc=w({cron:p().trim().superRefine((e,t)=>{let r=Dn(e);if(!r.ok){t.addIssue({code:"custom",message:r.error});return}if(Cf(r.spec,"UTC",new Date(Date.UTC(2026,0,1)))===null)t.addIssue({code:"custom",message:"this cron never runs. Pick a day the month has"});if(Vk(r.spec)<zt)t.addIssue({code:"custom",message:`runs must be at least ${zt} minutes apart`})})}),Jk=ee([wD,bD,Cc]),Yk=w({n:O().int().min(1),unit:yD}).refine((e)=>Lf(e)<=hD,{message:"10 years at most"}),Xk=z(["open","closed","any"]),Tc=v(p().min(1)),_D=w({subjects:v(xc).min(1),state:Xk,inactiveFor:Yk,labels:Tc.optional(),excludeLabels:Tc.optional(),skipLocked:N().default(!0)}),vo=w({every:Jk,timezone:Rc.optional(),match:_D}),SD=w({every:Jk.optional(),timezone:Rc.optional(),match:w({subjects:v(xc).optional(),state:Xk.optional(),inactiveFor:Yk.optional(),labels:Tc.optional(),excludeLabels:Tc.optional(),skipLocked:N().optional()}).default({})});var vD=["every","subjects","state","inactiveFor"];function Qk(e){return vD.filter((t)=>{if(!e)return!0;if(t==="every")return e.every===void 0;let r=e.match[t];return Array.isArray(r)?r.length===0:r===void 0})}var Hr=p(),kD=w({id:Hr,type:C("trigger"),kinds:v(ri).min(1),schedule:SD.optional(),position:Oc.optional()});function zc(e){return e.type==="trigger"&&(e.kinds??[]).includes("schedule.matched")}var xD=w({id:Hr,type:C("rule"),ref:p().regex(/^[a-z][a-z0-9-]*@\d+$/),config:Ie,position:Oc.optional()}),$D=w({id:Hr,type:C("gate"),mode:lD,position:Oc.optional()}),ED=w({id:Hr,type:C("action"),action:dD,params:K(p(),Ie).optional(),position:Oc.optional()}),Df=Ct("type",[kD,xD,$D,ED]),ex=z(["pass","fail","approve","deny"]),TD=w({id:p(),from:Hr,to:Hr,when:ex.optional()}),pt=w({id:p(),name:p(),version:O().int().min(1),nodes:v(Df).min(1),edges:v(TD)}),tx={id:"default@1",name:"default gate",version:1,nodes:[{id:"trigger",type:"trigger",kinds:["change-request.opened","change-request.updated"]},{id:"account-age",type:"rule",ref:"account-age@1",config:{minDays:7}},{id:"crypto",type:"rule",ref:"crypto-address@1",config:{}},{id:"honeypot",type:"rule",ref:"honeypot@1",config:{paths:[".github/workflows/**"]}},{id:"max-files",type:"rule",ref:"max-files-changed@1",config:{max:200}},{id:"english",type:"rule",ref:"english-only@1",config:{maxNonLatinRatio:0.5}},{id:"gate",type:"gate",mode:"all-of"},{id:"block",type:"action",action:"block"}],edges:[{id:"e1",from:"trigger",to:"account-age"},{id:"e2",from:"trigger",to:"crypto"},{id:"e3",from:"trigger",to:"honeypot"},{id:"e4",from:"trigger",to:"max-files"},{id:"e5",from:"trigger",to:"english"},{id:"e6",from:"account-age",to:"gate"},{id:"e7",from:"crypto",to:"gate"},{id:"e8",from:"honeypot",to:"gate"},{id:"e9",from:"max-files",to:"gate"},{id:"e10",from:"english",to:"gate"},{id:"e11",from:"gate",to:"block",when:"fail"}]};var rx=[{kind:"change-request.opened",name:"Change request opened",description:"Runs when someone opens a change request.",toolbox:!0},{kind:"change-request.updated",name:"Change request updated",description:"Runs when a change request gets new commits or edits.",toolbox:!0},{kind:"change-request.closed",name:"Change request closed",description:"Runs when a change request is closed.",toolbox:!0},{kind:"comment.created",name:"Comment created",description:"Runs when someone comments on a change request or issue.",toolbox:!0},{kind:"push",name:"Push",description:"Runs when commits are pushed to the repo.",toolbox:!0},{kind:"schedule.matched",name:"On a schedule",description:"Runs on a timer for issues and change requests that match.",toolbox:!0},{kind:"installation.created",name:"Installation created",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation.deleted",name:"Installation deleted",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation-repositories.added",name:"Repos added",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation-repositories.removed",name:"Repos removed",description:"Internal event. Installations sync outside workflows.",toolbox:!1}],nx=[{mode:"all-of",name:"All of",description:"Passes only when every connected check passes. A check that was never reached does not pass."},{mode:"any-of",name:"Any of",description:"Passes when at least one connected check passes. A check that was never reached does not pass."},{mode:"not",name:"Not",description:"Flips its input: pass becomes fail, and fail becomes pass."}],ox=[{action:"block",name:"Block",description:"Fails the Tripwire check and requests changes. The change request stays open."},{action:"label",name:"Label",description:"Adds labels you choose to the change request."},{action:"request-review",name:"Request GitHub review",description:"Asks the people you choose to review on GitHub."},{action:"send-to-moderation",name:"Human review",description:"Waits for a maintainer to approve or block it in Tripwire."},{action:"webhook",name:"Webhook",description:"Posts the verdict as JSON to a URL you set."},{action:"lock",name:"Lock",description:"Locks the conversation so only maintainers can comment."},{action:"close",name:"Close",description:"Closes the issue or change request."},{action:"remove-label",name:"Remove label",description:"Removes labels you choose, if they are there."},{action:"post-comment",name:"Comment",description:"Posts a comment you write. It is separate from the verdict comment."},{action:"discord",name:"Discord",description:"Posts the verdict to a Discord channel you set."}];var bae=K(p(),Ie).catch({});function Nc(e){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function sx(e){let t=Gr.safeParse(e);return t.success?t.data.labels:[]}function ix(e){return`${e.length===1?"the label":"the labels"} ${Nc(e)}`}function OD(e){let t=oi.safeParse(e);if(!t.success)return[];return[...t.data.reviewers.map((r)=>r.login),...t.data.teamReviewers]}function ax(e,t){switch(e){case"block":return"blocks it";case"label":{let r=sx(t);return r.length>0?`adds ${ix(r)}`:"adds labels"}case"remove-label":{let r=sx(t);return r.length>0?`removes ${ix(r)}`:"removes labels"}case"request-review":{let r=OD(t);return r.length>0?`requests GitHub review from ${Nc(r)}`:"requests GitHub review"}case"send-to-moderation":return"sends it to human review";case"webhook":return"posts the verdict to a webhook";case"discord":return"posts the verdict to Discord";case"lock":return"locks the conversation";case"close":return"closes it";case"post-comment":return"posts your comment";default:return e}}var PD=w({runId:p(),verdict:p().nullable(),status:p(),reason:p().nullable()}),cx=w({event:qk,run:PD.nullable(),pending:N().optional()}),ID=w({repoFullName:p(),subjectNumber:O().int(),title:p(),url:p().nullable(),actor:w({login:p(),avatarUrl:p().nullable()}),currentVerdict:p().nullable(),currentRunId:p().nullable(),latestActivityAt:pe.datetime(),eventCount:O().int(),timeline:v(cx)}),AD=Ct("type",[w({type:C("group"),group:ID}),w({type:C("event"),entry:cx})]),kae=w({items:v(AD)});var RD=["tripwire:read","tripwire:configure","tripwire:moderate","tripwire:admin"],Eae=z(RD);var CD="https://tripwire.sh/orgs";var Tae=w({sub:p().min(1),azp:p().min(1).optional(),client_id:p().min(1).optional(),scope:p().optional(),[CD]:v(p()).optional()});var zD=["connect_mcp","install_app","sync_repos","pick_rules","turn_on_gate","verify_check"],ux=z(zD),lx=z(["active","waiting","completed","skipped","failed"]);var ND=p().regex(/^[A-Za-z0-9]{10}$/,"A run code is 10 letters or digits."),LD=/^([a-z0-9_-]+)#([A-Za-z0-9]{10})$/;function dx(e){let t=LD.exec(e.trim());if(!(t?.[1]&&t[2]))return null;return{org:t[1],code:t[2]}}var jD=w({status:lx,detail:p().max(256).nullable(),updatedAt:pe.datetime()}),DD=kf(ux,jD),Iae=w({runCode:p().trim().min(1).max(200),stage:ux,status:lx,detail:p().trim().max(256).optional()}),px=w({code:ND,stages:DD,completedAt:pe.datetime().nullable(),lastReportAt:pe.datetime().nullable()});function fx(e){return e?`Please help me set up Tripwire.
228
+ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let i of e.seen.entries()){let a=i[1];if(t===i[0]){s(i);continue}if(e.external){let u=e.external.registry.get(i[0])?.id;if(t!==i[0]&&u){s(i);continue}}if(e.metadataRegistry.get(i[0])?.id){s(i);continue}if(a.cycle){s(i);continue}if(a.count>1){if(e.reused==="ref")s(i)}}if(e.external)e.sharedDefsExtractedFor=e.external}function Sv(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let r=[];for(let n of t){if(!n||typeof n!=="object")return;Sv(n);let o=Object.keys(n);if(o.length!==1||o[0]!=="type")return;let s=n.type;for(let i of Array.isArray(s)?s:[s]){if(typeof i!=="string")return;if(!r.includes(i))r.push(i)}}delete e.anyOf,e.type=r.length===1?r[0]:r}var vv=new Set(["type","properties","required","additionalProperties"]),bv=["oneOf","anyOf"];function _v(e){let t=e.additionalProperties;if(t===void 0||t===!1||typeof t!=="object"||t===null)return null;return Object.keys(t).length?t:null}function Wp(e){let t=[];for(let s of e){if(typeof s!=="object"||s.type!=="object")return null;for(let i in s)if(!vv.has(i))return null;t.push(s)}let r={},n=new Set;for(let s of t){for(let i in s.properties){if(Object.prototype.hasOwnProperty.call(r,i))continue;let a=[];for(let u of t){let l=u.properties?.[i]??_v(u);if(l===null||l===void 0)continue;if(!a.some((d)=>JSON.stringify(d)===JSON.stringify(l)))a.push(l)}let c=a.length===1?a[0]:Wp(a)??{allOf:a};kt(r,i,c)}for(let i of s.required??[])n.add(i)}let o={type:"object",properties:r};if(n.size)o.required=[...n];if(t.every((s)=>s.additionalProperties===!1))o.additionalProperties=!1;else{let s=[];for(let i of t){let a=_v(i);if(a&&!s.some((c)=>JSON.stringify(c)===JSON.stringify(a)))s.push(a)}if(s.length===1)o.additionalProperties=s[0];else if(s.length>1)o.additionalProperties={allOf:s}}return o}function $L(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let o of vv)if(o in e)return;let r=t.filter((o)=>bv.some((s)=>Array.isArray(o[s]))),n=null;if(!r.length)n=Wp(t);else{let o=r[0],s=bv.find((c)=>Array.isArray(o[c]));if(Object.keys(o).length!==1)return;let i=t.filter((c)=>c!==o),a=o[s].map((c)=>Wp([...i,c]));if(a.some((c)=>!c))return;n={[s]:a}}if(!n)return;delete e.allOf,Ms(e,n)}function Ws(e,t){let r=e.seen.get(t);if(!r)throw Error("Unprocessed schema. This is a bug in Zod.");let n=(a)=>{let c=e.seen.get(a);if(c.ref===null)return;let u=c.def??c.schema,l={...u},d=c.ref;if(c.ref=null,d){n(d);let m=e.seen.get(d),h=m.schema;if(h.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"))u.allOf=u.allOf??[],u.allOf.push(h);else Ms(u,h);if(Ms(u,l),a._zod.parent===d)for(let y in u){if(y==="$ref"||y==="allOf")continue;if(!(y in l))delete u[y]}if(h.$ref&&m.def)for(let y in u){if(y==="$ref"||y==="allOf")continue;if(y in m.def&&JSON.stringify(u[y])===JSON.stringify(m.def[y]))delete u[y]}}let f=a._zod.parent;if(f&&f!==d){n(f);let m=e.seen.get(f);if(m?.schema.$ref){if(u.$ref=m.schema.$ref,m.def)for(let h in u){if(h==="$ref"||h==="allOf")continue;if(h in m.def&&JSON.stringify(u[h])===JSON.stringify(m.def[h]))delete u[h]}}}e.override({zodSchema:a,jsonSchema:u,path:c.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let a of[...e.seen.entries()].reverse())n(a[0]);if(e.target!=="openapi-3.0")for(let a of e.seen.entries())Sv(a[1].def??a[1].schema);for(let a of e.deferred)a();if(e.intersections.length){let a=new Map;for(let c of e.seen.values())for(let u of[c.schema,c.def]){let l=u?.allOf;if(!Array.isArray(l))continue;let d=a.get(l);if(d)d.push(u);else a.set(l,[u])}for(let c of e.intersections)for(let u of a.get(c)??[])$L(u)}}let o={};if(e.target==="draft-2020-12")o.$schema="https://json-schema.org/draft/2020-12/schema";else if(e.target==="draft-07")o.$schema="http://json-schema.org/draft-07/schema#";else if(e.target==="draft-04")o.$schema="http://json-schema.org/draft-04/schema#";else if(e.target==="openapi-3.0");if(e.external?.uri){let a=e.external.registry.get(t)?.id;if(!a)throw Error("Schema is missing an `id` property");o.$id=e.external.uri(a)}Ms(o,r.defId?r.schema:r.def??r.schema);let s=e.metadataRegistry.get(t)?.id;if(s!==void 0&&o.id===s)delete o.id;let i=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let a of e.seen.entries()){let c=a[1];if(c.def&&c.defId){if(c.def.id===c.defId)delete c.def.id;kt(i,c.defId,c.def)}}if(e.external)e.sharedEmitDoneFor=e.external;if(e.external);else if(Object.keys(i).length>0)if(e.target==="draft-2020-12")o.$defs=i;else o.definitions=i;try{let a=JSON.parse(JSON.stringify(o));return Object.defineProperty(a,"~standard",{value:{...t["~standard"],jsonSchema:{input:qs(t,"input",e.processors),output:qs(t,"output",e.processors)}},enumerable:!1,writable:!1}),a}catch(a){throw Error("Error converting schema to JSON.")}}function ot(e,t){let r=t??{seen:new Set};if(r.seen.has(e))return!1;r.seen.add(e);let n=e._zod.def;if(n.type==="transform")return!0;if(n.type==="array")return ot(n.element,r);if(n.type==="set")return ot(n.valueType,r);if(n.type==="lazy")return ot(n.getter(),r);if(n.type==="promise"||n.type==="optional"||n.type==="nonoptional"||n.type==="nullable"||n.type==="readonly"||n.type==="default"||n.type==="prefault"||n.type==="catch")return ot(n.innerType,r);if(n.type==="intersection")return ot(n.left,r)||ot(n.right,r);if(n.type==="record"||n.type==="map")return ot(n.keyType,r)||ot(n.valueType,r);if(n.type==="pipe"){if(e._zod.traits.has("$ZodCodec"))return!0;return ot(n.in,r)||ot(n.out,r)}if(n.type==="object"){for(let o in n.shape)if(ot(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(ot(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(ot(o,r))return!0;if(n.rest&&ot(n.rest,r))return!0;return!1}return!1}var kv=(e,t={})=>(r)=>{let n=Fs({...r,processors:t});return ve(e,n),Us(n,e),Ws(n,e)},qs=(e,t,r={})=>(n)=>{let{libraryOptions:o,target:s}=n??{},i=Fs({...o??{},target:s,io:t,processors:r});return ve(e,i),Us(i,e),Ws(i,e)};var ho=(e,t,r)=>{if(e[t]===void 0||r>e[t])e[t]=r},go=(e,t,r)=>{if(e[t]===void 0||r<e[t])e[t]=r},xv=(e,t)=>{ho(e,"minimum",t),go(e,"maximum",t)},Pv=(e,t)=>{if(e.multipleOf??(e.multipleOf=[]),!e.multipleOf.includes(t))e.multipleOf.push(t)},Iv=(e,t)=>{e.patterns??(e.patterns=new Set),e.patterns.add(t)},Av=(e,t)=>{e.mime=e.mime?e.mime.filter((r)=>t.includes(r)):[...t]},Rv=(e,t)=>{if(e.format=t,t.includes("int"))e.isInt=!0},$v=(e,t)=>ho(e,"minimum",t.minimum),Ev=(e,t)=>go(e,"maximum",t.maximum),Tv=(e)=>(t,r)=>{Rv(t,r.format);let[n,o]=e[r.format];ho(t,"minimum",n),go(t,"maximum",o)},EL={greater_than:(e,t)=>ho(e,t.inclusive?"minimum":"exclusiveMinimum",t.value),less_than:(e,t)=>go(e,t.inclusive?"maximum":"exclusiveMaximum",t.value),multiple_of:(e,t)=>Pv(e,t.value),number_format:Tv(Na),bigint_format:Tv(np),min_length:$v,max_length:Ev,length_equals:(e,t)=>xv(e,t.length),min_size:$v,max_size:Ev,size_equals:(e,t)=>xv(e,t.size),string_format:(e,t)=>{if(Rv(e,t.format),t.pattern)Iv(e,t.pattern);if(t.format==="base64"||t.format==="base64url")e.contentEncoding=t.format;if(t.local||t.precision===-1)e.laxFormat=!0},mime_type:(e,t)=>Av(e,t.mime)};function lt(e){let t={},r=e._zod.def,n=e._zod.traits.has("$ZodCheck")?[e,...r.checks??[]]:r.checks??[];for(let s of n)EL[s._zod.def.check]?.(t,s._zod.def);let o=e._zod.bag;if(o.minimum!==void 0)ho(t,"minimum",o.minimum);if(o.exclusiveMinimum!==void 0)ho(t,"exclusiveMinimum",o.exclusiveMinimum);if(o.maximum!==void 0)go(t,"maximum",o.maximum);if(o.exclusiveMaximum!==void 0)go(t,"exclusiveMaximum",o.exclusiveMaximum);if(o.multipleOf!==void 0)Pv(t,o.multipleOf);if(o.format!==void 0){if(t.format??(t.format=o.format),o.format.includes("int"))t.isInt=!0}if(o.mime)Av(t,o.mime);for(let s of o.patterns??[])Iv(t,s);return t}var TL={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},OL=new Map([[Sp,Ub],[Qa,Wb]]),Cv=(e)=>OL.get(e)??e,Bp=(e,t,r,n)=>{let o=r;o.type="string";let{minimum:s,maximum:i,format:a,patterns:c,contentEncoding:u,laxFormat:l}=lt(e);if(typeof s==="number")o.minLength=s;if(typeof i==="number")o.maxLength=i;if(a){if(o.format=TL[a]??a,o.format==="")delete o.format;if(a==="time"||l)delete o.format}if(u)o.contentEncoding=u;if(c&&c.size>0){let d=[...c].map(Cv);if(d.length===1)o.pattern=d[0].source;else if(d.length>1)o.allOf=[...d.map((f)=>({...t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0"?{type:"string"}:{},pattern:f.source}))]}},Kp=(e,t,r,n)=>{let o=r,{minimum:s,maximum:i,multipleOf:a,exclusiveMaximum:c,exclusiveMinimum:u,isInt:l}=lt(e);o.type=l?"integer":"number";let d=typeof u==="number"&&u>=(s??Number.NEGATIVE_INFINITY),f=typeof c==="number"&&c<=(i??Number.POSITIVE_INFINITY),m=t.target==="draft-04"||t.target==="openapi-3.0";if(d)if(m)o.minimum=u,o.exclusiveMinimum=!0;else o.exclusiveMinimum=u;else if(typeof s==="number")o.minimum=s;if(f)if(m)o.maximum=c,o.exclusiveMaximum=!0;else o.exclusiveMaximum=c;else if(typeof i==="number")o.maximum=i;if(a){let h=new Set;for(let b of a)if(Number.isFinite(b)&&b!==0)h.add(Math.abs(b));else Ve(e,t,o,n,`A multipleOf divisor of ${b} cannot be represented in JSON Schema`);let[g,...y]=h;if(g!==void 0)o.multipleOf=g;if(y.length)o.allOf=[...o.allOf??[],...y.map((b)=>({multipleOf:b}))]}},Hp=(e,t,r,n)=>{r.type="boolean"},zv=(e,t,r,n)=>{Ve(e,t,r,n,"BigInt cannot be represented in JSON Schema")},Nv=(e,t,r,n)=>{Ve(e,t,r,n,"Symbols cannot be represented in JSON Schema")},Gp=(e,t,r,n)=>{if(t.target==="openapi-3.0")r.type="string",r.nullable=!0,r.enum=[null];else r.type="null"},Lv=(e,t,r,n)=>{Ve(e,t,r,n,"Undefined cannot be represented in JSON Schema")},jv=(e,t,r,n)=>{Ve(e,t,r,n,"Void cannot be represented in JSON Schema")},Jp=(e,t,r,n)=>{r.not={}},Yp=(e,t,r,n)=>{},Xp=(e,t,r,n)=>{},Dv=(e,t,r,n)=>{Ve(e,t,r,n,"Date cannot be represented in JSON Schema")},Qp=(e,t,r,n)=>{let o=e._zod.def,s=Os(o.entries);if(s.length===0){r.not={};return}if(s.every((i)=>typeof i==="number"))r.type="number";if(s.every((i)=>typeof i==="string"))r.type="string";r.enum=s},ef=(e,t,r,n)=>{let o=e._zod.def;if(o.values.length===0){r.not={};return}let s=[];for(let i of o.values)if(i===void 0){if(Ve(e,t,r,n,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof i==="bigint"){if(Ve(e,t,r,n,"BigInt literals cannot be represented in JSON Schema"))return;s.push(Number(i))}else s.push(i);if(s.length===0);else if(s.length===1){let i=s[0];if(r.type=i===null?"null":typeof i,t.target==="draft-04"||t.target==="openapi-3.0")r.enum=[i];else r.const=i}else{if(s.every((i)=>typeof i==="number"))r.type="number";if(s.every((i)=>typeof i==="string"))r.type="string";if(s.every((i)=>typeof i==="boolean"))r.type="boolean";if(s.every((i)=>i===null))r.type="null";r.enum=s}},Mv=(e,t,r,n)=>{Ve(e,t,r,n,"NaN cannot be represented in JSON Schema")},tf=(e,t,r,n)=>{let o=r,s=e._zod.pattern;if(!s)throw Error("Pattern not found in template literal");o.type="string",o.pattern=s.source},qv=(e,t,r,n)=>{let o=r;o.type="string",o.format="binary",o.contentEncoding="binary";let{minimum:s,maximum:i,mime:a}=lt(e);if(s!==void 0)o.minLength=s;if(i!==void 0)o.maxLength=i;if(!a)return;if(a.length===0)o.not={};else if(a.length===1)o.contentMediaType=a[0];else o.anyOf=a.map((c)=>({contentMediaType:c}))},Fv=(e,t,r,n)=>{r.type="boolean"},rf=(e,t,r,n)=>{Ve(e,t,r,n,"Custom types cannot be represented in JSON Schema")},Uv=(e,t,r,n)=>{Ve(e,t,r,n,"Function types cannot be represented in JSON Schema")},nf=(e,t,r,n)=>{Ve(e,t,r,n,"Transforms cannot be represented in JSON Schema")},Wv=(e,t,r,n)=>{Ve(e,t,r,n,"Map cannot be represented in JSON Schema")},Vv=(e,t,r,n)=>{Ve(e,t,r,n,"Set cannot be represented in JSON Schema")},of=(e,t,r,n)=>{let o=r,s=e._zod.def,{minimum:i,maximum:a}=lt(e);if(typeof i==="number")o.minItems=i;if(typeof a==="number")o.maxItems=a;o.type="array",o.items=ve(s.element,t,{...n,path:[...n.path,"items"]})};function Vs(e){let t=e._zod.def;if(t.type==="pipe"&&t.in._zod.traits.has("$ZodTransform"))return Vs(t.out);if(t.type==="catch")return Vs(t.innerType);return e._zod.optin}var sf=(e,t,r,n)=>{let o=r,s=e._zod.def,i=s.shape;if(Object.getOwnPropertySymbols(i).length&&Ve(e,t,o,n,"Symbol keys cannot be represented in JSON Schema"))return;o.type="object",o.properties={};for(let u in i)kt(o.properties,u,ve(i[u],t,{...n,path:[...n.path,"properties",u]}));let c=[];for(let u of Object.keys(i)){let l=s.shape[u];if(t.io==="input"?Vs(l)===void 0:l._zod.optout===void 0)c.push(u)}if(c.length>0)o.required=c;if(s.catchall?._zod.def.type==="never")o.additionalProperties=!1;else if(!s.catchall){if(t.io==="output")o.additionalProperties=!1}else if(s.catchall)o.additionalProperties=ve(s.catchall,t,{...n,path:[...n.path,"additionalProperties"]})},af=(e,t,r,n)=>{let o=e._zod.def,s=o.inclusive===!1,i=o.options.map((a,c)=>ve(a,t,{...n,path:[...n.path,s?"oneOf":"anyOf",c]}));if(s)r.oneOf=i;else r.anyOf=i},cf=(e,t,r,n)=>{let o=e._zod.def,s=ve(o.left,t,{...n,path:[...n.path,"allOf",0]}),i=ve(o.right,t,{...n,path:[...n.path,"allOf",1]}),a=(u)=>("allOf"in u)&&Object.keys(u).length===1,c=[...a(s)?s.allOf:[s],...a(i)?i.allOf:[i]];r.allOf=c,t.intersections.push(c)},uf=(e,t,r,n)=>{let o=r,s=e._zod.def;o.type="array";let i=t.target==="draft-2020-12"?"prefixItems":"items",a=t.target==="draft-2020-12"?"items":t.target==="openapi-3.0"?"items":"additionalItems",c=s.items.map((g,y)=>ve(g,t,{...n,path:[...n.path,i,y]})),u=s.rest?ve(s.rest,t,{...n,path:[...n.path,a,...t.target==="openapi-3.0"?[s.items.length]:[]]}):null,l=s.items.length;while(l>0){let g=s.items[l-1];if(!(t.io==="input"?Vs(g)!==void 0:g._zod.optout==="optional"))break;l--}let d=s.items.length,f=!s.rest;if(t.target==="draft-2020-12"){if(o.prefixItems=c,f)o.items=!1;else if(u)o.items=u;if(l>0)o.minItems=l;if(f)o.maxItems=d}else if(t.target==="openapi-3.0"){if(o.items={anyOf:c},u)o.items.anyOf.push(u);if(l>0)o.minItems=l;if(f)o.maxItems=d}else{if(o.items=c,f)o.additionalItems=!1;else if(u)o.additionalItems=u;if(l>0)o.minItems=l;if(f)o.maxItems=d}let{minimum:m,maximum:h}=lt(e);if(typeof m==="number")o.minItems=m;if(typeof h==="number")o.maxItems=h};function Vp(e,t,r){if(t.$ref){if(r.has(t))return t;r.add(t);let h=e.get(t)?.def;if(!h)return t;let g=Vp(e,h,r);return g===h?t:g}for(let h of["anyOf","oneOf"]){let g=t[h];if(!Array.isArray(g))continue;let y=g.map((b)=>Vp(e,b,r));if(y.some((b,E)=>b!==g[E]))t={...t,[h]:y}}let n=Array.isArray(t.type)?t.type:[t.type],o=!n.includes("string")&&n.some((h)=>h==="number"||h==="integer"),s=t.enum??(t.const!==void 0?[t.const]:void 0);if(!o&&!s?.some((h)=>typeof h==="number"))return t;let{minimum:i,maximum:a,exclusiveMinimum:c,exclusiveMaximum:u,multipleOf:l,format:d,id:f,...m}=t;if(m.enum)m.enum=m.enum.map((h)=>typeof h==="number"?String(h):h);else if(typeof m.const==="number")m.const=String(m.const);if(!o)return m;if(m.type="string",!s)m.pattern=(n.includes("number")?po:Ka).source;return m}var Zp=new WeakMap;function PL(e){let t=new Map;for(let n of e.seen.values())if(n.def&&!t.has(n.schema))t.set(n.schema,n);let r=new Map;for(let n of Zp.get(e)??[]){let o=e.seen.get(n),s=(o?.def??o?.schema)?.propertyNames;if(!s||s===!0||r.has(s))continue;let i=Vp(t,s,new Set);if(i!==s)r.set(s,i)}if(!r.size)return;for(let n of e.seen.values())for(let o of[n.schema,n.def]){let s=o&&r.get(o.propertyNames);if(s)o.propertyNames=s}}var lf=(e,t,r,n)=>{let o=r,s=e._zod.def;o.type="object";let i=s.keyType,a=lt(i).patterns;if(s.mode==="loose"&&a&&a.size>0){let l=ve(s.valueType,t,{...n,path:[...n.path,"patternProperties","*"]});o.patternProperties={};for(let d of a)kt(o.patternProperties,Cv(d).source,l)}else{if(t.target==="draft-07"||t.target==="draft-2020-12"){o.propertyNames=ve(s.keyType,t,{...n,path:[...n.path,"propertyNames"]});let l=Zp.get(t);if(!l)l=[],Zp.set(t,l),t.deferred.push(()=>PL(t));l.push(e)}o.additionalProperties=ve(s.valueType,t,{...n,path:[...n.path,"additionalProperties"]})}let c=i._zod.values,u=t.io==="input"&&Vs(s.valueType)!==void 0;if(c&&!s.partial&&!u){let l=[...c].filter((d)=>typeof d==="string"||typeof d==="number");if(l.length>0)o.required=l.map(String)}},df=(e,t,r,n)=>{let o=e._zod.def,s=ve(o.innerType,t,n),i=t.seen.get(e);if(t.target==="openapi-3.0")i.ref=o.innerType,r.nullable=!0;else r.anyOf=[s,{type:"null"}]},pf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},ff=Symbol();function Zv(e,t,r,n,o){let s=!1,i=JSON.stringify(e,(a,c)=>{if(typeof c!=="bigint")return c;return s=!0,null});if(!s)return JSON.parse(i);return Ve(t,r,n,o,"BigInt defaults cannot be represented in JSON Schema"),ff}var mf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType;let i=Zv(o.defaultValue,e,t,r,n);if(i!==ff)r.default=i},hf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);if(s.ref=o.innerType,t.io!=="input")return;let i=Zv(o.defaultValue,e,t,r,n);if(i!==ff)r._prefault=i},gf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType;let i;try{i=o.catchValue(void 0)}catch{Ve(e,t,r,n,"Dynamic catch values are not supported in JSON Schema");return}r.default=i},yf=(e,t,r,n)=>{let o=e._zod.def,s=o.in._zod.traits.has("$ZodTransform"),i=t.io==="input"?s?o.out:o.in:o.out;ve(i,t,n);let a=t.seen.get(e);a.ref=i},wf=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType,r.readOnly=!0},Bv=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},fc=(e,t,r,n)=>{let o=e._zod.def;ve(o.innerType,t,n);let s=t.seen.get(e);s.ref=o.innerType},bf=(e,t,r,n)=>{let o=e._zod.innerType;ve(o,t,n);let s=t.seen.get(e);s.ref=o},Ov={string:Bp,number:Kp,boolean:Hp,bigint:zv,symbol:Nv,null:Gp,undefined:Lv,void:jv,never:Jp,any:Yp,unknown:Xp,date:Dv,enum:Qp,literal:ef,nan:Mv,template_literal:tf,file:qv,success:Fv,custom:rf,function:Uv,transform:nf,map:Wv,set:Vv,array:of,object:sf,union:af,intersection:cf,tuple:uf,record:lf,nullable:df,nonoptional:pf,default:mf,prefault:hf,catch:gf,pipe:yf,readonly:wf,promise:Bv,optional:fc,lazy:bf};function Kv(e,t){if("_idmap"in e){let n=e,o=Fs({...t,processors:Ov}),s={};for(let c of n._idmap.entries()){let[u,l]=c;ve(l,o)}let i={},a={registry:n,uri:t?.uri,defs:s};o.external=a;for(let c of n._idmap.entries()){let[u,l]=c;Us(o,l),kt(i,u,Ws(o,l))}if(Object.keys(s).length>0){let c=o.target==="draft-2020-12"?"$defs":"definitions";i.__shared={[c]:s}}return{schemas:i}}let r=Fs({...t,processors:Ov});return ve(e,r),Us(r,e),Ws(r,e)}var Hv=new WeakSet([Object.prototype,Error.prototype]);function mc(e,t,r){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let n=r(this);return Object.defineProperty(this,t,{value:n,configurable:!0,writable:!0}),n},set(n){Object.defineProperty(this,t,{value:n,configurable:!0,writable:!0})}})}var DL=(e,t)=>{gb.init(e,t),e.name="ZodError";let r=Object.getPrototypeOf(e);if(Hv.has(r))return;Hv.add(r),mc(r,"format",(n)=>(o)=>lp(n,o)),mc(r,"flatten",(n)=>(o)=>up(n,o)),mc(r,"addIssue",(n)=>(o)=>{n.issues.push(o),n.message=JSON.stringify(n.issues,Ps,2)}),mc(r,"addIssues",(n)=>(o)=>{n.issues.push(...o),n.message=JSON.stringify(n.issues,Ps,2)}),Object.defineProperty(r,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}})};var $t=P("ZodError",DL,void 0,{Parent:Error});var Gv=Ua($t),Jv=Wa($t),Yv=Cs($t),Xv=Va($t),Qv=bb($t),ek=_b($t),tk=Sb($t),rk=vb($t),nk=kb($t),ok=xb($t),sk=$b($t),ik=Eb($t);function qL(){if(!nt.localeError)ut(Pp())}function Zs(){if(!nt.memoizer)ut({memoizer:Op()})}var ye=P("ZodType",(e,t)=>(qL(),me.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(xt(t,{checks:[...t.checks??[],...e.map((r)=>typeof r==="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Ht(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Rj(e,t))},superRefine(e,t){return this.check(Cj(e,t))},overwrite(e){return this.check(Kr(e))},optional(){return Ee(this)},exactOptional(){return yj(this)},nullable(){return ck(this)},nullish(){return Ee(ck(this))},nonoptional(e){return kj(this,e)},array(){return v(this)},or(e){return ee([this,e])},and(e){return yc(this,e)},transform(e){return uk(this,gk(e))},default(e){return _j(this,e)},prefault(e){return vj(this,e)},catch(e){return $j(this,e)},pipe(e){return uk(this,e)},readonly(){return Oj(this)},describe(e){let t=this.clone();return Br.add(t,{description:e}),t},meta(...e){if(e.length===0)return Br.get(this);let t=this.clone();return Br.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get "~standard"(){return qa(this,"~standard",{..._p(this),jsonSchema:{input:qs(this,"input"),output:qs(this,"output")}})},set "~standard"(e){Pr(this,"~standard",e)},parse:function e(t,r){return Gv(this,t,r,{callee:e})},parseAsync:async function e(t,r){return await Jv(this,t,r,{callee:e})},safeParse(e,t){return Yv(this,e,t)},async safeParseAsync(e,t){return Xv(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){Pr(this,"spa",e)},validate(e,t){return Za(this,e,t)},validateAsync(e,t){return Ba(this,e,t)},encode:function e(t,r){return Qv(this,t,r,{callee:e})},decode:function e(t,r){return ek(this,t,r,{callee:e})},encodeAsync:async function e(t,r){return await tk(this,t,r,{callee:e})},decodeAsync:async function e(t,r){return await rk(this,t,r,{callee:e})},safeEncode(e,t){return nk(this,e,t)},safeDecode(e,t){return ok(this,e,t)},async safeEncodeAsync(e,t){return sk(this,e,t)},async safeDecodeAsync(e,t){return ik(this,e,t)},toJSONSchema(e){return kv(this,{})(e)},get description(){return Br.get(this)?.description},get _def(){return this._zod.def}}),lk=P("_ZodString",(e,t)=>{Xa.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Bp(e,r,n,o)},lb({format:(e)=>lt(e).format??null,minLength:(e)=>lt(e).minimum??null,maxLength:(e)=>lt(e).maximum??null},{regex(...e){return this.check(Rp(...e))},includes(...e){return this.check(Np(...e))},startsWith(...e){return this.check(Lp(...e))},endsWith(...e){return this.check(jp(...e))},min(...e){return this.check(mo(...e))},max(...e){return this.check(dc(...e))},length(...e){return this.check(pc(...e))},nonempty(...e){return this.check(mo(1,...e))},lowercase(e){return this.check(Cp(e))},uppercase(e){return this.check(zp(e))},trim(){return this.check(Mp())},normalize(...e){return this.check(Dp(...e))},toLowerCase(){return this.check(qp())},toUpperCase(){return this.check(Fp())},slugify(){return this.check(Up())}})),dk=P("ZodString",(e,t)=>{Xa.init(e,t),lk.init(e,t)},{email(e){return this.check(MS(FL,e))},url(e){return this.check(Ap(pk,e))},jwt(e){return this.check(sv(nj,e))},emoji(e){return this.check(ZS(WL,e))},guid(e){return this.check(qS(UL,e))},uuid(e){return this.check(FS(hc,e))},uuidv4(e){return this.check(US(hc,e))},uuidv6(e){return this.check(WS(hc,e))},uuidv7(e){return this.check(VS(hc,e))},nanoid(e){return this.check(BS(VL,e))},cuid(e){return this.check(KS(ZL,e))},cuid2(e){return this.check(HS(BL,e))},ulid(e){return this.check(GS(KL,e))},base64(e){return this.check(rv(ej,e))},base64url(e){return this.check(nv(tj,e))},xid(e){return this.check(JS(HL,e))},ksuid(e){return this.check(YS(GL,e))},ipv4(e){return this.check(XS(JL,e))},ipv6(e){return this.check(QS(YL,e))},cidrv4(e){return this.check(ev(XL,e))},cidrv6(e){return this.check(tv(QL,e))},e164(e){return this.check(ov(rj,e))},datetime(e){return this.check(oc(Bs,e))},date(e){return this.check(sc(Ks,e))},time(e){return this.check(ic(Hs,e))},duration(e){return this.check(ac(Gs,e))}});function p(e){return DS(dk,e)}var Pe=P("ZodStringFormat",(e,t)=>{xe.init(e,t),lk.init(e,t)}),Bs=P("ZodISODateTime",(e,t)=>{W_.init(e,t),Pe.init(e,t)}),Ks=P("ZodISODate",(e,t)=>{V_.init(e,t),Pe.init(e,t)}),Hs=P("ZodISOTime",(e,t)=>{Z_.init(e,t),Pe.init(e,t)}),Gs=P("ZodISODuration",(e,t)=>{B_.init(e,t),Pe.init(e,t)}),FL=P("ZodEmail",(e,t)=>{R_.init(e,t),Pe.init(e,t)});var UL=P("ZodGUID",(e,t)=>{I_.init(e,t),Pe.init(e,t)});var hc=P("ZodUUID",(e,t)=>{A_.init(e,t),Pe.init(e,t)});var pk=P("ZodURL",(e,t)=>{N_.init(e,t),Pe.init(e,t)});function Js(e){return Ap(pk,e)}var WL=P("ZodEmoji",(e,t)=>{L_.init(e,t),Pe.init(e,t)});var VL=P("ZodNanoID",(e,t)=>{j_.init(e,t),Pe.init(e,t)});var ZL=P("ZodCUID",(e,t)=>{D_.init(e,t),Pe.init(e,t)});var BL=P("ZodCUID2",(e,t)=>{M_.init(e,t),Pe.init(e,t)});var KL=P("ZodULID",(e,t)=>{q_.init(e,t),Pe.init(e,t)});var HL=P("ZodXID",(e,t)=>{F_.init(e,t),Pe.init(e,t)});var GL=P("ZodKSUID",(e,t)=>{U_.init(e,t),Pe.init(e,t)});var JL=P("ZodIPv4",(e,t)=>{K_.init(e,t),Pe.init(e,t)});var YL=P("ZodIPv6",(e,t)=>{G_.init(e,t),Pe.init(e,t)});var XL=P("ZodCIDRv4",(e,t)=>{J_.init(e,t),Pe.init(e,t)});var QL=P("ZodCIDRv6",(e,t)=>{Y_.init(e,t),Pe.init(e,t)});var ej=P("ZodBase64",(e,t)=>{Q_.init(e,t),Pe.init(e,t)});var tj=P("ZodBase64URL",(e,t)=>{eS.init(e,t),Pe.init(e,t)});var rj=P("ZodE164",(e,t)=>{tS.init(e,t),Pe.init(e,t)});var nj=P("ZodJWT",(e,t)=>{rS.init(e,t),Pe.init(e,t)});var gc=P("ZodNumber",(e,t)=>{vp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Kp(e,r,n,o),e.isFinite=!0},lb({minValue:(e)=>{let{minimum:t,exclusiveMinimum:r}=lt(e);return Math.max(t??Number.NEGATIVE_INFINITY,r??Number.NEGATIVE_INFINITY)},maxValue:(e)=>{let{maximum:t,exclusiveMaximum:r}=lt(e);return Math.min(t??Number.POSITIVE_INFINITY,r??Number.POSITIVE_INFINITY)},isInt:(e)=>{let{isInt:t,multipleOf:r}=lt(e);return!!t||!!r?.some(Number.isSafeInteger)},format:(e)=>lt(e).format??null},{gt(e,t){return this.check(uc(e,t))},gte(e,t){return this.check(Ds(e,t))},min(e,t){return this.check(Ds(e,t))},lt(e,t){return this.check(cc(e,t))},lte(e,t){return this.check(js(e,t))},max(e,t){return this.check(js(e,t))},int(e){return this.check(ak(e))},safe(e){return this.check(ak(e))},positive(e){return this.check(uc(0,e))},nonnegative(e){return this.check(Ds(0,e))},negative(e){return this.check(cc(0,e))},nonpositive(e){return this.check(js(0,e))},multipleOf(e,t){return this.check(lc(e,t))},step(e,t){return this.check(lc(e,t))},finite(){return this}}));function O(e){return iv(gc,e)}var oj=P("ZodNumberFormat",(e,t)=>{nS.init(e,t),gc.init(e,t)});function ak(e){return cv(oj,e)}var fk=P("ZodBoolean",(e,t)=>{oS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Hp(e,r,n,o)});function N(e){return uv(fk,e)}var sj=P("ZodNull",(e,t)=>{sS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Gp(e,r,n,o)});function wo(e){return lv(sj,e)}var ij=P("ZodAny",(e,t)=>{iS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Yp(e,r,n,o)});function mk(){return dv(ij)}var aj=P("ZodUnknown",(e,t)=>{aS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Xp(e,r,n,o)});function ne(){return pv(aj)}var cj=P("ZodNever",(e,t)=>{cS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>Jp(e,r,n,o)});function uj(e){return fv(cj,e)}var lj=P("ZodArray",(e,t)=>{Zs(),uS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>of(e,r,n,o),e.element=t.element},{min(e,t){return this.check(mo(e,t))},nonempty(e){return this.check(mo(1,e))},max(e,t){return this.check(dc(e,t))},length(e,t){return this.check(pc(e,t))},unwrap(){return this.element}});function v(e,t){return mv(lj,e,t)}var vf=P("ZodObject",(e,t)=>{Zs(),pS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>sf(e,r,n,o),VN(e,"shape",(r)=>r._zod.def.shape,!1)},{keyof(){return z(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(xt(this._zod.def,{catchall:e}))},passthrough(){return this.clone(xt(this._zod.def,{catchall:ne()}))},loose(){return this.clone(xt(this._zod.def,{catchall:ne()}))},strict(){return this.clone(xt(this._zod.def,{catchall:uj()}))},strip(){return this.clone(xt(this._zod.def,{catchall:void 0}))},extend(e){return LN(this,e)},safeExtend(e){return jN(this,e)},merge(e){return DN(this,e)},pick(e){return zN(this,e)},omit(e){return NN(this,e)},partial(...e){return ib(xf,this,e[0])},exactPartial(...e){return ib(yk,this,e[0],"exactPartial")},required(...e){return MN(wk,this,e[0])}});function w(e,t){let r={type:"object",shape:e??{},...U(t)};return new vf(r)}function de(e,t){return new vf({type:"object",shape:e,catchall:ne(),...U(t)})}var hk=P("ZodUnion",(e,t)=>{kp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>af(e,r,n,o),e.options=t.options});function ee(e,t){return new hk({type:"union",options:e,...U(t)})}var dj=P("ZodDiscriminatedUnion",(e,t)=>{hk.init(e,t),fS.init(e,t)});function Ct(e,t,r){return new dj({type:"union",options:t,discriminator:e,...U(r)})}var pj=P("ZodIntersection",(e,t)=>{mS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>cf(e,r,n,o)});function yc(e,t){return new pj({type:"intersection",left:e,right:t})}var fj=P("ZodTuple",(e,t)=>{Zs(),hS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>uf(e,r,n,o)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw Error(".partial() cannot be used on tuple schemas containing refinements");return this.clone({...e,items:e.items.map((t)=>new xf({type:"optional",innerType:t}))})}});function mj(e,t,r){let n=t instanceof me,o=n?r:t;return new fj({type:"tuple",items:e,rest:n?t:null,...U(o)})}var _f=P("ZodRecord",(e,t)=>{Zs(),gS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>lf(e,r,n,o),e.keyType=t.keyType,e.valueType=t.valueType});function K(e,t,r){if(!t||!t._zod)return new _f({type:"record",keyType:p(),valueType:e,...U(t)});return new _f({type:"record",keyType:e,valueType:t,...U(r)})}function kf(e,t,r){return new _f({type:"record",keyType:e,valueType:t,...U(r),partial:!0})}var Sf=P("ZodEnum",(e,t)=>{yS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(n,o,s)=>Qp(e,n,o,s),e.enum=t.entries,e.options=[...e._zod.values];let r=new Set(Object.keys(t.entries));e.extract=(n,o)=>{let s={};for(let i of n)if(r.has(i))s[i]=t.entries[i];else throw Error(`Key ${i} not found in enum`);return new Sf({...t,checks:[],...U(o),entries:s})},e.exclude=(n,o)=>{let s={...t.entries};for(let i of n)if(r.has(i))delete s[i];else throw Error(`Key ${i} not found in enum`);return new Sf({...t,checks:[],...U(o),entries:s})}});function z(e,t){let r=Array.isArray(e)?Object.fromEntries(e.map((n)=>[n,n])):e;return new Sf({type:"enum",entries:r,...U(t)})}var hj=P("ZodLiteral",(e,t)=>{wS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>ef(e,r,n,o),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function C(e,t){return new hj({type:"literal",values:Array.isArray(e)?e:[e],...U(t)})}var gj=P("ZodTransform",(e,t)=>{Zs(),bS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>nf(e,r,n,o),e._zod.parse=(r,n)=>{if(n.direction==="backward")throw new Rs(e.constructor.name);r.addIssue=(s)=>{if(typeof s==="string")r.issues.push(jn(s,r.value,t));else{let i=s;if(i.fatal)i.continue=!1;if(i.code??(i.code="custom"),!("input"in i))i.input=r.value;i.inst??(i.inst=e),r.issues.push(jn(i))}};let o=t.transform(r.value,r);if(o instanceof Promise)return o.then((s)=>(r.value=s,r));return r.value=o,r}});function gk(e){return new gj({type:"transform",transform:e})}var xf=P("ZodOptional",(e,t)=>{xp.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>fc(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function Ee(e){return new xf({type:"optional",innerType:e})}var yk=P("ZodExactOptional",(e,t)=>{_S.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>fc(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function yj(e){return new yk({type:"optional",innerType:e})}var wj=P("ZodNullable",(e,t)=>{SS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>df(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function ck(e){return new wj({type:"nullable",innerType:e})}var bj=P("ZodDefault",(e,t)=>{vS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>mf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function _j(e,t){return new bj({type:"default",innerType:e,get defaultValue(){return typeof t==="function"?t():tp(t)}})}var Sj=P("ZodPrefault",(e,t)=>{kS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>hf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function vj(e,t){return new Sj({type:"prefault",innerType:e,get defaultValue(){return typeof t==="function"?t():tp(t)}})}var wk=P("ZodNonOptional",(e,t)=>{xS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>pf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function kj(e,t){return new wk({type:"nonoptional",innerType:e,...U(t)})}var xj=P("ZodCatch",(e,t)=>{$S.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>gf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function $j(e,t){return new xj({type:"catch",innerType:e,catchValue:typeof t==="function"?t:db(t)})}var bk=P("ZodPipe",(e,t)=>{$p.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>yf(e,r,n,o),e.in=t.in,e.out=t.out});function uk(e,t){return new bk({type:"pipe",in:e,out:t})}var Ej=P("ZodPreprocess",(e,t)=>{bk.init(e,t),ES.init(e,t)}),Tj=P("ZodReadonly",(e,t)=>{TS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>wf(e,r,n,o),e.unwrap=()=>e._zod.def.innerType});function Oj(e){return new Tj({type:"readonly",innerType:e})}var Pj=P("ZodTemplateLiteral",(e,t)=>{OS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>tf(e,r,n,o)});function Ij(e,t){return new Pj({type:"template_literal",parts:e,...U(t)})}var Aj=P("ZodLazy",(e,t)=>{PS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>bf(e,r,n,o),e.unwrap=()=>e._zod.def.getter()});function $f(e){return new Aj({type:"lazy",getter:e})}var _k=P("ZodCustom",(e,t)=>{IS.init(e,t),ye.init(e,t),e._zod.processJSONSchema=(r,n,o)=>rf(e,r,n,o)});function wc(e,t){return hv(_k,e??(()=>!0),t)}function Rj(e,t={}){return gv(_k,e,t)}function Cj(e,t){return yv(e,t)}function dt(e){let t=$f(()=>ee([p(e),O(),N(),wo(),v(t),K(p(),t)]));return t}function bc(e,t){return new Ej({type:"pipe",in:gk(e),out:t})}var vk={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};var Sk;(function(e){})(Sk||(Sk={}));function kk(e){return oc(Bs,e)}function Nj(e){return sc(Ks,e)}function Lj(e){return ic(Hs,e)}function jj(e){return ac(Gs,e)}function Dj(e){return av(gc,e)}var $k={name:"@tripwire-sh/cli",version:"0.1.13",description:"Set up Tripwire in your coding agents and manage it from the terminal",type:"module",imports:{"#/*":"./src/*"},license:"MIT",repository:{type:"git",url:"git+https://github.com/Boring-Software-Inc/v2.git",directory:"apps/cli"},homepage:"https://tripwire.sh",bin:{tripwire:"dist/tripwire.js"},files:["dist"],engines:{node:">=20.12"},publishConfig:{access:"public"},scripts:{build:"bun build src/index.ts --target node --format esm --minify --outfile dist/tripwire.js",typecheck:"tsc --noEmit"},devDependencies:{"@clack/prompts":"^1.7.0","@modelcontextprotocol/sdk":"^1.32.1","@tripwire/contracts":"workspace:*",commander:"^14.0.3","jsonc-parser":"^3.3.1",picocolors:"^1.1.1",yaml:"^2.9.0",zod:"^4.0.0"}};var _c=$k.version,q="tripwire",Ys="tripwire-get-started",Ek="tripwire-workflows",Xs="tripwire-cli",qj="https://mcp.tripwire.sh/mcp",Fj="https://app.tripwire.sh/api/auth",Tk="offline_access tripwire:read tripwire:configure tripwire:moderate tripwire:admin";function bo(e){return e.TRIPWIRE_MCP_URL||qj}function Ok(e){return(e.TRIPWIRE_AUTH_URL||Fj).replace(/\/+$/,"")}var Uj="urn:ietf:params:oauth:grant-type:device_code",Wj=w({device_code:p(),user_code:p(),verification_uri:p(),verification_uri_complete:p().optional(),expires_in:O(),interval:O().optional()}),Ik=w({access_token:p().min(1),refresh_token:p().min(1).optional(),expires_in:O().optional(),token_type:p().optional()}),Tf=w({error:p(),error_description:p().optional()});class Ef extends Error{constructor(){super("Session expired. Run tripwire login.");this.name="SessionExpiredError"}}class Qs extends Error{constructor(){super("Tripwire is not reachable right now. Try again in a minute.");this.name="AuthUnreachableError"}}var Ak={fetch:(e,t)=>fetch(e,t),sleep:(e)=>new Promise((t)=>setTimeout(t,e)),now:()=>Date.now()};async function Sc(e,t,r){let n=await e.fetch(t,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:new URLSearchParams(r).toString()}),o=await n.text(),s={error:"invalid_response",error_description:o.slice(0,200)};try{let i=dt().safeParse(JSON.parse(o));return{status:n.status,body:i.success?i.data:s,headers:n.headers}}catch{return{status:n.status,body:s,headers:n.headers}}}function Rk(e,t){let r=Tf.safeParse(e);if(!r.success)return Error(t);return Error(r.data.error_description?`${r.data.error}: ${r.data.error_description}`:r.data.error)}async function Ck(e,t,r){let{status:n,body:o}=await Sc(e,`${t}/device/code`,{client_id:Xs,scope:Tk,resource:r}),s=Wj.safeParse(o);if(n>=400||!s.success)throw Rk(o,`Device authorization failed (HTTP ${n})`);return s.data}function zk(e,t,r,n,o){let s=t.refresh_token??o;return{accessToken:t.access_token,refreshToken:s,expiresAt:t.expires_in?e.now()+t.expires_in*1000:void 0,mcpUrl:n,authUrl:r}}var Pk=5000;function Vj(e,t){let r=(e.get("retry-after")??e.get("x-retry-after"))?.trim();if(!r)return null;if(/^\d+$/.test(r))return Number(r)*1000;let n=Date.parse(r);return Number.isNaN(n)?null:Math.max(0,n-t)}async function Nk(e,t,r,n){let o=(n.interval??5)*1000,s=null,i=e.now()+n.expires_in*1000;while(e.now()<i){await e.sleep(Math.min(Math.max(o,s??0),i-e.now())),s=null;let{status:a,body:c,headers:u}=await Sc(e,`${t}/oauth2/token`,{grant_type:Uj,device_code:n.device_code,client_id:Xs,resource:r}),l=Ik.safeParse(c);if(a<400&&l.success)return zk(e,l.data,t,r);if(a===429){if(s=Vj(u,e.now()),s===null)o+=Pk;continue}let d=Tf.safeParse(c),f=d.success?d.data.error:"";if(f==="authorization_pending")continue;if(f==="slow_down"){o+=Pk;continue}if(f==="access_denied")throw Error("Sign-in was denied in the browser");if(f==="expired_token")throw Error("The code expired. Run tripwire login again.");throw Rk(c,`Token request failed (HTTP ${a})`)}throw Error("The code expired. Run tripwire login again.")}async function Lk(e,t){if(!t.refreshToken)throw new Ef;let{status:r,body:n}=await Sc(e,`${t.authUrl}/oauth2/token`,{grant_type:"refresh_token",refresh_token:t.refreshToken,client_id:Xs,resource:t.mcpUrl}).catch(()=>{throw new Qs}),o=Ik.safeParse(n);if(r>=400||!o.success){let s=Tf.safeParse(n);throw(r===400||r===401)&&s.success&&s.data.error!=="invalid_response"?new Ef:new Qs}return zk(e,o.data,t.authUrl,t.mcpUrl,t.refreshToken)}async function jk(e,t){let r=t.refreshToken??t.accessToken;await Sc(e,`${t.authUrl}/oauth2/revoke`,{token:r,client_id:Xs}).catch(()=>{return})}import{stripVTControlCharacters as GF}from"node:util";var Zj=z(["pending","approved","rejected"]),Kie=Zj.options;var ei=[{id:"github",label:"GitHub",status:"live",signIn:"social",reviews:!0},{id:"opengit",label:"OpenGit",status:"live",paused:!0},{id:"gitlab",label:"GitLab",status:"planned"},{id:"origin",label:"ORIGIN",status:"planned"}];function Dk(e){return e.status==="live"}var ti=z(ei.filter(Dk).map((e)=>e.id)),Jie=ei.filter((e)=>Dk(e)&&!("paused"in e)).map((e)=>e.label),Yie=ei.filter((e)=>e.status==="planned").map((e)=>e.label),Xie=ei.filter((e)=>("signIn"in e)).map((e)=>e.id);var Bj=Object.fromEntries(ei.map((e)=>[e.id,e]));var vc=w({owner:p(),name:p(),fullName:p()}),Kj=w({id:p(),login:p(),name:p(),type:z(["Organization","User"]),avatarUrl:p(),repoAccess:z(["all","selected"]),repoCount:O(),installedAt:pe.datetime()}),Hj=w({id:p(),owner:p(),name:p(),fullName:p(),private:N(),pushedAt:pe.datetime(),openFlags:O(),stars:O()}),tae=w({accounts:v(Kj),repos:v(Hj)});var ri=z(["change-request.opened","change-request.updated","change-request.closed","comment.created","push","schedule.matched","installation.created","installation.deleted","installation-repositories.added","installation-repositories.removed"]),Mk=w({login:p(),externalId:p(),avatarUrl:p().optional()}),Of=w({number:O().int(),title:p(),headSha:p(),baseRef:p().optional(),headRef:p().optional(),draft:N().optional(),url:p()}),Gj=w({externalId:p(),body:p(),url:p(),subjectNumber:O().int(),byTripwire:N().optional()}),Jj=w({ref:p(),headSha:p(),commitCount:O().int(),url:p().optional()}),xc=z(["issue","change-request"]),Yj=w({kind:xc,number:O().int(),title:p(),url:p(),state:z(["open","closed"]),author:p(),labels:v(p()),locked:N(),updatedAt:pe.datetime()}),Xj=w({workflowId:p(),nodeId:p(),tickId:p()}),_o={id:p(),forge:ti,deliveryId:p(),repo:vc,repoExternalId:p().optional(),installationExternalId:p().optional(),actor:Mk,occurredAt:pe.datetime(),receivedAt:pe.datetime()},kc={id:p(),forge:ti,deliveryId:p(),actor:Mk,occurredAt:pe.datetime(),receivedAt:pe.datetime(),installation:w({externalId:p(),account:p(),accountType:z(["User","Organization"]).optional()}),repositories:v(w({externalId:p(),owner:p(),name:p(),fullName:p(),private:N()}))},qk=Ct("kind",[w({..._o,kind:C("change-request.opened"),changeRequest:Of}),w({..._o,kind:C("change-request.updated"),changeRequest:Of}),w({..._o,kind:C("change-request.closed"),changeRequest:Of}),w({..._o,kind:C("comment.created"),comment:Gj}),w({..._o,kind:C("push"),push:Jj}),w({..._o,kind:C("schedule.matched"),schedule:Xj,thread:Yj}),w({...kc,kind:C("installation.created")}),w({...kc,kind:C("installation.deleted")}),w({...kc,kind:C("installation-repositories.added")}),w({...kc,kind:C("installation-repositories.removed")})]),Qj=ri.extract(["change-request.opened","change-request.updated","change-request.closed"]),iae=Qj.options;var eD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tD=["sun","mon","tue","wed","thu","fri","sat"],rD=[{name:"minute",range:"0 to 59",min:0,max:59},{name:"hour",range:"0 to 23",min:0,max:23},{name:"day of month",range:"1 to 31",min:1,max:31},{name:"month",range:"1 to 12 or jan to dec",min:1,max:12,names:eD,nameBase:1},{name:"day of week",range:"0 to 7 or sun to sat",min:0,max:7,names:tD,nameBase:0}];function Pf(e,t){let r=e.toLowerCase(),n=t.names?.indexOf(r)??-1;if(n>=0)return n+(t.nameBase??0);if(!/^\d+$/.test(e))return null;let o=Number(e);return o>=t.min&&o<=t.max?o:null}function nD(e,t){let r=new Set;for(let n of e.split(",")){let o=n.split("/"),[s="",i]=o;if(o.length>2||s.split("-").length>2)return{ok:!1,error:`${t.name} must be a number, a range like 1-5 or a step like */15`};let a=i===void 0?1:Number(i);if(!(Number.isInteger(a)&&a>=1))return{ok:!1,error:`${t.name} step must be a whole number of 1 or more, like */15`};let c,u;if(s==="*")c=t.min,u=t.max;else if(s.includes("-")){let[l="",d=""]=s.split("-");c=Pf(l,t),u=Pf(d,t)}else c=Pf(s,t),u=i===void 0?c:t.max;if(c===null||u===null)return{ok:!1,error:`${t.name} must be ${t.range}`};if(c>u)return{ok:!1,error:`${t.name} range must go from low to high, like 1-5`};for(let l=c;l<=u;l+=a)r.add(l)}return{ok:!0,values:[...r].sort((n,o)=>n-o)}}function Dn(e){let t=e.trim().split(/\s+/);if(t.length!==5)return{ok:!1,error:"use five fields: minute hour day month weekday"};let r=[];for(let[u,l]of rD.entries()){let d=nD(t[u]??"",l);if(!d.ok)return d;r.push(d.values)}let[n=[],o=[],s=[],i=[],a=[]]=r,c=[...new Set(a.map((u)=>u===7?0:u))].sort((u,l)=>u-l);return{ok:!0,spec:{minutes:n,hours:o,days:s,months:i,weekdays:c,daysRestricted:!(t[2]??"*").startsWith("*"),weekdaysRestricted:!(t[4]??"*").startsWith("*")}}}function ni(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}var Fk=new Map;function oD(e){let t=Fk.get(e);if(t)return t;let r=new Intl.DateTimeFormat("en-US",{timeZone:e,hourCycle:"h23",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"});return Fk.set(e,r),r}function Rf(e,t){let r=oD(t).formatToParts(e),n=(o)=>Number(r.find((s)=>s.type===o)?.value??"0");return{year:n("year"),month:n("month"),day:n("day"),hour:n("hour"),minute:n("minute")}}function If(e,t){let r=Rf(new Date(e),t),n=Date.UTC(r.year,r.month-1,r.day,r.hour,r.minute),o=e-(e%60000+60000)%60000;return n-o}function Uk(e,t){let r=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute),n=[r-If(r-129600000,t),r-If(r+129600000,t),r-If(r,t)].sort((o,s)=>o-s);for(let o of n){let s=Rf(new Date(o),t);if(s.year===e.year&&s.month===e.month&&s.day===e.day&&s.hour===e.hour&&s.minute===e.minute)return new Date(o)}return null}function $c(e,t,r){let n=e.days.includes(t),o=e.weekdays.includes(r);if(e.daysRestricted&&e.weekdaysRestricted)return n||o;return n&&o}function sD(e,t){return $c(e,t.getUTCDate(),t.getUTCDay())}var iD=Array.from({length:217},(e,t)=>({day:t%31+1,weekday:Math.floor(t/31)}));function Af(e){let t=iD.map(({day:r,weekday:n})=>$c(e,r,n)?"1":"0").join("");return[e.minutes,e.hours,e.months].map((r)=>r.join(",")).concat(t).join(" ")}function Wk(e,t){let r=Dn(e),n=Dn(t);return r.ok&&n.ok&&Af(r.spec)===Af(n.spec)}var aD=1830,cD=180;function uD(e,t){let r=Uk(e,t);if(r)return r;let n=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute);for(let o=1;o<=cD;o++){let s=new Date(n+o*60000),i=Uk({year:s.getUTCFullYear(),month:s.getUTCMonth()+1,day:s.getUTCDate(),hour:s.getUTCHours(),minute:s.getUTCMinutes()},t);if(i)return i}return null}function Vk(e){let{minutes:t,hours:r}=e,n=t.slice(1).map((s,i)=>s-(t[i]??0));if(r.some((s)=>r.includes((s+1)%24)))n.push(60-(t.at(-1)??0)+(t[0]??0));return n.length>0?Math.min(...n):1440}function Cf(e,t,r){let n=Rf(r,t),o=new Date(Date.UTC(n.year,n.month-1,n.day));for(let s=0;s<=aD;s++){if(e.months.includes(o.getUTCMonth()+1)&&sD(e,o))for(let i of e.hours)for(let a of e.minutes){let c=uD({year:o.getUTCFullYear(),month:o.getUTCMonth()+1,day:o.getUTCDate(),hour:i,minute:a},t);if(c&&c.getTime()>r.getTime())return c}o.setUTCDate(o.getUTCDate()+1)}return null}var zt=5,Ie=$f(()=>ee([p(),O(),N(),wo(),v(Ie),K(p(),Ie)])),Oc=w({x:O(),y:O()}),lD=z(["all-of","any-of","not"]),dD=z(["block","comment","label","request-review","send-to-moderation","webhook","discord","lock","close","remove-label","post-comment"]),pD=["comment"];function Bk(e){return pD.includes(e)}var pae=w({url:Js().meta({secret:!0}).describe("webhook url"),signingSecret:p().min(1).optional().meta({secret:!0}).describe("signing secret")}),fae=w({url:Js().meta({secret:!0}).describe("discord webhook url")}),So=15,Pc=p().regex(/^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$/,{error:(e)=>`${String(e.input)} is not a GitHub username`}),zf=p().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,99}$/,{error:(e)=>`${String(e.input)} is not a team slug`}),Nf=w({id:O().int().positive().optional(),login:Pc}),mae=w({id:O().int().positive(),login:Pc,avatarUrl:p(),permission:p().min(1)}),hae=w({name:p().min(1),color:p().regex(/^[0-9a-fA-F]{6}$/),description:p().nullable()}),fD=bc((e)=>p().safeParse(e).success?{login:e}:e,Nf);function Kk(e,t){return e.id!==void 0&&t.id!==void 0?e.id===t.id:e.login.toLowerCase()===t.login.toLowerCase()}var oi=w({reviewers:v(fD).max(So,`ask at most ${So} people`).default([]),teamReviewers:v(zf).max(So,`ask at most ${So} teams`).default([])}),Hk=oi.superRefine((e,t)=>{let r=e.reviewers.length+e.teamReviewers.length;if(r===0)t.addIssue({code:"custom",message:"add at least one person or team to ask"});if(r>So)t.addIssue({code:"custom",message:`ask at most ${So} people and teams`})}),Gr=w({labels:v(p().trim().min(1)).min(1,"choose at least one label")}),Zk=5000,Ic=w({message:p().trim().min(1,"write a message").max(Zk,`keep it under ${Zk} characters`)}),mD=z(["resolved","off-topic","too heated","spam"]),Gk=w({reason:mD.optional()}),si={hours:3600000,days:86400000,weeks:604800000,months:2592000000};function Lf(e){return e.n*si[e.unit]}var Ac=52*si.weeks,hD=3650*si.days,gD=z(["hours","days","weeks"]),yD=z(["hours","days","weeks","months"]),wD=w({n:O().int().min(1),unit:gD}).refine((e)=>Lf(e)<=Ac,{message:"runs at least once a year"}),ir="UTC",Rc=p().min(1).refine(ni,{error:(e)=>`${String(e.input)} is not an IANA timezone, like Europe/Berlin`}),Ec=p().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use 24-hour HH:MM, like 07:30"),jf=z(["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]),bD=Ct("preset",[w({preset:C("hourly"),minute:O().int().min(0).max(59)}),w({preset:C("daily"),at:Ec}),w({preset:C("weekdays"),at:Ec}),w({preset:C("weekly"),on:jf,at:Ec}),w({preset:C("monthly"),day:O().int().min(1).max(28),at:Ec})]),Cc=w({cron:p().trim().superRefine((e,t)=>{let r=Dn(e);if(!r.ok){t.addIssue({code:"custom",message:r.error});return}if(Cf(r.spec,"UTC",new Date(Date.UTC(2026,0,1)))===null)t.addIssue({code:"custom",message:"this cron never runs. Pick a day the month has"});if(Vk(r.spec)<zt)t.addIssue({code:"custom",message:`runs must be at least ${zt} minutes apart`})})}),Jk=ee([wD,bD,Cc]),Yk=w({n:O().int().min(1),unit:yD}).refine((e)=>Lf(e)<=hD,{message:"10 years at most"}),Xk=z(["open","closed","any"]),Tc=v(p().min(1)),_D=w({subjects:v(xc).min(1),state:Xk,inactiveFor:Yk,labels:Tc.optional(),excludeLabels:Tc.optional(),skipLocked:N().default(!0)}),vo=w({every:Jk,timezone:Rc.optional(),match:_D}),SD=w({every:Jk.optional(),timezone:Rc.optional(),match:w({subjects:v(xc).optional(),state:Xk.optional(),inactiveFor:Yk.optional(),labels:Tc.optional(),excludeLabels:Tc.optional(),skipLocked:N().optional()}).default({})});var vD=["every","subjects","state","inactiveFor"];function Qk(e){return vD.filter((t)=>{if(!e)return!0;if(t==="every")return e.every===void 0;let r=e.match[t];return Array.isArray(r)?r.length===0:r===void 0})}var Hr=p(),kD=w({id:Hr,type:C("trigger"),kinds:v(ri).min(1),schedule:SD.optional(),position:Oc.optional()});function zc(e){return e.type==="trigger"&&(e.kinds??[]).includes("schedule.matched")}var xD=w({id:Hr,type:C("rule"),ref:p().regex(/^[a-z][a-z0-9-]*@\d+$/),config:Ie,position:Oc.optional()}),$D=w({id:Hr,type:C("gate"),mode:lD,position:Oc.optional()}),ED=w({id:Hr,type:C("action"),action:dD,params:K(p(),Ie).optional(),position:Oc.optional()}),Df=Ct("type",[kD,xD,$D,ED]),ex=z(["pass","fail","approve","deny"]),TD=w({id:p(),from:Hr,to:Hr,when:ex.optional()}),pt=w({id:p(),name:p(),version:O().int().min(1),nodes:v(Df).min(1),edges:v(TD)}),tx={id:"default@1",name:"default gate",version:1,nodes:[{id:"trigger",type:"trigger",kinds:["change-request.opened","change-request.updated"]},{id:"account-age",type:"rule",ref:"account-age@1",config:{minDays:7}},{id:"crypto",type:"rule",ref:"crypto-address@1",config:{}},{id:"honeypot",type:"rule",ref:"honeypot@1",config:{paths:[".github/workflows/**"]}},{id:"max-files",type:"rule",ref:"max-files-changed@1",config:{max:200}},{id:"english",type:"rule",ref:"english-only@1",config:{maxNonLatinRatio:0.5}},{id:"gate",type:"gate",mode:"all-of"},{id:"block",type:"action",action:"block"}],edges:[{id:"e1",from:"trigger",to:"account-age"},{id:"e2",from:"trigger",to:"crypto"},{id:"e3",from:"trigger",to:"honeypot"},{id:"e4",from:"trigger",to:"max-files"},{id:"e5",from:"trigger",to:"english"},{id:"e6",from:"account-age",to:"gate"},{id:"e7",from:"crypto",to:"gate"},{id:"e8",from:"honeypot",to:"gate"},{id:"e9",from:"max-files",to:"gate"},{id:"e10",from:"english",to:"gate"},{id:"e11",from:"gate",to:"block",when:"fail"}]};var rx=[{kind:"change-request.opened",name:"Change request opened",description:"Runs when someone opens a change request.",toolbox:!0},{kind:"change-request.updated",name:"Change request updated",description:"Runs when a change request gets new commits or edits.",toolbox:!0},{kind:"change-request.closed",name:"Change request closed",description:"Runs when a change request is closed.",toolbox:!0},{kind:"comment.created",name:"Comment created",description:"Runs when someone comments on a change request or issue.",toolbox:!0},{kind:"push",name:"Push",description:"Runs when commits are pushed to the repo.",toolbox:!0},{kind:"schedule.matched",name:"On a schedule",description:"Runs on a timer for issues and change requests that match.",toolbox:!0},{kind:"installation.created",name:"Installation created",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation.deleted",name:"Installation deleted",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation-repositories.added",name:"Repos added",description:"Internal event. Installations sync outside workflows.",toolbox:!1},{kind:"installation-repositories.removed",name:"Repos removed",description:"Internal event. Installations sync outside workflows.",toolbox:!1}],nx=[{mode:"all-of",name:"All of",description:"Passes only when every connected check passes. A check that was never reached does not pass."},{mode:"any-of",name:"Any of",description:"Passes when at least one connected check passes. A check that was never reached does not pass."},{mode:"not",name:"Not",description:"Flips its input: pass becomes fail, and fail becomes pass."}],ox=[{action:"block",name:"Block",description:"Fails the Tripwire check and requests changes. The change request stays open."},{action:"label",name:"Label",description:"Adds labels you choose to the change request."},{action:"request-review",name:"Request GitHub review",description:"Asks the people you choose to review on GitHub."},{action:"send-to-moderation",name:"Human review",description:"Waits for a maintainer to approve or block it in Tripwire."},{action:"webhook",name:"Webhook",description:"Posts the verdict as JSON to a URL you set."},{action:"lock",name:"Lock",description:"Locks the conversation so only maintainers can comment."},{action:"close",name:"Close",description:"Closes the issue or change request."},{action:"remove-label",name:"Remove label",description:"Removes labels you choose, if they are there."},{action:"post-comment",name:"Comment",description:"Posts a comment you write. It is separate from the verdict comment."},{action:"discord",name:"Discord",description:"Posts the verdict to a Discord channel you set."}];var bae=K(p(),Ie).catch({});function Nc(e){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function sx(e){let t=Gr.safeParse(e);return t.success?t.data.labels:[]}function ix(e){return`${e.length===1?"the label":"the labels"} ${Nc(e)}`}function OD(e){let t=oi.safeParse(e);if(!t.success)return[];return[...t.data.reviewers.map((r)=>r.login),...t.data.teamReviewers]}function ax(e,t){switch(e){case"block":return"blocks it";case"label":{let r=sx(t);return r.length>0?`adds ${ix(r)}`:"adds labels"}case"remove-label":{let r=sx(t);return r.length>0?`removes ${ix(r)}`:"removes labels"}case"request-review":{let r=OD(t);return r.length>0?`requests GitHub review from ${Nc(r)}`:"requests GitHub review"}case"send-to-moderation":return"sends it to human review";case"webhook":return"posts the verdict to a webhook";case"discord":return"posts the verdict to Discord";case"lock":return"locks the conversation";case"close":return"closes it";case"post-comment":return"posts your comment";default:return e}}var PD=w({runId:p(),verdict:p().nullable(),status:p(),reason:p().nullable()}),cx=w({event:qk,run:PD.nullable(),pending:N().optional()}),ID=w({repoFullName:p(),subjectNumber:O().int(),title:p(),url:p().nullable(),actor:w({login:p(),avatarUrl:p().nullable()}),currentVerdict:p().nullable(),currentRunId:p().nullable(),latestActivityAt:pe.datetime(),eventCount:O().int(),timeline:v(cx)}),AD=Ct("type",[w({type:C("group"),group:ID}),w({type:C("event"),entry:cx})]),kae=w({items:v(AD)});var RD=["tripwire:read","tripwire:configure","tripwire:moderate","tripwire:admin"],Eae=z(RD);var CD="https://tripwire.sh/orgs";var Tae=w({sub:p().min(1),azp:p().min(1).optional(),client_id:p().min(1).optional(),scope:p().optional(),[CD]:v(p()).optional()});var zD=["connect_mcp","install_app","sync_repos","pick_rules","turn_on_gate","verify_check"],ux=z(zD),lx=z(["active","waiting","completed","skipped","failed"]);var ND=p().regex(/^[A-Za-z0-9]{10}$/,"A run code is 10 letters or digits."),LD=/^([a-z0-9_-]+)#([A-Za-z0-9]{10})$/;function dx(e){let t=LD.exec(e.trim());if(!(t?.[1]&&t[2]))return null;return{org:t[1],code:t[2]}}var jD=w({status:lx,detail:p().max(256).nullable(),updatedAt:pe.datetime()}),DD=kf(ux,jD),Iae=w({runCode:p().trim().min(1).max(200),stage:ux,status:lx,detail:p().trim().max(256).optional()}),px=w({code:ND,stages:DD,completedAt:pe.datetime().nullable(),lastReportAt:pe.datetime().nullable()});function fx(e){return e?`Please help me set up Tripwire.
229
229
 
230
230
  org slug: ${e.org}
231
231
  run code: ${e.code}`:"Please help me set up Tripwire."}var MD=200,qD=z(["read","write","edit","delete"]),FD=w({id:Hr,action:qD,at:pe.datetime()}),UD=v(FD).max(MD),ii=v(p()),WD=w({renamed:N(),nodes:w({added:ii,changed:ii,removed:ii}),edges:w({added:ii,removed:ii})}),VD=w({userId:p(),clientId:p(),name:p(),lastSignalAt:pe.datetime(),finishedAt:pe.datetime().nullable(),nodes:UD}),ZD=z(["open","promoted","discarded"]),BD=w({id:p(),name:p(),status:ZD,definition:pt.nullable(),revision:O().int().min(0),lastChange:WD.nullable(),createdAt:pe.datetime(),updatedAt:pe.datetime(),expiresAt:pe.datetime()}),KD=w({repoId:p(),definitionId:p(),workflowId:p().nullable(),draft:BD.nullable(),agents:v(VD)}),Nae=Ct("type",[w({type:C("work"),repoFullName:p(),work:KD}),w({type:C("setup"),orgId:p(),run:px})]),Lae=Ct("type",[w({type:C("work"),repoId:p(),definitionId:p()}),w({type:C("setup"),runId:p()})]);var Mae=z(["ready","out"]),mx=z(["ai-out-of-credits"]);var qae=de({statusCode:O().optional().catch(void 0),status:O().optional().catch(void 0),message:p().optional().catch(void 0),responseBody:p().optional().catch(void 0),lastError:ne().optional(),cause:ne().optional(),data:ne().optional(),error:ne().optional(),errors:v(ne()).optional().catch(void 0)});var Fae=w({data:w({total_credits:O(),total_usage:O()})}),Uae=w({data:w({limit:O().nullable().optional(),limit_remaining:O().nullable().optional(),usage:O().optional()})});var HD=z(["success","failure","neutral","pending"]),Zae=w({sha:p(),conclusion:HD,summary:p(),detailsUrl:p()});var GD=["matched-values","file-paths","ai-trace","ai-summary","reasons","rule-names","passed-count","failed-count"],JD=GD.length;var YD=O().int().min(0).max(JD),hx=z(["run-page","check","comment","review","webhook"]),Hae=hx.options,XD=["run-page","check","comment","review"],Lc=w({level:YD.default(0),surfaces:v(hx).default(()=>[...XD]),showHelp:N().default(!0)}),gx=Lc.extend({inherit:N().default(!0)}),QD=Lc.parse({});var eM=z(["green","blue","purple","pink","orange","red","grey"]),Ar=z(["issue","pull"]),ai=z(["open","closed","merged"]),yx=w({key:p(),label:p(),value:O(),delta:O().optional(),invertDelta:N().optional(),sub:p().optional(),series:v(O()),color:eM,suffix:p().optional()}),tM=w({rule:p(),count:O()}),rM=w({kind:Ar,number:O(),title:p(),comments:O(),blocked:O(),status:ai}),nM=w({login:p(),count:O(),flagged:N().optional()}),oM=w({login:p(),reason:p(),caughtBy:p(),status:z(["Hidden","Removed"]),commentId:p().optional()}),sM=w({kind:z(["review","check"]),title:p(),detail:p(),status:z(["Approved","Changes","Passed","Failed"]),actor:p().optional()}),iM=w({kind:Ar,number:O(),title:p(),status:ai,meta:p(),metrics:v(yx),series:v(O()),byParticipant:v(nM),flagged:v(oM).optional(),checks:v(sM).optional()}),Yae=w({metrics:v(yx),blockedByRule:v(tM),activeThreads:v(rM),threads:K(p(),iM)});var xo=z(["issue","pull","comment"]),Mf=z(["spam","harassment","off-topic","automod","nsfw"]),aM=z(["pending","resolved"]),ko=w({login:p(),avatarUrl:p()}),tce=w({id:p(),type:xo,repository:vc,number:O(),title:p(),bodyPreview:p(),author:ko,reason:Mf,reporter:ko.nullable(),automodRule:p().optional(),reportedAt:pe.datetime(),status:aM,comments:O(),reactions:O()}).superRefine((e,t)=>{if(e.reporter===null&&e.automodRule===void 0)t.addIssue({code:"custom",path:["automodRule"],message:"automod-sourced items (reporter: null) must name the automodRule that fired"});if(e.reporter!==null&&e.automodRule!==void 0)t.addIssue({code:"custom",path:["automodRule"],message:"human-reported items (reporter set) must not carry an automodRule"})}),Jr=w({value:O(),delta:O(),series:v(O())}),rce=w({sentToReview:Jr,blocked:Jr,passed:Jr}),nce=z(["approve","remove","ban"]);var cM=z(["info","warn","critical"]),uM=w({severity:cM,file:p(),line:O().int().min(1).optional(),note:p().max(240)}),ice=w({verdict:z(["pass","block","needs_review"]),confidence:O().min(0).max(1),summary:p().max(200),findings:v(uM).max(5)}),wx=w({model:p().optional(),maxSteps:O().int().min(1).max(15).default(12)});var lM=w({type:z(["reasoning","tool_call"]),toolName:p().optional(),excerpt:p(),truncated:N()}),ace=w({model:p(),stepsUsed:O().int().min(0),maxSteps:O().int().min(0),trimmed:N(),costUsd:O().nullable().optional(),usage:w({input:O().int().min(0),output:O().int().min(0),cached:O().int().min(0).nullable()}),steps:v(lM)});var dM=z(["blocklist","heuristic","classifier","regex"]),pM=z(["flag","hide","close","require-review"]),fM=z(["pending","confirmed","false-positive"]),mM=w({id:p(),type:xo,repoFullName:p(),number:O(),author:w({login:p(),avatarUrl:p()}),snippet:p(),matchedAt:pe.datetime(),verdict:fM,threadKind:Ar,commentId:p()}),gce=w({id:p(),name:p(),description:p(),category:dM,pattern:p(),scope:v(xo),action:pM,enabled:N(),matches24h:O(),matches30d:O(),falsePositiveRate:O().min(0).max(100),lastFiredAt:pe.datetime(),trend:v(O()),recentMatches:v(mM)}),yce=w({activeRules:Jr,matches24h:Jr,falsePositiveRate:Jr,autoActioned24h:Jr}),hM=w({ruleId:p(),version:O().int().min(1),status:z(["evaluated","skipped"]),passed:N(),evidence:ne(),reason:p().optional(),cause:mx.optional(),evaluatedAt:pe.datetime()}),wce=hM.pick({ruleId:!0});var gM=w({minDays:O().int().min(0)}),bce=w({min:O().int().min(0)}),yM=w({min:O().int().min(0).default(1).describe("minimum merged change requests in other people's repos"),trustedAfter:O().int().min(1).default(1).describe("merges in this repo that exempt a proven local contributor")}),wM=w({maxPerWindow:O().int().min(1),windowHours:O().min(0.1).default(24)}),bM=w({max:O().int().min(1)}),_M=w({maxNonLatinRatio:O().min(0).max(1).default(0.5)}),SM=w({}),vM=w({paths:v(p()).min(1)}),kM=w({minLength:O().int().min(1).default(32)}),Ge=[{ruleId:"account-age",forges:["github"],version:1,name:"Account age",blurb:"the contributor's forge account must be at least N days old.",configSchema:gM,defaultConfig:{minDays:7},optIn:!1,description:"Flags change requests from accounts younger than a threshold you set.",contributorLabel:"your account is too new for this repository."},{ruleId:"min-merged-prs",forges:["github"],version:2,name:"Merged change requests",blurb:"requires N merged change requests in OTHER people's repos, as proof that someone else accepted their work.",configSchema:yM,defaultConfig:{min:1,trustedAfter:1},optIn:!1,changeNote:"counts merges globally, not per-repo",description:"Requires N merged change requests in other people's repos, as proof that someone else accepted their work.",contributorLabel:"you need merged change requests in other people's repositories first."},{ruleId:"pr-rate-limit",forges:["github"],version:1,name:"Rate limit",blurb:"caps change requests per window; spray patterns surface in evidence.",configSchema:wM,defaultConfig:{maxPerWindow:5,windowHours:24},optIn:!1,description:"Caps how many change requests one person can open in a time window.",contributorLabel:"you opened too many change requests in a short time."},{ruleId:"max-files-changed",forges:["github"],version:1,name:"Max files changed",blurb:"caps the number of files a change request may touch.",configSchema:bM,defaultConfig:{max:200},optIn:!1,description:"Flags change requests that touch more files than you allow.",contributorLabel:"this change request changes too many files. Split it into smaller ones."},{ruleId:"english-only",version:1,name:"English only",blurb:"title/comment must be predominantly latin-script.",configSchema:_M,defaultConfig:{maxNonLatinRatio:0.5},optIn:!1,description:"Flags titles and comments that aren't mostly latin script.",contributorLabel:"write the title and comments in English.",evidenceRedaction:{"matched-values":["sample"]}},{ruleId:"crypto-address",forges:["github"],version:1,name:"Crypto address",blurb:"blocks cryptocurrency addresses in titles, comments, and diffs.",configSchema:SM,defaultConfig:{},optIn:!1,description:"Catches cryptocurrency addresses in titles, comments, and diffs.",contributorLabel:"this change request adds crypto wallet addresses. Remove them.",summaryReveals:["file-paths"],evidenceRedaction:{"matched-values":["matches.*.value"],"file-paths":["matches.*.location"]}},{ruleId:"honeypot",forges:["github"],version:1,name:"Honeypot paths",blurb:"no legitimate change request touches these paths.",configSchema:vM,defaultConfig:{paths:[".github/workflows/**"]},optIn:!1,description:"Catches change requests that touch paths no legitimate change would.",contributorLabel:"this change request changes protected files. Undo those changes.",evidenceRedaction:{"file-paths":["touched"]}},{ruleId:"profile-readme",forges:["github"],version:1,name:"Profile README",blurb:"requires a minimum of profile text, which shows identity investment.",configSchema:kM,defaultConfig:{minLength:32},optIn:!1,description:"Requires a minimum of profile text. Throwaway accounts rarely add one.",contributorLabel:"add a short bio to your profile."},{ruleId:"ai-review",forges:["github"],version:2,name:"AI review",blurb:"reads the change like a reviewer and flags slop.",configSchema:wx,defaultConfig:{maxSteps:12},optIn:!0,changeNote:"findings must quote code",description:"Reads the change like a reviewer and flags slop.",contributorLabel:"this change request has problems a reviewer would flag.",summaryReveals:["ai-summary"],evidenceRedaction:{"matched-values":["output.findings.*.note"],"file-paths":["output.findings.*.file","output.findings.*.line"]}}];var Tce=K(p(),Ie);var EM=z(["silent","ci-check","comment"]),bx=z(["comment","silent"]),TM=z(["full","one-liner-link","custom"]),qf=w({customText:p().max(4000).default(""),showDetailsButton:N().default(!0)}),OM=qf.extend({mode:TM.default("full"),template:p().max(4000).default("")}),PM=w({onSuccess:EM.default("ci-check"),passComment:qf.prefault({}),onBlock:bx.default("comment"),blockComment:OM.prefault({}),moderationQueued:bx.default("comment"),reviewComment:qf.prefault({}),failClosedFallback:N().default(!0),redaction:gx.prefault({})}),IM=w({redaction:Lc.prefault({})}),Ace=IM.parse({});var AM=PM.parse({});var _x="If you think this is wrong, say so in a comment. A maintainer will decide.",Sx="If you think it should merge anyway, say so in a comment. A maintainer will decide.",Vce=`Push a commit that fixes the problems. Tripwire checks every push.
@@ -236,7 +236,7 @@ ${Sx}`,Bce=`Fix what you can and push. Some problems will not clear with a new c
236
236
 
237
237
  ${Sx}`,Kce=`Push a new commit to run the checks again.
238
238
 
239
- ${_x}`;var RM=w({total:O(),weeks:v(v(O().min(0).max(4)))}),CM=w({accountAgeDays:O(),location:p().nullable(),emailVerified:N(),twoFactor:N()}),zM=w({mergedPrs:O(),openPrs:O(),comments:O(),hiddenByAutomod:O()}),NM=z(["automod-hidden","pull-opened","comment-removed","issue-comment","flagged","account-created"]),LM=w({id:p(),kind:NM,title:p(),detail:p(),at:pe.datetime()}),Jce=w({handle:p(),initial:p(),joinedDaysAgo:O(),publicRepos:O(),followers:O(),watchlisted:N(),contributions:RM,details:CM,repoStats:zM,activity:v(LM)});var jM=["under","over","atLeast","atMost","between","equals","not","oneOf","noneOf","has","containsAny","noneMatch","anyIn"],vx=p().regex(/^\d+(h|d)$/,"window must be a count and a unit, like 24h or 7d"),DM=Ct("kind",[w({kind:C("last"),window:vx}),w({kind:C("lastCount"),window:vx}),w({kind:C("trimmedLength")}),w({kind:C("nonLatinRatio")}),w({kind:C("letterCount")})]),MM=ee([O(),p(),N()]),qM=ee([MM,v(ee([O(),p()]))]),kx=w({kind:z(jM),args:v(qM)}),FM=ee([kx.refine((e)=>e.kind!=="not",{message:"not takes an inner comparison"}),w({kind:C("not"),args:mj([kx])})]),UM=w({when:w({id:p().min(1),transform:DM.optional()}),comparison:FM});var tue=w({id:p().regex(/^custom-[a-z0-9][a-z0-9-]*$/,"id must be custom-<kebab-slug>"),name:p().min(1).max(80),enabled:N(),definition:UM}),rue=w({});var iue=z(["prod","eval","dev"]),aue=z(["railway","openrouter","planetscale"]);var due=z(["pending","granted-admin","denied","not-admin","not-for-tripwire","token-expired","failed"]);var ar={installationId:p(),forge:ti},pue=Ct("status",[w({...ar,status:C("claimable"),account:p().nullable(),repoCount:O(),stateOrg:w({id:p(),slug:p(),name:p()}).nullable()}),w({...ar,status:C("claimed-by-your-org"),orgSlug:p()}),w({...ar,status:C("processing")}),w({...ar,status:C("recovering")}),w({...ar,status:C("unreadable")}),w({...ar,status:C("missing"),recoverable:N()}),w({...ar,status:C("not-for-tripwire")}),w({...ar,status:C("not-yours"),recoverable:N()}),w({...ar,status:C("token-expired")}),w({...ar,status:C("not-admin"),account:p().nullable()})]);var WM=/^(Too (small|big)|Invalid (input|option|string|number|key|element|value)|Unrecognized key)/,VM=new Map([["number","a number"],["int","a whole number"],["string","text"],["boolean","true or false"],["array","a list"],["object","a group of settings"]]);function jc(e,t){return`${e} ${t}${e===1?"":"s"}`}function ZM(e){return e.map(String).join(".")}function BM(e,t){switch(e.code){case"too_small":{if(e.origin==="array"||e.origin==="set")return`${t} needs at least ${jc(e.minimum,"item")}`;if(e.origin==="string")return e.minimum===1?`${t} cannot be empty`:`${t} needs at least ${jc(e.minimum,"character")}`;return e.inclusive===!1?`${t} must be more than ${e.minimum}`:`${t} must be ${e.minimum} or more`}case"too_big":{if(e.origin==="array"||e.origin==="set")return`${t} can have at most ${jc(e.maximum,"item")}`;if(e.origin==="string")return`${t} can be at most ${jc(e.maximum,"character")}`;return e.inclusive===!1?`${t} must be less than ${e.maximum}`:`${t} must be ${e.maximum} or less`}case"invalid_type":return/received undefined/.test(e.message)?`${t} is missing`:`${t} must be ${VM.get(e.expected)??e.expected}`;case"invalid_value":return e.values.length===1?`${t} must be ${String(e.values[0])}`:`${t} must be one of ${e.values.map(String).join(", ")}`;case"invalid_format":return`${t} is not a valid ${e.format}`;case"invalid_union":return`${t} is not in a form Tripwire can read`;case"unrecognized_keys":return`${e.keys.join(", ")} ${e.keys.length===1?"is not a setting":"are not settings"}`;default:return null}}function $o(e,t){let r=t?.(e.path)??null,n=r??ZM(e.path);if(WM.test(e.message)){let o=BM(e,n||"This setting");if(o)return o}if(r)return`${r} is not valid: ${e.message}`;return n?`${n}: ${e.message}`:e.message}var Ff=z(["admin","member"]),KM=new Set(["activity","analytics","api","dev","dither-kit","invite","login","moderation","oauth","onboarding","queue","rules","runs","workflows","admin","app","auth","blog","brand","changelog","dashboard","docs","help","home","legal","new","pricing","privacy","settings","signup","status","support","terms","www","tripwire","boring","boringsoftware"]),HM=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,gue=p().min(3,"slug must be at least 3 characters").max(32,"slug must be at most 32 characters").regex(HM,"lowercase letters, numbers, and hyphens only, with no leading or trailing hyphen").refine((e)=>!KM.has(e),{message:"this name is reserved"});var yue=z(["User","Organization"]),wue=w({role:Ff,maxUses:O().int().min(1).max(1000).default(1),expiresInDays:O().int().min(1).max(90).default(7)});var Uf=["moderation","activity","rules","workflows","responses","analytics","connections","members","settings"],Wf=z(Uf),xx=["read","manage"],cr=z(xx),vue=Ij([Wf,":",cr]),kue=Uf.flatMap((e)=>xx.map((t)=>`${e}:${t}`));var $x=w({moderation:cr.optional(),activity:cr.optional(),rules:cr.optional(),workflows:cr.optional(),responses:cr.optional(),analytics:cr.optional(),connections:cr.optional(),members:C("read").optional(),settings:C("read").optional()}).strict().refine((e)=>Object.values(e).some(Boolean),{message:"pick at least one area"}),GM=kf(Wf,v(cr).min(1));var xue=kf(Wf,cr);function JM(e){let t={};for(let r of Uf){let n=e[r];if(n?.includes("manage"))t[r]="manage";else if(n?.includes("read"))t[r]="read"}return t}var YM=new Set(["admin","member","owner"]),Vf=p().trim().toLowerCase().min(2,"use at least 2 characters").max(32,"use at most 32 characters").regex(/^[a-z][a-z0-9-]*[a-z0-9]$/,"use lowercase letters, numbers and hyphens, starting with a letter").refine((e)=>!YM.has(e),{message:"this name is taken by a built-in role"}),$ue=w({name:Vf,scopes:$x}),Ex=GM.refine((e)=>$x.safeParse(JM(e)).success,{message:"this role grants access a custom role cannot hold"}),Eue=w({organizationId:p().min(1),role:Vf,permission:Ex}).strict(),Tue=w({organizationId:p().min(1),roleName:p().min(1).optional(),roleId:p().min(1).optional(),data:w({permission:Ex}).strict()}).strict(),Oue=ee([Ff,Vf]);var XM=z(["public","private"]),Px=w({name:p(),className:p()}),QM=w({name:p(),description:p(),visibility:XM,openIssues:O(),openPulls:O(),flagged:O(),updatedAt:pe.datetime()}),Tx=w({kind:Ar,number:O(),title:p(),status:ai,author:p(),openedAt:pe.datetime(),comments:O(),flagged:O(),labels:v(Px)}),eq=w({state:z(["Hidden","Removed"]),rule:p()}),tq=w({id:p(),author:p(),body:p(),createdAt:pe.datetime(),flag:eq.optional()}),Ox=w({kind:Ar,number:O(),title:p(),status:ai,author:p(),openedAt:pe.datetime(),labels:v(Px),body:p(),comments:v(tq),branch:p().optional(),baseBranch:p().optional()}),Rue=w({repos:v(QM),issues:v(Tx),pulls:v(Tx),issueDetails:K(p(),Ox),pullDetails:K(p(),Ox)});var Nue=new Set(tx.nodes.filter((e)=>e.type==="rule").map((e)=>e.ref));var rq=z(["removed","hidden","banned","dismissed","required-review"]),nq=z(["actioned","dismissed","appealed","reversed"]),oq=z(["automod","report","manual"]),sq=w({kind:oq,detail:p(),reporter:ko.optional()}),iq=w({at:pe.datetime(),label:p(),by:p()}),aq=w({id:p(),type:xo,repoFullName:p(),number:O(),content:p(),threadKind:Ar,commentId:p()}),que=w({id:p(),label:p(),reason:Mf,action:rq,status:nq,author:ko,moderator:ko.nullable(),caughtBy:sq,at:pe.datetime(),snapshot:N(),items:v(aq),history:v(iq)}),Fue=z(["what","reason","caught"]),Eo=z(["pass","block","needs_review"]);var Ix=z(["queued","running","paused","completed","failed","closed"]),Zue=Ix.options,Bue=z(["checking","did-not-finish","pass","block","needs_review","closed-before-review","ran"]),Dc={checking:"Checking","did-not-finish":"Did not finish",pass:"Passed",block:"Blocked",needs_review:"Waiting for human review","closed-before-review":"Closed before review",ran:"Ran"},Kue=Ix.nullable().catch(null),Hue=Eo.nullable().catch(null);var Ax=z(["event","pass","fail","approve","deny"]),Yue=z(["event","result","decision"]),Xue=z(["identity","not"]),ft={event:{type:"event",fn:"identity",label:"Event"},pass:{type:"result",fn:"identity",label:"Passes"},fail:{type:"result",fn:"not",label:"Doesn't pass"},approve:{type:"decision",fn:"identity",label:"Approved"},deny:{type:"decision",fn:"not",label:"Blocked"}},cq={identity:{event:"event",result:"result",decision:"decision"},not:{result:"result",decision:"decision"}};function uq(e,t){return cq[e][t]??null}function lq(e){let t=ft[e];return uq(t.fn,t.type)}var ui={event:ft.event.label,pass:ft.pass.label,fail:ft.fail.label,approve:ft.approve.label,deny:ft.deny.label},Zf={event:ft.event.type,pass:ft.pass.type,fail:ft.fail.type,approve:ft.approve.type,deny:ft.deny.type};function To(e){let t=ft[e];if(t.type==="event")return"neutral";return t.fn==="not"?"fail":"ok"}var Que={event:To("event"),pass:To("pass"),fail:To("fail"),approve:To("approve"),deny:To("deny")},dq={trigger:[],rule:["event","result","decision"],gate:["result"],action:["event","result","decision"]},pq={"send-to-moderation":["approve","deny"]},fq=Ax.options;function Rx(e){return dq[e]}function Mc(e,t){let r=lq(t);return r!==null&&Rx(e).includes(r)}function ci(e){return fq.filter((t)=>Mc(e,t))}var ele={trigger:{accepts:ci("trigger")},rule:{accepts:ci("rule")},gate:{accepts:ci("gate")},action:{accepts:ci("action")}};function li(e){switch(e.type){case"trigger":return["event"];case"rule":case"gate":return["pass","fail"];case"action":return e.action==="send-to-moderation"?pq[e.action]:[];default:return[]}}function Mn(e,t){if(e.type==="trigger"&&(t===void 0||t==="pass"))return"event";return t??"pass"}var jx={schema:{severity:"error",stage:"structure"},"no-trigger-events":{severity:"error",stage:"structure"},"duplicate-id":{severity:"error",stage:"structure"},"missing-step":{severity:"error",stage:"structure"},"no-trigger":{severity:"error",stage:"structure"},"trigger-input":{severity:"error",stage:"structure"},"gate-input":{severity:"error",stage:"structure"},"no-outputs":{severity:"error",stage:"structure"},"wrong-output":{severity:"error",stage:"structure"},"not-input":{severity:"error",stage:"structure"},"orphan-step":{severity:"error",stage:"structure"},cycle:{severity:"error",stage:"structure"},"no-action":{severity:"error",stage:"enable"},"schedule-config":{severity:"error",stage:"enable"},"action-params":{severity:"error",stage:"enable"},"schedule-mixed":{severity:"error",stage:"enable"},"schedule-needs-change-request":{severity:"error",stage:"enable"},"unknown-rule":{severity:"error",stage:"enable"},"rule-unavailable":{severity:"warning",stage:"enable"},"rule-config":{severity:"error",stage:"enable"},"removed-step":{severity:"error",stage:"enable"},"review-targets":{severity:"error",stage:"enable"},"stale-reviewer":{severity:"warning",stage:"enable"},"dead-end":{severity:"warning",stage:"enable"}},qn=(e)=>({label:"Remove connection",edit:{type:"remove-edge",edgeId:e}}),di=(e)=>({label:"Delete",edit:{type:"delete-node",nodeId:e}});function Kf(e){let t=e.trim();return/[.?]$/.test(t)?t:`${t}.`}function mq(e){let t=e.trim();return Kf(`${t.charAt(0).toUpperCase()}${t.slice(1)}`)}function Dx(e){if(e.length<=1)return e.join("");return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function qc(e,t=Ge){switch(e.type){case"trigger":return"Trigger";case"rule":{let[r]=e.ref.split("@");return Ge.find((n)=>n.ruleId===r)?.name??t.find((n)=>n.ruleId===r)?.name??e.ref}case"gate":return nx.find((r)=>r.mode===e.mode)?.name??e.mode;case"action":return ox.find((r)=>r.action===e.action)?.name??`${e.action.charAt(0).toUpperCase()}${e.action.slice(1)}`;default:return"Step"}}function Mx(e,t,r,n){if(Mc(e.type,t))return null;if(e.type==="trigger")return{rule:"trigger-input",message:n?`${r} takes no inputs, but ${n} connects to it`:`${r} takes no inputs`};let o=n?` from ${n}`:"",s=Zf[t];return{rule:"gate-input",message:`${r} takes rule results, not ${s==="event"?"events":"decisions"}${o}`}}function qx(e,t,r){let n=li(e);if(n.length===0)return{rule:"no-outputs",message:`${r} has no outputs`};if(!n.includes(t))return{rule:"wrong-output",message:`${r} has no ${ui[t]} output`};return null}function hq(e){return Zf[e]==="event"?"It takes rule results, not events.":"It takes rule results, not decisions."}function Hf(e,t=Ge){let r=new Map,n=new Map;for(let o of e.nodes){let s=qc(o,t),i=(r.get(s)??0)+1;r.set(s,i),n.set(o.id,i===1?s:`${s} ${i}`)}return n}function gq(e,t){if(t==="event")return[{label:"Insert a rule",intent:{type:"insert-step",edgeId:e.id}},qn(e.id)];return[qn(e.id)]}function yq(e){let t=[],r=new Set;for(let o of e.def.nodes){if(r.has(o.id))t.push({nodeId:o.id,message:"Another step uses the same id. Rename one.",fixes:[]});r.add(o.id)}let n=new Set;for(let o of e.def.edges){if(n.has(o.id))t.push({edgeId:o.id,message:"Another connection uses the same id. Rename one.",fixes:[]});n.add(o.id)}return t}function wq(e){return e.def.edges.flatMap((t)=>[t.from,t.to].filter((r)=>!e.byId.has(r)).map(()=>({edgeId:t.id,message:"A connection points to a step that is gone.",fixes:[qn(t.id)]})))}function bq(e){return e.def.nodes.some((t)=>t.type==="trigger")?[]:[{message:"Add a trigger to start it.",fixes:[{label:"Add trigger",edit:{type:"add-trigger"}}]}]}function Fx(e,t){let r=e.byId.get(t.from),n=e.byId.get(t.to);return r&&n?{source:r,target:n}:null}function Cx(e){return(t)=>t.def.edges.flatMap((r)=>{let n=Fx(t,r);if(!n||qx(n.source,Mn(n.source,r.when),""))return[];let o=Mn(n.source,r.when);if(Mx(n.target,o,t.name(n.target),t.name(n.source))?.rule!==e)return[];return[{edgeId:r.id,nodeId:n.target.id,message:e==="gate-input"?hq(o):"It takes no inputs.",fixes:e==="gate-input"?gq(r,o):[qn(r.id)]}]})}function zx(e){return(t)=>t.def.edges.flatMap((r)=>{let n=Fx(t,r);if(!n)return[];if(qx(n.source,Mn(n.source,r.when),t.name(n.source))?.rule!==e)return[];let s=li(n.source).includes("pass");return[{edgeId:r.id,nodeId:n.source.id,message:e==="no-outputs"?"It has no outputs.":`It has no ${ui[Mn(n.source,r.when)]} output.`,fixes:e==="wrong-output"&&s?[{label:"Use Passes",edit:{type:"use-passes",edgeId:r.id}},qn(r.id)]:[qn(r.id)]}]})}function _q(e){return e.def.nodes.flatMap((t)=>{let r=e.incoming.get(t.id)??[],[n]=r;if(t.type!=="gate"||t.mode!=="not"||r.length<2||!n)return[];return[{nodeId:t.id,message:"It takes one input. Keep one.",fixes:[{label:"Keep first input",edit:{type:"keep-one-input",nodeId:t.id,edgeId:n.id}}]}]})}function Sq(e){let t=e.def.nodes.filter((n)=>n.type==="trigger"),[r]=t;return e.def.nodes.flatMap((n)=>{if(n.type==="trigger"||(e.incoming.get(n.id)??[]).length>0)return[];let o=t.length===1&&r&&Mc(n.type,"event")?[{label:"Connect",edit:{type:"connect",from:r.id,to:n.id}}]:[];return[{nodeId:n.id,message:"Nothing runs it. Connect it or delete it.",fixes:[...o,di(n.id)]}]})}function vq(e){let t=new Map,r=[],n=[],o=(s)=>{t.set(s,"visiting"),r.push(s);for(let i of e.outgoing.get(s)??[]){let a=t.get(i.to);if(a==="visiting"){let u=r.slice(r.indexOf(i.to)).flatMap((l)=>{let d=e.byId.get(l);return d?[e.name(d)]:[]});n.push({edgeId:i.id,nodeId:i.to,message:u.length===1?"It connects to itself.":`It loops back through ${Dx(u.slice(1))}.`,fixes:[qn(i.id)]})}else if(a===void 0&&e.byId.has(i.to))o(i.to)}r.pop(),t.set(s,"done")};for(let s of e.def.nodes)if(!t.has(s.id))o(s.id);return n}function kq(e){return Ux(e,e.def.nodes.filter((t)=>t.type==="trigger").map((t)=>t.id))}function xq(e){let t=kq(e),r=e.def.nodes.find((n)=>n.type==="trigger");return e.def.nodes.some((n)=>n.type==="action"&&t.has(n.id))?[]:[{message:"Add an action after the trigger.",fixes:r?[{label:"Add action",intent:{type:"add-next-step",nodeId:r.id,port:"event"}}]:[]}]}var $q={every:"how often it runs",subjects:"what it looks at",state:"a status",inactiveFor:"how long without activity"};function Eq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="trigger"||!zc(t))return[];let r=Qk(t.schedule);if(r.length===0)return[];let[n]=r;return[{nodeId:t.id,message:`Set ${Dx(r.map((o)=>$q[o]))}.`,fixes:[{label:"Set schedule",intent:{type:"focus-field",nodeId:t.id,field:n??"schedule"}}]}]})}var Tq={"remove-label":{schema:Gr,field:"labels",message:"Pick the labels to remove.",label:"Pick labels"},"post-comment":{schema:Ic,field:"message",message:"Write the message.",label:"Write message"}},Oq=new Set(["discord.com","discordapp.com","ptb.discord.com","canary.discord.com"]),Pq=w({url:p().optional(),urlSet:N().optional()});function Iq(e,t){let r=Pq.safeParse(t??{});if(!r.success)return!1;let{url:n,urlSet:o}=r.data;if(n===void 0||n==="")return o===!0;let s=Js({protocol:/^https$/}).safeParse(n);if(!s.success)return!1;if(e==="webhook")return!0;let i=new URL(s.data);return Oq.has(i.hostname)&&i.pathname.startsWith("/api/webhooks/")}var Aq={webhook:{message:"Set the webhook URL. It must use HTTPS.",label:"Set URL"},discord:{message:"Set the Discord webhook URL.",label:"Set URL"}};function Bf(e,t,r,n){return{nodeId:e,message:t,fixes:[{label:r,intent:{type:"focus-field",nodeId:e,field:n}}]}}function Rq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="action")return[];if(t.action==="webhook"||t.action==="discord"){let o=Aq[t.action];return Iq(t.action,t.params)?[]:[Bf(t.id,o.message,o.label,"url")]}if(t.action==="label")return Gr.safeParse(t.params??{}).success?[]:[Bf(t.id,"Pick the labels to add.","Pick labels","labels")];let r=t.action==="remove-label"||t.action==="post-comment"?Tq[t.action]:null,n=r?.schema.safeParse(t.params??{});if(!(r&&n)||n.success)return[];return[Bf(t.id,r.message,r.label,r.field)]})}function Cq(e){return e.def.nodes.flatMap((t)=>t.type==="trigger"&&zc(t)&&t.kinds.length>1?[{nodeId:t.id,message:"It cannot run on a schedule and on events. Pick one.",fixes:[{label:"Pick one",intent:{type:"focus-field",nodeId:t.id,field:"kinds"}}]}]:[])}var zq=new Set(["block","send-to-moderation"]);function Ux(e,t){let r=new Set,n=[...t];for(let o=n.pop();o!==void 0;o=n.pop()){if(r.has(o))continue;r.add(o),n.push(...(e.outgoing.get(o)??[]).map((s)=>s.to))}return r}function Nq(e){let t=Ux(e,e.def.nodes.filter(zc).map((r)=>r.id));return e.def.nodes.flatMap((r)=>r.type==="action"&&t.has(r.id)&&zq.has(r.action)?[{nodeId:r.id,message:"It needs a change request event. A schedule cannot run it.",fixes:[di(r.id)]}]:[])}function Gf(e,t){let[r,n]=t.split("@");return e.catalog.find((o)=>o.ruleId===r&&o.version===Number(n))}function Lq(e){return e.def.nodes.flatMap((t)=>t.type==="rule"&&!Gf(e,t.ref)?[{nodeId:t.id,message:"This rule is not in this repo.",fixes:[di(t.id)]}]:[])}function jq(e){return e.def.nodes.flatMap((t)=>{let r=t.type==="rule"?Gf(e,t.ref)?.unavailable:null;return r?[{nodeId:t.id,message:r,fixes:[]}]:[]})}function Dq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="rule")return[];let r=Gf(e,t.ref),n=r?.configSchema.safeParse(t.config);if(!(r&&n)||n.success)return[];let o=n.error.issues[0],s=o?.path[0];return[{nodeId:t.id,message:o?`Fix this setting: ${Kf($o(o))}`:"A setting is not valid.",fixes:s===void 0?[]:[{label:"Edit setting",intent:{type:"focus-field",nodeId:t.id,field:String(s)}}]}]})}var Mq={comment:"Customize sets the verdict comment now"};function qq(e){return e.def.nodes.flatMap((t)=>t.type==="action"&&Bk(t.action)?[{nodeId:t.id,message:`This step was removed. ${mq(Mq[t.action])}`,fixes:[di(t.id)]}]:[])}function Fq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="action"||t.action!=="request-review")return[];let r=Hk.safeParse(t.params??{});if(r.success)return[];let n=r.error.issues[0],o=n?.code==="custom"&&n.path.length===0&&n.message.startsWith("add"),s=n?.path[0]==="teamReviewers"?"teamReviewers":"reviewers";return[{nodeId:t.id,message:o?"Pick people or teams to ask.":n?.message?`Fix the reviewers: ${Kf(n.message)}`:"A reviewer is not valid.",fixes:[{label:o?"Add reviewers":"Edit reviewers",intent:{type:"focus-field",nodeId:t.id,field:s}}]}]})}function Uq(e){let t=e.reviewers;if(!t)return[];return e.def.nodes.flatMap((r)=>{if(r.type!=="action"||r.action!=="request-review")return[];let n=oi.safeParse(r.params??{});if(!n.success)return[];return n.data.reviewers.filter((o)=>!t.some((s)=>Kk(s,o))).map((o)=>({nodeId:r.id,message:`Remove ${o.login}. They can no longer review this repo.`,fixes:[{label:"Remove",edit:{type:"remove-reviewer",nodeId:r.id,reviewer:o}}]}))})}function Wq(e){return e.def.nodes.flatMap((t)=>{let[r]=li(t);if(t.type==="action"||!r||(e.outgoing.get(t.id)??[]).length>0||t.type!=="trigger"&&(e.incoming.get(t.id)??[]).length===0)return[];return[{nodeId:t.id,message:"Nothing runs after it.",fixes:[{label:"Add step",intent:{type:"add-next-step",nodeId:t.id,port:r}},di(t.id)]}]})}var Vq=[{rule:"duplicate-id",check:yq},{rule:"missing-step",check:wq},{rule:"no-trigger",check:bq},{rule:"trigger-input",check:Cx("trigger-input")},{rule:"gate-input",check:Cx("gate-input")},{rule:"no-outputs",check:zx("no-outputs")},{rule:"wrong-output",check:zx("wrong-output")},{rule:"not-input",check:_q},{rule:"orphan-step",check:Sq},{rule:"cycle",check:vq},{rule:"no-action",check:xq},{rule:"schedule-config",check:Eq},{rule:"action-params",check:Rq},{rule:"schedule-mixed",check:Cq},{rule:"schedule-needs-change-request",check:Nq},{rule:"unknown-rule",check:Lq},{rule:"rule-unavailable",check:jq},{rule:"rule-config",check:Dq},{rule:"removed-step",check:qq},{rule:"review-targets",check:Fq},{rule:"stale-reviewer",check:Uq},{rule:"dead-end",check:Wq}];function Nx(e,t){let r=new Map;for(let n of e)r.set(n[t],[...r.get(n[t])??[],n]);return r}function Jf(e,t,r=new Map){return{rule:e,severity:jx[e].severity,step:t.nodeId?r.get(t.nodeId)??"Step":"Workflow",...t}}function Lx(e,t,r,n){let o=Hf(e,t),s={def:e,byId:new Map(e.nodes.map((c)=>[c.id,c])),incoming:Nx(e.edges,"to"),outgoing:Nx(e.edges,"from"),name:(c)=>o.get(c.id)??qc(c,t),catalog:t,reviewers:n},i=Vq.flatMap(({rule:c,check:u})=>r==="structure"&&jx[c].stage!=="structure"?[]:u(s).map((l)=>Jf(c,l,o)));return i.some((c)=>c.rule==="no-action")?i.filter((c)=>c.rule!=="dead-end"||s.byId.get(c.nodeId??"")?.type!=="trigger"):i}var Zq=w({nodes:v(de({id:p().catch(""),type:p().catch(""),kinds:v(p()).optional().catch(void 0)}))});function Bq(e,t){let r=new Map,n=new Map;for(let o of e){let s=Df.safeParse(o),i=s.success?qc(s.data,t):o.type?`${o.type.charAt(0).toUpperCase()}${o.type.slice(1)}`:"Step",a=(r.get(i)??0)+1;r.set(i,a),n.set(o.id,a===1?i:`${i} ${a}`)}return n}function Kq(e,t,r){return e.issues.map((n)=>{let[o,s]=n.path,i=o==="nodes"&&Number.isInteger(s)?t[Number(s)]:void 0;return Jf("schema",{nodeId:i||void 0,message:"A setting is not valid.",fixes:[]},r)})}function Yf(e,t={}){let r=t.catalog??Ge,n=t.stage??"enable",o=(f)=>[...f].sort((m,h)=>Number(m.severity==="warning")-Number(h.severity==="warning")),s=pt.safeParse(e);if(s.success)return{definition:s.data,results:o(Lx(s.data,r,n,t.reviewers))};let i=Zq.safeParse(e),a=i.success?i.data.nodes:[],c=a.filter((f)=>f.type==="trigger"&&f.kinds?.length===0),u=pt.safeParse({...e,nodes:a.map((f)=>c.includes(f)?{...f,kinds:["push"]}:f)});if(c.length===0||!u.success)return{definition:null,results:Kq(s.error,a.map((f)=>f.id),Bq(a,r))};let l=Hf(u.data,r),d=c.map((f)=>Jf("no-trigger-events",{nodeId:f.id,message:"Pick when it runs.",fixes:[{label:"Pick events",intent:{type:"focus-field",nodeId:f.id,field:"kinds"}}]},l));return{definition:null,results:o([...d,...Lx(u.data,r,n,t.reviewers)])}}function Wx(e,t={}){return Yf(e,t).results}var Hq={pass:Dc.pass,block:Dc.block,needs_review:Dc.needs_review},Gq=Eo.nullable().catch(null);function Vx(e){let t=Gq.parse(e??null);return t?Hq[t]:null}var gle=v(pt).catch([]),yle=w({workflows:v(w({id:p(),name:p()})),issues:v(w({workflowId:p(),messages:v(p())})).optional()}).catch({workflows:[]}),wle=w({decision:z(["approve","deny"])}).nullable().catch(null);var ble=w({pausedNodeId:p()}).nullable().catch(null);var Qf=p().min(1).max(100).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/),Xf=z(["default","on","off"]),kle=z(["pending","synced","failed"]),xle=z(["default","rule","group","rollout","unknown"]);var $le=de({type:z(["user_id","email","property"]),operator:z(["equals","contains","starts_with","ends_with","in","not_in","exists","not_exists"]),field:p().optional(),value:p().optional(),values:v(p()).optional(),enabled:N(),batch:N(),batchValues:v(p()).optional()}),Jq=de({id:p(),key:p(),name:p().nullish(),description:p().nullish(),status:z(["active","inactive","archived"]).optional(),defaultValue:N().optional(),rules:v(Ie).nullish()}),Ele=v(Jq),Tle=de({field:p()});var Ole=w({flagKey:Qf,from:Xf,to:Xf}),Ple=z(["access.approve","access.decline","flag.override","flag.sync_retry","account.timezone","account.rerun_cooldown","account.platform_admin","session.revoke","session.revoke_all","agent.revoke","user.ban","user.unban","user.delete","impersonation.start","impersonation.stop","org.member_role"]),Ile=K(p(),ee([p(),O(),N(),wo()])),Gt=p().min(1).max(200),Ale=w({userId:Gt}),Rle=w({userId:Gt,flagKey:Qf,choice:Xf}),Cle=w({userId:Gt,flagKey:Qf}),zle=w({userIds:v(Gt).min(1).max(100),decision:z(["approve","reject"])}),Nle=w({userId:Gt,timezone:Rc.nullable()}),Lle=w({userId:Gt,exempt:N()}),jle=w({userId:Gt,isPlatformAdmin:N(),confirm:p().min(1).max(200)}),Dle=w({userId:Gt,sessionId:p().min(1).max(200)}),Mle=w({userId:Gt,clientId:p().min(1).max(200)}),Yq=500,qle=w({userId:Gt,reason:p().trim().min(1).max(Yq),endsAt:pe.date().nullable()}),Fle=w({userId:Gt,confirm:p().min(1).max(200)}),Xq=p().min(1).max(200).regex(/^[\w-]+$/),Ule=w({anonId:Xq}),tt=ee([p(),O()]).transform(String).nullish().catch(null),Fc=ee([O(),p().regex(/^-?\d+(\.\d+)?$/)]).transform(Number).nullish().catch(null),Wle=w({first_visit:tt,last_visit:tt,total_sessions:Fc,total_pageviews:Fc,country:tt,country_name:tt,device_type:tt,browser_name:tt,os_name:tt}),Vle=w({session_id:tt,session_start:tt,first_visit:tt,duration:Fc,page_views:Fc,path:tt,entry_page:tt,country:tt,country_name:tt,browser_name:tt,device_type:tt}),Zle=w({data:v(w({parameter:p().optional(),data:v(Ie).optional()})).optional()}),Ble=de({message:p().optional(),error:p().optional(),json:de({message:p().optional()}).optional()});var Qq=w({ruleId:p(),summary:p()}),Jle=w({version:C(1),verdict:Eo,org:p(),repo:p(),changeRequest:w({number:O().int(),title:p(),author:p()}),firedRules:v(Qq),runUrl:p(),timestamp:p()});var Yle=w({content:p(),embeds:v(w({title:p(),url:p(),description:p(),color:O().int()}))});function Oo(e,t){return{kind:"output",step:e,port:t}}function tm(e,t,r,n){let o={kind:"check",rule:e,config:t??{},version:r?.version,inputs:n,get passes(){return Oo(o,"pass")},get fails(){return Oo(o,"fail")},after:(...s)=>tm(e,t,r,s)};return o}function em(e,t){let r={kind:"gate",mode:e,inputs:t,get passes(){return Oo(r,"pass")},get fails(){return Oo(r,"fail")}};return r}function ur(e,t,r=[]){return{kind:"action",action:e,params:t,inputs:r,after:(...n)=>ur(e,t,n)}}function Zx(e,t){let r={kind:"action",action:"send-to-moderation",params:void 0,approve:e.approve??[],deny:e.deny??[],inputs:t,get approved(){return Oo(r,"approve")},get denied(){return Oo(r,"deny")},after:(...n)=>Zx(e,n)};return r}function Bx(){return{check(e,...t){let[r,n]=t;return tm(e,r,n,[])},customCheck(e,t){return tm(e,t,void 0,[])},allOf(...e){return em("all-of",e)},anyOf(...e){return em("any-of",e)},not(e){return em("not",[e])},trigger(...e){return{kind:"trigger",on:e,inputs:[]}},schedule(e){return{kind:"trigger",on:["schedule.matched"],schedule:e,inputs:[]}},block(){return ur("block",void 0)},label(e){return ur("label",e)},removeLabel(e){return ur("remove-label",e)},requestReview(e){return ur("request-review",e)},postComment(e){return ur("post-comment",e)},lock(e){return ur("lock",e)},close(){return ur("close",void 0)},webhook(){return ur("webhook",void 0)},discord(){return ur("discord",void 0)},humanReview(e={}){return Zx(e,[])},workflow(e){return{kind:"workflow",spec:e}},workflows(e){return e}}}var Po=["change-request.opened","change-request.updated","change-request.closed","comment.created","push"],pi=w({}),Yr={block:pi,label:Gr,"remove-label":Gr,"request-review":w({reviewers:v(ee([Pc,Nf])).optional(),teamReviewers:v(zf).optional()}),"post-comment":Ic,lock:Gk,close:pi,webhook:pi,discord:pi,"send-to-moderation":pi};var Kx=Bx();var fde=zt*60000;function fi(e){return"n"in e}function e2(e){return"preset"in e}var t2={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function r2(e){let[t="0",r="0"]=e.split(":");return{hour:Number(t),minute:Number(r)}}function Hx(e){if(fi(e))return null;if(!e2(e))return e.cron.trim();if(e.preset==="hourly")return`${e.minute} * * * *`;let{hour:t,minute:r}=r2(e.at);switch(e.preset){case"daily":return`${r} ${t} * * *`;case"weekdays":return`${r} ${t} * * 1-5`;case"weekly":return`${r} ${t} * * ${t2[e.on]}`;case"monthly":return`${r} ${t} ${e.day} * *`;default:return null}}function Gx(e){return e?{zone:e,defaulted:!1}:{zone:ir,defaulted:!0}}var n2={hours:["hour","hours"],days:["day","days"],weeks:["week","weeks"],months:["month","months"]};function Jx(e){let[t,r]=n2[e.unit];return`${e.n} ${e.n===1?t:r}`}var Fn="09:00",Gc=jf.options,Uc=new Map([...Gc.flatMap((e,t)=>[e,`${e}s`,e.slice(0,3)].map((r)=>[r,t])),["tues",2],["thur",4],["thurs",4]]),o2=new Map(Object.entries({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10,eleven:11,twelve:12})),s2=new Map(Object.entries({m:"minutes",h:"hours",d:"days",w:"weeks"})),Yx=new Map(Object.entries({min:"minutes",mins:"minutes",minute:"minutes",minutes:"minutes",hr:"hours",hrs:"hours",hour:"hours",hours:"hours",day:"days",days:"days",wk:"weeks",wks:"weeks",week:"weeks",weeks:"weeks",month:"months",months:"months"})),Xx=new Map(Object.entries({minute:"minute",hour:"hourly",day:"daily",week:"week",month:"monthly"})),rm=new Map(Object.entries({hourly:"hourly",daily:"daily",weekly:"weekly",monthly:"monthly",weekday:"weekdays",weekdays:"weekdays","mon-fri":"weekdays","monday-friday":"weekdays",weekend:"weekends",weekends:"weekends"})),i2=new Map(Object.entries({utc:ir,gmt:ir,z:ir})),a2=["Asia/Kolkata","Europe/Kyiv","Asia/Ho_Chi_Minh","America/Argentina/Buenos_Aires"],c2=["Berlin","London","New York","Los Angeles","Chicago","Denver","Toronto","Paris","Amsterdam","Madrid","Stockholm","Tokyo","Singapore","Sydney","Kolkata","Sao Paulo"],Wc=null;function om(e){return(e.split("/").at(-1)??e).replaceAll("_"," ")}function s0(){if(Wc)return Wc;let e=Intl.supportedValuesOf("timeZone"),t=new Map,r=new Map,n=a2.filter(ni);for(let i of[...n,...e])if(r.set(i.toLowerCase(),i),i.includes("/")&&!i.startsWith("Etc/")){let a=om(i).toLowerCase();if(!t.has(a))t.set(a,i)}let o=c2.filter((i)=>t.has(i.toLowerCase())),s=[...t.values()].map(om).filter((i)=>!o.includes(i)).sort((i,a)=>i.localeCompare(a));return Wc={byCity:t,byId:r,cities:[...o,...s]},Wc}function u2(e){return e.split("/").map((t)=>t.split("_").map((r)=>`${r.charAt(0).toUpperCase()}${r.slice(1)}`).join("_")).join("/")}function l2(e){let t=e.toLowerCase(),r=i2.get(t);if(r)return r;if(!t.includes("/"))return null;let n=s0().byId.get(t);if(n)return n;let o=u2(t);return ni(o)?o:null}function sm(e){return s0().byCity.get(e.join(" ").toLowerCase())??null}function i0(e){if(e===ir)return e;let t=om(e);return sm([t])===e?t:e}function d2(e,t){return`UTC${(new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(t).find((o)=>o.type==="timeZoneName")?.value??"GMT").replace(/^GMT/,"")||"+0"}`}function a0(e,t=new Date){return e===ir?e:`${e}, ${d2(e,t)}`}function Qx(e,t){return[...e.matchAll(t)].map((r)=>({text:r[0],lower:r[0].toLowerCase(),from:r.index,to:r.index+r[0].length}))}function Ao(e){return String(e).padStart(2,"0")}function im(e,t){return`${Ao(e)}:${Ao(t)}`}function am(e){let r=e%100>=11&&e%100<=13?"th":["th","st","nd","rd"][e%10]??"th";return`${e}${r}`}function hi(e){return`${e.charAt(0).toUpperCase()}${e.slice(1)}`}function Ro(e){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function Vc(e){if(e===void 0)return null;if(/^\d{1,4}$/.test(e))return Number(e);return o2.get(e)??null}function p2(e,t){let r=e[t]?.lower;if(r===void 0)return null;if(r==="noon")return{hour:12,minute:0,valid:!0,used:1};if(r==="midnight")return{hour:0,minute:0,valid:!0,used:1};let n=/^(\d{1,2})(?:[:.](\d{2}))?(am|pm|a\.m\.|p\.m\.)?$/.exec(r);if(!n)return null;let o=1,s=n[3]?.charAt(0),i=e[t+1]?.lower;if(!s&&i&&/^(am|pm|a\.m\.|p\.m\.)$/.test(i))s=i.charAt(0),o=2;let a=Number(n[1]),c=Number(n[2]??"0"),u=c<=59;if(s)u=u&&a>=1&&a<=12,a=a%12+(s==="p"?12:0);else u=u&&a<=23;return{hour:a,minute:c,valid:u,used:o}}function e0(e){let t=e?/^(\d{1,2})(st|nd|rd|th)?$/.exec(e):null;return t?Number(t[1]):null}var f2=new Set(["shorter","short","those","the","months","month"]);function Io(e,t){return{from:e.from,to:t.to}}class cm{words;read={};at=0;everyAt=-1;constructor(e){this.words=e}word(e=0){return this.words[this.at+e]}lower(e=0){return this.word(e)?.lower}take(e){let t=this.word(),r=this.word(e-1);return this.at+=e,t&&r?Io(t,r):{from:0,to:0}}run(){while(this.at<this.words.length&&!this.read.unknown)if(!this.step()){let e=this.lower()==="in"&&this.word(1)?this.word(1):this.word();if(e)this.read.unknown={from:e.from,to:e.to}}return this.read}step(){let e=this.lower()??"",t=this.at===this.everyAt+1&&this.everyAt>=0;if((e==="every"||e==="each")&&!this.read.every){if(this.everyAt=this.at,this.read.every=this.take(1),this.at>=this.words.length)this.read.everyDangling=this.read.every;return this.everyFollowerOk()}if(e==="and"||e==="&")return this.at+=1,!0;if(e==="skip"||e==="skipping")return this.skip();if(e==="at")return this.atPhrase();if(this.count(t))return!0;if(this.unit())return!0;if(this.keyword(t))return!0;if(this.weekdays())return!0;if(this.monthDay())return!0;if(this.monthOf())return!0;if(this.minute())return!0;if(this.time())return!0;return this.zone()}everyFollowerOk(){let e=this.lower();if(e===void 0)return!0;let t=/^\d+[a-z]+$/.test(e);if(!(Vc(e)!==null||t||Xx.has(e)||Uc.has(e)||e==="weekday"||e==="weekend"||e==="weekdays"||e==="weekends")){let n=this.word();if(n)this.read.unknown={from:n.from,to:n.to}}return!0}skip(){let e=1;while(f2.has(this.lower(e)??""))e+=1;if(this.read.skip)return!1;return this.read.skip=this.take(e),!0}atPhrase(){let e=this.lower(1);if(e===void 0)return this.read.atDangling=this.take(1),!0;if(e==="minute"||/^:\d{1,2}$/.test(e))return this.minute(1);return this.time(1)}count(e){let t=this.lower();if(t===void 0||this.read.interval)return!1;let r=/^(\d{1,4})([a-z]+)$/.exec(t);if(r){let a=r[2]??"",c=s2.get(a)??Yx.get(a);if(!c)return!1;let u=this.word();return this.setInterval(Number(r[1]),c,this.take(1),{from:u?.from??0,to:(u?.from??0)+(r[1]?.length??0)},r[2]??""),!0}let n=Vc(t);if(n===null)return!1;let o=this.lower(1)??"",s=Yx.get(o),i=this.word();if(s&&i)return this.setInterval(n,s,this.take(2),Io(i,i),o),!0;if(e&&i)return this.read.interval={...this.take(1),n,unit:null,count:Io(i,i),unitWord:""},!0;return!1}setInterval(e,t,r,n,o){this.read.interval={...r,n:e,unit:t,count:n,unitWord:o}}unit(){let e=this.lower()??"",t=Xx.get(e);if(!t)return!1;if(t==="minute"){if(this.read.interval)return!1;return this.setInterval(1,"minutes",this.take(1),null,e),!0}return this.setBase(t,[],this.take(1))}setBase(e,t,r){if(this.read.base)return!1;return this.read.base={...r,kind:e,days:t},!0}keyword(e){let t=0,r,s=(this.lower()??"")==="on"&&rm.get(this.lower(1)??"")?1:0,i=this.lower(s)??"";if((i==="monday"||i==="mon")&&(this.lower(s+1)==="to"||this.lower(s+1)==="through")&&(this.lower(s+2)==="friday"||this.lower(s+2)==="fri"))r="weekdays",t=s+3;else if(rm.has(i))r=rm.get(i),t=s+1;if(!r)return!1;if(e&&!(r==="weekdays"||r==="weekends"))return!1;return this.setBase(r,[],this.take(t))}weekdays(){let e=this.lower()==="on"?1:0;if(Uc.get(this.lower(e)??"")===void 0)return!1;let t=[],r=e;while(!0){let s=Uc.get(this.lower(r)??"");if(s!==void 0){t.push(s),r+=1;continue}let i=this.lower(r);if((i==="and"||i==="&")&&Uc.get(this.lower(r+1)??"")!==void 0){r+=1;continue}break}let n=[...new Set(t)].sort((s,i)=>s-i),o=this.read.base;if(o&&(o.kind==="weekly"||o.kind==="week")&&o.days.length===0)return o.kind="weekly",o.days=n,this.read.weekdaySpan=this.take(r),!0;return this.setBase("weekly",n,this.take(r))}monthDay(){let e=0;if(this.lower(e)==="on")e+=1;let t=null;if(this.lower(e)==="the")t=e0(this.lower(e+1)),e+=2;else if(this.lower(e)==="day")t=Vc(this.lower(e+1)),e+=2;else if(/(st|nd|rd|th)$/.test(this.lower(e)??""))t=e0(this.lower(e)),e+=1;if(t===null)return!1;let r=this.take(e),n=this.read.day;if(n)return n.to=r.to,n.values.push(t),n.value=Math.max(n.value,t),!0;return this.read.day={...r,value:t,values:[t]},!0}monthOf(){let e=this.lower()==="of",t=this.lower(1),r=this.lower(2);if(!e||!(t==="the"||t==="every"||t==="each")||r!=="month")return!1;if(this.read.base)return!1;return this.read.monthOf=this.take(3),this.read.base={...this.read.monthOf,kind:"monthly",days:[]},!0}minute(e=0){let t=this.lower(e)??"",r=null,n=e,o=/^:(\d{1,2})$/.exec(t);if(o)r=Number(o[1]),n+=1;else if(t==="minute")r=Vc(this.lower(e+1)),n+=2;if(r===null||r>59||this.read.minute)return!1;return this.read.minute={...this.take(n),value:r},!0}time(e=0){let t=p2(this.words,this.at+e);if(!t)return!1;let r=this.take(e+t.used),n={hour:t.hour,minute:t.minute,valid:t.valid},o=this.read.time;if(o)return o.to=r.to,o.times.push(n),o.valid=o.valid&&n.valid,!0;return this.read.time={...r,...n,times:[n]},!0}zone(){if(this.read.zone)return!1;let e=this.lower()==="in"?1:0;for(let t=3;t>=1;t--){let r=this.words.slice(this.at+e,this.at+e+t).map((o)=>o.lower);if(r.length<t)continue;let n=t===1?l2(r[0]??"")??sm(r):sm(r);if(n){let o=e+t+(this.lower(e+t)==="time"?1:0);return this.read.zone={...this.take(o),id:n},!0}}return!1}}function mi(e){return e.replace(/\s+,/g,",").replace(/,(\s*,)+/g,",").replace(/\s{2,}/g," ").replace(/^[\s,]+|[\s,]+$/g,"")}function Jt(e,t,r){return mi(`${e.slice(0,t.from)}${r}${e.slice(t.to)}`)}function Zc(e,t){return t.time?e:`${e} at ${Fn}`}var m2={minutes:["minute","minutes"],hours:["hour","hours"],days:["day","days"],weeks:["week","weeks"],months:["month","months"]};function Hc(e,t){let[r,n]=m2[t];return`${e} ${e===1?r:n}`}function c0(e){return hi(Gc[e]??"")}function t0(e){switch(e.kind){case"hourly":return"Every hour";case"daily":return"Every day";case"weekdays":return"Monday to Friday";case"weekends":return"Saturday and Sunday";case"week":return"Every week";case"monthly":return"Every month";default:return e.days.length>0?`Every ${Ro(e.days.map(c0))}`:"Every week"}}function h2(e,t,r,n){let o=[],s=(l,d,f,m)=>{if(!d)return;o.push({from:d.from,to:d.to,text:e.slice(d.from,d.to),kind:f,label:m,tone:r[l]??"ok"})},{every:i,base:a,interval:c}=t,u=i&&a&&!c&&a.from>i.to&&e.slice(i.to,a.from).trim()==="";if(i&&!u)s("every",i,"cadence","Repeats");if(c)s("interval",c,"interval",c.unit?`Every ${Hc(c.n,c.unit)}`:"Repeats");if(a)s("base",u&&i?{from:i.from,to:a.to}:a,"cadence",t0(a));if(s("weekdays",t.weekdaySpan,"cadence",t0(a??{from:0,to:0,kind:"weekly",days:[]})),t.day)s("day",t.day,"day",`The ${Ro(u0(t.day).map(am))} of the month`);if(t.time)s("time",t.time,"time",t.time.valid?Ro(l0(t.time).map((l)=>im(l.hour,l.minute))):"Not a time");if(s("at",t.atDangling,"time","At"),t.minute)s("minute",t.minute,"minute",`At :${Ao(t.minute.value)}`);if(t.zone)s("zone",t.zone,"zone",a0(t.zone.id,n));if(t.skip)s("skip",t.skip,"skip","Skips months without that day");if(t.unknown)s("unknown",t.unknown,"unknown","Not understood");return o.sort((l,d)=>l.from-d.from)}function $e(e,t,r=[],n={}){return{ok:!1,reason:e,message:t,fixes:r,tones:n}}var g2=[5,6,10,12,15,20,30];function y2(e){return g2.reduce((t,r)=>Math.abs(r-e)<Math.abs(t-e)?r:t)}function w2(e,t){let n=t.unitWord==="minute"||t.unitWord==="min"?`${t.unitWord}s`:t.unitWord,o=`${zt} ${n}`;return{label:`Use ${zt} minutes`,text:Jt(e,t,o)}}function b2(e,t){let r=t.interval;if(!r)return null;let n={interval:"fail"};if(t.base||t.day)return $e("invalid","Use an interval or a day, not both.",[],n);if(r.unit===null)return $e("incomplete","Add a unit, like every 5 days.",[{label:"Use days",text:Jt(e,r,`${r.n} days`)}]);if(r.unit==="months"){if(r.n===1)return null;let c=Math.round(r.n*30/7);return $e("unstorable","An interval counts hours, days or weeks.",[{label:`Use ${c} weeks`,text:Jt(e,r,`${c} weeks`)}],n)}let{n:o,unit:s}=r;if(s==="minutes"){if(o<zt)return $e("floor",`Runs must be at least ${zt} minutes apart.`,[w2(e,r)],n);if(o<60||o%60!==0){if(t.time||t.minute)return r0(e,t,[]);if(o>60||60%o!==0){let c=y2(o);return $e("unstorable","Minutes must divide the hour evenly, like 10, 15 or 30.",[{label:`Use ${c} minutes`,text:Jt(e,r,`${c} minutes`)}],n)}return{ok:!0,every:{cron:`*/${o} * * * *`},timezone:t.zone?.id}}o/=60,s="hours"}let i={n:o,unit:s};if(s==="hours"&&t.minute&&!t.time&&!t.skip&&o>1&&o<24&&24%o===0)return{ok:!0,every:{cron:`${t.minute.value} */${o} * * *`},timezone:t.zone?.id};if(t.time||t.minute)return r0(e,t,[]);if(t.zone)return $e("unstorable","An interval counts from the last run, so it has no timezone.",[{label:"Drop the timezone",text:Jt(e,t.zone,"")}],{zone:"fail"});if(t.skip)return $e("invalid","Only a day after the 28th skips months.",[],{skip:"fail"});let a=si[s];if(o<1||o*a>Ac){let c=Math.floor(Ac/a);return $e("invalid","Runs must be at most 52 weeks apart.",[{label:`Use ${Hc(c,s)}`,text:Jt(e,r,Hc(c,s))}],n)}return{ok:!0,every:i,timezone:void 0}}function r0(e,t,r){let n=t.time??t.minute;return $e("unstorable","An interval counts from the last run, so it has no time of day.",[...r,...n?[{label:"Drop the time",text:Jt(e,n,"")}]:[]],{time:"fail",minute:"fail"})}var _2=new Map([[29,"February has no 29th most years."],[30,"February has no 30th."],[31,"Five months have no 31st."]]);function S2(e,t){let r=t.zone?.id,n=t.base;if(!n&&(t.day||t.interval?.unit==="months"))n={from:0,to:0,kind:"monthly",days:[]};if(!n)return $e("incomplete","Add how often, like every day.",t.time?[{label:"Every day",text:`every day ${e.trim()}`}]:[]);if(t.time&&!t.time.valid)return $e("invalid","Use a time from 00:00 to 23:59.",[],{time:"fail"});if(n.kind==="hourly"){if(t.time)return $e("unstorable","An hourly schedule takes a minute, like at :15.",[{label:"Use :00",text:Jt(e,t.time,"at :00")}],{time:"fail"});if(t.day)return $e("invalid","An hourly schedule runs every day.",[],{day:"fail"});return{ok:!0,every:{preset:"hourly",minute:t.minute?.value??0},timezone:r}}if(t.minute)return $e("invalid","A minute only fits an hourly schedule.",[],{minute:"fail"});if(n.kind==="week"||n.kind==="weekly"&&n.days.length===0){let f=t.every?{from:Math.min(t.every.from,n.from),to:n.to}:n;return $e("incomplete","Add a day, like every monday.",[{label:"Every Monday",text:Zc(Jt(e,f,"every monday"),t)}])}if(n.kind==="monthly"){if(!t.day)return $e("incomplete","Add a day, like on the 1st.",[{label:"On the 1st",text:Zc(`${mi(e)} on the 1st`,t)}])}else if(t.day)return $e("invalid","Pick a weekday or a day of the month, not both.",[],{day:"fail"});let o=t.day,s=o?u0(o):[];if(s.some((f)=>f<1||f>31))return $e("invalid","A month has at most 31 days.",[],{day:"fail"});if(o&&o.value>28&&!t.skip)return $e("ambiguous",_2.get(o.value)??"",[{label:"Skip those months",text:`${Zc(mi(e),t)}, skipping shorter months`},{label:"Run on the 28th instead",text:Zc(Jt(e,o,"on the 28th"),t)}],{day:"warn"});if(t.skip&&!(o&&o.value>28))return $e("invalid","Only a day after the 28th skips months.",[],{skip:"fail"});if(!t.time)return $e("incomplete",t.atDangling?"Add a time, like 09:00.":"Add a time, like at 09:00.",[{label:`At ${Fn}`,text:t.atDangling?`${mi(e)} ${Fn}`:`${mi(e)} at ${Fn}`}]);let i=l0(t.time),[a]=i;if(i.length===1&&s.length<=1&&a){let f=v2(n,s[0],a);if(f)return{ok:!0,every:f,timezone:r}}let c=[...new Set(i.map((f)=>f.minute))],u=[...new Set(i.map((f)=>f.hour))];if(c.length*u.length!==i.length)return $e("unstorable","Times in one schedule share their minutes, like 09:00 and 17:00.",[],{time:"fail"});let l=`${c.join(",")} ${u.join(",")} ${k2(n,s)}`,d=Cc.safeParse({cron:l});if(!d.success)return $e("invalid",d0(d.error.issues[0]?.message??"this cron does not parse"),[],{time:"fail"});return{ok:!0,every:{cron:d.data.cron},timezone:r}}function u0(e){return[...new Set(e.values)].sort((t,r)=>t-r)}function l0(e){let t=new Map;for(let r of e.times)t.set(r.hour*60+r.minute,r);return[...t.entries()].sort(([r],[n])=>r-n).map(([,r])=>r)}function v2(e,t,r){let n=im(r.hour,r.minute);switch(e.kind){case"daily":return{preset:"daily",at:n};case"weekdays":return{preset:"weekdays",at:n};case"monthly":{let o=t??1;return o>28?null:{preset:"monthly",day:o,at:n}}case"weekly":{let[o]=e.days,s=o===void 0?void 0:Gc[o];return e.days.length===1&&s?{preset:"weekly",on:s,at:n}:null}default:return null}}function k2(e,t){switch(e.kind){case"weekdays":return"* * 1-5";case"weekends":return"* * 0,6";case"monthly":return`${t.length>0?t.join(","):"1"} * *`;case"weekly":return`* * ${e.days.join(",")}`;default:return"* * *"}}var nm=/^[\d*][\d*,\-/]*$/,x2=/^[\da-z*][\da-z*,\-/]*$/i;function $2(e){let[t,r]=e;if(!(t&&r&&nm.test(t.text)&&nm.test(r.text)))return 0;let n=0;while(n<5){let o=e[n],s=n<3?nm:x2;if(!(o&&s.test(o.text))||n>=3&&!/[\d*]/.test(o.text)&&!/^[a-z]{3}(-[a-z]{3})?(,[a-z]{3})*$/i.test(o.text))break;n+=1}return n}function d0(e){return`${hi(e)}.`}function E2(e,t,r,n){let o=t.slice(0,r),s=o[0],i=o.at(-1),a=o.map((y)=>y.text).join(" "),c=s&&i?Io(s,i):{from:0,to:0},u=t.slice(r),l,d;if(u.length>0){let b=new cm(u).run(),E=b.every||b.base||b.interval||b.time||b.day||b.minute||b.skip;if(b.unknown||E||!b.zone){let k=u[0];d=b.unknown??(k?Io(k,k):void 0)}else l=b.zone}let f=p0(a),m=f?hi(f):"Cron",h=(y)=>{let b=[{...c,text:e.slice(c.from,c.to),kind:"cron",label:m,tone:y}];if(l)b.push({from:l.from,to:l.to,text:e.slice(l.from,l.to),kind:"zone",label:a0(l.id,n),tone:"ok"});if(d)b.push({...d,text:e.slice(d.from,d.to),kind:"unknown",label:"Not understood",tone:"fail"});return b};if(d)return{ok:!1,reason:"unknown",message:`Could not read "${e.slice(d.from,d.to)}".`,fixes:[],tokens:h("ok")};let g=Cc.safeParse({cron:a});if(!g.success){let y=g.error.issues[0]?.message??"this cron does not parse",b=y.includes(`at least ${zt} minutes`),E=o[0]?.text??"",k=/^\*(\/(\d+))?$/.exec(E),I=b&&k&&s?[{label:`Use ${zt} minutes`,text:Jt(e,Io(s,s),`*/${zt}`)}]:[];return{ok:!1,reason:b?"floor":"invalid",message:d0(y),fixes:I,tokens:h("fail")}}return{ok:!0,every:{cron:g.data.cron},timezone:l?.id,tokens:h("ok")}}function T2(e,t){if(e.trim()==="")return{ok:!1,reason:"empty",message:"",fixes:[],tokens:[]};let r=Qx(e,/\S+/g),n=$2(r);if(n>0)return E2(e,r,n,t);let o=new cm(Qx(e,/[^\s,]+/g)).run(),s=O2(e,o),i=h2(e,o,s.ok?{}:s.tones??{},t);if(s.ok)return{ok:!0,every:s.every,timezone:s.timezone,tokens:i};return{ok:!1,reason:s.reason,message:s.message,fixes:s.fixes,tokens:i}}function O2(e,t){if(t.unknown)return $e("unknown",`Could not read "${e.slice(t.unknown.from,t.unknown.to)}".`,[],{unknown:"fail"});if(t.everyDangling&&!t.base&&!t.interval)return $e("incomplete","Add how often, like every day.");return b2(e,I2(t))??S2(e,t)}var P2={hours:"hourly",days:"daily",weeks:"week",months:"monthly"};function I2(e){let t=e.interval;if(!t||t.n!==1||t.unit===null)return e;let r=e.base?.kind;if(t.unit==="weeks"&&r==="weekly"||t.unit==="months"&&r==="monthly"){if(e.base&&r==="weekly"&&!e.weekdaySpan)e.weekdaySpan={from:e.base.from,to:e.base.to},e.base.from=t.from,e.base.to=t.to;return e.interval=void 0,e}if(e.base)return e;if(t.unit==="minutes")return e;return e.base={from:t.from,to:t.to,kind:P2[t.unit],days:[]},e.interval=void 0,e}var A2={hours:"every 60 minutes",days:"every 24 hours",weeks:"every 7 days"},Bc=Array.from({length:31},(e,t)=>t+1),Kc=[0,1,2,3,4,5,6];function R2(e){let t=(i,a)=>$c(e,i,a),r=Kc.filter((i)=>Bc.every((a)=>t(a,i)));if(Kc.every((i)=>Bc.every((a)=>t(a,i)===r.includes(i))))return r.length===7?{kind:"daily"}:{kind:"weekly",days:r};let o=Bc.filter((i)=>Kc.every((a)=>t(i,a)));return Bc.every((i)=>Kc.every((a)=>t(i,a)===o.includes(i)))?{kind:"monthly",days:o}:null}function n0(e,t){let[r,n]=e;if(r!==0||n===void 0)return null;let o=n-r;return e.every((i,a)=>i===a*o)&&t%o===0&&e.length===t/o?o:null}var C2=4;function o0(e){return(e+6)%7}function z2(e){if(e.kind==="daily")return"every day";if(e.kind==="monthly")return e.days.length===0?null:`monthly on the ${Ro(e.days.map(am))}`;let t=e.days.join(",");if(t==="1,2,3,4,5")return"weekdays";if(t==="0,6")return"weekends";let r=[...e.days].sort((n,o)=>o0(n)-o0(o)).map(c0);return r.length===0?null:`every ${Ro(r)}`}function N2(e){let t=Dn(e);if(!t.ok||t.spec.months.length!==12)return null;let{minutes:r,hours:n}=t.spec,o=R2(t.spec);if(!o)return null;let s=o.kind==="daily",[i]=r;if(n.length===24){if(!s)return null;if(r.length===1&&i!==void 0)return i===0?"every hour":`every hour at :${Ao(i)}`;let d=n0(r,60);return d?`every ${d} minutes`:null}let a=n0(n,24);if(r.length===1&&i!==void 0&&a&&n.length>2)return s?`every ${a} hours at :${Ao(i)}`:null;if(r.length*n.length>C2)return null;let c=z2(o);if(!c)return null;let u=n.flatMap((d)=>r.map((f)=>im(d,f))),l=`${c} at ${Ro(u)}`;if(o.kind!=="monthly"||o.days.every((d)=>d<=28))return l;return o.days.length===1?`${l}, skipping shorter months`:null}function p0(e){let t=N2(e);if(!t)return null;let r=T2(t,new Date(0)),n=r.ok?Hx(r.every):null;return n!==null&&Wk(n,e)?t:null}function L2(e){if(fi(e)){if(e.n===1)return A2[e.unit];return`every ${Hc(e.n,e.unit)}`}if("preset"in e)switch(e.preset){case"hourly":return e.minute===0?"every hour":`every hour at :${Ao(e.minute)}`;case"daily":return`every day at ${e.at}`;case"weekdays":return`weekdays at ${e.at}`;case"weekly":return`every ${hi(e.on)} at ${e.at}`;default:return`monthly on the ${am(e.day)} at ${e.at}`}let t=e.cron.trim();return p0(t)??t}function j2(e){let t=L2(e.every);if(fi(e.every)||!e.timezone)return t;return`${t} in ${i0(e.timezone)}`}function D2(e){return j2({every:e.every,timezone:fi(e.every)?void 0:e.timezone??ir})}function gi(e){return hi(D2(e))}var bde=["every",...Gc,"weekdays","weekends","minutes","hours","days","weeks","month","monthly","daily","hourly","weekly","noon","midnight"],_de=["",` at ${Fn}`,` ${Fn}`,":00"," days"," minutes",` on the 1st at ${Fn}`," 5 days"];var M2={issue:"issues","change-request":"change requests"},q2={open:"open",closed:"closed",any:"open and closed"};function um(e,t){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} ${t} ${e.at(-1)}`}function F2(e){let t=e?.match??{},r=["issue","change-request"].filter((o)=>t.subjects?.includes(o)),n=e?.every?[{key:"every",text:gi({every:e.every,timezone:e.timezone})}]:[{key:"every-lead",text:"Every "},{key:"every",text:"so often",placeholder:!0}];if(n.push({key:"finds",text:", finds "},t.state?{key:"state",text:q2[t.state]}:{key:"state",text:"open or closed",placeholder:!0},{key:"gap",text:" "},r.length>0?{key:"subjects",text:um(r.map((o)=>M2[o]),"and")}:{key:"subjects",text:"issues or change requests",placeholder:!0},{key:"inactive-lead",text:" with no activity for "},t.inactiveFor?{key:"inactiveFor",text:Jx(t.inactiveFor)}:{key:"inactiveFor",text:"some time",placeholder:!0}),t.labels?.length)n.push({key:"labels",text:`, labeled ${um(t.labels,"and")}`});if(t.excludeLabels?.length)n.push({key:"excludeLabels",text:`, not labeled ${um(t.excludeLabels,"or")}`});if(t.skipLocked!==!1)n.push({key:"skipLocked",text:", skipping locked ones"});return n.push({key:"end",text:"."}),n}function f0(e){return F2(e).map((t)=>t.placeholder?`[${t.text}]`:t.text).join("")}var U2=new Map([["every","The schedule"],["every.n","The interval"],["every.unit","The interval unit"],["every.minute","The minute"],["every.at","The time"],["every.at.hour","The hour"],["every.at.minute","The minute"],["every.on","The weekday"],["every.day","The day of the month"],["every.cron","The cron"],["every.preset","The preset"],["timezone","The timezone"],["match","What it looks for"],["match.subjects","What it looks at"],["match.state","The state"],["match.inactiveFor","The inactive time"],["match.inactiveFor.n","The inactive time"],["match.inactiveFor.unit","The inactive time unit"],["match.labels","The labels"],["match.excludeLabels","The labels to skip"],["match.skipLocked","Skip locked"]]);function m0(e){let t=e.map(String).filter((r)=>!/^\d+$/.test(r)).join(".");return U2.get(t)??null}function W2(e){return/[.?]$/.test(e)?e:`${e}.`}function y0(e){let{workflow:t,step:r,message:n}=e,o=r!==void 0&&(n.startsWith(`${r} `)||n.startsWith(`${r}:`)),s=[t,o?void 0:r].filter(Boolean).join(" > ");if(!s)return n;return o?`${s} > ${n}`:`${s}: ${n}`}function V2(e,t){let r=Array.from({length:t.length+1},(n,o)=>o);for(let n=1;n<=e.length;n++){let o=r[0]??0;r[0]=n;for(let s=1;s<=t.length;s++){let i=r[s]??0;r[s]=Math.min(i+1,(r[s-1]??0)+1,o+(e[n-1]===t[s-1]?0:1)),o=i}}return r[t.length]??0}function h0(e,t){let r=0;for(let n of t)if(n===e[r])r++;return r===e.length}function g0(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Z2(e,t){let r=g0(e),n=null;for(let s of t){let i=g0(s),c=h0(r,i)||h0(i,r)?Math.abs(i.length-r.length)/4:V2(r,i);if(n===null||c<n.score)n={id:s,score:c}}if(!n)return null;let o=Math.max(2,Math.ceil(r.length/3));return n.score<=o?n.id:null}function Jc(e,t,r){let n=Z2(t,r);return n?`${t} is not ${e}. Did you mean ${n}?`:`${t} is not ${e}. Use one of: ${r.join(", ")}`}var w0=K(p(),ne());function yi(e,t,r){let n=w0.safeParse(e??{});if(!n.success)return[`${r} takes an object of settings`];let o=t instanceof vf?Object.keys(t.shape):null,s=o?Object.keys(n.data).filter((a)=>!o.includes(a)):[];if(s.length>0&&o)return s.map((a)=>Jc(`a setting of ${r}`,a,o));let i=t.safeParse(n.data);return i.success?[]:i.error.issues.map((a)=>`${r}: ${$o(a)}`)}var B2=w({kind:z(["trigger","check","gate","action","output"])}),b0=w({kind:z(["trigger","check","gate","action"])}),K2=w({kind:C("output"),port:z(["pass","fail","approve","deny"])}),H2=w({}).loose(),G2=wc((e)=>b0.safeParse(e).success),J2=K(p(),w({kind:C("workflow"),spec:wc((e)=>H2.safeParse(e).success,{error:"each entry must be workflow({ ... })"})}),{error:"the default export must be workflows({ ... })"});function Y2(e){return Object.hasOwn(Yr,e)}function lm(e){return e.kind==="output"}function X2(e){return e.kind==="action"&&e.action==="send-to-moderation"}function Q2(e,t){if(e==="pass")return;return t.kind==="trigger"?void 0:e}function eF(e){switch(e){case"pass":return"fail";case"fail":return"pass";case"approve":return"deny";default:return"approve"}}function tF(e){switch(e.kind){case"trigger":return e.on.includes("schedule.matched")?"schedule":"trigger";case"check":return e.rule.split("@")[0]??"check";case"gate":return e.mode;default:return e.action}}var rF=/^[^\p{Cc}]+$/u;class _0{key;spec;issues=[];ids=new Map;taken=new Set;nodes=[];edges=[];edgeKeys=new Set;built=new Set;triggers=[];constructor(e,t){this.key=e;this.spec=t}issue(e,t){let r=t?this.ids.get(t):void 0;this.issues.push({workflow:this.key,step:r,message:e})}idFor(e){let t=this.ids.get(e);if(t)return t;let r=tF(e),n=r;for(let o=2;this.taken.has(n);o++)n=`${r}-${o}`;return this.ids.set(e,n),this.taken.add(n),n}connect(e,t,r){if(e.kind==="trigger"&&t!=="pass"){this.issue("a trigger has only its event output; put a check or gate between it and this step",r);return}let n=this.visit(e),o=this.idFor(r),s=Q2(t,e),i=`${n}>${o}>${s??"pass"}`;if(this.edgeKeys.has(i))return;this.edgeKeys.add(i);let a=`${n}-${o}`;for(let c=2;this.edges.some((u)=>u.id===a);c++)a=`${n}-${o}-${c}`;this.edges.push(s?{id:a,from:n,to:o,when:s}:{id:a,from:n,to:o})}wireInputs(e,t){for(let r of t){if(!B2.safeParse(r).success){this.issue("an input is not a step or a step output",e);continue}if(lm(r)){if(!K2.safeParse(r).success){this.issue("an input is not a step or a step output",e);continue}this.connect(r.step,r.port,e)}else this.connect(r,"pass",e)}}wireFromTriggers(e){for(let t of this.triggers)this.connect(t,"pass",e)}visit(e){if(!b0.safeParse(e).success)return this.issue("a step was not built with the workflow helpers"),"invalid";let t=this.idFor(e);if(this.built.has(e))return t;switch(this.built.add(e),e.kind){case"trigger":this.buildTrigger(e,t);break;case"check":this.buildCheck(e,t);break;case"gate":this.buildGate(e,t);break;default:this.buildAction(e,t)}return t}buildTrigger(e,t){let r=[];for(let n of e.on){let o=ri.safeParse(n);if(o.success&&(o.data==="schedule.matched"||Po.some((s)=>s===o.data)))r.push(o.data);else this.issue(Jc("an event a workflow can start on",n,Po),e)}if(r.length===0){if(e.on.length===0)this.issue("a trigger needs at least one event",e);return}if(e.schedule!==void 0){let n=vo.safeParse(e.schedule);if(!n.success){for(let o of n.error.issues)this.issue(W2($o(o,m0)),e);return}this.nodes.push({id:t,type:"trigger",kinds:r,schedule:vo.parse(e.schedule)});return}this.nodes.push({id:t,type:"trigger",kinds:r})}buildCheck(e,t){let r=e.rule.startsWith("custom-"),n=e.rule;if(r)n=e.rule.includes("@")?e.rule:`${e.rule}@1`;else{let s=Ge.find((a)=>a.ruleId===e.rule);if(!s){this.issue(Jc("a rule",e.rule,Ge.map((a)=>a.ruleId)),e);return}let i=e.version??s.version;if(n=`${s.ruleId}@${i}`,i===s.version)for(let a of yi(e.config,s.configSchema,s.ruleId))this.issue(a,e)}let o=Ie.safeParse(e.config??{});if(!o.success){this.issue(`${e.rule} settings must be plain JSON`,e);return}if(this.nodes.push({id:t,type:"rule",ref:n,config:o.data}),e.inputs.length===0)this.wireFromTriggers(e);else this.wireInputs(e,e.inputs)}buildGate(e,t){if(e.inputs.length===0)this.issue(`${e.mode} needs at least one input`,e);if(e.mode==="not"&&e.inputs.length>1)this.issue("not takes exactly one input",e);this.nodes.push({id:t,type:"gate",mode:e.mode}),this.wireInputs(e,e.inputs)}buildAction(e,t){let r=e.action;if(!Y2(r)){this.issue(Jc("an action",r,Object.keys(Yr)),e);return}let n=Yr[r];for(let a of yi(e.params,n,r))this.issue(a,e);let o=w0.safeParse(e.params??{}),s=K(p(),Ie).safeParse(o.success?o.data:{}),i={id:t,type:"action",action:r};if(s.success&&Object.keys(s.data).length>0)i.params=s.data;if(this.nodes.push(i),e.inputs.length>0)this.wireInputs(e,e.inputs);if(X2(e)){for(let a of e.approve)this.visit(a),this.connect(e,"approve",a);for(let a of e.deny)this.visit(a),this.connect(e,"deny",a)}}hasIncoming(e){let t=this.ids.get(e);return this.edges.some((r)=>r.to===t)}compile(){let e=this.spec;for(let[i,a]of Object.entries(e.steps??{})){if(!rF.test(i)){this.issue(`${i} is not a usable step id`);continue}if(this.taken.has(i)){this.issue(`two steps share the id ${i}`);continue}this.ids.set(a,i),this.taken.add(i)}let t=e.on===void 0?[]:Array.isArray(e.on)?e.on:[e.on],r=[],n=[];for(let i of t){let a=p().safeParse(i),c=G2.safeParse(i);if(a.success)r.push(a.data);else if(c.success)n.push(c.data)}if(r.length>0)this.triggers.push({kind:"trigger",on:r,inputs:[]});this.triggers.push(...n);for(let i of Object.values(e.steps??{}))if(i.kind==="trigger"&&!this.triggers.includes(i))this.triggers.push(i);if(this.triggers.length===0)this.issue("add `on`, the events or schedule that start it");for(let i of this.triggers)this.visit(i);if(e.check!==void 0){let i=lm(e.check)?{step:e.check.step,port:e.check.port}:{step:e.check,port:"pass"};if(!lm(e.check)&&(i.step.kind==="trigger"||i.step.kind==="action"))this.issue("`check` takes a check, a gate or one of their outputs; a trigger or action has no Passes and Doesn't pass");this.visit(i.step);for(let a of e.pass??[])this.visit(a),this.connect(i.step,i.port,a);for(let a of e.fail??[])this.visit(a),this.connect(i.step,eF(i.port),a)}else if((e.pass??[]).length>0||(e.fail??[]).length>0)this.issue("`pass` and `fail` need a `check`; use `run` for actions with no check");for(let i of e.run??[]){this.visit(i);for(let a of this.triggers)this.connect(a,"pass",i)}let o=Object.values(e.steps??{});for(let i of o)this.visit(i);for(let i of o)if(i.kind==="action"&&!this.hasIncoming(i))this.wireFromTriggers(i);if(this.issues.length>0)return null;let s=pt.safeParse({id:this.key,name:e.name??this.key,version:1,nodes:this.nodes,edges:this.edges});if(!s.success){for(let i of s.error.issues)this.issue($o(i));return null}return s.data}}function dm(e){let t=[],r=[];for(let[n,o]of Object.entries(e)){let s=new _0(n,o.spec),i=s.compile();if(t.push(...s.issues),i&&s.issues.length===0)r.push(i)}return t.length>0?{ok:!1,issues:t,definitions:r}:{ok:!0,definitions:r}}function S0(e){let t=J2.safeParse(e.default);if(!t.success)return{ok:!1,issues:t.error.issues.map((r)=>({workflow:String(r.path[0]??""),message:r.message})),definitions:[]};return dm(t.data)}function nF(e,t){let r=new Map(e.nodes.map((i)=>[i.id,i])),n=new Set([t]),o=[t],s=[];for(let i=o.shift();i!==void 0;i=o.shift())for(let a of e.edges){if(a.from!==i||n.has(a.to))continue;n.add(a.to),o.push(a.to);let c=r.get(a.to);if(c?.type==="action")s.push(ax(c.action,c.params??{}))}return s}function oF(e){return e.nodes.flatMap((t)=>{if(t.type!=="trigger"||!t.schedule?.every)return[];let r=Gx(t.schedule.timezone),n=nF(e,t.id),o=f0(t.schedule);return[{nodeId:t.id,summary:gi({every:t.schedule.every,timezone:t.schedule.timezone}),timezone:r.zone,defaulted:r.defaulted,description:n.length>0?`${o} Then Tripwire ${Nc(n)}.`:`${o} No action runs after it.`}]})}function v0(e,t){return e.map((r)=>{let n=Wx(r,t?{catalog:t}:{});return{id:r.id,name:r.name,valid:!n.some((o)=>o.severity==="error"),issues:n,schedules:oF(r)}})}var pm=new Set(["url","signingSecret","urlSet","signingSecretSet"]);function sF(e){return e.type==="action"&&(e.action==="webhook"||e.action==="discord")}function k0(e){return{...e,nodes:e.nodes.map((t)=>{if(!sF(t))return t;let r={...t.params??{}};for(let n of["url","signingSecret"]){let o=r[n];if(o!==void 0&&o!==""&&o!==null)r[n]="",r[`${n}Set`]=!0}return{...t,params:r}})}}var Fde=v(Ie),Ude=K(p(),Ie);var Wde=p(),Vde=K(p(),Ie);var Zde=w({}).strict();function iF(e){let t=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),r="";for(let n of t){let o=r?`${r}-${n}`:n;if(o.length>48)break;r=o}return r||t[0]?.slice(0,48)||"workflow"}function Un(e,t=new Map){let r=new Set,n=new Map;for(let o of e){let s=t.get(o.id);if(s&&!r.has(s))r.add(s),n.set(o.id,s)}for(let o of e){if(n.has(o.id))continue;let s=iF(o.name||o.id),i=s;for(let a=2;r.has(i);a++)i=`${s}-${a}`;r.add(i),n.set(o.id,i)}return n}function Yc(e,t,r={}){let n=new Set(t.map((c)=>c.id)),o=new Set,s=new Map;for(let c of e){let u=r[c.id];if(u&&!o.has(u))o.add(u),s.set(c.id,{key:c.id,id:u,by:"mapping"})}for(let c of e)if(!s.has(c.id)&&n.has(c.id)&&!o.has(c.id))o.add(c.id),s.set(c.id,{key:c.id,id:c.id,by:"id"});let i=new Map([...Un(t)].map(([c,u])=>[u,c]));for(let c of e){let u=i.get(c.id);if(!s.has(c.id)&&u&&!o.has(u))o.add(u),s.set(c.id,{key:c.id,id:u,by:"name"})}let a=e.map((c)=>s.get(c.id)??{key:c.id,id:c.id,by:"new"});return{definitions:e.map((c,u)=>({...c,id:a[u]?.id??c.id})),matches:a}}var x0=new Set(["cycle","gate-input","not-input","trigger-input","wrong-output","no-outputs","missing-step","duplicate-id"]);function $0(e){return aF(e).issues.filter((t)=>x0.has(t.rule))}function aF(e,t=Ge){let r=Yf(e,{catalog:t,stage:"enable"}),n=r.results.filter((o)=>o.severity==="error");if(!r.definition)return{runnable:!1,canTurnOn:!1,issues:n};return{runnable:!n.some((o)=>x0.has(o.rule)),canTurnOn:n.length===0,issues:n}}var Xc={on:"Live",off:"Off","cant-run":"Can't run","needs-fixes":"Needs fixes","cant-turn-on":"Can't turn on"};function E0(e){if(e.enabled){if(!e.runnable)return"cant-run";return e.canTurnOn?"on":"needs-fixes"}return e.canTurnOn?"off":"cant-turn-on"}var wi=$f(()=>w({type:p().optional(),const:ne().optional(),enum:v(ne()).optional(),items:wi.optional(),properties:K(p(),wi).optional(),required:v(p()).optional(),anyOf:v(wi).optional(),oneOf:v(wi).optional()})),eu=K(p(),Ie),cF=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Wn(e){return cF.test(e)?e:JSON.stringify(e)}function Qc(e,t){let r=e.anyOf??e.oneOf;if(r)return r.map((n)=>Qc(n,t)).join(" | ");if(e.const!==void 0)return JSON.stringify(e.const);if(e.enum)return e.enum.map((n)=>JSON.stringify(n)).join(" | ");switch(e.type){case"string":return"string";case"integer":case"number":return"number";case"boolean":return"boolean";case"array":return`readonly (${e.items?Qc(e.items,t):"unknown"})[]`;case"object":{let n=Object.entries(e.properties??{});if(n.length===0)return"Record<never, never>";let o=`${t} `;return`{
239
+ ${_x}`;var RM=w({total:O(),weeks:v(v(O().min(0).max(4)))}),CM=w({accountAgeDays:O(),location:p().nullable(),emailVerified:N(),twoFactor:N()}),zM=w({mergedPrs:O(),openPrs:O(),comments:O(),hiddenByAutomod:O()}),NM=z(["automod-hidden","pull-opened","comment-removed","issue-comment","flagged","account-created"]),LM=w({id:p(),kind:NM,title:p(),detail:p(),at:pe.datetime()}),Jce=w({handle:p(),initial:p(),joinedDaysAgo:O(),publicRepos:O(),followers:O(),watchlisted:N(),contributions:RM,details:CM,repoStats:zM,activity:v(LM)});var jM=["under","over","atLeast","atMost","between","equals","not","oneOf","noneOf","has","startsWith","endsWith","containsAny","noneMatch","anyIn"],vx=p().regex(/^\d+(h|d)$/,"window must be a count and a unit, like 24h or 7d"),DM=Ct("kind",[w({kind:C("last"),window:vx}),w({kind:C("lastCount"),window:vx}),w({kind:C("trimmedLength")}),w({kind:C("nonLatinRatio")}),w({kind:C("letterCount")})]),MM=ee([O(),p(),N()]),qM=ee([MM,v(ee([O(),p()]))]),kx=w({kind:z(jM),args:v(qM)}),FM=ee([kx.refine((e)=>e.kind!=="not",{message:"not takes an inner comparison"}),w({kind:C("not"),args:mj([kx])})]),UM=w({when:w({id:p().min(1),transform:DM.optional()}),comparison:FM});var tue=w({id:p().regex(/^custom-[a-z0-9][a-z0-9-]*$/,"id must be custom-<kebab-slug>"),name:p().min(1).max(80),enabled:N(),definition:UM}),rue=w({});var iue=z(["prod","eval","dev"]),aue=z(["railway","openrouter","planetscale"]);var due=z(["pending","granted-admin","denied","not-admin","not-for-tripwire","token-expired","failed"]);var ar={installationId:p(),forge:ti},pue=Ct("status",[w({...ar,status:C("claimable"),account:p().nullable(),repoCount:O(),stateOrg:w({id:p(),slug:p(),name:p()}).nullable()}),w({...ar,status:C("claimed-by-your-org"),orgSlug:p()}),w({...ar,status:C("processing")}),w({...ar,status:C("recovering")}),w({...ar,status:C("unreadable")}),w({...ar,status:C("missing"),recoverable:N()}),w({...ar,status:C("not-for-tripwire")}),w({...ar,status:C("not-yours"),recoverable:N()}),w({...ar,status:C("token-expired")}),w({...ar,status:C("not-admin"),account:p().nullable()})]);var WM=/^(Too (small|big)|Invalid (input|option|string|number|key|element|value)|Unrecognized key)/,VM=new Map([["number","a number"],["int","a whole number"],["string","text"],["boolean","true or false"],["array","a list"],["object","a group of settings"]]);function jc(e,t){return`${e} ${t}${e===1?"":"s"}`}function ZM(e){return e.map(String).join(".")}function BM(e,t){switch(e.code){case"too_small":{if(e.origin==="array"||e.origin==="set")return`${t} needs at least ${jc(e.minimum,"item")}`;if(e.origin==="string")return e.minimum===1?`${t} cannot be empty`:`${t} needs at least ${jc(e.minimum,"character")}`;return e.inclusive===!1?`${t} must be more than ${e.minimum}`:`${t} must be ${e.minimum} or more`}case"too_big":{if(e.origin==="array"||e.origin==="set")return`${t} can have at most ${jc(e.maximum,"item")}`;if(e.origin==="string")return`${t} can be at most ${jc(e.maximum,"character")}`;return e.inclusive===!1?`${t} must be less than ${e.maximum}`:`${t} must be ${e.maximum} or less`}case"invalid_type":return/received undefined/.test(e.message)?`${t} is missing`:`${t} must be ${VM.get(e.expected)??e.expected}`;case"invalid_value":return e.values.length===1?`${t} must be ${String(e.values[0])}`:`${t} must be one of ${e.values.map(String).join(", ")}`;case"invalid_format":return`${t} is not a valid ${e.format}`;case"invalid_union":return`${t} is not in a form Tripwire can read`;case"unrecognized_keys":return`${e.keys.join(", ")} ${e.keys.length===1?"is not a setting":"are not settings"}`;default:return null}}function $o(e,t){let r=t?.(e.path)??null,n=r??ZM(e.path);if(WM.test(e.message)){let o=BM(e,n||"This setting");if(o)return o}if(r)return`${r} is not valid: ${e.message}`;return n?`${n}: ${e.message}`:e.message}var Ff=z(["admin","member"]),KM=new Set(["activity","analytics","api","dev","dither-kit","invite","login","moderation","oauth","onboarding","queue","rules","runs","workflows","admin","app","auth","blog","brand","changelog","dashboard","docs","help","home","legal","new","pricing","privacy","settings","signup","status","support","terms","www","tripwire","boring","boringsoftware"]),HM=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,gue=p().min(3,"slug must be at least 3 characters").max(32,"slug must be at most 32 characters").regex(HM,"lowercase letters, numbers, and hyphens only, with no leading or trailing hyphen").refine((e)=>!KM.has(e),{message:"this name is reserved"});var yue=z(["User","Organization"]),wue=w({role:Ff,maxUses:O().int().min(1).max(1000).default(1),expiresInDays:O().int().min(1).max(90).default(7)});var Uf=["moderation","activity","rules","workflows","responses","analytics","connections","members","settings"],Wf=z(Uf),xx=["read","manage"],cr=z(xx),vue=Ij([Wf,":",cr]),kue=Uf.flatMap((e)=>xx.map((t)=>`${e}:${t}`));var $x=w({moderation:cr.optional(),activity:cr.optional(),rules:cr.optional(),workflows:cr.optional(),responses:cr.optional(),analytics:cr.optional(),connections:cr.optional(),members:C("read").optional(),settings:C("read").optional()}).strict().refine((e)=>Object.values(e).some(Boolean),{message:"pick at least one area"}),GM=kf(Wf,v(cr).min(1));var xue=kf(Wf,cr);function JM(e){let t={};for(let r of Uf){let n=e[r];if(n?.includes("manage"))t[r]="manage";else if(n?.includes("read"))t[r]="read"}return t}var YM=new Set(["admin","member","owner"]),Vf=p().trim().toLowerCase().min(2,"use at least 2 characters").max(32,"use at most 32 characters").regex(/^[a-z][a-z0-9-]*[a-z0-9]$/,"use lowercase letters, numbers and hyphens, starting with a letter").refine((e)=>!YM.has(e),{message:"this name is taken by a built-in role"}),$ue=w({name:Vf,scopes:$x}),Ex=GM.refine((e)=>$x.safeParse(JM(e)).success,{message:"this role grants access a custom role cannot hold"}),Eue=w({organizationId:p().min(1),role:Vf,permission:Ex}).strict(),Tue=w({organizationId:p().min(1),roleName:p().min(1).optional(),roleId:p().min(1).optional(),data:w({permission:Ex}).strict()}).strict(),Oue=ee([Ff,Vf]);var XM=z(["public","private"]),Px=w({name:p(),className:p()}),QM=w({name:p(),description:p(),visibility:XM,openIssues:O(),openPulls:O(),flagged:O(),updatedAt:pe.datetime()}),Tx=w({kind:Ar,number:O(),title:p(),status:ai,author:p(),openedAt:pe.datetime(),comments:O(),flagged:O(),labels:v(Px)}),eq=w({state:z(["Hidden","Removed"]),rule:p()}),tq=w({id:p(),author:p(),body:p(),createdAt:pe.datetime(),flag:eq.optional()}),Ox=w({kind:Ar,number:O(),title:p(),status:ai,author:p(),openedAt:pe.datetime(),labels:v(Px),body:p(),comments:v(tq),branch:p().optional(),baseBranch:p().optional()}),Rue=w({repos:v(QM),issues:v(Tx),pulls:v(Tx),issueDetails:K(p(),Ox),pullDetails:K(p(),Ox)});var Nue=new Set(tx.nodes.filter((e)=>e.type==="rule").map((e)=>e.ref));var rq=z(["removed","hidden","banned","dismissed","required-review"]),nq=z(["actioned","dismissed","appealed","reversed"]),oq=z(["automod","report","manual"]),sq=w({kind:oq,detail:p(),reporter:ko.optional()}),iq=w({at:pe.datetime(),label:p(),by:p()}),aq=w({id:p(),type:xo,repoFullName:p(),number:O(),content:p(),threadKind:Ar,commentId:p()}),que=w({id:p(),label:p(),reason:Mf,action:rq,status:nq,author:ko,moderator:ko.nullable(),caughtBy:sq,at:pe.datetime(),snapshot:N(),items:v(aq),history:v(iq)}),Fue=z(["what","reason","caught"]),Eo=z(["pass","block","needs_review"]);var Ix=z(["queued","running","paused","completed","failed","closed"]),Zue=Ix.options,Bue=z(["checking","did-not-finish","pass","block","needs_review","closed-before-review","ran"]),Dc={checking:"Checking","did-not-finish":"Did not finish",pass:"Passed",block:"Blocked",needs_review:"Waiting for human review","closed-before-review":"Closed before review",ran:"Ran"},Kue=Ix.nullable().catch(null),Hue=Eo.nullable().catch(null);var Ax=z(["event","pass","fail","approve","deny"]),Yue=z(["event","result","decision"]),Xue=z(["identity","not"]),ft={event:{type:"event",fn:"identity",label:"Event"},pass:{type:"result",fn:"identity",label:"Passes"},fail:{type:"result",fn:"not",label:"Doesn't pass"},approve:{type:"decision",fn:"identity",label:"Approved"},deny:{type:"decision",fn:"not",label:"Blocked"}},cq={identity:{event:"event",result:"result",decision:"decision"},not:{result:"result",decision:"decision"}};function uq(e,t){return cq[e][t]??null}function lq(e){let t=ft[e];return uq(t.fn,t.type)}var ui={event:ft.event.label,pass:ft.pass.label,fail:ft.fail.label,approve:ft.approve.label,deny:ft.deny.label},Zf={event:ft.event.type,pass:ft.pass.type,fail:ft.fail.type,approve:ft.approve.type,deny:ft.deny.type};function To(e){let t=ft[e];if(t.type==="event")return"neutral";return t.fn==="not"?"fail":"ok"}var Que={event:To("event"),pass:To("pass"),fail:To("fail"),approve:To("approve"),deny:To("deny")},dq={trigger:[],rule:["event","result","decision"],gate:["result"],action:["event","result","decision"]},pq={"send-to-moderation":["approve","deny"]},fq=Ax.options;function Rx(e){return dq[e]}function Mc(e,t){let r=lq(t);return r!==null&&Rx(e).includes(r)}function ci(e){return fq.filter((t)=>Mc(e,t))}var ele={trigger:{accepts:ci("trigger")},rule:{accepts:ci("rule")},gate:{accepts:ci("gate")},action:{accepts:ci("action")}};function li(e){switch(e.type){case"trigger":return["event"];case"rule":case"gate":return["pass","fail"];case"action":return e.action==="send-to-moderation"?pq[e.action]:[];default:return[]}}function Mn(e,t){if(e.type==="trigger"&&(t===void 0||t==="pass"))return"event";return t??"pass"}var jx={schema:{severity:"error",stage:"structure"},"no-trigger-events":{severity:"error",stage:"structure"},"duplicate-id":{severity:"error",stage:"structure"},"missing-step":{severity:"error",stage:"structure"},"no-trigger":{severity:"error",stage:"structure"},"trigger-input":{severity:"error",stage:"structure"},"gate-input":{severity:"error",stage:"structure"},"no-outputs":{severity:"error",stage:"structure"},"wrong-output":{severity:"error",stage:"structure"},"not-input":{severity:"error",stage:"structure"},"orphan-step":{severity:"error",stage:"structure"},cycle:{severity:"error",stage:"structure"},"no-action":{severity:"error",stage:"enable"},"schedule-config":{severity:"error",stage:"enable"},"action-params":{severity:"error",stage:"enable"},"schedule-mixed":{severity:"error",stage:"enable"},"schedule-needs-change-request":{severity:"error",stage:"enable"},"unknown-rule":{severity:"error",stage:"enable"},"rule-unavailable":{severity:"warning",stage:"enable"},"rule-config":{severity:"error",stage:"enable"},"removed-step":{severity:"error",stage:"enable"},"review-targets":{severity:"error",stage:"enable"},"stale-reviewer":{severity:"warning",stage:"enable"},"dead-end":{severity:"warning",stage:"enable"}},qn=(e)=>({label:"Remove connection",edit:{type:"remove-edge",edgeId:e}}),di=(e)=>({label:"Delete",edit:{type:"delete-node",nodeId:e}});function Kf(e){let t=e.trim();return/[.?]$/.test(t)?t:`${t}.`}function mq(e){let t=e.trim();return Kf(`${t.charAt(0).toUpperCase()}${t.slice(1)}`)}function Dx(e){if(e.length<=1)return e.join("");return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function qc(e,t=Ge){switch(e.type){case"trigger":return"Trigger";case"rule":{let[r]=e.ref.split("@");return Ge.find((n)=>n.ruleId===r)?.name??t.find((n)=>n.ruleId===r)?.name??e.ref}case"gate":return nx.find((r)=>r.mode===e.mode)?.name??e.mode;case"action":return ox.find((r)=>r.action===e.action)?.name??`${e.action.charAt(0).toUpperCase()}${e.action.slice(1)}`;default:return"Step"}}function Mx(e,t,r,n){if(Mc(e.type,t))return null;if(e.type==="trigger")return{rule:"trigger-input",message:n?`${r} takes no inputs, but ${n} connects to it`:`${r} takes no inputs`};let o=n?` from ${n}`:"",s=Zf[t];return{rule:"gate-input",message:`${r} takes rule results, not ${s==="event"?"events":"decisions"}${o}`}}function qx(e,t,r){let n=li(e);if(n.length===0)return{rule:"no-outputs",message:`${r} has no outputs`};if(!n.includes(t))return{rule:"wrong-output",message:`${r} has no ${ui[t]} output`};return null}function hq(e){return Zf[e]==="event"?"It takes rule results, not events.":"It takes rule results, not decisions."}function Hf(e,t=Ge){let r=new Map,n=new Map;for(let o of e.nodes){let s=qc(o,t),i=(r.get(s)??0)+1;r.set(s,i),n.set(o.id,i===1?s:`${s} ${i}`)}return n}function gq(e,t){if(t==="event")return[{label:"Insert a rule",intent:{type:"insert-step",edgeId:e.id}},qn(e.id)];return[qn(e.id)]}function yq(e){let t=[],r=new Set;for(let o of e.def.nodes){if(r.has(o.id))t.push({nodeId:o.id,message:"Another step uses the same id. Rename one.",fixes:[]});r.add(o.id)}let n=new Set;for(let o of e.def.edges){if(n.has(o.id))t.push({edgeId:o.id,message:"Another connection uses the same id. Rename one.",fixes:[]});n.add(o.id)}return t}function wq(e){return e.def.edges.flatMap((t)=>[t.from,t.to].filter((r)=>!e.byId.has(r)).map(()=>({edgeId:t.id,message:"A connection points to a step that is gone.",fixes:[qn(t.id)]})))}function bq(e){return e.def.nodes.some((t)=>t.type==="trigger")?[]:[{message:"Add a trigger to start it.",fixes:[{label:"Add trigger",edit:{type:"add-trigger"}}]}]}function Fx(e,t){let r=e.byId.get(t.from),n=e.byId.get(t.to);return r&&n?{source:r,target:n}:null}function Cx(e){return(t)=>t.def.edges.flatMap((r)=>{let n=Fx(t,r);if(!n||qx(n.source,Mn(n.source,r.when),""))return[];let o=Mn(n.source,r.when);if(Mx(n.target,o,t.name(n.target),t.name(n.source))?.rule!==e)return[];return[{edgeId:r.id,nodeId:n.target.id,message:e==="gate-input"?hq(o):"It takes no inputs.",fixes:e==="gate-input"?gq(r,o):[qn(r.id)]}]})}function zx(e){return(t)=>t.def.edges.flatMap((r)=>{let n=Fx(t,r);if(!n)return[];if(qx(n.source,Mn(n.source,r.when),t.name(n.source))?.rule!==e)return[];let s=li(n.source).includes("pass");return[{edgeId:r.id,nodeId:n.source.id,message:e==="no-outputs"?"It has no outputs.":`It has no ${ui[Mn(n.source,r.when)]} output.`,fixes:e==="wrong-output"&&s?[{label:"Use Passes",edit:{type:"use-passes",edgeId:r.id}},qn(r.id)]:[qn(r.id)]}]})}function _q(e){return e.def.nodes.flatMap((t)=>{let r=e.incoming.get(t.id)??[],[n]=r;if(t.type!=="gate"||t.mode!=="not"||r.length<2||!n)return[];return[{nodeId:t.id,message:"It takes one input. Keep one.",fixes:[{label:"Keep first input",edit:{type:"keep-one-input",nodeId:t.id,edgeId:n.id}}]}]})}function Sq(e){let t=e.def.nodes.filter((n)=>n.type==="trigger"),[r]=t;return e.def.nodes.flatMap((n)=>{if(n.type==="trigger"||(e.incoming.get(n.id)??[]).length>0)return[];let o=t.length===1&&r&&Mc(n.type,"event")?[{label:"Connect",edit:{type:"connect",from:r.id,to:n.id}}]:[];return[{nodeId:n.id,message:"Nothing runs it. Connect it or delete it.",fixes:[...o,di(n.id)]}]})}function vq(e){let t=new Map,r=[],n=[],o=(s)=>{t.set(s,"visiting"),r.push(s);for(let i of e.outgoing.get(s)??[]){let a=t.get(i.to);if(a==="visiting"){let u=r.slice(r.indexOf(i.to)).flatMap((l)=>{let d=e.byId.get(l);return d?[e.name(d)]:[]});n.push({edgeId:i.id,nodeId:i.to,message:u.length===1?"It connects to itself.":`It loops back through ${Dx(u.slice(1))}.`,fixes:[qn(i.id)]})}else if(a===void 0&&e.byId.has(i.to))o(i.to)}r.pop(),t.set(s,"done")};for(let s of e.def.nodes)if(!t.has(s.id))o(s.id);return n}function kq(e){return Ux(e,e.def.nodes.filter((t)=>t.type==="trigger").map((t)=>t.id))}function xq(e){let t=kq(e),r=e.def.nodes.find((n)=>n.type==="trigger");return e.def.nodes.some((n)=>n.type==="action"&&t.has(n.id))?[]:[{message:"Add an action after the trigger.",fixes:r?[{label:"Add action",intent:{type:"add-next-step",nodeId:r.id,port:"event"}}]:[]}]}var $q={every:"how often it runs",subjects:"what it looks at",state:"a status",inactiveFor:"how long without activity"};function Eq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="trigger"||!zc(t))return[];let r=Qk(t.schedule);if(r.length===0)return[];let[n]=r;return[{nodeId:t.id,message:`Set ${Dx(r.map((o)=>$q[o]))}.`,fixes:[{label:"Set schedule",intent:{type:"focus-field",nodeId:t.id,field:n??"schedule"}}]}]})}var Tq={"remove-label":{schema:Gr,field:"labels",message:"Pick the labels to remove.",label:"Pick labels"},"post-comment":{schema:Ic,field:"message",message:"Write the message.",label:"Write message"}},Oq=new Set(["discord.com","discordapp.com","ptb.discord.com","canary.discord.com"]),Pq=w({url:p().optional(),urlSet:N().optional()});function Iq(e,t){let r=Pq.safeParse(t??{});if(!r.success)return!1;let{url:n,urlSet:o}=r.data;if(n===void 0||n==="")return o===!0;let s=Js({protocol:/^https$/}).safeParse(n);if(!s.success)return!1;if(e==="webhook")return!0;let i=new URL(s.data);return Oq.has(i.hostname)&&i.pathname.startsWith("/api/webhooks/")}var Aq={webhook:{message:"Set the webhook URL. It must use HTTPS.",label:"Set URL"},discord:{message:"Set the Discord webhook URL.",label:"Set URL"}};function Bf(e,t,r,n){return{nodeId:e,message:t,fixes:[{label:r,intent:{type:"focus-field",nodeId:e,field:n}}]}}function Rq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="action")return[];if(t.action==="webhook"||t.action==="discord"){let o=Aq[t.action];return Iq(t.action,t.params)?[]:[Bf(t.id,o.message,o.label,"url")]}if(t.action==="label")return Gr.safeParse(t.params??{}).success?[]:[Bf(t.id,"Pick the labels to add.","Pick labels","labels")];let r=t.action==="remove-label"||t.action==="post-comment"?Tq[t.action]:null,n=r?.schema.safeParse(t.params??{});if(!(r&&n)||n.success)return[];return[Bf(t.id,r.message,r.label,r.field)]})}function Cq(e){return e.def.nodes.flatMap((t)=>t.type==="trigger"&&zc(t)&&t.kinds.length>1?[{nodeId:t.id,message:"It cannot run on a schedule and on events. Pick one.",fixes:[{label:"Pick one",intent:{type:"focus-field",nodeId:t.id,field:"kinds"}}]}]:[])}var zq=new Set(["block","send-to-moderation"]);function Ux(e,t){let r=new Set,n=[...t];for(let o=n.pop();o!==void 0;o=n.pop()){if(r.has(o))continue;r.add(o),n.push(...(e.outgoing.get(o)??[]).map((s)=>s.to))}return r}function Nq(e){let t=Ux(e,e.def.nodes.filter(zc).map((r)=>r.id));return e.def.nodes.flatMap((r)=>r.type==="action"&&t.has(r.id)&&zq.has(r.action)?[{nodeId:r.id,message:"It needs a change request event. A schedule cannot run it.",fixes:[di(r.id)]}]:[])}function Gf(e,t){let[r,n]=t.split("@");return e.catalog.find((o)=>o.ruleId===r&&o.version===Number(n))}function Lq(e){return e.def.nodes.flatMap((t)=>t.type==="rule"&&!Gf(e,t.ref)?[{nodeId:t.id,message:"This rule is not in this repo.",fixes:[di(t.id)]}]:[])}function jq(e){return e.def.nodes.flatMap((t)=>{let r=t.type==="rule"?Gf(e,t.ref)?.unavailable:null;return r?[{nodeId:t.id,message:r,fixes:[]}]:[]})}function Dq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="rule")return[];let r=Gf(e,t.ref),n=r?.configSchema.safeParse(t.config);if(!(r&&n)||n.success)return[];let o=n.error.issues[0],s=o?.path[0];return[{nodeId:t.id,message:o?`Fix this setting: ${Kf($o(o))}`:"A setting is not valid.",fixes:s===void 0?[]:[{label:"Edit setting",intent:{type:"focus-field",nodeId:t.id,field:String(s)}}]}]})}var Mq={comment:"Customize sets the verdict comment now"};function qq(e){return e.def.nodes.flatMap((t)=>t.type==="action"&&Bk(t.action)?[{nodeId:t.id,message:`This step was removed. ${mq(Mq[t.action])}`,fixes:[di(t.id)]}]:[])}function Fq(e){return e.def.nodes.flatMap((t)=>{if(t.type!=="action"||t.action!=="request-review")return[];let r=Hk.safeParse(t.params??{});if(r.success)return[];let n=r.error.issues[0],o=n?.code==="custom"&&n.path.length===0&&n.message.startsWith("add"),s=n?.path[0]==="teamReviewers"?"teamReviewers":"reviewers";return[{nodeId:t.id,message:o?"Pick people or teams to ask.":n?.message?`Fix the reviewers: ${Kf(n.message)}`:"A reviewer is not valid.",fixes:[{label:o?"Add reviewers":"Edit reviewers",intent:{type:"focus-field",nodeId:t.id,field:s}}]}]})}function Uq(e){let t=e.reviewers;if(!t)return[];return e.def.nodes.flatMap((r)=>{if(r.type!=="action"||r.action!=="request-review")return[];let n=oi.safeParse(r.params??{});if(!n.success)return[];return n.data.reviewers.filter((o)=>!t.some((s)=>Kk(s,o))).map((o)=>({nodeId:r.id,message:`Remove ${o.login}. They can no longer review this repo.`,fixes:[{label:"Remove",edit:{type:"remove-reviewer",nodeId:r.id,reviewer:o}}]}))})}function Wq(e){return e.def.nodes.flatMap((t)=>{let[r]=li(t);if(t.type==="action"||!r||(e.outgoing.get(t.id)??[]).length>0||t.type!=="trigger"&&(e.incoming.get(t.id)??[]).length===0)return[];return[{nodeId:t.id,message:"Nothing runs after it.",fixes:[{label:"Add step",intent:{type:"add-next-step",nodeId:t.id,port:r}},di(t.id)]}]})}var Vq=[{rule:"duplicate-id",check:yq},{rule:"missing-step",check:wq},{rule:"no-trigger",check:bq},{rule:"trigger-input",check:Cx("trigger-input")},{rule:"gate-input",check:Cx("gate-input")},{rule:"no-outputs",check:zx("no-outputs")},{rule:"wrong-output",check:zx("wrong-output")},{rule:"not-input",check:_q},{rule:"orphan-step",check:Sq},{rule:"cycle",check:vq},{rule:"no-action",check:xq},{rule:"schedule-config",check:Eq},{rule:"action-params",check:Rq},{rule:"schedule-mixed",check:Cq},{rule:"schedule-needs-change-request",check:Nq},{rule:"unknown-rule",check:Lq},{rule:"rule-unavailable",check:jq},{rule:"rule-config",check:Dq},{rule:"removed-step",check:qq},{rule:"review-targets",check:Fq},{rule:"stale-reviewer",check:Uq},{rule:"dead-end",check:Wq}];function Nx(e,t){let r=new Map;for(let n of e)r.set(n[t],[...r.get(n[t])??[],n]);return r}function Jf(e,t,r=new Map){return{rule:e,severity:jx[e].severity,step:t.nodeId?r.get(t.nodeId)??"Step":"Workflow",...t}}function Lx(e,t,r,n){let o=Hf(e,t),s={def:e,byId:new Map(e.nodes.map((c)=>[c.id,c])),incoming:Nx(e.edges,"to"),outgoing:Nx(e.edges,"from"),name:(c)=>o.get(c.id)??qc(c,t),catalog:t,reviewers:n},i=Vq.flatMap(({rule:c,check:u})=>r==="structure"&&jx[c].stage!=="structure"?[]:u(s).map((l)=>Jf(c,l,o)));return i.some((c)=>c.rule==="no-action")?i.filter((c)=>c.rule!=="dead-end"||s.byId.get(c.nodeId??"")?.type!=="trigger"):i}var Zq=w({nodes:v(de({id:p().catch(""),type:p().catch(""),kinds:v(p()).optional().catch(void 0)}))});function Bq(e,t){let r=new Map,n=new Map;for(let o of e){let s=Df.safeParse(o),i=s.success?qc(s.data,t):o.type?`${o.type.charAt(0).toUpperCase()}${o.type.slice(1)}`:"Step",a=(r.get(i)??0)+1;r.set(i,a),n.set(o.id,a===1?i:`${i} ${a}`)}return n}function Kq(e,t,r){return e.issues.map((n)=>{let[o,s]=n.path,i=o==="nodes"&&Number.isInteger(s)?t[Number(s)]:void 0;return Jf("schema",{nodeId:i||void 0,message:"A setting is not valid.",fixes:[]},r)})}function Yf(e,t={}){let r=t.catalog??Ge,n=t.stage??"enable",o=(f)=>[...f].sort((m,h)=>Number(m.severity==="warning")-Number(h.severity==="warning")),s=pt.safeParse(e);if(s.success)return{definition:s.data,results:o(Lx(s.data,r,n,t.reviewers))};let i=Zq.safeParse(e),a=i.success?i.data.nodes:[],c=a.filter((f)=>f.type==="trigger"&&f.kinds?.length===0),u=pt.safeParse({...e,nodes:a.map((f)=>c.includes(f)?{...f,kinds:["push"]}:f)});if(c.length===0||!u.success)return{definition:null,results:Kq(s.error,a.map((f)=>f.id),Bq(a,r))};let l=Hf(u.data,r),d=c.map((f)=>Jf("no-trigger-events",{nodeId:f.id,message:"Pick when it runs.",fixes:[{label:"Pick events",intent:{type:"focus-field",nodeId:f.id,field:"kinds"}}]},l));return{definition:null,results:o([...d,...Lx(u.data,r,n,t.reviewers)])}}function Wx(e,t={}){return Yf(e,t).results}var Hq={pass:Dc.pass,block:Dc.block,needs_review:Dc.needs_review},Gq=Eo.nullable().catch(null);function Vx(e){let t=Gq.parse(e??null);return t?Hq[t]:null}var gle=v(pt).catch([]),yle=w({workflows:v(w({id:p(),name:p()})),issues:v(w({workflowId:p(),messages:v(p())})).optional()}).catch({workflows:[]}),wle=w({decision:z(["approve","deny"])}).nullable().catch(null);var ble=w({pausedNodeId:p()}).nullable().catch(null);var Qf=p().min(1).max(100).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/),Xf=z(["default","on","off"]),kle=z(["pending","synced","failed"]),xle=z(["default","rule","group","rollout","unknown"]);var $le=de({type:z(["user_id","email","property"]),operator:z(["equals","contains","starts_with","ends_with","in","not_in","exists","not_exists"]),field:p().optional(),value:p().optional(),values:v(p()).optional(),enabled:N(),batch:N(),batchValues:v(p()).optional()}),Jq=de({id:p(),key:p(),name:p().nullish(),description:p().nullish(),status:z(["active","inactive","archived"]).optional(),defaultValue:N().optional(),rules:v(Ie).nullish()}),Ele=v(Jq),Tle=de({field:p()});var Ole=w({flagKey:Qf,from:Xf,to:Xf}),Ple=z(["access.approve","access.decline","flag.override","flag.sync_retry","account.timezone","account.rerun_cooldown","account.platform_admin","session.revoke","session.revoke_all","agent.revoke","user.ban","user.unban","user.delete","impersonation.start","impersonation.stop","org.member_role"]),Ile=K(p(),ee([p(),O(),N(),wo()])),Gt=p().min(1).max(200),Ale=w({userId:Gt}),Rle=w({userId:Gt,flagKey:Qf,choice:Xf}),Cle=w({userId:Gt,flagKey:Qf}),zle=w({userIds:v(Gt).min(1).max(100),decision:z(["approve","reject"])}),Nle=w({userId:Gt,timezone:Rc.nullable()}),Lle=w({userId:Gt,exempt:N()}),jle=w({userId:Gt,isPlatformAdmin:N(),confirm:p().min(1).max(200)}),Dle=w({userId:Gt,sessionId:p().min(1).max(200)}),Mle=w({userId:Gt,clientId:p().min(1).max(200)}),Yq=500,qle=w({userId:Gt,reason:p().trim().min(1).max(Yq),endsAt:pe.date().nullable()}),Fle=w({userId:Gt,confirm:p().min(1).max(200)}),Xq=p().min(1).max(200).regex(/^[\w-]+$/),Ule=w({anonId:Xq}),tt=ee([p(),O()]).transform(String).nullish().catch(null),Fc=ee([O(),p().regex(/^-?\d+(\.\d+)?$/)]).transform(Number).nullish().catch(null),Wle=w({first_visit:tt,last_visit:tt,total_sessions:Fc,total_pageviews:Fc,country:tt,country_name:tt,device_type:tt,browser_name:tt,os_name:tt}),Vle=w({session_id:tt,session_start:tt,first_visit:tt,duration:Fc,page_views:Fc,path:tt,entry_page:tt,country:tt,country_name:tt,browser_name:tt,device_type:tt}),Zle=w({data:v(w({parameter:p().optional(),data:v(Ie).optional()})).optional()}),Ble=de({message:p().optional(),error:p().optional(),json:de({message:p().optional()}).optional()});var Qq=w({ruleId:p(),summary:p()}),Jle=w({version:C(1),verdict:Eo,org:p(),repo:p(),changeRequest:w({number:O().int(),title:p(),author:p()}),firedRules:v(Qq),runUrl:p(),timestamp:p()});var Yle=w({content:p(),embeds:v(w({title:p(),url:p(),description:p(),color:O().int()}))});function Oo(e,t){return{kind:"output",step:e,port:t}}function tm(e,t,r,n){let o={kind:"check",rule:e,config:t??{},version:r?.version,inputs:n,get passes(){return Oo(o,"pass")},get fails(){return Oo(o,"fail")},after:(...s)=>tm(e,t,r,s)};return o}function em(e,t){let r={kind:"gate",mode:e,inputs:t,get passes(){return Oo(r,"pass")},get fails(){return Oo(r,"fail")}};return r}function ur(e,t,r=[]){return{kind:"action",action:e,params:t,inputs:r,after:(...n)=>ur(e,t,n)}}function Zx(e,t){let r={kind:"action",action:"send-to-moderation",params:void 0,approve:e.approve??[],deny:e.deny??[],inputs:t,get approved(){return Oo(r,"approve")},get denied(){return Oo(r,"deny")},after:(...n)=>Zx(e,n)};return r}function Bx(){return{check(e,...t){let[r,n]=t;return tm(e,r,n,[])},customCheck(e,t){return tm(e,t,void 0,[])},allOf(...e){return em("all-of",e)},anyOf(...e){return em("any-of",e)},not(e){return em("not",[e])},trigger(...e){return{kind:"trigger",on:e,inputs:[]}},schedule(e){return{kind:"trigger",on:["schedule.matched"],schedule:e,inputs:[]}},block(){return ur("block",void 0)},label(e){return ur("label",e)},removeLabel(e){return ur("remove-label",e)},requestReview(e){return ur("request-review",e)},postComment(e){return ur("post-comment",e)},lock(e){return ur("lock",e)},close(){return ur("close",void 0)},webhook(){return ur("webhook",void 0)},discord(){return ur("discord",void 0)},humanReview(e={}){return Zx(e,[])},workflow(e){return{kind:"workflow",spec:e}},workflows(e){return e}}}var Po=["change-request.opened","change-request.updated","change-request.closed","comment.created","push"],pi=w({}),Yr={block:pi,label:Gr,"remove-label":Gr,"request-review":w({reviewers:v(ee([Pc,Nf])).optional(),teamReviewers:v(zf).optional()}),"post-comment":Ic,lock:Gk,close:pi,webhook:pi,discord:pi,"send-to-moderation":pi};var Kx=Bx();var fde=zt*60000;function fi(e){return"n"in e}function e2(e){return"preset"in e}var t2={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function r2(e){let[t="0",r="0"]=e.split(":");return{hour:Number(t),minute:Number(r)}}function Hx(e){if(fi(e))return null;if(!e2(e))return e.cron.trim();if(e.preset==="hourly")return`${e.minute} * * * *`;let{hour:t,minute:r}=r2(e.at);switch(e.preset){case"daily":return`${r} ${t} * * *`;case"weekdays":return`${r} ${t} * * 1-5`;case"weekly":return`${r} ${t} * * ${t2[e.on]}`;case"monthly":return`${r} ${t} ${e.day} * *`;default:return null}}function Gx(e){return e?{zone:e,defaulted:!1}:{zone:ir,defaulted:!0}}var n2={hours:["hour","hours"],days:["day","days"],weeks:["week","weeks"],months:["month","months"]};function Jx(e){let[t,r]=n2[e.unit];return`${e.n} ${e.n===1?t:r}`}var Fn="09:00",Gc=jf.options,Uc=new Map([...Gc.flatMap((e,t)=>[e,`${e}s`,e.slice(0,3)].map((r)=>[r,t])),["tues",2],["thur",4],["thurs",4]]),o2=new Map(Object.entries({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10,eleven:11,twelve:12})),s2=new Map(Object.entries({m:"minutes",h:"hours",d:"days",w:"weeks"})),Yx=new Map(Object.entries({min:"minutes",mins:"minutes",minute:"minutes",minutes:"minutes",hr:"hours",hrs:"hours",hour:"hours",hours:"hours",day:"days",days:"days",wk:"weeks",wks:"weeks",week:"weeks",weeks:"weeks",month:"months",months:"months"})),Xx=new Map(Object.entries({minute:"minute",hour:"hourly",day:"daily",week:"week",month:"monthly"})),rm=new Map(Object.entries({hourly:"hourly",daily:"daily",weekly:"weekly",monthly:"monthly",weekday:"weekdays",weekdays:"weekdays","mon-fri":"weekdays","monday-friday":"weekdays",weekend:"weekends",weekends:"weekends"})),i2=new Map(Object.entries({utc:ir,gmt:ir,z:ir})),a2=["Asia/Kolkata","Europe/Kyiv","Asia/Ho_Chi_Minh","America/Argentina/Buenos_Aires"],c2=["Berlin","London","New York","Los Angeles","Chicago","Denver","Toronto","Paris","Amsterdam","Madrid","Stockholm","Tokyo","Singapore","Sydney","Kolkata","Sao Paulo"],Wc=null;function om(e){return(e.split("/").at(-1)??e).replaceAll("_"," ")}function s0(){if(Wc)return Wc;let e=Intl.supportedValuesOf("timeZone"),t=new Map,r=new Map,n=a2.filter(ni);for(let i of[...n,...e])if(r.set(i.toLowerCase(),i),i.includes("/")&&!i.startsWith("Etc/")){let a=om(i).toLowerCase();if(!t.has(a))t.set(a,i)}let o=c2.filter((i)=>t.has(i.toLowerCase())),s=[...t.values()].map(om).filter((i)=>!o.includes(i)).sort((i,a)=>i.localeCompare(a));return Wc={byCity:t,byId:r,cities:[...o,...s]},Wc}function u2(e){return e.split("/").map((t)=>t.split("_").map((r)=>`${r.charAt(0).toUpperCase()}${r.slice(1)}`).join("_")).join("/")}function l2(e){let t=e.toLowerCase(),r=i2.get(t);if(r)return r;if(!t.includes("/"))return null;let n=s0().byId.get(t);if(n)return n;let o=u2(t);return ni(o)?o:null}function sm(e){return s0().byCity.get(e.join(" ").toLowerCase())??null}function i0(e){if(e===ir)return e;let t=om(e);return sm([t])===e?t:e}function d2(e,t){return`UTC${(new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(t).find((o)=>o.type==="timeZoneName")?.value??"GMT").replace(/^GMT/,"")||"+0"}`}function a0(e,t=new Date){return e===ir?e:`${e}, ${d2(e,t)}`}function Qx(e,t){return[...e.matchAll(t)].map((r)=>({text:r[0],lower:r[0].toLowerCase(),from:r.index,to:r.index+r[0].length}))}function Ao(e){return String(e).padStart(2,"0")}function im(e,t){return`${Ao(e)}:${Ao(t)}`}function am(e){let r=e%100>=11&&e%100<=13?"th":["th","st","nd","rd"][e%10]??"th";return`${e}${r}`}function hi(e){return`${e.charAt(0).toUpperCase()}${e.slice(1)}`}function Ro(e){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}function Vc(e){if(e===void 0)return null;if(/^\d{1,4}$/.test(e))return Number(e);return o2.get(e)??null}function p2(e,t){let r=e[t]?.lower;if(r===void 0)return null;if(r==="noon")return{hour:12,minute:0,valid:!0,used:1};if(r==="midnight")return{hour:0,minute:0,valid:!0,used:1};let n=/^(\d{1,2})(?:[:.](\d{2}))?(am|pm|a\.m\.|p\.m\.)?$/.exec(r);if(!n)return null;let o=1,s=n[3]?.charAt(0),i=e[t+1]?.lower;if(!s&&i&&/^(am|pm|a\.m\.|p\.m\.)$/.test(i))s=i.charAt(0),o=2;let a=Number(n[1]),c=Number(n[2]??"0"),u=c<=59;if(s)u=u&&a>=1&&a<=12,a=a%12+(s==="p"?12:0);else u=u&&a<=23;return{hour:a,minute:c,valid:u,used:o}}function e0(e){let t=e?/^(\d{1,2})(st|nd|rd|th)?$/.exec(e):null;return t?Number(t[1]):null}var f2=new Set(["shorter","short","those","the","months","month"]);function Io(e,t){return{from:e.from,to:t.to}}class cm{words;read={};at=0;everyAt=-1;constructor(e){this.words=e}word(e=0){return this.words[this.at+e]}lower(e=0){return this.word(e)?.lower}take(e){let t=this.word(),r=this.word(e-1);return this.at+=e,t&&r?Io(t,r):{from:0,to:0}}run(){while(this.at<this.words.length&&!this.read.unknown)if(!this.step()){let e=this.lower()==="in"&&this.word(1)?this.word(1):this.word();if(e)this.read.unknown={from:e.from,to:e.to}}return this.read}step(){let e=this.lower()??"",t=this.at===this.everyAt+1&&this.everyAt>=0;if((e==="every"||e==="each")&&!this.read.every){if(this.everyAt=this.at,this.read.every=this.take(1),this.at>=this.words.length)this.read.everyDangling=this.read.every;return this.everyFollowerOk()}if(e==="and"||e==="&")return this.at+=1,!0;if(e==="skip"||e==="skipping")return this.skip();if(e==="at")return this.atPhrase();if(this.count(t))return!0;if(this.unit())return!0;if(this.keyword(t))return!0;if(this.weekdays())return!0;if(this.monthDay())return!0;if(this.monthOf())return!0;if(this.minute())return!0;if(this.time())return!0;return this.zone()}everyFollowerOk(){let e=this.lower();if(e===void 0)return!0;let t=/^\d+[a-z]+$/.test(e);if(!(Vc(e)!==null||t||Xx.has(e)||Uc.has(e)||e==="weekday"||e==="weekend"||e==="weekdays"||e==="weekends")){let n=this.word();if(n)this.read.unknown={from:n.from,to:n.to}}return!0}skip(){let e=1;while(f2.has(this.lower(e)??""))e+=1;if(this.read.skip)return!1;return this.read.skip=this.take(e),!0}atPhrase(){let e=this.lower(1);if(e===void 0)return this.read.atDangling=this.take(1),!0;if(e==="minute"||/^:\d{1,2}$/.test(e))return this.minute(1);return this.time(1)}count(e){let t=this.lower();if(t===void 0||this.read.interval)return!1;let r=/^(\d{1,4})([a-z]+)$/.exec(t);if(r){let a=r[2]??"",c=s2.get(a)??Yx.get(a);if(!c)return!1;let u=this.word();return this.setInterval(Number(r[1]),c,this.take(1),{from:u?.from??0,to:(u?.from??0)+(r[1]?.length??0)},r[2]??""),!0}let n=Vc(t);if(n===null)return!1;let o=this.lower(1)??"",s=Yx.get(o),i=this.word();if(s&&i)return this.setInterval(n,s,this.take(2),Io(i,i),o),!0;if(e&&i)return this.read.interval={...this.take(1),n,unit:null,count:Io(i,i),unitWord:""},!0;return!1}setInterval(e,t,r,n,o){this.read.interval={...r,n:e,unit:t,count:n,unitWord:o}}unit(){let e=this.lower()??"",t=Xx.get(e);if(!t)return!1;if(t==="minute"){if(this.read.interval)return!1;return this.setInterval(1,"minutes",this.take(1),null,e),!0}return this.setBase(t,[],this.take(1))}setBase(e,t,r){if(this.read.base)return!1;return this.read.base={...r,kind:e,days:t},!0}keyword(e){let t=0,r,s=(this.lower()??"")==="on"&&rm.get(this.lower(1)??"")?1:0,i=this.lower(s)??"";if((i==="monday"||i==="mon")&&(this.lower(s+1)==="to"||this.lower(s+1)==="through")&&(this.lower(s+2)==="friday"||this.lower(s+2)==="fri"))r="weekdays",t=s+3;else if(rm.has(i))r=rm.get(i),t=s+1;if(!r)return!1;if(e&&!(r==="weekdays"||r==="weekends"))return!1;return this.setBase(r,[],this.take(t))}weekdays(){let e=this.lower()==="on"?1:0;if(Uc.get(this.lower(e)??"")===void 0)return!1;let t=[],r=e;while(!0){let s=Uc.get(this.lower(r)??"");if(s!==void 0){t.push(s),r+=1;continue}let i=this.lower(r);if((i==="and"||i==="&")&&Uc.get(this.lower(r+1)??"")!==void 0){r+=1;continue}break}let n=[...new Set(t)].sort((s,i)=>s-i),o=this.read.base;if(o&&(o.kind==="weekly"||o.kind==="week")&&o.days.length===0)return o.kind="weekly",o.days=n,this.read.weekdaySpan=this.take(r),!0;return this.setBase("weekly",n,this.take(r))}monthDay(){let e=0;if(this.lower(e)==="on")e+=1;let t=null;if(this.lower(e)==="the")t=e0(this.lower(e+1)),e+=2;else if(this.lower(e)==="day")t=Vc(this.lower(e+1)),e+=2;else if(/(st|nd|rd|th)$/.test(this.lower(e)??""))t=e0(this.lower(e)),e+=1;if(t===null)return!1;let r=this.take(e),n=this.read.day;if(n)return n.to=r.to,n.values.push(t),n.value=Math.max(n.value,t),!0;return this.read.day={...r,value:t,values:[t]},!0}monthOf(){let e=this.lower()==="of",t=this.lower(1),r=this.lower(2);if(!e||!(t==="the"||t==="every"||t==="each")||r!=="month")return!1;if(this.read.base)return!1;return this.read.monthOf=this.take(3),this.read.base={...this.read.monthOf,kind:"monthly",days:[]},!0}minute(e=0){let t=this.lower(e)??"",r=null,n=e,o=/^:(\d{1,2})$/.exec(t);if(o)r=Number(o[1]),n+=1;else if(t==="minute")r=Vc(this.lower(e+1)),n+=2;if(r===null||r>59||this.read.minute)return!1;return this.read.minute={...this.take(n),value:r},!0}time(e=0){let t=p2(this.words,this.at+e);if(!t)return!1;let r=this.take(e+t.used),n={hour:t.hour,minute:t.minute,valid:t.valid},o=this.read.time;if(o)return o.to=r.to,o.times.push(n),o.valid=o.valid&&n.valid,!0;return this.read.time={...r,...n,times:[n]},!0}zone(){if(this.read.zone)return!1;let e=this.lower()==="in"?1:0;for(let t=3;t>=1;t--){let r=this.words.slice(this.at+e,this.at+e+t).map((o)=>o.lower);if(r.length<t)continue;let n=t===1?l2(r[0]??"")??sm(r):sm(r);if(n){let o=e+t+(this.lower(e+t)==="time"?1:0);return this.read.zone={...this.take(o),id:n},!0}}return!1}}function mi(e){return e.replace(/\s+,/g,",").replace(/,(\s*,)+/g,",").replace(/\s{2,}/g," ").replace(/^[\s,]+|[\s,]+$/g,"")}function Jt(e,t,r){return mi(`${e.slice(0,t.from)}${r}${e.slice(t.to)}`)}function Zc(e,t){return t.time?e:`${e} at ${Fn}`}var m2={minutes:["minute","minutes"],hours:["hour","hours"],days:["day","days"],weeks:["week","weeks"],months:["month","months"]};function Hc(e,t){let[r,n]=m2[t];return`${e} ${e===1?r:n}`}function c0(e){return hi(Gc[e]??"")}function t0(e){switch(e.kind){case"hourly":return"Every hour";case"daily":return"Every day";case"weekdays":return"Monday to Friday";case"weekends":return"Saturday and Sunday";case"week":return"Every week";case"monthly":return"Every month";default:return e.days.length>0?`Every ${Ro(e.days.map(c0))}`:"Every week"}}function h2(e,t,r,n){let o=[],s=(l,d,f,m)=>{if(!d)return;o.push({from:d.from,to:d.to,text:e.slice(d.from,d.to),kind:f,label:m,tone:r[l]??"ok"})},{every:i,base:a,interval:c}=t,u=i&&a&&!c&&a.from>i.to&&e.slice(i.to,a.from).trim()==="";if(i&&!u)s("every",i,"cadence","Repeats");if(c)s("interval",c,"interval",c.unit?`Every ${Hc(c.n,c.unit)}`:"Repeats");if(a)s("base",u&&i?{from:i.from,to:a.to}:a,"cadence",t0(a));if(s("weekdays",t.weekdaySpan,"cadence",t0(a??{from:0,to:0,kind:"weekly",days:[]})),t.day)s("day",t.day,"day",`The ${Ro(u0(t.day).map(am))} of the month`);if(t.time)s("time",t.time,"time",t.time.valid?Ro(l0(t.time).map((l)=>im(l.hour,l.minute))):"Not a time");if(s("at",t.atDangling,"time","At"),t.minute)s("minute",t.minute,"minute",`At :${Ao(t.minute.value)}`);if(t.zone)s("zone",t.zone,"zone",a0(t.zone.id,n));if(t.skip)s("skip",t.skip,"skip","Skips months without that day");if(t.unknown)s("unknown",t.unknown,"unknown","Not understood");return o.sort((l,d)=>l.from-d.from)}function $e(e,t,r=[],n={}){return{ok:!1,reason:e,message:t,fixes:r,tones:n}}var g2=[5,6,10,12,15,20,30];function y2(e){return g2.reduce((t,r)=>Math.abs(r-e)<Math.abs(t-e)?r:t)}function w2(e,t){let n=t.unitWord==="minute"||t.unitWord==="min"?`${t.unitWord}s`:t.unitWord,o=`${zt} ${n}`;return{label:`Use ${zt} minutes`,text:Jt(e,t,o)}}function b2(e,t){let r=t.interval;if(!r)return null;let n={interval:"fail"};if(t.base||t.day)return $e("invalid","Use an interval or a day, not both.",[],n);if(r.unit===null)return $e("incomplete","Add a unit, like every 5 days.",[{label:"Use days",text:Jt(e,r,`${r.n} days`)}]);if(r.unit==="months"){if(r.n===1)return null;let c=Math.round(r.n*30/7);return $e("unstorable","An interval counts hours, days or weeks.",[{label:`Use ${c} weeks`,text:Jt(e,r,`${c} weeks`)}],n)}let{n:o,unit:s}=r;if(s==="minutes"){if(o<zt)return $e("floor",`Runs must be at least ${zt} minutes apart.`,[w2(e,r)],n);if(o<60||o%60!==0){if(t.time||t.minute)return r0(e,t,[]);if(o>60||60%o!==0){let c=y2(o);return $e("unstorable","Minutes must divide the hour evenly, like 10, 15 or 30.",[{label:`Use ${c} minutes`,text:Jt(e,r,`${c} minutes`)}],n)}return{ok:!0,every:{cron:`*/${o} * * * *`},timezone:t.zone?.id}}o/=60,s="hours"}let i={n:o,unit:s};if(s==="hours"&&t.minute&&!t.time&&!t.skip&&o>1&&o<24&&24%o===0)return{ok:!0,every:{cron:`${t.minute.value} */${o} * * *`},timezone:t.zone?.id};if(t.time||t.minute)return r0(e,t,[]);if(t.zone)return $e("unstorable","An interval counts from the last run, so it has no timezone.",[{label:"Drop the timezone",text:Jt(e,t.zone,"")}],{zone:"fail"});if(t.skip)return $e("invalid","Only a day after the 28th skips months.",[],{skip:"fail"});let a=si[s];if(o<1||o*a>Ac){let c=Math.floor(Ac/a);return $e("invalid","Runs must be at most 52 weeks apart.",[{label:`Use ${Hc(c,s)}`,text:Jt(e,r,Hc(c,s))}],n)}return{ok:!0,every:i,timezone:void 0}}function r0(e,t,r){let n=t.time??t.minute;return $e("unstorable","An interval counts from the last run, so it has no time of day.",[...r,...n?[{label:"Drop the time",text:Jt(e,n,"")}]:[]],{time:"fail",minute:"fail"})}var _2=new Map([[29,"February has no 29th most years."],[30,"February has no 30th."],[31,"Five months have no 31st."]]);function S2(e,t){let r=t.zone?.id,n=t.base;if(!n&&(t.day||t.interval?.unit==="months"))n={from:0,to:0,kind:"monthly",days:[]};if(!n)return $e("incomplete","Add how often, like every day.",t.time?[{label:"Every day",text:`every day ${e.trim()}`}]:[]);if(t.time&&!t.time.valid)return $e("invalid","Use a time from 00:00 to 23:59.",[],{time:"fail"});if(n.kind==="hourly"){if(t.time)return $e("unstorable","An hourly schedule takes a minute, like at :15.",[{label:"Use :00",text:Jt(e,t.time,"at :00")}],{time:"fail"});if(t.day)return $e("invalid","An hourly schedule runs every day.",[],{day:"fail"});return{ok:!0,every:{preset:"hourly",minute:t.minute?.value??0},timezone:r}}if(t.minute)return $e("invalid","A minute only fits an hourly schedule.",[],{minute:"fail"});if(n.kind==="week"||n.kind==="weekly"&&n.days.length===0){let f=t.every?{from:Math.min(t.every.from,n.from),to:n.to}:n;return $e("incomplete","Add a day, like every monday.",[{label:"Every Monday",text:Zc(Jt(e,f,"every monday"),t)}])}if(n.kind==="monthly"){if(!t.day)return $e("incomplete","Add a day, like on the 1st.",[{label:"On the 1st",text:Zc(`${mi(e)} on the 1st`,t)}])}else if(t.day)return $e("invalid","Pick a weekday or a day of the month, not both.",[],{day:"fail"});let o=t.day,s=o?u0(o):[];if(s.some((f)=>f<1||f>31))return $e("invalid","A month has at most 31 days.",[],{day:"fail"});if(o&&o.value>28&&!t.skip)return $e("ambiguous",_2.get(o.value)??"",[{label:"Skip those months",text:`${Zc(mi(e),t)}, skipping shorter months`},{label:"Run on the 28th instead",text:Zc(Jt(e,o,"on the 28th"),t)}],{day:"warn"});if(t.skip&&!(o&&o.value>28))return $e("invalid","Only a day after the 28th skips months.",[],{skip:"fail"});if(!t.time)return $e("incomplete",t.atDangling?"Add a time, like 09:00.":"Add a time, like at 09:00.",[{label:`At ${Fn}`,text:t.atDangling?`${mi(e)} ${Fn}`:`${mi(e)} at ${Fn}`}]);let i=l0(t.time),[a]=i;if(i.length===1&&s.length<=1&&a){let f=v2(n,s[0],a);if(f)return{ok:!0,every:f,timezone:r}}let c=[...new Set(i.map((f)=>f.minute))],u=[...new Set(i.map((f)=>f.hour))];if(c.length*u.length!==i.length)return $e("unstorable","Times in one schedule share their minutes, like 09:00 and 17:00.",[],{time:"fail"});let l=`${c.join(",")} ${u.join(",")} ${k2(n,s)}`,d=Cc.safeParse({cron:l});if(!d.success)return $e("invalid",d0(d.error.issues[0]?.message??"this cron does not parse"),[],{time:"fail"});return{ok:!0,every:{cron:d.data.cron},timezone:r}}function u0(e){return[...new Set(e.values)].sort((t,r)=>t-r)}function l0(e){let t=new Map;for(let r of e.times)t.set(r.hour*60+r.minute,r);return[...t.entries()].sort(([r],[n])=>r-n).map(([,r])=>r)}function v2(e,t,r){let n=im(r.hour,r.minute);switch(e.kind){case"daily":return{preset:"daily",at:n};case"weekdays":return{preset:"weekdays",at:n};case"monthly":{let o=t??1;return o>28?null:{preset:"monthly",day:o,at:n}}case"weekly":{let[o]=e.days,s=o===void 0?void 0:Gc[o];return e.days.length===1&&s?{preset:"weekly",on:s,at:n}:null}default:return null}}function k2(e,t){switch(e.kind){case"weekdays":return"* * 1-5";case"weekends":return"* * 0,6";case"monthly":return`${t.length>0?t.join(","):"1"} * *`;case"weekly":return`* * ${e.days.join(",")}`;default:return"* * *"}}var nm=/^[\d*][\d*,\-/]*$/,x2=/^[\da-z*][\da-z*,\-/]*$/i;function $2(e){let[t,r]=e;if(!(t&&r&&nm.test(t.text)&&nm.test(r.text)))return 0;let n=0;while(n<5){let o=e[n],s=n<3?nm:x2;if(!(o&&s.test(o.text))||n>=3&&!/[\d*]/.test(o.text)&&!/^[a-z]{3}(-[a-z]{3})?(,[a-z]{3})*$/i.test(o.text))break;n+=1}return n}function d0(e){return`${hi(e)}.`}function E2(e,t,r,n){let o=t.slice(0,r),s=o[0],i=o.at(-1),a=o.map((y)=>y.text).join(" "),c=s&&i?Io(s,i):{from:0,to:0},u=t.slice(r),l,d;if(u.length>0){let b=new cm(u).run(),E=b.every||b.base||b.interval||b.time||b.day||b.minute||b.skip;if(b.unknown||E||!b.zone){let k=u[0];d=b.unknown??(k?Io(k,k):void 0)}else l=b.zone}let f=p0(a),m=f?hi(f):"Cron",h=(y)=>{let b=[{...c,text:e.slice(c.from,c.to),kind:"cron",label:m,tone:y}];if(l)b.push({from:l.from,to:l.to,text:e.slice(l.from,l.to),kind:"zone",label:a0(l.id,n),tone:"ok"});if(d)b.push({...d,text:e.slice(d.from,d.to),kind:"unknown",label:"Not understood",tone:"fail"});return b};if(d)return{ok:!1,reason:"unknown",message:`Could not read "${e.slice(d.from,d.to)}".`,fixes:[],tokens:h("ok")};let g=Cc.safeParse({cron:a});if(!g.success){let y=g.error.issues[0]?.message??"this cron does not parse",b=y.includes(`at least ${zt} minutes`),E=o[0]?.text??"",k=/^\*(\/(\d+))?$/.exec(E),I=b&&k&&s?[{label:`Use ${zt} minutes`,text:Jt(e,Io(s,s),`*/${zt}`)}]:[];return{ok:!1,reason:b?"floor":"invalid",message:d0(y),fixes:I,tokens:h("fail")}}return{ok:!0,every:{cron:g.data.cron},timezone:l?.id,tokens:h("ok")}}function T2(e,t){if(e.trim()==="")return{ok:!1,reason:"empty",message:"",fixes:[],tokens:[]};let r=Qx(e,/\S+/g),n=$2(r);if(n>0)return E2(e,r,n,t);let o=new cm(Qx(e,/[^\s,]+/g)).run(),s=O2(e,o),i=h2(e,o,s.ok?{}:s.tones??{},t);if(s.ok)return{ok:!0,every:s.every,timezone:s.timezone,tokens:i};return{ok:!1,reason:s.reason,message:s.message,fixes:s.fixes,tokens:i}}function O2(e,t){if(t.unknown)return $e("unknown",`Could not read "${e.slice(t.unknown.from,t.unknown.to)}".`,[],{unknown:"fail"});if(t.everyDangling&&!t.base&&!t.interval)return $e("incomplete","Add how often, like every day.");return b2(e,I2(t))??S2(e,t)}var P2={hours:"hourly",days:"daily",weeks:"week",months:"monthly"};function I2(e){let t=e.interval;if(!t||t.n!==1||t.unit===null)return e;let r=e.base?.kind;if(t.unit==="weeks"&&r==="weekly"||t.unit==="months"&&r==="monthly"){if(e.base&&r==="weekly"&&!e.weekdaySpan)e.weekdaySpan={from:e.base.from,to:e.base.to},e.base.from=t.from,e.base.to=t.to;return e.interval=void 0,e}if(e.base)return e;if(t.unit==="minutes")return e;return e.base={from:t.from,to:t.to,kind:P2[t.unit],days:[]},e.interval=void 0,e}var A2={hours:"every 60 minutes",days:"every 24 hours",weeks:"every 7 days"},Bc=Array.from({length:31},(e,t)=>t+1),Kc=[0,1,2,3,4,5,6];function R2(e){let t=(i,a)=>$c(e,i,a),r=Kc.filter((i)=>Bc.every((a)=>t(a,i)));if(Kc.every((i)=>Bc.every((a)=>t(a,i)===r.includes(i))))return r.length===7?{kind:"daily"}:{kind:"weekly",days:r};let o=Bc.filter((i)=>Kc.every((a)=>t(i,a)));return Bc.every((i)=>Kc.every((a)=>t(i,a)===o.includes(i)))?{kind:"monthly",days:o}:null}function n0(e,t){let[r,n]=e;if(r!==0||n===void 0)return null;let o=n-r;return e.every((i,a)=>i===a*o)&&t%o===0&&e.length===t/o?o:null}var C2=4;function o0(e){return(e+6)%7}function z2(e){if(e.kind==="daily")return"every day";if(e.kind==="monthly")return e.days.length===0?null:`monthly on the ${Ro(e.days.map(am))}`;let t=e.days.join(",");if(t==="1,2,3,4,5")return"weekdays";if(t==="0,6")return"weekends";let r=[...e.days].sort((n,o)=>o0(n)-o0(o)).map(c0);return r.length===0?null:`every ${Ro(r)}`}function N2(e){let t=Dn(e);if(!t.ok||t.spec.months.length!==12)return null;let{minutes:r,hours:n}=t.spec,o=R2(t.spec);if(!o)return null;let s=o.kind==="daily",[i]=r;if(n.length===24){if(!s)return null;if(r.length===1&&i!==void 0)return i===0?"every hour":`every hour at :${Ao(i)}`;let d=n0(r,60);return d?`every ${d} minutes`:null}let a=n0(n,24);if(r.length===1&&i!==void 0&&a&&n.length>2)return s?`every ${a} hours at :${Ao(i)}`:null;if(r.length*n.length>C2)return null;let c=z2(o);if(!c)return null;let u=n.flatMap((d)=>r.map((f)=>im(d,f))),l=`${c} at ${Ro(u)}`;if(o.kind!=="monthly"||o.days.every((d)=>d<=28))return l;return o.days.length===1?`${l}, skipping shorter months`:null}function p0(e){let t=N2(e);if(!t)return null;let r=T2(t,new Date(0)),n=r.ok?Hx(r.every):null;return n!==null&&Wk(n,e)?t:null}function L2(e){if(fi(e)){if(e.n===1)return A2[e.unit];return`every ${Hc(e.n,e.unit)}`}if("preset"in e)switch(e.preset){case"hourly":return e.minute===0?"every hour":`every hour at :${Ao(e.minute)}`;case"daily":return`every day at ${e.at}`;case"weekdays":return`weekdays at ${e.at}`;case"weekly":return`every ${hi(e.on)} at ${e.at}`;default:return`monthly on the ${am(e.day)} at ${e.at}`}let t=e.cron.trim();return p0(t)??t}function j2(e){let t=L2(e.every);if(fi(e.every)||!e.timezone)return t;return`${t} in ${i0(e.timezone)}`}function D2(e){return j2({every:e.every,timezone:fi(e.every)?void 0:e.timezone??ir})}function gi(e){return hi(D2(e))}var bde=["every",...Gc,"weekdays","weekends","minutes","hours","days","weeks","month","monthly","daily","hourly","weekly","noon","midnight"],_de=["",` at ${Fn}`,` ${Fn}`,":00"," days"," minutes",` on the 1st at ${Fn}`," 5 days"];var M2={issue:"issues","change-request":"change requests"},q2={open:"open",closed:"closed",any:"open and closed"};function um(e,t){if(e.length<=1)return e[0]??"";return`${e.slice(0,-1).join(", ")} ${t} ${e.at(-1)}`}function F2(e){let t=e?.match??{},r=["issue","change-request"].filter((o)=>t.subjects?.includes(o)),n=e?.every?[{key:"every",text:gi({every:e.every,timezone:e.timezone})}]:[{key:"every-lead",text:"Every "},{key:"every",text:"so often",placeholder:!0}];if(n.push({key:"finds",text:", finds "},t.state?{key:"state",text:q2[t.state]}:{key:"state",text:"open or closed",placeholder:!0},{key:"gap",text:" "},r.length>0?{key:"subjects",text:um(r.map((o)=>M2[o]),"and")}:{key:"subjects",text:"issues or change requests",placeholder:!0},{key:"inactive-lead",text:" with no activity for "},t.inactiveFor?{key:"inactiveFor",text:Jx(t.inactiveFor)}:{key:"inactiveFor",text:"some time",placeholder:!0}),t.labels?.length)n.push({key:"labels",text:`, labeled ${um(t.labels,"and")}`});if(t.excludeLabels?.length)n.push({key:"excludeLabels",text:`, not labeled ${um(t.excludeLabels,"or")}`});if(t.skipLocked!==!1)n.push({key:"skipLocked",text:", skipping locked ones"});return n.push({key:"end",text:"."}),n}function f0(e){return F2(e).map((t)=>t.placeholder?`[${t.text}]`:t.text).join("")}var U2=new Map([["every","The schedule"],["every.n","The interval"],["every.unit","The interval unit"],["every.minute","The minute"],["every.at","The time"],["every.at.hour","The hour"],["every.at.minute","The minute"],["every.on","The weekday"],["every.day","The day of the month"],["every.cron","The cron"],["every.preset","The preset"],["timezone","The timezone"],["match","What it looks for"],["match.subjects","What it looks at"],["match.state","The state"],["match.inactiveFor","The inactive time"],["match.inactiveFor.n","The inactive time"],["match.inactiveFor.unit","The inactive time unit"],["match.labels","The labels"],["match.excludeLabels","The labels to skip"],["match.skipLocked","Skip locked"]]);function m0(e){let t=e.map(String).filter((r)=>!/^\d+$/.test(r)).join(".");return U2.get(t)??null}function W2(e){return/[.?]$/.test(e)?e:`${e}.`}function y0(e){let{workflow:t,step:r,message:n}=e,o=r!==void 0&&(n.startsWith(`${r} `)||n.startsWith(`${r}:`)),s=[t,o?void 0:r].filter(Boolean).join(" > ");if(!s)return n;return o?`${s} > ${n}`:`${s}: ${n}`}function V2(e,t){let r=Array.from({length:t.length+1},(n,o)=>o);for(let n=1;n<=e.length;n++){let o=r[0]??0;r[0]=n;for(let s=1;s<=t.length;s++){let i=r[s]??0;r[s]=Math.min(i+1,(r[s-1]??0)+1,o+(e[n-1]===t[s-1]?0:1)),o=i}}return r[t.length]??0}function h0(e,t){let r=0;for(let n of t)if(n===e[r])r++;return r===e.length}function g0(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Z2(e,t){let r=g0(e),n=null;for(let s of t){let i=g0(s),c=h0(r,i)||h0(i,r)?Math.abs(i.length-r.length)/4:V2(r,i);if(n===null||c<n.score)n={id:s,score:c}}if(!n)return null;let o=Math.max(2,Math.ceil(r.length/3));return n.score<=o?n.id:null}function Jc(e,t,r){let n=Z2(t,r);return n?`${t} is not ${e}. Did you mean ${n}?`:`${t} is not ${e}. Use one of: ${r.join(", ")}`}var w0=K(p(),ne());function yi(e,t,r){let n=w0.safeParse(e??{});if(!n.success)return[`${r} takes an object of settings`];let o=t instanceof vf?Object.keys(t.shape):null,s=o?Object.keys(n.data).filter((a)=>!o.includes(a)):[];if(s.length>0&&o)return s.map((a)=>Jc(`a setting of ${r}`,a,o));let i=t.safeParse(n.data);return i.success?[]:i.error.issues.map((a)=>`${r}: ${$o(a)}`)}var B2=w({kind:z(["trigger","check","gate","action","output"])}),b0=w({kind:z(["trigger","check","gate","action"])}),K2=w({kind:C("output"),port:z(["pass","fail","approve","deny"])}),H2=w({}).loose(),G2=wc((e)=>b0.safeParse(e).success),J2=K(p(),w({kind:C("workflow"),spec:wc((e)=>H2.safeParse(e).success,{error:"each entry must be workflow({ ... })"})}),{error:"the default export must be workflows({ ... })"});function Y2(e){return Object.hasOwn(Yr,e)}function lm(e){return e.kind==="output"}function X2(e){return e.kind==="action"&&e.action==="send-to-moderation"}function Q2(e,t){if(e==="pass")return;return t.kind==="trigger"?void 0:e}function eF(e){switch(e){case"pass":return"fail";case"fail":return"pass";case"approve":return"deny";default:return"approve"}}function tF(e){switch(e.kind){case"trigger":return e.on.includes("schedule.matched")?"schedule":"trigger";case"check":return e.rule.split("@")[0]??"check";case"gate":return e.mode;default:return e.action}}var rF=/^[^\p{Cc}]+$/u;class _0{key;spec;issues=[];ids=new Map;taken=new Set;nodes=[];edges=[];edgeKeys=new Set;built=new Set;triggers=[];constructor(e,t){this.key=e;this.spec=t}issue(e,t){let r=t?this.ids.get(t):void 0;this.issues.push({workflow:this.key,step:r,message:e})}idFor(e){let t=this.ids.get(e);if(t)return t;let r=tF(e),n=r;for(let o=2;this.taken.has(n);o++)n=`${r}-${o}`;return this.ids.set(e,n),this.taken.add(n),n}connect(e,t,r){if(e.kind==="trigger"&&t!=="pass"){this.issue("a trigger has only its event output; put a check or gate between it and this step",r);return}let n=this.visit(e),o=this.idFor(r),s=Q2(t,e),i=`${n}>${o}>${s??"pass"}`;if(this.edgeKeys.has(i))return;this.edgeKeys.add(i);let a=`${n}-${o}`;for(let c=2;this.edges.some((u)=>u.id===a);c++)a=`${n}-${o}-${c}`;this.edges.push(s?{id:a,from:n,to:o,when:s}:{id:a,from:n,to:o})}wireInputs(e,t){for(let r of t){if(!B2.safeParse(r).success){this.issue("an input is not a step or a step output",e);continue}if(lm(r)){if(!K2.safeParse(r).success){this.issue("an input is not a step or a step output",e);continue}this.connect(r.step,r.port,e)}else this.connect(r,"pass",e)}}wireFromTriggers(e){for(let t of this.triggers)this.connect(t,"pass",e)}visit(e){if(!b0.safeParse(e).success)return this.issue("a step was not built with the workflow helpers"),"invalid";let t=this.idFor(e);if(this.built.has(e))return t;switch(this.built.add(e),e.kind){case"trigger":this.buildTrigger(e,t);break;case"check":this.buildCheck(e,t);break;case"gate":this.buildGate(e,t);break;default:this.buildAction(e,t)}return t}buildTrigger(e,t){let r=[];for(let n of e.on){let o=ri.safeParse(n);if(o.success&&(o.data==="schedule.matched"||Po.some((s)=>s===o.data)))r.push(o.data);else this.issue(Jc("an event a workflow can start on",n,Po),e)}if(r.length===0){if(e.on.length===0)this.issue("a trigger needs at least one event",e);return}if(e.schedule!==void 0){let n=vo.safeParse(e.schedule);if(!n.success){for(let o of n.error.issues)this.issue(W2($o(o,m0)),e);return}this.nodes.push({id:t,type:"trigger",kinds:r,schedule:vo.parse(e.schedule)});return}this.nodes.push({id:t,type:"trigger",kinds:r})}buildCheck(e,t){let r=e.rule.startsWith("custom-"),n=e.rule;if(r)n=e.rule.includes("@")?e.rule:`${e.rule}@1`;else{let s=Ge.find((a)=>a.ruleId===e.rule);if(!s){this.issue(Jc("a rule",e.rule,Ge.map((a)=>a.ruleId)),e);return}let i=e.version??s.version;if(n=`${s.ruleId}@${i}`,i===s.version)for(let a of yi(e.config,s.configSchema,s.ruleId))this.issue(a,e)}let o=Ie.safeParse(e.config??{});if(!o.success){this.issue(`${e.rule} settings must be plain JSON`,e);return}if(this.nodes.push({id:t,type:"rule",ref:n,config:o.data}),e.inputs.length===0)this.wireFromTriggers(e);else this.wireInputs(e,e.inputs)}buildGate(e,t){if(e.inputs.length===0)this.issue(`${e.mode} needs at least one input`,e);if(e.mode==="not"&&e.inputs.length>1)this.issue("not takes exactly one input",e);this.nodes.push({id:t,type:"gate",mode:e.mode}),this.wireInputs(e,e.inputs)}buildAction(e,t){let r=e.action;if(!Y2(r)){this.issue(Jc("an action",r,Object.keys(Yr)),e);return}let n=Yr[r];for(let a of yi(e.params,n,r))this.issue(a,e);let o=w0.safeParse(e.params??{}),s=K(p(),Ie).safeParse(o.success?o.data:{}),i={id:t,type:"action",action:r};if(s.success&&Object.keys(s.data).length>0)i.params=s.data;if(this.nodes.push(i),e.inputs.length>0)this.wireInputs(e,e.inputs);if(X2(e)){for(let a of e.approve)this.visit(a),this.connect(e,"approve",a);for(let a of e.deny)this.visit(a),this.connect(e,"deny",a)}}hasIncoming(e){let t=this.ids.get(e);return this.edges.some((r)=>r.to===t)}compile(){let e=this.spec;for(let[i,a]of Object.entries(e.steps??{})){if(!rF.test(i)){this.issue(`${i} is not a usable step id`);continue}if(this.taken.has(i)){this.issue(`two steps share the id ${i}`);continue}this.ids.set(a,i),this.taken.add(i)}let t=e.on===void 0?[]:Array.isArray(e.on)?e.on:[e.on],r=[],n=[];for(let i of t){let a=p().safeParse(i),c=G2.safeParse(i);if(a.success)r.push(a.data);else if(c.success)n.push(c.data)}if(r.length>0)this.triggers.push({kind:"trigger",on:r,inputs:[]});this.triggers.push(...n);for(let i of Object.values(e.steps??{}))if(i.kind==="trigger"&&!this.triggers.includes(i))this.triggers.push(i);if(this.triggers.length===0)this.issue("add `on`, the events or schedule that start it");for(let i of this.triggers)this.visit(i);if(e.check!==void 0){let i=lm(e.check)?{step:e.check.step,port:e.check.port}:{step:e.check,port:"pass"};if(!lm(e.check)&&(i.step.kind==="trigger"||i.step.kind==="action"))this.issue("`check` takes a check, a gate or one of their outputs; a trigger or action has no Passes and Doesn't pass");this.visit(i.step);for(let a of e.pass??[])this.visit(a),this.connect(i.step,i.port,a);for(let a of e.fail??[])this.visit(a),this.connect(i.step,eF(i.port),a)}else if((e.pass??[]).length>0||(e.fail??[]).length>0)this.issue("`pass` and `fail` need a `check`; use `run` for actions with no check");for(let i of e.run??[]){this.visit(i);for(let a of this.triggers)this.connect(a,"pass",i)}let o=Object.values(e.steps??{});for(let i of o)this.visit(i);for(let i of o)if(i.kind==="action"&&!this.hasIncoming(i))this.wireFromTriggers(i);if(this.issues.length>0)return null;let s=pt.safeParse({id:this.key,name:e.name??this.key,version:1,nodes:this.nodes,edges:this.edges});if(!s.success){for(let i of s.error.issues)this.issue($o(i));return null}return s.data}}function dm(e){let t=[],r=[];for(let[n,o]of Object.entries(e)){let s=new _0(n,o.spec),i=s.compile();if(t.push(...s.issues),i&&s.issues.length===0)r.push(i)}return t.length>0?{ok:!1,issues:t,definitions:r}:{ok:!0,definitions:r}}function S0(e){let t=J2.safeParse(e.default);if(!t.success)return{ok:!1,issues:t.error.issues.map((r)=>({workflow:String(r.path[0]??""),message:r.message})),definitions:[]};return dm(t.data)}function nF(e,t){let r=new Map(e.nodes.map((i)=>[i.id,i])),n=new Set([t]),o=[t],s=[];for(let i=o.shift();i!==void 0;i=o.shift())for(let a of e.edges){if(a.from!==i||n.has(a.to))continue;n.add(a.to),o.push(a.to);let c=r.get(a.to);if(c?.type==="action")s.push(ax(c.action,c.params??{}))}return s}function oF(e){return e.nodes.flatMap((t)=>{if(t.type!=="trigger"||!t.schedule?.every)return[];let r=Gx(t.schedule.timezone),n=nF(e,t.id),o=f0(t.schedule);return[{nodeId:t.id,summary:gi({every:t.schedule.every,timezone:t.schedule.timezone}),timezone:r.zone,defaulted:r.defaulted,description:n.length>0?`${o} Then Tripwire ${Nc(n)}.`:`${o} No action runs after it.`}]})}function v0(e,t){return e.map((r)=>{let n=Wx(r,t?{catalog:t}:{});return{id:r.id,name:r.name,valid:!n.some((o)=>o.severity==="error"),issues:n,schedules:oF(r)}})}var pm=new Set(["url","signingSecret","urlSet","signingSecretSet"]);function sF(e){return e.type==="action"&&(e.action==="webhook"||e.action==="discord")}function k0(e){return{...e,nodes:e.nodes.map((t)=>{if(!sF(t))return t;let r={...t.params??{}};for(let n of["url","signingSecret"]){let o=r[n];if(o!==void 0&&o!==""&&o!==null)r[n]="",r[`${n}Set`]=!0}return{...t,params:r}})}}var Fde=v(Ie),Ude=K(p(),Ie);var Wde=p(),Vde=K(p(),Ie);var Zde=w({}).strict();function iF(e){let t=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),r="";for(let n of t){let o=r?`${r}-${n}`:n;if(o.length>48)break;r=o}return r||t[0]?.slice(0,48)||"workflow"}function Un(e,t=new Map){let r=new Set,n=new Map;for(let o of e){let s=t.get(o.id);if(s&&!r.has(s))r.add(s),n.set(o.id,s)}for(let o of e){if(n.has(o.id))continue;let s=iF(o.name||o.id),i=s;for(let a=2;r.has(i);a++)i=`${s}-${a}`;r.add(i),n.set(o.id,i)}return n}function Yc(e,t,r={}){let n=new Set(t.map((c)=>c.id)),o=new Set,s=new Map;for(let c of e){let u=r[c.id];if(u&&!o.has(u))o.add(u),s.set(c.id,{key:c.id,id:u,by:"mapping"})}for(let c of e)if(!s.has(c.id)&&n.has(c.id)&&!o.has(c.id))o.add(c.id),s.set(c.id,{key:c.id,id:c.id,by:"id"});let i=new Map([...Un(t)].map(([c,u])=>[u,c]));for(let c of e){let u=i.get(c.id);if(!s.has(c.id)&&u&&!o.has(u))o.add(u),s.set(c.id,{key:c.id,id:u,by:"name"})}let a=e.map((c)=>s.get(c.id)??{key:c.id,id:c.id,by:"new"});return{definitions:e.map((c,u)=>({...c,id:a[u]?.id??c.id})),matches:a}}var x0=new Set(["cycle","gate-input","not-input","trigger-input","wrong-output","no-outputs","missing-step","duplicate-id"]);function $0(e){return aF(e).issues.filter((t)=>x0.has(t.rule))}function aF(e,t=Ge){let r=Yf(e,{catalog:t,stage:"enable"}),n=r.results.filter((o)=>o.severity==="error");if(!r.definition)return{runnable:!1,canTurnOn:!1,issues:n};return{runnable:!n.some((o)=>x0.has(o.rule)),canTurnOn:n.length===0,issues:n}}var Xc={on:"Live",off:"Off","cant-run":"Can't run","needs-fixes":"Needs fixes","cant-turn-on":"Can't turn on"};function E0(e){if(e.enabled){if(!e.runnable)return"cant-run";return e.canTurnOn?"on":"needs-fixes"}return e.canTurnOn?"off":"cant-turn-on"}var wi=$f(()=>w({type:p().optional(),const:ne().optional(),enum:v(ne()).optional(),items:wi.optional(),properties:K(p(),wi).optional(),required:v(p()).optional(),anyOf:v(wi).optional(),oneOf:v(wi).optional()})),eu=K(p(),Ie),cF=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Wn(e){return cF.test(e)?e:JSON.stringify(e)}function Qc(e,t){let r=e.anyOf??e.oneOf;if(r)return r.map((n)=>Qc(n,t)).join(" | ");if(e.const!==void 0)return JSON.stringify(e.const);if(e.enum)return e.enum.map((n)=>JSON.stringify(n)).join(" | ");switch(e.type){case"string":return"string";case"integer":case"number":return"number";case"boolean":return"boolean";case"array":return`readonly (${e.items?Qc(e.items,t):"unknown"})[]`;case"object":{let n=Object.entries(e.properties??{});if(n.length===0)return"Record<never, never>";let o=`${t} `;return`{
240
240
  ${n.map(([i,a])=>`${o}readonly ${Wn(i)}${e.required?.includes(i)?"":"?"}: ${Qc(a,o)};`).join(`
241
241
  `)}
242
242
  ${t}}`}default:return"unknown"}}function fm(e,t=""){let r=wi.safeParse(Kv(e,{io:"input",unrepresentable:"any"}));return r.success?Qc(r.data,t):"unknown"}function uF(){let e=Ge.map((n)=>` readonly ${Wn(n.ruleId)}: ${fm(n.configSchema,"\t\t")};`),t=Object.entries(Yr).map(([n,o])=>` readonly ${Wn(n)}: ${fm(o,"\t\t")};`),r=Po.map((n)=>JSON.stringify(n)).join(" | ");return["export interface TripwireCatalog {","\treadonly rules: {",...e,"\t};","\treadonly actions: {",...t,"\t};",` readonly events: ${r};`,` readonly schedule: ${fm(vo,"\t")};`,"}"].join(`
@@ -266,7 +266,7 @@ ${gm.map((t)=>` ${t},`).join(`
266
266
  `).concat(`
267
267
  `)}var Co="./.tripwire/workflow.ts";var EF=["pending","accepted","rejected","expired","stale"],TF=z(EF);var R0=25,OF=["accept","reject"],dpe=z(OF),PF=w({id:p(),revision:O().int().min(0)}),IF=w({definition:pt,baseWorkflowId:p().nullable(),baseHash:p().nullable(),baseDefinition:pt.nullable(),draft:PF.nullable().optional()}),ppe=v(IF).min(1),AF=w({id:p(),name:p(),outcome:z(["created","updated"]),workflowId:p()}),fpe=v(AF),RF=z(["new","changed"]),wm=w({id:p(),org:p(),repo:p(),status:TF,url:p(),expiresAt:p(),workflows:v(w({id:p(),name:p(),change:RF,outcome:z(["created","updated"]).optional(),url:p().optional()}))}),C0={pending:"Waiting for review",accepted:"Accepted",rejected:"Declined",expired:"Expired",stale:"Out of date"};function z0(e){return e==="accepted"?0:1}var CF=w({id:p(),name:p(),issues:v(p())}),N0=Ct("result",[w({result:C("proposed"),push:wm}),w({result:C("unchanged")}),w({result:C("blocked"),workflows:v(CF)})]);var{block:zF,check:NF,close:LF,label:jF,lock:DF,postComment:L0,removeLabel:MF,schedule:bm,trigger:qF,workflow:ru,workflows:FF}=Kx;function j0(e){let t=bm({every:e.every,match:{subjects:[e.subject],state:"open",inactiveFor:{n:e.warnAfterDays,unit:"days"},excludeLabels:["stale","no-auto-close"],skipLocked:!0}}),r=bm({every:e.every,match:{subjects:[e.subject],state:"open",inactiveFor:{n:e.closeAfterDays,unit:"days"},labels:["stale"],excludeLabels:["no-auto-close"],skipLocked:!0}}),n=qF(...e.resetOn);return{warn:t,"mark-stale":jF({labels:["stale"]}).after(t),"warn-comment":L0({message:e.warning}).after(t),close:r,"close-comment":L0({message:e.closing}).after(r),"close-it":LF().after(r),reset:n,"unmark-stale":MF({labels:["stale"]}).after(n)}}var D0=bm({every:{n:12,unit:"hours"},match:{subjects:["issue","change-request"],state:"closed",inactiveFor:{n:15,unit:"days"},skipLocked:!0}}),UF=FF({"block-new-accounts":ru({name:"Block new accounts",on:"change-request.opened",check:NF("account-age",{minDays:7}),fail:[zF()]}),"lock-inactive-threads":ru({name:"Lock inactive threads",steps:{trigger:D0,lock:DF({reason:"resolved"}).after(D0)}}),"close-stale-issues":ru({name:"Close stale issues",steps:j0({subject:"issue",every:{n:12,unit:"hours"},warnAfterDays:15,closeAfterDays:7,warning:"This issue has had no activity for 15 days. It will close in 7 days unless someone comments.",closing:"Closing after 22 days with no activity. Reopen it if it still matters.",resetOn:["comment.created"]})}),"close-stale-change-requests":ru({name:"Close stale change requests",steps:j0({subject:"change-request",every:{n:1,unit:"days"},warnAfterDays:21,closeAfterDays:7,warning:"This change request has had no activity for 3 weeks. It will close in 7 days unless someone updates it.",closing:"Closing after 4 weeks with no activity. Reopen it when you pick it back up.",resetOn:["change-request.updated","comment.created"]})})}),WF={"block-new-accounts":"Blocks change requests from accounts less than a week old.","lock-inactive-threads":"Every 12 hours, locks closed issues and change requests with no activity for 15 days.","close-stale-issues":"Every 12 hours, warns on issues with no activity for 15 days and closes them 7 days later. A comment clears the warning.","close-stale-change-requests":"Warns after 3 weeks with no activity, closes a week later, and clears the warning on any update."},VF=new Map(Object.entries(WF));function ZF(){let e=dm(UF);if(!e.ok)throw Error(`workflow templates do not compile: ${e.issues.map((t)=>t.message).join("; ")}`);return e.definitions.map((t)=>({id:t.id,name:t.name,description:VF.get(t.id)??"",definition:t}))}var ype=ZF();var B0=zn(su(),1);var _i={label:(e)=>e,good:(e)=>e,next:(e)=>e,bad:(e)=>e};function Si(e,t){if(!e||t.NO_COLOR)return _i;let r=B0.default.createColors(!0);return{label:r.dim,good:r.green,next:r.yellow,bad:r.red}}var F0=10;function we(e,t=_i){return e.map(([r,n])=>{let o=" ".repeat(Math.max(1,F0-r.length));return`${r===""?" ".repeat(F0):`${t.label(r)}${o}`}${n}`.trimEnd()}).join(`
268
268
  `)}function K0(e){return GF(e).length}function JF(e,t){return e+" ".repeat(Math.max(0,t-K0(e)))}function Vn(e,t,r=30){let n=e.map((s,i)=>{let c=Math.max(s.length,...t.map((u)=>K0(u[i]??"")))+5;return i===0?Math.max(r,c):c}),o=(s)=>s.map((i,a)=>a===s.length-1?i:JF(i,n[a]??0)).join("").trimEnd();return[o(e),...t.map(o)].join(`
269
- `)}function lr(e,t=_i){return we([["error",e]],{...t,label:t.bad})}function iu(e,t=_i){return we([["warn",e]],t)}function H0(e){let t=e.replace(/[\s-]/g,"").toUpperCase();return t.length===8?`${t.slice(0,4)}-${t.slice(4)}`:e}function U0(e){return e.map((t)=>rx.find((r)=>r.kind===t)?.name.toLowerCase()??t)}function bi(e,t){return e?t.good("on"):"off"}function W0(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return e;return`${t.toISOString().slice(0,16).replace("T"," ")} UTC`}function V0(e){return e.slice(e.lastIndexOf("/")+1)}var YF=w({user:w({name:p().nullish(),email:p().nullish()}).nullish(),access:w({approved:N(),requestAccessUrl:p().optional()}),orgs:v(w({slug:p(),role:p(),agentAllowed:N().optional()}))}),XF={install_app:"Install the GitHub App",sync_repos:"Wait for repos to sync, then run tripwire status again",turn_on_gate:"Turn on the gate. Run tripwire gate on <repo>"},QF=w({org:p(),role:p().optional(),nextStep:p(),installUrl:p().optional(),home:p().optional()}),eU=v(w({name:p(),gateOn:N(),toReview:O(),blocked24h:O()})),tU=v(w({ruleId:p(),name:p(),optIn:N().optional()})),rU=v(w({ruleId:p(),enabled:N(),management:p().nullish(),cannotRun:p().nullish(),matches24h:O().nullish(),sentence:p().nullish()})),nU=w({id:p(),created:N(),enabled:N(),sentence:p(),use:p().optional(),url:p().optional()}),oU=w({deleted:C(!0),id:p()}),sU=v(w({id:p(),name:p(),enabled:N(),runnable:N().optional(),canTurnOn:N().optional(),triggerKinds:v(p()).optional(),schedules:v(p()).optional()}));function Sm(e,t){if(t.length===0)return U0(e);return[...U0(e.filter((r)=>r!=="schedule.matched")),...t]}function iU(e,t){let r=E0({enabled:e.enabled,runnable:e.runnable??!0,canTurnOn:e.canTurnOn??!0}),n=Xc[r].toLowerCase();if(r==="on")return t.good(n);if(r==="cant-run"||r==="needs-fixes")return t.bad(n);return n}var aU=w({enabled:N(),url:p().optional(),warnings:v(w({message:p()})).optional()}),cU=v(w({id:p(),repo:p().optional(),number:O().nullish(),status:p(),verdict:p().nullish(),result:p().nullish(),verdictLabel:p().nullish(),createdAt:p()})),uU=w({id:p(),repo:p(),number:O().nullish(),status:p(),verdict:p().nullish(),result:p().nullish(),verdictLabel:p().nullish(),createdAt:p(),steps:v(w({kind:p(),rule:p().nullish(),status:p(),summary:p().nullish(),workflow:p().nullish(),stepId:p().nullish(),step:p().optional(),outcome:p().optional()})),url:p().optional()}),lU=w({items:v(w({itemId:p(),repo:p().optional(),number:O().nullish(),actor:p().nullish(),title:p().nullish()})),url:p().optional()}),dU=w({done:N(),alreadyDecided:N().optional(),confirmUrl:p().optional(),forUser:p().optional(),decision:z(["approve","remove","ban"]).optional(),itemId:p().optional(),repo:p().optional(),number:O().nullish()}),pU=[["approve","let the change request through"],["remove","block it"],["ban","get a link where a person bans the contributor"]];function G0(e){let t=pU.map(([r,n])=>`${r} to ${n}`);return`${e} is not a choice. Use ${t.slice(0,-1).join(", ")}, or ${t.at(-1)}.`}var fU={approve:"Approved",remove:"Blocked"};function mU(e){let t=e.number?`#${e.number}`:e.itemId;if(!t)return"";return e.repo?` ${t} on ${e.repo}`:` ${t}`}function hU(e){if(!e.step)return e.rule??e.kind;return e.stepId?`${e.step} (${e.stepId})`:e.step}var gU=w({ruleId:p(),enabled:N()}),yU=w({repo:p(),url:p().optional()});function Z0(e,t){let r=e.result??e.verdict,n=e.verdictLabel??Vx(e.verdict);if(!(r&&n))return e.verdict??"-";if(r==="pass")return t.good(n);if(r==="block")return t.bad(n);if(r==="needs_review")return t.next(n);return n}function st(e,t){return(r,n)=>{let o=e.safeParse(r);return o.success?t(o.data,n):null}}var wU={whoami:st(YF,(e,t)=>{let r=[e.user?.name,e.user?.email].filter(Boolean).join(" "),n=e.orgs.map((s)=>s.agentAllowed===!1?`${s.slug} (${s.role}, not granted)`:`${s.slug} (${s.role})`),o=[["user",r||"-"],["access",e.access.approved?t.good("approved"):t.next("not approved")]];if(!e.access.approved&&e.access.requestAccessUrl)o.push(["open",e.access.requestAccessUrl]);o.push(["orgs",n[0]??"none"]);for(let s of n.slice(1))o.push(["",s]);return we(o,t)}),setup_status:st(QF,(e,t)=>{let r=[["org",e.org]];if(e.nextStep==="done")r.push(["done",t.good("Tripwire checks pull requests")]);else if(e.nextStep==="install_app"&&!e.installUrl)r.push(["next",t.next(`Ask an admin of ${e.org} to install the GitHub App`)]);else r.push(["next",t.next(XF[e.nextStep]??e.nextStep)]);if(e.installUrl)r.push(["open",e.installUrl]);return we(r,t)}),list_repos:st(eU,(e,t)=>{if(e.length===0)return"No repos yet. Run tripwire status to see the next step.";return Vn(["REPO","GATE","TO REVIEW","BLOCKED 24H"],e.map((r)=>[r.name,bi(r.gateOn,t),String(r.toReview),String(r.blocked24h)]))}),list_rule_catalog:st(tU,(e)=>Vn(["RULE","NAME","OPT-IN"],e.map((t)=>[t.ruleId,t.name,t.optIn?"yes":"no"]))),get_repo_rules:st(rU,(e,t)=>{if(e.length===0)return"No rules on this repo.";return Vn(["RULE","STATE","MATCHES 24H","NOTE"],e.map((r)=>[r.ruleId,bi(r.enabled,t),String(r.matches24h??0),r.cannotRun??(r.management==="managed"?"set by a workflow":r.sentence??"")]))}),set_rule:st(gU,(e,t)=>we([["done",`${e.ruleId} is ${bi(e.enabled,t)}`]],t)),save_custom_rule:st(nU,(e,t)=>{let r=[["done",`${e.created?"Created":"Saved"} ${e.id}`],["rule",e.sentence],["state",bi(e.enabled,t)]];if(e.use)r.push(["use",e.use]);if(e.url)r.push(["open",e.url]);return we(r,t)}),delete_custom_rule:st(oU,(e,t)=>we([["done",`Deleted ${e.id}`]],t)),turn_on_gate:st(yU,(e,t)=>{let r=[["done",`Gate is ${t.good("on")} for ${e.repo}`]];if(e.url)r.push(["open",e.url]);return we(r,t)}),list_workflows:st(sU,(e,t)=>{if(e.length===0)return"No workflows on this repo.";return Vn(["WORKFLOW","ID","STATE","TRIGGERS"],e.map((r)=>[r.name,r.id,iU(r,t),Sm(r.triggerKinds??[],r.schedules??[]).join(", ")]))}),set_workflow_enabled:st(aU,(e,t)=>{let r=[["done",`Workflow is ${bi(e.enabled,t)}`]];for(let n of e.warnings??[])r.push(["warning",n.message]);if(e.url)r.push(["open",e.url]);return we(r,t)}),list_runs:st(cU,(e,t)=>{if(e.length===0)return"No runs yet.";return Vn(["RUN","REPO","PR","STATUS","VERDICT","CREATED"],e.map((r)=>[r.id,r.repo?V0(r.repo):"-",r.number?`#${r.number}`:"-",r.status,Z0(r,t),W0(r.createdAt)]))}),get_run:st(uU,(e,t)=>{let r=[["run",e.id],["repo",e.number?`${e.repo} #${e.number}`:e.repo],["status",e.status],["verdict",Z0(e,t)],["created",W0(e.createdAt)]];if(e.url)r.push(["open",e.url]);let n=we(r,t);if(e.steps.length===0)return n;let o=Vn(["WORKFLOW","STEP","OUTCOME","SUMMARY"],e.steps.map((s)=>{let i=s.outcome??s.status;return[s.workflow??"-",hU(s),s.status==="fail"?t.bad(i):i,s.summary??""]}),0);return`${n}
269
+ `)}function lr(e,t=_i){return we([["error",e]],{...t,label:t.bad})}function iu(e,t=_i){return we([["warn",e]],t)}function H0(e){let t=e.replace(/[\s-]/g,"").toUpperCase();return t.length===8?`${t.slice(0,4)}-${t.slice(4)}`:e}function U0(e){return e.map((t)=>rx.find((r)=>r.kind===t)?.name.toLowerCase()??t)}function bi(e,t){return e?t.good("on"):"off"}function W0(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return e;return`${t.toISOString().slice(0,16).replace("T"," ")} UTC`}function V0(e){return e.slice(e.lastIndexOf("/")+1)}var YF=w({user:w({name:p().nullish(),email:p().nullish(),githubLogin:p().nullish()}).nullish(),access:w({approved:N(),requestAccessUrl:p().optional()}),orgs:v(w({slug:p(),role:p(),agentAllowed:N().optional()}))}),XF={install_app:"Install the GitHub App",sync_repos:"Wait for repos to sync, then run tripwire status again",turn_on_gate:"Turn on the gate. Run tripwire gate on <repo>"},QF=w({org:p(),role:p().optional(),nextStep:p(),installUrl:p().optional(),home:p().optional()}),eU=v(w({name:p(),gateOn:N(),toReview:O(),blocked24h:O()})),tU=v(w({ruleId:p(),name:p(),optIn:N().optional()})),rU=v(w({ruleId:p(),enabled:N(),management:p().nullish(),cannotRun:p().nullish(),matches24h:O().nullish(),sentence:p().nullish()})),nU=w({id:p(),created:N(),enabled:N(),sentence:p(),use:p().optional(),url:p().optional()}),oU=w({deleted:C(!0),id:p()}),sU=v(w({id:p(),name:p(),enabled:N(),runnable:N().optional(),canTurnOn:N().optional(),triggerKinds:v(p()).optional(),schedules:v(p()).optional()}));function Sm(e,t){if(t.length===0)return U0(e);return[...U0(e.filter((r)=>r!=="schedule.matched")),...t]}function iU(e,t){let r=E0({enabled:e.enabled,runnable:e.runnable??!0,canTurnOn:e.canTurnOn??!0}),n=Xc[r].toLowerCase();if(r==="on")return t.good(n);if(r==="cant-run"||r==="needs-fixes")return t.bad(n);return n}var aU=w({enabled:N(),url:p().optional(),warnings:v(w({message:p()})).optional()}),cU=v(w({id:p(),repo:p().optional(),number:O().nullish(),status:p(),verdict:p().nullish(),result:p().nullish(),verdictLabel:p().nullish(),createdAt:p()})),uU=w({id:p(),repo:p(),number:O().nullish(),status:p(),verdict:p().nullish(),result:p().nullish(),verdictLabel:p().nullish(),createdAt:p(),steps:v(w({kind:p(),rule:p().nullish(),status:p(),summary:p().nullish(),workflow:p().nullish(),stepId:p().nullish(),step:p().optional(),outcome:p().optional()})),url:p().optional()}),lU=w({items:v(w({itemId:p(),repo:p().optional(),number:O().nullish(),actor:p().nullish(),title:p().nullish()})),url:p().optional()}),dU=w({done:N(),alreadyDecided:N().optional(),confirmUrl:p().optional(),forUser:p().optional(),decision:z(["approve","remove","ban"]).optional(),itemId:p().optional(),repo:p().optional(),number:O().nullish()}),pU=[["approve","let the change request through"],["remove","block it"],["ban","get a link where a person bans the contributor"]];function G0(e){let t=pU.map(([r,n])=>`${r} to ${n}`);return`${e} is not a choice. Use ${t.slice(0,-1).join(", ")}, or ${t.at(-1)}.`}var fU={approve:"Approved",remove:"Blocked"};function mU(e){let t=e.number?`#${e.number}`:e.itemId;if(!t)return"";return e.repo?` ${t} on ${e.repo}`:` ${t}`}function hU(e){if(!e.step)return e.rule??e.kind;return e.stepId?`${e.step} (${e.stepId})`:e.step}var gU=w({ruleId:p(),enabled:N()}),yU=w({repo:p(),url:p().optional()});function Z0(e,t){let r=e.result??e.verdict,n=e.verdictLabel??Vx(e.verdict);if(!(r&&n))return e.verdict??"-";if(r==="pass")return t.good(n);if(r==="block")return t.bad(n);if(r==="needs_review")return t.next(n);return n}function st(e,t){return(r,n)=>{let o=e.safeParse(r);return o.success?t(o.data,n):null}}var wU={whoami:st(YF,(e,t)=>{let r=[e.user?.name,e.user?.email].filter(Boolean).join(" "),n=e.orgs.map((s)=>s.agentAllowed===!1?`${s.slug} (${s.role}, not granted)`:`${s.slug} (${s.role})`),o=[["user",r||"-"],...e.user?.githubLogin?[["github",`@${e.user.githubLogin}`]]:[],["access",e.access.approved?t.good("approved"):t.next("not approved")]];if(!e.access.approved&&e.access.requestAccessUrl)o.push(["open",e.access.requestAccessUrl]);o.push(["orgs",n[0]??"none"]);for(let s of n.slice(1))o.push(["",s]);return we(o,t)}),setup_status:st(QF,(e,t)=>{let r=[["org",e.org]];if(e.nextStep==="done")r.push(["done",t.good("Tripwire checks pull requests")]);else if(e.nextStep==="install_app"&&!e.installUrl)r.push(["next",t.next(`Ask an admin of ${e.org} to install the GitHub App`)]);else r.push(["next",t.next(XF[e.nextStep]??e.nextStep)]);if(e.installUrl)r.push(["open",e.installUrl]);return we(r,t)}),list_repos:st(eU,(e,t)=>{if(e.length===0)return"No repos yet. Run tripwire status to see the next step.";return Vn(["REPO","GATE","TO REVIEW","BLOCKED 24H"],e.map((r)=>[r.name,bi(r.gateOn,t),String(r.toReview),String(r.blocked24h)]))}),list_rule_catalog:st(tU,(e)=>Vn(["RULE","NAME","OPT-IN"],e.map((t)=>[t.ruleId,t.name,t.optIn?"yes":"no"]))),get_repo_rules:st(rU,(e,t)=>{if(e.length===0)return"No rules on this repo.";return Vn(["RULE","STATE","MATCHES 24H","NOTE"],e.map((r)=>[r.ruleId,bi(r.enabled,t),String(r.matches24h??0),r.cannotRun??(r.management==="managed"?"set by a workflow":r.sentence??"")]))}),set_rule:st(gU,(e,t)=>we([["done",`${e.ruleId} is ${bi(e.enabled,t)}`]],t)),save_custom_rule:st(nU,(e,t)=>{let r=[["done",`${e.created?"Created":"Saved"} ${e.id}`],["rule",e.sentence],["state",bi(e.enabled,t)]];if(e.use)r.push(["use",e.use]);if(e.url)r.push(["open",e.url]);return we(r,t)}),delete_custom_rule:st(oU,(e,t)=>we([["done",`Deleted ${e.id}`]],t)),turn_on_gate:st(yU,(e,t)=>{let r=[["done",`Gate is ${t.good("on")} for ${e.repo}`]];if(e.url)r.push(["open",e.url]);return we(r,t)}),list_workflows:st(sU,(e,t)=>{if(e.length===0)return"No workflows on this repo.";return Vn(["WORKFLOW","ID","STATE","TRIGGERS"],e.map((r)=>[r.name,r.id,iU(r,t),Sm(r.triggerKinds??[],r.schedules??[]).join(", ")]))}),set_workflow_enabled:st(aU,(e,t)=>{let r=[["done",`Workflow is ${bi(e.enabled,t)}`]];for(let n of e.warnings??[])r.push(["warning",n.message]);if(e.url)r.push(["open",e.url]);return we(r,t)}),list_runs:st(cU,(e,t)=>{if(e.length===0)return"No runs yet.";return Vn(["RUN","REPO","PR","STATUS","VERDICT","CREATED"],e.map((r)=>[r.id,r.repo?V0(r.repo):"-",r.number?`#${r.number}`:"-",r.status,Z0(r,t),W0(r.createdAt)]))}),get_run:st(uU,(e,t)=>{let r=[["run",e.id],["repo",e.number?`${e.repo} #${e.number}`:e.repo],["status",e.status],["verdict",Z0(e,t)],["created",W0(e.createdAt)]];if(e.url)r.push(["open",e.url]);let n=we(r,t);if(e.steps.length===0)return n;let o=Vn(["WORKFLOW","STEP","OUTCOME","SUMMARY"],e.steps.map((s)=>{let i=s.outcome??s.status;return[s.workflow??"-",hU(s),s.status==="fail"?t.bad(i):i,s.summary??""]}),0);return`${n}
270
270
 
271
271
  ${o}`}),list_moderation_queue:st(lU,(e)=>{if(e.items.length===0)return"Nothing to review.";return Vn(["ITEM","REPO","PR","AUTHOR","TITLE"],e.items.map((t)=>[t.itemId,t.repo?V0(t.repo):"-",t.number?`#${t.number}`:"-",t.actor??"-",t.title??""]))}),decide_moderation:st(dU,(e,t)=>{if(e.confirmUrl)return we([["open",e.confirmUrl],["",e.forUser??"Open this link to confirm."]],t);let r=mU(e);if(!e.done)return we([["done",`${r.trim()||"This item"} was already decided`]],t);let n=e.decision==="approve"||e.decision==="remove"?fU[e.decision]:"Decided";return we([["done",t.good(`${n}${r}`)]],t)})};function J0(e,t,r=_i){let n=wU[e];if(!(n&&t!==null))return null;return n(t,r)}var bU={list_orgs:"Run tripwire whoami to see your orgs.",pick_org:"Pass --org <slug>, or run tripwire whoami to see them.",list_repos:"Run tripwire repos to see them.",list_runs:"Run tripwire runs list to see recent runs.",list_queue:"Run tripwire queue list to see the items.",list_rules:"Run tripwire rules list to see the rules.",list_workflows:"Run tripwire workflows list <repo> to see them."},_U=w({error:p(),hint:p().optional(),org:p().optional()});function SU(e,t){if(e==="list_repos"&&t)return`Run tripwire repos --org ${t} to see them.`;return e?bU[e]:void 0}var vU=new Map([["number","a number"],["int","a whole number"],["string","text"],["boolean","true or false"],["array","a list"],["object","an object"]]);function kU(e,t){let r=/^Too (big|small): expected (number|string|array) to (?:be|have) ([<>]=?)(\S+)(?: (characters|items))?$/.exec(t);if(r){let[,s="",i="",a="",c="",u=""]=r;if(i==="number"){let l=a==="<="?"or less":a===">="?"or more":"exactly";return a.length===1?`${e} must be ${a==="<"?"less":"more"} than ${c}`:`${e} must be ${c} ${l}`}return s==="big"?`${e} can have at most ${c} ${u}`:`${e} needs at least ${c} ${u}`}let n=/^Invalid input: expected (\w+), received \w+$/.exec(t);if(n){let s=n[1]??"";return`${e} must be ${vU.get(s)??s}`}let o=/^Invalid option: expected one of (.*)$/.exec(t);if(o)return`${e} must be one of ${(o[1]??"").replaceAll('"',"").split("|").join(", ")}`;return`${e} is not valid`}function xU(e){let t=[],r=[];for(let n of e.split(`
272
272
  `)){let o=/^(.*) at ([\w.[\]]+)$/.exec(n.trim());if(!o)continue;let[,s="",i=""]=o;if(/received undefined/.test(s))t.push(i);else r.push(kU(i,s))}if(t.length>0)return`Missing argument${t.length>1?"s":""}: ${t.join(", ")}.`;if(r.length>0)return`${r.join(". ")}.`;return"Invalid arguments."}function zo(e,t=null){let r=_U.safeParse(t);if(r.success){let i=SU(r.data.hint,r.data.org);return i?`${r.data.error} ${i}`:r.data.error}let n=e.replace(/^MCP error -?\d+:\s*/,"").trim(),o=/^Input validation error: Invalid arguments for tool [\w-]+: ([\s\S]*)$/.exec(n);if(o)return xU(o[1]??"");if(/^Tool [\w-]+ (not found|disabled)$/.test(n))return"This Tripwire server does not support this command, or your sign-in does not allow it.";return n.replace(/\s*Call [a-z_]+\b[^.]*\./g,"").trim()||"The Tripwire server returned an error."}import{stdout as Om,stdin as f$}from"node:process";import*as Qr from"node:readline";import qU from"node:readline";var Y0=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(t)=>{let r=0;e.lastIndex=0;while(e.test(t))r+=1;return t.length-r}})(),X0=(e)=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Q0=(e)=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var $U=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,EU=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,e$=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,TU=/\t{1,1000}/y,t$=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,OU=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,PU=/\p{M}+/gu,IU={limit:1/0,ellipsis:""},r$=(e,t={},r={})=>{let n=t.limit??1/0,o=t.ellipsis??"",s=t?.ellipsisWidth??(o?r$(o,IU,r).width:0),i=0,a=r.controlWidth??0,c=r.tabWidth??8,u=r.emojiWidth??2,l=2,d=r.regularWidth??1,f=r.wideWidth??2,m=[[OU,d],[$U,0],[EU,a],[TU,c],[t$,u],[e$,f]],h=0,g=0,y=e.length,b=0,E=!1,k=y,I=Math.max(0,n-s),_=0,S=0,x=0,A=0;e:while(!0){if(S>_||g>=y&&g>h){let D=e.slice(_,S)||e.slice(h,g);b=0;for(let Y of D.replaceAll(PU,"")){let ie=Y.codePointAt(0)||0;if(X0(ie))A=2;else if(Q0(ie))A=f;else A=d;if(x+A>I)k=Math.min(k,Math.max(_,h)+b);if(x+A>n){E=!0;break e}b+=Y.length,x+=A}_=S=0}if(g>=y)break e;for(let D=0,Y=m.length;D<Y;D++){let[ie,ae]=m[D];if(ie.lastIndex=g,ie.test(e)){if(b=ie===e$?Y0(e.slice(g,ie.lastIndex)):ie===t$?1:ie.lastIndex-g,A=b*ae,x+A>I)k=Math.min(k,g+Math.floor((I-x)/ae));if(x+A>n){E=!0;break e}x+=A,_=h,S=g,g=h=ie.lastIndex;continue e}}g+=1}return{width:E?I:x,index:E?k:y,truncated:E,ellipsed:E&&n>=s}},n$=r$;var AU={limit:1/0,ellipsis:"",ellipsisWidth:0},RU=(e,t={})=>n$(e,AU,t).width,dr=RU;var au="\x1B",c$="›",CU=39,km="\x07",u$="[",zU="]",l$="m",xm=`${zU}8;;`,o$=new RegExp(`(?:\\${u$}(?<code>\\d+)m|\\${xm}(?<uri>.*)${km})`,"y"),s$=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},i$=(e)=>`${au}${u$}${e}${l$}`,a$=(e)=>`${au}${xm}${e}${km}`,vm=(e,t,r)=>{let n=t[Symbol.iterator](),o=!1,s=!1,i=e.at(-1),a=i===void 0?0:dr(i),c=n.next(),u=n.next(),l=0;while(!c.done){let d=c.value,f=dr(d);if(a+f<=r)e[e.length-1]+=d;else e.push(d),a=0;if(d===au||d===c$)o=!0,s=t.startsWith(xm,l+1);if(o){if(s){if(d===km)o=!1,s=!1}else if(d===l$)o=!1}else if(a+=f,a===r&&!u.done)e.push(""),a=0;c=u,u=n.next(),l+=d.length}if(i=e.at(-1),!a&&i!==void 0&&i.length&&e.length>1)e[e.length-2]+=e.pop()},NU=(e)=>{let t=e.split(" "),r=t.length;while(r){if(dr(t[r-1]))break;r--}if(r===t.length)return e;return t.slice(0,r).join(" ")+t.slice(r).join("")},LU=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",o,s,i=e.split(" "),a=[""],c=0;for(let d=0;d<i.length;d++){let f=i[d];if(r.trim!==!1){let h=a.at(-1)??"",g=h.trimStart();if(h.length!==g.length)a[a.length-1]=g,c=dr(g)}if(d!==0){if(c>=t&&(r.wordWrap===!1||r.trim===!1))a.push(""),c=0;if(c||r.trim===!1)a[a.length-1]+=" ",c++}let m=dr(f);if(r.hard&&m>t){let h=t-c,g=1+Math.floor((m-h-1)/t);if(Math.floor((m-1)/t)<g)a.push("");vm(a,f,t),c=dr(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){vm(a,f,t),c=dr(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){vm(a,f,t),c=dr(a.at(-1)??"");continue}a[a.length-1]+=f,c+=m}if(r.trim!==!1)a=a.map((d)=>NU(d));let u=a.join(`
@@ -392,6 +392,11 @@ them and carry on. They never block or change setup.
392
392
  repo's \`package.json\` has a \`devEngines\` field: run
393
393
  \`bunx @tripwire-sh/cli install\` or \`npx --prefix ~ @tripwire-sh/cli install\`.
394
394
  Wait, then call \`whoami\` again.
395
+ - Wrong account: \`whoami\` names the GitHub login as \`signedInAs\`. If it is
396
+ not the account that owns the repos, or a repo the user expects is
397
+ missing, ask the user, then call \`switch_account\`. It signs only this
398
+ agent out. Give the user its \`reconnect\` step. On the Tripwire page they
399
+ pick Use another account. Then call \`whoami\` again.
395
400
  - Access pending: Tripwire is in closed beta. Give the request access link
396
401
  https://app.tripwire.sh and stop.
397
402
  - Otherwise report \`connect_mcp\` completed. Use the org slug from the
@@ -478,6 +483,8 @@ the same folder. Without the CLI, the MCP tools \`get_workflow\`,
478
483
  with compiled JSON. Over the MCP, call \`begin_workflow_work\` before you build
479
484
  so the user can watch the draft in the app, and \`finish_workflow_work\` when
480
485
  you stop. A draft never runs. An accepted push or an apply saves the draft.
486
+ If the MCP cannot see the repo, call \`whoami\`. If its GitHub login is the
487
+ wrong account, call \`switch_account\` and give the user the reconnect step.
481
488
 
482
489
  ## Reference
483
490
 
@@ -565,9 +572,8 @@ and comparison.
565
572
  A new rule starts off. A rule that is on and that no workflow uses runs by
566
573
  itself on every change request. To combine rules, keep them off and use them
567
574
  in \`tripwire.ts\`. For example, to block change requests into \`release\` unless
568
- they come from the release-please branch, make a second rule that lists the
569
- exact source branch names to allow,
570
- \`{"when":{"id":"pr.sourceBranch"},"comparison":{"kind":"oneOf","args":[["release-please--branches--release"]]}}\`,
575
+ the source branch comes from release-please, make a second rule
576
+ \`{"when":{"id":"pr.sourceBranch"},"comparison":{"kind":"startsWith","args":["release-please"]}}\`,
571
577
  then:
572
578
 
573
579
  \`\`\`ts
@@ -582,10 +588,11 @@ then:
582
588
  }),
583
589
  \`\`\`
584
590
 
585
- There is no starts-with or regex comparison. Match branches by exact name
586
- with \`oneOf\`. Never use \`has\` as a prefix check: it matches anywhere in the
587
- text, so \`feature/release-please-x\` would pass. Text compares are case
588
- sensitive. Validate with \`--repo\` so the ids
591
+ Text comparisons are \`equals\`, \`has\` (contains), \`startsWith\`, \`endsWith\`,
592
+ \`containsAny\`, \`oneOf\` and \`noneOf\`. Use \`startsWith\` for a prefix. Never use
593
+ \`has\` as a prefix check: it matches anywhere in the text, so
594
+ \`feature/release-please-x\` would pass. There is no regex, and text compares
595
+ are case sensitive. Validate with \`--repo\` so the ids
589
596
  are checked against the repo, then diff and push as usual.
590
597
  `;var G3=[{name:Ys,body:DO},{name:Ek,body:MO}];function mg(e,t=Ys){return qO(e,t,"SKILL.md")}function J3(e,t,r){let n=mg(e,t),o=null;try{o=B3(n,"utf8")}catch{o=null}if(o===r)return"unchanged";Z3(qO(e,t),{recursive:!0});let s=`${n}.tripwire-${process.pid}.tmp`;return H3(s,r),K3(s,n),o===null?"added":"updated"}function FO(e){let t=G3.map((r)=>J3(e,r.name,r.body));if(t.includes("added"))return"added";return t.includes("updated")?"updated":"unchanged"}async function UO(e){let t=e.filter((r)=>r.detect());return Promise.all(t.map(async(r)=>({agent:r,installed:await r.hasServer().catch(()=>!1)})))}async function hg(e,t,r=new Map){try{let n=await e.addServer(t),o=e.skillsDirs().map((s)=>{let i=r.get(s)??FO(s);return r.set(s,i),{path:mg(s),outcome:i}});return{kind:"done",mcp:n,skills:o}}catch(n){return{kind:"failed",message:n instanceof Error?n.message:String(n)}}}function WO(e){return e.status().catch(()=>"unknown")}function VO(e){return Promise.all(e.map(async(t)=>{let r=t.login();if(r===null)return{kind:"manual",agent:t};return await WO(r)==="signed-in"?{kind:"signed-in",agent:t}:{kind:"run",agent:t,login:r}}))}async function Y3(e,t){let r=await t(e).catch(()=>({ok:!1,stdout:"",stderr:""})),n=await WO(e.login);if(n==="unknown")return r.ok?"signed-in":"failed";return n==="signed-in"?"signed-in":"failed"}async function ZO(e,t){let r=[];for(let n of e)if(n.kind==="run")r.push({agent:n.agent,outcome:await Y3(n,t),login:n.login});else r.push({agent:n.agent,outcome:n.kind==="signed-in"?"already":"manual",login:null});return r}var BO=new Intl.ListFormat("en",{style:"long",type:"conjunction"});function KO(e,t){return t.split(e.home).join("~")}function X3(e,t){let{result:r}=t;if(r.kind==="failed")return Tt.default.red(r.message);let n=[`${Tt.default.dim("mcp ")} ${KO(e,r.mcp.target)} ${Tt.default.dim(`(${r.mcp.outcome})`)}`];if(r.skills.length===0)n.push(`${Tt.default.dim("skill")} ${Tt.default.dim("not supported, MCP only")}`);for(let o of r.skills)n.push(`${Tt.default.dim("skill")} ${KO(e,o.path)} ${Tt.default.dim(`(${o.outcome})`)}`);return n.join(`
591
598
  `)}function Q3(){return Tt.default.bgRed(Tt.default.black(Tt.default.bold(" tripwire ")))}async function eJ(e){let t=await E$({message:"Select the agents to set up Tripwire for",options:e.map((r)=>({value:r.agent.id,label:r.installed?`${r.agent.name} (reinstall)`:r.agent.name})),initialValues:e.map((r)=>r.agent.id),required:!1,showInstructions:!1});if(vi(t))return null;return e.filter((r)=>t.includes(r.agent.id))}function HO(e){return mt(e.command.split(/[\\/]/).pop()??e.command,e.args)}function tJ(e){switch(e.outcome){case"signed-in":return"signed in";case"already":return"already signed in";case"failed":return e.login?`not signed in, run ${HO(e.login)}`:"not signed in";case"manual":return`sign in with ${e.agent.signInHint}`}}function rJ(e){let t=Math.max(...e.map(({agent:o})=>o.name.length)),r=e.map((o)=>`${o.agent.name.padEnd(t)} ${tJ(o)}`);(e.some(({outcome:o})=>o==="failed")?Le.warn:Le.info)(`Tripwire sign-in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tripwire-sh/cli",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Set up Tripwire in your coding agents and manage it from the terminal",
5
5
  "type": "module",
6
6
  "imports": {