allwright 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/allwright.js +126 -126
  2. package/package.json +1 -1
package/bin/allwright.js CHANGED
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var yd=Object.create;var ai=Object.defineProperty;var vd=Object.getOwnPropertyDescriptor;var _d=Object.getOwnPropertyNames;var bd=Object.getPrototypeOf,wd=Object.prototype.hasOwnProperty;var ui=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var Y=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Qn=(r,e)=>{for(var t in e)ai(r,t,{get:e[t],enumerable:!0})},kd=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _d(e))!wd.call(r,s)&&s!==t&&ai(r,s,{get:()=>e[s],enumerable:!(n=vd(e,s))||n.enumerable});return r};var $=(r,e,t)=>(t=r!=null?yd(bd(r)):{},kd(e||!r||!r.__esModule?ai(t,"default",{value:r,enumerable:!0}):t,r));var wn=Y(ci=>{var es=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},li=class extends es{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};ci.CommanderError=es;ci.InvalidArgumentError=li});var ts=Y(hi=>{var{InvalidArgumentError:Sd}=wn(),di=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Sd(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Td(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}hi.Argument=di;hi.humanReadableArgName=Td});var pi=Y(aa=>{var{humanReadableArgName:xd}=ts(),fi=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!s&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>xd(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function a(x,_){if(_){let O=`${x.padEnd(n+o)}${_}`;return t.wrap(O,s-i,n+o)}return x}function l(x){return x.join(`
3
- `).replace(/^/gm," ".repeat(i))}let c=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(c=c.concat([t.wrap(d,s,0),""]));let p=t.visibleArguments(e).map(x=>a(t.argumentTerm(x),t.argumentDescription(x)));p.length>0&&(c=c.concat(["Arguments:",l(p),""]));let w=t.visibleOptions(e).map(x=>a(t.optionTerm(x),t.optionDescription(x)));if(w.length>0&&(c=c.concat(["Options:",l(w),""])),this.showGlobalOptions){let x=t.visibleGlobalOptions(e).map(_=>a(t.optionTerm(_),t.optionDescription(_)));x.length>0&&(c=c.concat(["Global Options:",l(x),""]))}let S=t.visibleCommands(e).map(x=>a(t.subcommandTerm(x),t.subcommandDescription(x)));return S.length>0&&(c=c.concat(["Commands:",l(S),""])),c.join(`
2
+ "use strict";var xd=Object.create;var hi=Object.defineProperty;var Cd=Object.getOwnPropertyDescriptor;var Ed=Object.getOwnPropertyNames;var Id=Object.getPrototypeOf,Ad=Object.prototype.hasOwnProperty;var fi=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var Y=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ns=(r,e)=>{for(var t in e)hi(r,t,{get:e[t],enumerable:!0})},Rd=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ed(e))!Ad.call(r,s)&&s!==t&&hi(r,s,{get:()=>e[s],enumerable:!(n=Cd(e,s))||n.enumerable});return r};var P=(r,e,t)=>(t=r!=null?xd(Id(r)):{},Rd(e||!r||!r.__esModule?hi(t,"default",{value:r,enumerable:!0}):t,r));var Tn=Y(mi=>{var ss=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},pi=class extends ss{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};mi.CommanderError=ss;mi.InvalidArgumentError=pi});var is=Y(yi=>{var{InvalidArgumentError:$d}=Tn(),gi=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new $d(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Pd(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}yi.Argument=gi;yi.humanReadableArgName=Pd});var _i=Y(pa=>{var{humanReadableArgName:jd}=is(),vi=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!s&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>jd(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function a(T,C){if(C){let k=`${T.padEnd(n+o)}${C}`;return t.wrap(k,s-i,n+o)}return T}function l(T){return T.join(`
3
+ `).replace(/^/gm," ".repeat(i))}let c=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(c=c.concat([t.wrap(d,s,0),""]));let p=t.visibleArguments(e).map(T=>a(t.argumentTerm(T),t.argumentDescription(T)));p.length>0&&(c=c.concat(["Arguments:",l(p),""]));let _=t.visibleOptions(e).map(T=>a(t.optionTerm(T),t.optionDescription(T)));if(_.length>0&&(c=c.concat(["Options:",l(_),""])),this.showGlobalOptions){let T=t.visibleGlobalOptions(e).map(C=>a(t.optionTerm(C),t.optionDescription(C)));T.length>0&&(c=c.concat(["Global Options:",l(T),""]))}let S=t.visibleCommands(e).map(T=>a(t.subcommandTerm(T),t.subcommandDescription(T)));return S.length>0&&(c=c.concat(["Commands:",l(S),""])),c.join(`
4
4
  `)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let a=t-n;if(a<s)return e;let l=e.slice(0,n),c=e.slice(n).replace(`\r
5
5
  `,`
6
- `),d=" ".repeat(n),w="\\s\u200B",S=new RegExp(`
7
- |.{1,${a-1}}([${w}]|$)|[^${w}]+?([${w}]|$)`,"g"),x=c.match(S)||[];return l+x.map((_,O)=>_===`
8
- `?"":(O>0?d:"")+_.trimEnd()).join(`
9
- `)}};aa.Help=fi});var vi=Y(yi=>{var{InvalidArgumentError:Cd}=wn(),mi=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Id(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Cd(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ed(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},gi=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Ed(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Id(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}yi.Option=mi;yi.DualOptions=gi});var la=Y(ua=>{function Ad(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Rd(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(o=>o.slice(2)));let n=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=Ad(r,o),l=Math.max(r.length,o.length);(l-a)/l>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
6
+ `),d=" ".repeat(n),_="\\s\u200B",S=new RegExp(`
7
+ |.{1,${a-1}}([${_}]|$)|[^${_}]+?([${_}]|$)`,"g"),T=c.match(S)||[];return l+T.map((C,k)=>C===`
8
+ `?"":(k>0?d:"")+C.trimEnd()).join(`
9
+ `)}};pa.Help=vi});var Si=Y(ki=>{var{InvalidArgumentError:Od}=Tn(),bi=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Md(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Od(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Nd(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},wi=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Nd(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Md(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}ki.Option=bi;ki.DualOptions=wi});var ga=Y(ma=>{function Ld(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Dd(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(o=>o.slice(2)));let n=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=Ld(r,o),l=Math.max(r.length,o.length);(l-a)/l>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
10
10
  (Did you mean one of ${n.join(", ")}?)`:n.length===1?`
11
- (Did you mean ${n[0]}?)`:""}ua.suggestSimilar=Rd});var pa=Y(fa=>{var $d=require("node:events").EventEmitter,_i=require("node:child_process"),Qe=require("node:path"),bi=require("node:fs"),se=require("node:process"),{Argument:Pd,humanReadableArgName:jd}=ts(),{CommanderError:wi}=wn(),{Help:Od}=pi(),{Option:ca,DualOptions:Nd}=vi(),{suggestSimilar:da}=la(),ki=class r extends $d{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>se.stdout.write(t),writeErr:t=>se.stderr.write(t),getOutHelpWidth:()=>se.stdout.isTTY?se.stdout.columns:void 0,getErrHelpWidth:()=>se.stderr.isTTY?se.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return s&&(l.description(s),l._executableHandler=!0),i.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(i.noHelp||i.hidden),l._executableFile=i.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),s?this:l}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Od,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
- - specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Pd(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
- Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new wi(e,t,n)),se.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new ca(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
14
- - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let l=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,l,o):i!==null&&e.variadic&&(i=e._concatValue(i,l)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof ca)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let d=a.exec(l);return d?d[0]:c},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){se.versions?.electron&&(t.from="electron");let s=se.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=se.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":se.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(d,p){let w=Qe.resolve(d,p);if(bi.existsSync(w))return w;if(s.includes(Qe.extname(p)))return;let S=s.find(x=>bi.existsSync(`${w}${x}`));if(S)return`${w}${S}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=bi.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=Qe.resolve(Qe.dirname(d),a)}if(a){let d=i(a,o);if(!d&&!e._executableFile&&this._scriptPath){let p=Qe.basename(this._scriptPath,Qe.extname(this._scriptPath));p!==this._name&&(d=i(a,`${p}-${e._name}`))}o=d||o}n=s.includes(Qe.extname(o));let l;se.platform!=="win32"?n?(t.unshift(o),t=ha(se.execArgv).concat(t),l=_i.spawn(se.argv[0],t,{stdio:"inherit"})):l=_i.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=ha(se.execArgv).concat(t),l=_i.spawn(se.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{se.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let c=this._exitCallback;l.on("close",d=>{d=d??1,c?c(new wi(d,"commander.executeSubCommandAsync","(close)")):se.exit(d)}),l.on("error",d=>{if(d.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",w=`'${o}' does not exist
11
+ (Did you mean ${n[0]}?)`:""}ma.suggestSimilar=Dd});var wa=Y(ba=>{var zd=require("node:events").EventEmitter,Ti=require("node:child_process"),tt=require("node:path"),xi=require("node:fs"),ie=require("node:process"),{Argument:Ud,humanReadableArgName:qd}=is(),{CommanderError:Ci}=Tn(),{Help:Bd}=_i(),{Option:ya,DualOptions:Fd}=Si(),{suggestSimilar:va}=ga(),Ei=class r extends zd{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>ie.stdout.write(t),writeErr:t=>ie.stderr.write(t),getOutHelpWidth:()=>ie.stdout.isTTY?ie.stdout.columns:void 0,getErrHelpWidth:()=>ie.stderr.isTTY?ie.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return s&&(l.description(s),l._executableHandler=!0),i.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(i.noHelp||i.hidden),l._executableFile=i.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),s?this:l}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Bd,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
+ - specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Ud(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
+ Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new Ci(e,t,n)),ie.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new ya(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
14
+ - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let l=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,l,o):i!==null&&e.variadic&&(i=e._concatValue(i,l)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof ya)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let d=a.exec(l);return d?d[0]:c},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){ie.versions?.electron&&(t.from="electron");let s=ie.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=ie.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":ie.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(d,p){let _=tt.resolve(d,p);if(xi.existsSync(_))return _;if(s.includes(tt.extname(p)))return;let S=s.find(T=>xi.existsSync(`${_}${T}`));if(S)return`${_}${S}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=xi.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=tt.resolve(tt.dirname(d),a)}if(a){let d=i(a,o);if(!d&&!e._executableFile&&this._scriptPath){let p=tt.basename(this._scriptPath,tt.extname(this._scriptPath));p!==this._name&&(d=i(a,`${p}-${e._name}`))}o=d||o}n=s.includes(tt.extname(o));let l;ie.platform!=="win32"?n?(t.unshift(o),t=_a(ie.execArgv).concat(t),l=Ti.spawn(ie.argv[0],t,{stdio:"inherit"})):l=Ti.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=_a(ie.execArgv).concat(t),l=Ti.spawn(ie.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{ie.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let c=this._exitCallback;l.on("close",d=>{d=d??1,c?c(new Ci(d,"commander.executeSubCommandAsync","(close)")):ie.exit(d)}),l.on("error",d=>{if(d.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",_=`'${o}' does not exist
15
15
  - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
16
16
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
17
- - ${p}`;throw new Error(w)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!c)se.exit(1);else{let p=new wi(1,"commander.executeSubCommandAsync","(error)");p.nestedError=d,c(p)}}),this.runningCommand=l}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;i.length;){let l=i.shift();if(l==="--"){s===n&&s.push(l),s.push(...i);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let c=this._findOption(l);if(c){if(c.required){let d=i.shift();d===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,d)}else if(c.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${c.name()}`,d)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),i.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),d=this._findOption(l.slice(0,c));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(c+1));continue}}if(o(l)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(l),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(l),i.length>0&&s.push(...i);break}s.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
17
+ - ${p}`;throw new Error(_)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!c)ie.exit(1);else{let p=new Ci(1,"commander.executeSubCommandAsync","(error)");p.nestedError=d,c(p)}}),this.runningCommand=l}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;i.length;){let l=i.shift();if(l==="--"){s===n&&s.push(l),s.push(...i);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let c=this._findOption(l);if(c){if(c.required){let d=i.shift();d===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,d)}else if(c.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${c.name()}`,d)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),i.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),d=this._findOption(l.slice(0,c));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(c+1));continue}}if(o(l)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(l),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(l),i.length>0&&s.push(...i);break}s.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
18
18
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
19
19
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
20
- `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in se.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,se.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Nd(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),d=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:d||o},s=o=>{let a=n(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=da(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=da(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
- `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>jd(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=Qe.basename(e,Qe.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=se.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
20
+ `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in ie.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,ie.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Fd(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),d=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:d||o},s=o=>{let a=n(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=va(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=va(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
+ `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>qd(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=tt.basename(e,tt.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=ie.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
22
  Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ha(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}fa.Command=ki});var va=Y(Ee=>{var{Argument:ma}=ts(),{Command:Si}=pa(),{CommanderError:Md,InvalidArgumentError:ga}=wn(),{Help:Ld}=pi(),{Option:ya}=vi();Ee.program=new Si;Ee.createCommand=r=>new Si(r);Ee.createOption=(r,e)=>new ya(r,e);Ee.createArgument=(r,e)=>new ma(r,e);Ee.Command=Si;Ee.Option=ya;Ee.Argument=ma;Ee.Help=Ld;Ee.CommanderError=Md;Ee.InvalidArgumentError=ga;Ee.InvalidOptionArgumentError=ga});var En=Y(te=>{"use strict";Object.defineProperty(te,"__esModule",{value:!0});te.getParsedType=te.ZodParsedType=te.objectUtil=te.util=void 0;var Ri;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Ri||(te.util=Ri={}));var qa;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(qa||(te.objectUtil=qa={}));te.ZodParsedType=Ri.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var tf=r=>{switch(typeof r){case"undefined":return te.ZodParsedType.undefined;case"string":return te.ZodParsedType.string;case"number":return Number.isNaN(r)?te.ZodParsedType.nan:te.ZodParsedType.number;case"boolean":return te.ZodParsedType.boolean;case"function":return te.ZodParsedType.function;case"bigint":return te.ZodParsedType.bigint;case"symbol":return te.ZodParsedType.symbol;case"object":return Array.isArray(r)?te.ZodParsedType.array:r===null?te.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?te.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?te.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?te.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?te.ZodParsedType.date:te.ZodParsedType.object;default:return te.ZodParsedType.unknown}};te.getParsedType=tf});var ps=Y(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.ZodError=xt.quotelessJson=xt.ZodIssueCode=void 0;var Ba=En();xt.ZodIssueCode=Ba.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var rf=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");xt.quotelessJson=rf;var In=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Ba.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};xt.ZodError=In;In.create=r=>new In(r)});var Pi=Y($i=>{"use strict";Object.defineProperty($i,"__esModule",{value:!0});var fe=ps(),Qt=En(),nf=(r,e)=>{let t;switch(r.code){case fe.ZodIssueCode.invalid_type:r.received===Qt.ZodParsedType.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case fe.ZodIssueCode.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,Qt.util.jsonStringifyReplacer)}`;break;case fe.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${Qt.util.joinValues(r.keys,", ")}`;break;case fe.ZodIssueCode.invalid_union:t="Invalid input";break;case fe.ZodIssueCode.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${Qt.util.joinValues(r.options)}`;break;case fe.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${Qt.util.joinValues(r.options)}, received '${r.received}'`;break;case fe.ZodIssueCode.invalid_arguments:t="Invalid function arguments";break;case fe.ZodIssueCode.invalid_return_type:t="Invalid function return type";break;case fe.ZodIssueCode.invalid_date:t="Invalid date";break;case fe.ZodIssueCode.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:Qt.util.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case fe.ZodIssueCode.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case fe.ZodIssueCode.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case fe.ZodIssueCode.custom:t="Invalid input";break;case fe.ZodIssueCode.invalid_intersection_types:t="Intersection results could not be merged";break;case fe.ZodIssueCode.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case fe.ZodIssueCode.not_finite:t="Number must be finite";break;default:t=e.defaultError,Qt.util.assertNever(r)}return{message:t}};$i.default=nf});var ms=Y(Ct=>{"use strict";var sf=Ct&&Ct.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Ct,"__esModule",{value:!0});Ct.defaultErrorMap=void 0;Ct.setErrorMap=of;Ct.getErrorMap=af;var Fa=sf(Pi());Ct.defaultErrorMap=Fa.default;var Za=Fa.default;function of(r){Za=r}function af(){return Za}});var Oi=Y(X=>{"use strict";var uf=X&&X.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(X,"__esModule",{value:!0});X.isAsync=X.isValid=X.isDirty=X.isAborted=X.OK=X.DIRTY=X.INVALID=X.ParseStatus=X.EMPTY_PATH=X.makeIssue=void 0;X.addIssueToContext=df;var lf=ms(),Ka=uf(Pi()),cf=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};X.makeIssue=cf;X.EMPTY_PATH=[];function df(r,e){let t=(0,lf.getErrorMap)(),n=(0,X.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===Ka.default?void 0:Ka.default].filter(s=>!!s)});r.common.issues.push(n)}var ji=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return X.INVALID;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return X.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}};X.ParseStatus=ji;X.INVALID=Object.freeze({status:"aborted"});var hf=r=>({status:"dirty",value:r});X.DIRTY=hf;var ff=r=>({status:"valid",value:r});X.OK=ff;var pf=r=>r.status==="aborted";X.isAborted=pf;var mf=r=>r.status==="dirty";X.isDirty=mf;var gf=r=>r.status==="valid";X.isValid=gf;var yf=r=>typeof Promise<"u"&&r instanceof Promise;X.isAsync=yf});var Ga=Y(Va=>{"use strict";Object.defineProperty(Va,"__esModule",{value:!0})});var Wa=Y(gs=>{"use strict";Object.defineProperty(gs,"__esModule",{value:!0});gs.errorUtil=void 0;var Ha;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(Ha||(gs.errorUtil=Ha={}))});var au=Y(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.discriminatedUnion=y.date=y.boolean=y.bigint=y.array=y.any=y.coerce=y.ZodFirstPartyTypeKind=y.late=y.ZodSchema=y.Schema=y.ZodReadonly=y.ZodPipeline=y.ZodBranded=y.BRAND=y.ZodNaN=y.ZodCatch=y.ZodDefault=y.ZodNullable=y.ZodOptional=y.ZodTransformer=y.ZodEffects=y.ZodPromise=y.ZodNativeEnum=y.ZodEnum=y.ZodLiteral=y.ZodLazy=y.ZodFunction=y.ZodSet=y.ZodMap=y.ZodRecord=y.ZodTuple=y.ZodIntersection=y.ZodDiscriminatedUnion=y.ZodUnion=y.ZodObject=y.ZodArray=y.ZodVoid=y.ZodNever=y.ZodUnknown=y.ZodAny=y.ZodNull=y.ZodUndefined=y.ZodSymbol=y.ZodDate=y.ZodBoolean=y.ZodBigInt=y.ZodNumber=y.ZodString=y.ZodType=void 0;y.NEVER=y.void=y.unknown=y.union=y.undefined=y.tuple=y.transformer=y.symbol=y.string=y.strictObject=y.set=y.record=y.promise=y.preprocess=y.pipeline=y.ostring=y.optional=y.onumber=y.oboolean=y.object=y.number=y.nullable=y.null=y.never=y.nativeEnum=y.nan=y.map=y.literal=y.lazy=y.intersection=y.instanceof=y.function=y.enum=y.effect=void 0;y.datetimeRegex=eu;y.custom=ru;var E=ps(),ys=ms(),N=Wa(),v=Oi(),I=En(),Pe=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Ja=(r,e)=>{if((0,v.isValid)(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new E.ZodError(r.common.issues);return this._error=t,this._error}}};function Z(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var K=class{get description(){return this._def.description}_getType(e){return(0,I.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,I.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new v.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,I.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if((0,v.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)},s=this._parseSync({data:e,path:n.path,parent:n});return Ja(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return(0,v.isValid)(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>(0,v.isValid)(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await((0,v.isAsync)(s)?s:Promise.resolve(s));return Ja(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:E.ZodIssueCode.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new Se({schema:this,typeName:D.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return $e.create(this,this._def)}nullable(){return Ge.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ut.create(this)}promise(){return At.create(this,this._def)}or(e){return or.create([this,e],this._def)}and(e){return ar.create(this,e,this._def)}transform(e){return new Se({...Z(this._def),schema:this,typeName:D.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new hr({...Z(this._def),innerType:this,defaultValue:t,typeName:D.ZodDefault})}brand(){return new An({typeName:D.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new fr({...Z(this._def),innerType:this,catchValue:t,typeName:D.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Rn.create(this,e)}readonly(){return pr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};y.ZodType=K;y.Schema=K;y.ZodSchema=K;var vf=/^c[^\s-]{8,}$/i,_f=/^[0-9a-z]+$/,bf=/^[0-9A-HJKMNP-TV-Z]{26}$/i,wf=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,kf=/^[a-z0-9_-]{21}$/i,Sf=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Tf=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,xf=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Cf="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Ni,Ef=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,If=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Af=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Rf=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,$f=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Pf=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Xa="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",jf=new RegExp(`^${Xa}$`);function Qa(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Of(r){return new RegExp(`^${Qa(r)}$`)}function eu(r){let e=`${Xa}T${Qa(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Nf(r,e){return!!((e==="v4"||!e)&&Ef.test(r)||(e==="v6"||!e)&&Af.test(r))}function Mf(r,e){if(!Sf.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function Lf(r,e){return!!((e==="v4"||!e)&&If.test(r)||(e==="v6"||!e)&&Rf.test(r))}var Et=class r extends K{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==I.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.string,received:i.parsedType}),v.INVALID}let n=new v.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")xf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"email",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")Ni||(Ni=new RegExp(Cf,"u")),Ni.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"emoji",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")wf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"uuid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")kf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"nanoid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")vf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cuid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")_f.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cuid2",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")bf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"ulid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"url",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"regex",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?eu(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?jf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Of(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Tf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"duration",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Nf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"ip",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?Mf(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"jwt",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?Lf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cidr",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?$f.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"base64",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Pf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"base64url",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):I.util.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:E.ZodIssueCode.invalid_string,...N.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...N.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...N.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...N.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...N.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...N.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...N.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...N.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...N.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...N.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...N.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...N.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...N.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...N.errorUtil.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...N.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...N.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...N.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...N.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...N.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...N.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...N.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...N.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...N.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...N.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,N.errorUtil.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodString=Et;Et.create=r=>new Et({checks:[],typeName:D.ZodString,coerce:r?.coerce??!1,...Z(r)});function Df(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var er=class r extends K{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==I.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.number,received:i.parsedType}),v.INVALID}let n,s=new v.ParseStatus;for(let i of this._def.checks)i.kind==="int"?I.util.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Df(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_finite,message:i.message}),s.dirty()):I.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,N.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:N.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:N.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:N.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:N.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:N.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:N.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:N.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:N.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&I.util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};y.ZodNumber=er;er.create=r=>new er({checks:[],typeName:D.ZodNumber,coerce:r?.coerce||!1,...Z(r)});var tr=class r extends K{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==I.ZodParsedType.bigint)return this._getInvalidInput(e);let n,s=new v.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):I.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.bigint,received:t.parsedType}),v.INVALID}gte(e,t){return this.setLimit("min",e,!0,N.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:N.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:N.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:N.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:N.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodBigInt=tr;tr.create=r=>new tr({checks:[],typeName:D.ZodBigInt,coerce:r?.coerce??!1,...Z(r)});var rr=class extends K{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==I.ZodParsedType.boolean){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.boolean,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodBoolean=rr;rr.create=r=>new rr({typeName:D.ZodBoolean,coerce:r?.coerce||!1,...Z(r)});var nr=class r extends K{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==I.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.date,received:i.parsedType}),v.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_date}),v.INVALID}let n=new v.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):I.util.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:N.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:N.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};y.ZodDate=nr;nr.create=r=>new nr({checks:[],coerce:r?.coerce||!1,typeName:D.ZodDate,...Z(r)});var Kr=class extends K{_parse(e){if(this._getType(e)!==I.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.symbol,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodSymbol=Kr;Kr.create=r=>new Kr({typeName:D.ZodSymbol,...Z(r)});var sr=class extends K{_parse(e){if(this._getType(e)!==I.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.undefined,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodUndefined=sr;sr.create=r=>new sr({typeName:D.ZodUndefined,...Z(r)});var ir=class extends K{_parse(e){if(this._getType(e)!==I.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.null,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodNull=ir;ir.create=r=>new ir({typeName:D.ZodNull,...Z(r)});var It=class extends K{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,v.OK)(e.data)}};y.ZodAny=It;It.create=r=>new It({typeName:D.ZodAny,...Z(r)});var at=class extends K{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,v.OK)(e.data)}};y.ZodUnknown=at;at.create=r=>new at({typeName:D.ZodUnknown,...Z(r)});var ze=class extends K{_parse(e){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.never,received:t.parsedType}),v.INVALID}};y.ZodNever=ze;ze.create=r=>new ze({typeName:D.ZodNever,...Z(r)});var Vr=class extends K{_parse(e){if(this._getType(e)!==I.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.void,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodVoid=Vr;Vr.create=r=>new Vr({typeName:D.ZodVoid,...Z(r)});var ut=class r extends K{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==I.ZodParsedType.array)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.array,received:t.parsedType}),v.INVALID;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&((0,v.addIssueToContext)(t,{code:o?E.ZodIssueCode.too_big:E.ZodIssueCode.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Pe(t,o,t.path,a)))).then(o=>v.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Pe(t,o,t.path,a)));return v.ParseStatus.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:N.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:N.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:N.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};y.ZodArray=ut;ut.create=(r,e)=>new ut({type:r,minLength:null,maxLength:null,exactLength:null,typeName:D.ZodArray,...Z(e)});function Zr(r){if(r instanceof be){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=$e.create(Zr(n))}return new be({...r._def,shape:()=>e})}else return r instanceof ut?new ut({...r._def,type:Zr(r.element)}):r instanceof $e?$e.create(Zr(r.unwrap())):r instanceof Ge?Ge.create(Zr(r.unwrap())):r instanceof Ve?Ve.create(r.items.map(e=>Zr(e))):r}var be=class r extends K{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=I.util.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==I.ZodParsedType.object){let c=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(c,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:c.parsedType}),v.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof ze&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let l=[];for(let c of o){let d=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:d._parse(new Pe(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof ze){let c=this._def.unknownKeys;if(c==="passthrough")for(let d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(c==="strict")a.length>0&&((0,v.addIssueToContext)(s,{code:E.ZodIssueCode.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let d of a){let p=s.data[d];l.push({key:{status:"valid",value:d},value:c._parse(new Pe(s,p,s.path,d)),alwaysSet:d in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let d of l){let p=await d.key,w=await d.value;c.push({key:p,value:w,alwaysSet:d.alwaysSet})}return c}).then(c=>v.ParseStatus.mergeObjectSync(n,c)):v.ParseStatus.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return N.errorUtil.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:N.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:D.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of I.util.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of I.util.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return Zr(this)}partial(e){let t={};for(let n of I.util.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of I.util.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof $e;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return tu(I.util.objectKeys(this.shape))}};y.ZodObject=be;be.create=(r,e)=>new be({shape:()=>r,unknownKeys:"strip",catchall:ze.create(),typeName:D.ZodObject,...Z(e)});be.strictCreate=(r,e)=>new be({shape:()=>r,unknownKeys:"strict",catchall:ze.create(),typeName:D.ZodObject,...Z(e)});be.lazycreate=(r,e)=>new be({shape:r,unknownKeys:"strip",catchall:ze.create(),typeName:D.ZodObject,...Z(e)});var or=class extends K{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new E.ZodError(a.ctx.common.issues));return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union,unionErrors:o}),v.INVALID}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},d=l._parseSync({data:t.data,path:t.path,parent:c});if(d.status==="valid")return d;d.status==="dirty"&&!i&&(i={result:d,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(l=>new E.ZodError(l));return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union,unionErrors:a}),v.INVALID}}get options(){return this._def.options}};y.ZodUnion=or;or.create=(r,e)=>new or({options:r,typeName:D.ZodUnion,...Z(e)});var ot=r=>r instanceof ur?ot(r.schema):r instanceof Se?ot(r.innerType()):r instanceof lr?[r.value]:r instanceof cr?r.options:r instanceof dr?I.util.objectValues(r.enum):r instanceof hr?ot(r._def.innerType):r instanceof sr?[void 0]:r instanceof ir?[null]:r instanceof $e?[void 0,...ot(r.unwrap())]:r instanceof Ge?[null,...ot(r.unwrap())]:r instanceof An||r instanceof pr?ot(r.unwrap()):r instanceof fr?ot(r._def.innerType):[],vs=class r extends K{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.object)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:t.parsedType}),v.INVALID;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),v.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=ot(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:D.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...Z(n)})}};y.ZodDiscriminatedUnion=vs;function Mi(r,e){let t=(0,I.getParsedType)(r),n=(0,I.getParsedType)(e);if(r===e)return{valid:!0,data:r};if(t===I.ZodParsedType.object&&n===I.ZodParsedType.object){let s=I.util.objectKeys(e),i=I.util.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let l=Mi(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===I.ZodParsedType.array&&n===I.ZodParsedType.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],l=Mi(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===I.ZodParsedType.date&&n===I.ZodParsedType.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var ar=class extends K{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,v.isAborted)(i)||(0,v.isAborted)(o))return v.INVALID;let a=Mi(i.value,o.value);return a.valid?(((0,v.isDirty)(i)||(0,v.isDirty)(o))&&t.dirty(),{status:t.value,value:a.data}):((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_intersection_types}),v.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};y.ZodIntersection=ar;ar.create=(r,e,t)=>new ar({left:r,right:e,typeName:D.ZodIntersection,...Z(t)});var Ve=class r extends K{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.array)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.array,received:n.parsedType}),v.INVALID;if(n.data.length<this._def.items.length)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),v.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new Pe(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>v.ParseStatus.mergeArray(t,o)):v.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};y.ZodTuple=Ve;Ve.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ve({items:r,typeName:D.ZodTuple,rest:null,...Z(e)})};var _s=class r extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.object)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:n.parsedType}),v.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new Pe(n,a,n.path,a)),value:o._parse(new Pe(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?v.ParseStatus.mergeObjectAsync(t,s):v.ParseStatus.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof K?new r({keyType:e,valueType:t,typeName:D.ZodRecord,...Z(n)}):new r({keyType:Et.create(),valueType:e,typeName:D.ZodRecord,...Z(t)})}};y.ZodRecord=_s;var Gr=class extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.map)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.map,received:n.parsedType}),v.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new Pe(n,a,n.path,[c,"key"])),value:i._parse(new Pe(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,d=await l.value;if(c.status==="aborted"||d.status==="aborted")return v.INVALID;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let l of o){let c=l.key,d=l.value;if(c.status==="aborted"||d.status==="aborted")return v.INVALID;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}}}};y.ZodMap=Gr;Gr.create=(r,e,t)=>new Gr({valueType:e,keyType:r,typeName:D.ZodMap,...Z(t)});var Hr=class r extends K{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.set)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.set,received:n.parsedType}),v.INVALID;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let d of l){if(d.status==="aborted")return v.INVALID;d.status==="dirty"&&t.dirty(),c.add(d.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new Pe(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:N.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:N.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};y.ZodSet=Hr;Hr.create=(r,e)=>new Hr({valueType:r,minSize:null,maxSize:null,typeName:D.ZodSet,...Z(e)});var bs=class r extends K{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.function)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.function,received:t.parsedType}),v.INVALID;function n(a,l){return(0,v.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,ys.getErrorMap)(),ys.defaultErrorMap].filter(c=>!!c),issueData:{code:E.ZodIssueCode.invalid_arguments,argumentsError:l}})}function s(a,l){return(0,v.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,ys.getErrorMap)(),ys.defaultErrorMap].filter(c=>!!c),issueData:{code:E.ZodIssueCode.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof At){let a=this;return(0,v.OK)(async function(...l){let c=new E.ZodError([]),d=await a._def.args.parseAsync(l,i).catch(S=>{throw c.addIssue(n(l,S)),c}),p=await Reflect.apply(o,this,d);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return(0,v.OK)(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new E.ZodError([n(l,c.error)]);let d=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(d,i);if(!p.success)throw new E.ZodError([s(d,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:Ve.create(e).rest(at.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||Ve.create([]).rest(at.create()),returns:t||at.create(),typeName:D.ZodFunction,...Z(n)})}};y.ZodFunction=bs;var ur=class extends K{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};y.ZodLazy=ur;ur.create=(r,e)=>new ur({getter:r,typeName:D.ZodLazy,...Z(e)});var lr=class extends K{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{received:t.data,code:E.ZodIssueCode.invalid_literal,expected:this._def.value}),v.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};y.ZodLiteral=lr;lr.create=(r,e)=>new lr({value:r,typeName:D.ZodLiteral,...Z(e)});function tu(r,e){return new cr({values:r,typeName:D.ZodEnum,...Z(e)})}var cr=class r extends K{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,v.addIssueToContext)(t,{expected:I.util.joinValues(n),received:t.parsedType,code:E.ZodIssueCode.invalid_type}),v.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,v.addIssueToContext)(t,{received:t.data,code:E.ZodIssueCode.invalid_enum_value,options:n}),v.INVALID}return(0,v.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};y.ZodEnum=cr;cr.create=tu;var dr=class extends K{_parse(e){let t=I.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==I.ZodParsedType.string&&n.parsedType!==I.ZodParsedType.number){let s=I.util.objectValues(t);return(0,v.addIssueToContext)(n,{expected:I.util.joinValues(s),received:n.parsedType,code:E.ZodIssueCode.invalid_type}),v.INVALID}if(this._cache||(this._cache=new Set(I.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=I.util.objectValues(t);return(0,v.addIssueToContext)(n,{received:n.data,code:E.ZodIssueCode.invalid_enum_value,options:s}),v.INVALID}return(0,v.OK)(e.data)}get enum(){return this._def.values}};y.ZodNativeEnum=dr;dr.create=(r,e)=>new dr({values:r,typeName:D.ZodNativeEnum,...Z(e)});var At=class extends K{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.promise&&t.common.async===!1)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.promise,received:t.parsedType}),v.INVALID;let n=t.parsedType===I.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,v.OK)(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};y.ZodPromise=At;At.create=(r,e)=>new At({type:r,typeName:D.ZodPromise,...Z(e)});var Se=class extends K{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===D.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,v.addIssueToContext)(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return v.INVALID;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?v.INVALID:l.status==="dirty"||t.value==="dirty"?(0,v.DIRTY)(l.value):l});{if(t.value==="aborted")return v.INVALID;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?v.INVALID:a.status==="dirty"||t.value==="dirty"?(0,v.DIRTY)(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?v.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?v.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,v.isValid)(o))return v.INVALID;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>(0,v.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):v.INVALID);I.util.assertNever(s)}};y.ZodEffects=Se;y.ZodTransformer=Se;Se.create=(r,e,t)=>new Se({schema:r,typeName:D.ZodEffects,effect:e,...Z(t)});Se.createWithPreprocess=(r,e,t)=>new Se({schema:e,effect:{type:"preprocess",transform:r},typeName:D.ZodEffects,...Z(t)});var $e=class extends K{_parse(e){return this._getType(e)===I.ZodParsedType.undefined?(0,v.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodOptional=$e;$e.create=(r,e)=>new $e({innerType:r,typeName:D.ZodOptional,...Z(e)});var Ge=class extends K{_parse(e){return this._getType(e)===I.ZodParsedType.null?(0,v.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodNullable=Ge;Ge.create=(r,e)=>new Ge({innerType:r,typeName:D.ZodNullable,...Z(e)});var hr=class extends K{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===I.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};y.ZodDefault=hr;hr.create=(r,e)=>new hr({innerType:r,typeName:D.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Z(e)});var fr=class extends K{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,v.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new E.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new E.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};y.ZodCatch=fr;fr.create=(r,e)=>new fr({innerType:r,typeName:D.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Z(e)});var Wr=class extends K{_parse(e){if(this._getType(e)!==I.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.nan,received:n.parsedType}),v.INVALID}return{status:"valid",value:e.data}}};y.ZodNaN=Wr;Wr.create=r=>new Wr({typeName:D.ZodNaN,...Z(r)});y.BRAND=Symbol("zod_brand");var An=class extends K{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};y.ZodBranded=An;var Rn=class r extends K{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?v.INVALID:i.status==="dirty"?(t.dirty(),(0,v.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?v.INVALID:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:D.ZodPipeline})}};y.ZodPipeline=Rn;var pr=class extends K{_parse(e){let t=this._def.innerType._parse(e),n=s=>((0,v.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,v.isAsync)(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};y.ZodReadonly=pr;pr.create=(r,e)=>new pr({innerType:r,typeName:D.ZodReadonly,...Z(e)});function Ya(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function ru(r,e={},t){return r?It.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Ya(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=Ya(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):It.create()}y.late={object:be.lazycreate};var D;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(D||(y.ZodFirstPartyTypeKind=D={}));var zf=(r,e={message:`Input not instance of ${r.name}`})=>ru(t=>t instanceof r,e);y.instanceof=zf;var nu=Et.create;y.string=nu;var su=er.create;y.number=su;var Uf=Wr.create;y.nan=Uf;var qf=tr.create;y.bigint=qf;var iu=rr.create;y.boolean=iu;var Bf=nr.create;y.date=Bf;var Ff=Kr.create;y.symbol=Ff;var Zf=sr.create;y.undefined=Zf;var Kf=ir.create;y.null=Kf;var Vf=It.create;y.any=Vf;var Gf=at.create;y.unknown=Gf;var Hf=ze.create;y.never=Hf;var Wf=Vr.create;y.void=Wf;var Jf=ut.create;y.array=Jf;var Yf=be.create;y.object=Yf;var Xf=be.strictCreate;y.strictObject=Xf;var Qf=or.create;y.union=Qf;var ep=vs.create;y.discriminatedUnion=ep;var tp=ar.create;y.intersection=tp;var rp=Ve.create;y.tuple=rp;var np=_s.create;y.record=np;var sp=Gr.create;y.map=sp;var ip=Hr.create;y.set=ip;var op=bs.create;y.function=op;var ap=ur.create;y.lazy=ap;var up=lr.create;y.literal=up;var lp=cr.create;y.enum=lp;var cp=dr.create;y.nativeEnum=cp;var dp=At.create;y.promise=dp;var ou=Se.create;y.effect=ou;y.transformer=ou;var hp=$e.create;y.optional=hp;var fp=Ge.create;y.nullable=fp;var pp=Se.createWithPreprocess;y.preprocess=pp;var mp=Rn.create;y.pipeline=mp;var gp=()=>nu().optional();y.ostring=gp;var yp=()=>su().optional();y.onumber=yp;var vp=()=>iu().optional();y.oboolean=vp;y.coerce={string:(r=>Et.create({...r,coerce:!0})),number:(r=>er.create({...r,coerce:!0})),boolean:(r=>rr.create({...r,coerce:!0})),bigint:(r=>tr.create({...r,coerce:!0})),date:(r=>nr.create({...r,coerce:!0}))};y.NEVER=v.INVALID});var Li=Y(je=>{"use strict";var _p=je&&je.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Jr=je&&je.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&_p(e,r,t)};Object.defineProperty(je,"__esModule",{value:!0});Jr(ms(),je);Jr(Oi(),je);Jr(Ga(),je);Jr(En(),je);Jr(au(),je);Jr(ps(),je)});var cu=Y(we=>{"use strict";var uu=we&&we.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),bp=we&&we.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),wp=we&&we.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&uu(e,r,t);return bp(e,r),e},kp=we&&we.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&uu(e,r,t)};Object.defineProperty(we,"__esModule",{value:!0});we.z=void 0;var lu=wp(Li());we.z=lu;kp(Li(),we);we.default=lu});var Te=Y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.EpicListResultMsg=h.EpicChild=h.EpicListMsg=h.BoardTriggerResultMsg=h.BoardTriggerMsg=h.BoardFetchResultMsg=h.BoardFetchMsg=h.ChatLoadResultMsg=h.ChatLoadMsg=h.ChatListResultMsg=h.ChatListMsg=h.ChatStreamMsg=h.JiraUsersResultMsg=h.DeployClaimResultMsg=h.DeployClaimMsg=h.RuleDiagnoseResultMsg=h.ProjectTestResultMsg=h.RunStatusMsg=h.RunLogMsg=h.RunClaimMsg=h.HeartbeatMsg=h.HelloMsg=h.RuleConfig=h.ProjectConfig=h.ActionConfig=h.DeployAction=h.EnvironmentConfig=h.PromotionMode=h.DeployStep=h.RespondAction=h.ImplementAction=h.PlanOnlyAction=h.TriggerConfig=h.StatusChangedTrigger=h.CommentKeywordTrigger=h.LabelAddedTrigger=h.ActionType=h.TriggerType=h.ACTIVE_RUN_STATUSES=h.RunStatus=h.needsInputMarkerIn=h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=h.NEEDS_INPUT_COMMENT_MARKER=h.NEEDS_INPUT_LABEL=h.NEEDS_INPUT_MARKER=h.BRANCH_DEPLOY_ISSUE_KEY=h.REQUIRED_AGENT_CAPABILITIES=h.DEFAULT_AGENT_ID=h.REGISTERED_AGENTS=h.PROTOCOL_VERSION=void 0;h.DeploySuggestMsg=h.DeployStartMsg=h.RunRetryPushMsg=h.RunRejectedMsg=h.RunApprovedMsg=h.RunCancelMsg=h.RuleDiagnoseMsg=h.ProjectTestMsg=h.RunClaimResultMsg=h.ConfigMsg=h.HelloAckMsg=h.RunnerToServerMsg=h.RunnerUpdateResultMsg=h.RunnerUpdateMsg=h.SetupClaudeMdSaveResultMsg=h.SetupClaudeMdSaveMsg=h.SetupClaudeMdGenerateResultMsg=h.SetupClaudeMdGenerateMsg=h.SetupStatusResultMsg=h.SetupStatusMsg=h.DeploySuggestResultMsg=h.EnvPreflightResultMsg=h.EnvPreflightMsg=h.ChatCreateTicketResultMsg=h.ChatCreateTicketMsg=h.ChatTurnResultMsg=h.ChatTurnMsg=h.ChatFile=h.TeamCredsResultMsg=h.TeamCredsMsg=h.KnowledgeSaveResultMsg=h.KnowledgeSaveMsg=h.KnowledgeListResultMsg=h.KnowledgeFile=h.KnowledgeListMsg=h.AuditReviewResultMsg=h.AuditReviewMsg=h.AuditGetResultMsg=h.AuditGetMsg=h.AuditListResultMsg=h.AuditListMsg=h.AuditStartResultMsg=h.AuditStartMsg=h.AuditRecord=h.AuditFinding=h.AuditScope=h.AuditSeverity=h.AuditRole=h.EpicSuggestResultMsg=h.EpicSuggestMsg=void 0;h.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=h.PROMPT_PRESETS=h.DEFAULT_RESPOND_PROMPT_TEMPLATE=h.BUGFIX_IMPLEMENT_PROMPT_TEMPLATE=h.BUG_INVESTIGATION_PROMPT_TEMPLATE=h.TECHNICAL_PLAN_PROMPT_TEMPLATE=h.MEMORY_UPDATE_PROMPT=h.DEFAULT_IMPLEMENT_PROMPT_TEMPLATE=h.DEFAULT_PLAN_PROMPT_TEMPLATE=h.EnrollResponse=h.EnrollRequest=h.ServerToRunnerMsg=h.JiraUsersMsg=void 0;h.missingAgentCapabilities=Sp;h.parseRunnerMsg=xp;h.parseServerMsg=Cp;var u=cu();h.PROTOCOL_VERSION="1.27";h.REGISTERED_AGENTS=[{id:"claude-code",displayName:"Claude Code",capabilities:{readOnlyJail:!0,editNoShellJail:!0,sessionResume:!0,costReporting:!0,modelSelection:!0,loginProfiles:!0},suggestedModels:["claude-fable-5","claude-opus-5","claude-sonnet-5","claude-haiku-4-5-20251001"],experimental:!1},{id:"codex",displayName:"OpenAI Codex CLI (experimental)",capabilities:{readOnlyJail:!0,editNoShellJail:!1,sessionResume:!1,costReporting:!1,modelSelection:!0,loginProfiles:!1},suggestedModels:[],experimental:!0}];h.DEFAULT_AGENT_ID="claude-code";h.REQUIRED_AGENT_CAPABILITIES={plan_only:["readOnlyJail","sessionResume"],respond:["readOnlyJail"],implement:["editNoShellJail","sessionResume"],deploy:[]};function Sp(r,e){let t=h.REGISTERED_AGENTS.find(n=>n.id===r);return t?(h.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(n=>!t.capabilities[n]):null}h.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";h.NEEDS_INPUT_MARKER="NEEDS-INPUT";h.NEEDS_INPUT_LABEL="agent-needs-input";h.NEEDS_INPUT_COMMENT_MARKER="Allwright needs your input";h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=["TicketPilot needs your input"];var Tp=r=>r.includes(h.NEEDS_INPUT_COMMENT_MARKER)||h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));h.needsInputMarkerIn=Tp;h.RunStatus=u.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);h.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];h.TriggerType=u.z.enum(["label_added","comment_keyword","status_changed"]);h.ActionType=u.z.enum(["plan_only","implement","respond","deploy"]);h.LabelAddedTrigger=u.z.object({type:u.z.literal("label_added"),label:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-planned"),failedLabel:u.z.string().min(1).default("agent-failed")});h.CommentKeywordTrigger=u.z.object({type:u.z.literal("comment_keyword"),keyword:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-implemented"),failedLabel:u.z.string().min(1).default("agent-failed")});h.StatusChangedTrigger=u.z.object({type:u.z.literal("status_changed"),status:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-deployed"),failedLabel:u.z.string().min(1).default("agent-failed")});h.TriggerConfig=u.z.discriminatedUnion("type",[h.LabelAddedTrigger,h.CommentKeywordTrigger,h.StatusChangedTrigger]);h.PlanOnlyAction=u.z.object({type:u.z.literal("plan_only"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(900),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default("")});h.ImplementAction=u.z.object({type:u.z.literal("implement"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(7200).default(1800),maxTurns:u.z.number().int().positive().max(500).default(120),requireApproval:u.z.boolean().default(!0),branchTemplate:u.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:u.z.string().min(1).default("main"),jiraTransition:u.z.string().optional(),jiraTransitionOnStart:u.z.string().optional(),jiraTransitionOnMerge:u.z.string().optional(),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default(""),updateMemory:u.z.boolean().default(!1)});h.RespondAction=u.z.object({type:u.z.literal("respond"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(600),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default("")});h.DeployStep=u.z.object({name:u.z.string().min(1).max(120),run:u.z.string().min(1).max(4e3),continueOnError:u.z.boolean().default(!1)});h.PromotionMode=u.z.enum(["deploy_only","merge_and_deploy"]);h.EnvironmentConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),rank:u.z.number().int().nonnegative(),auditBeforeDeploy:u.z.enum(["","security","testing"]).default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default(""),useDedicatedCheckout:u.z.boolean().default(!1),promotionMode:h.PromotionMode.default("deploy_only"),ticketBranchTemplate:u.z.string().default("agent/{{issueKey}}"),steps:u.z.array(h.DeployStep).default([]),workdir:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(21600).default(1800),requiredSecrets:u.z.array(u.z.string()).default([]),requireApproval:u.z.boolean().default(!1),requireSyncCheck:u.z.boolean().default(!1),previousEnvBranch:u.z.string().optional(),deployFromColumn:u.z.string().default(""),deployToColumn:u.z.string().default("")});h.DeployAction=u.z.object({type:u.z.literal("deploy"),envSelection:u.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:u.z.string().optional(),requireStatus:u.z.string().optional()});h.ActionConfig=u.z.discriminatedUnion("type",[h.PlanOnlyAction,h.ImplementAction,h.RespondAction,h.DeployAction]);h.ProjectConfig=u.z.object({id:u.z.string(),name:u.z.string(),jiraProjectKey:u.z.string(),repoName:u.z.string(),componentRoutes:u.z.array(u.z.object({component:u.z.string().min(1),repoName:u.z.string().min(1)})).default([])});h.RuleConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),enabled:u.z.boolean(),trigger:h.TriggerConfig,action:h.ActionConfig});h.HelloMsg=u.z.object({type:u.z.literal("hello"),protocolVersion:u.z.string(),runnerVersion:u.z.string(),platform:u.z.string(),justBooted:u.z.boolean().optional()});h.HeartbeatMsg=u.z.object({type:u.z.literal("heartbeat"),ts:u.z.string()});h.RunClaimMsg=u.z.object({type:u.z.literal("run.claim"),requestId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),triggerFingerprint:u.z.string(),dedupKey:u.z.string().optional(),triggeredByAccountId:u.z.string().optional()});h.RunLogMsg=u.z.object({type:u.z.literal("run.log"),runId:u.z.string(),seq:u.z.number().int().nonnegative(),ts:u.z.string(),level:u.z.enum(["info","warn","error","agent"]),message:u.z.string().max(16384)});h.RunStatusMsg=u.z.object({type:u.z.literal("run.status"),runId:u.z.string(),status:h.RunStatus,error:u.z.string().optional(),errorKind:u.z.enum(["guard"]).optional(),costUsd:u.z.number().nonnegative().optional(),inputTokens:u.z.number().int().nonnegative().optional(),outputTokens:u.z.number().int().nonnegative().optional(),resultSummary:u.z.string().max(2e3).optional(),billingMode:u.z.enum(["subscription","api","unknown"]).optional(),model:u.z.string().max(200).optional(),prUrl:u.z.string().optional(),headSha:u.z.string().optional(),deployedRef:u.z.string().optional(),retryAvailable:u.z.boolean().optional()});h.ProjectTestResultMsg=u.z.object({type:u.z.literal("project.test.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string()}))});h.RuleDiagnoseResultMsg=u.z.object({type:u.z.literal("rule.diagnose.result"),requestId:u.z.string(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string()})),matchedCount:u.z.number().int().nonnegative(),excludedCount:u.z.number().int().nonnegative(),excludedSample:u.z.array(u.z.string()).max(5)});h.DeployClaimMsg=u.z.object({type:u.z.literal("deploy.claim"),requestId:u.z.string(),projectId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environmentName:u.z.string(),requestedByAccountId:u.z.string().optional(),requestedByDisplayName:u.z.string().default(""),dedupKey:u.z.string(),triggerFingerprint:u.z.string()});h.DeployClaimResultMsg=u.z.object({type:u.z.literal("deploy.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),environment:h.EnvironmentConfig.optional(),reason:u.z.string().optional(),code:u.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});h.JiraUsersResultMsg=u.z.object({type:u.z.literal("jira.users.result"),requestId:u.z.string(),ok:u.z.boolean(),users:u.z.array(u.z.object({accountId:u.z.string(),displayName:u.z.string(),email:u.z.string().default(""),active:u.z.boolean().default(!0)})).default([]),error:u.z.string().optional()});h.ChatStreamMsg=u.z.object({type:u.z.literal("chat.stream"),requestId:u.z.string(),seq:u.z.number().int().nonnegative(),text:u.z.string().max(8e3)});h.ChatListMsg=u.z.object({type:u.z.literal("chat.list"),requestId:u.z.string(),projectId:u.z.string()});h.ChatListResultMsg=u.z.object({type:u.z.literal("chat.list.result"),requestId:u.z.string(),sessions:u.z.array(u.z.object({sessionId:u.z.string(),title:u.z.string().default(""),updatedAt:u.z.string().default(""),messageCount:u.z.number().int().nonnegative().default(0)})).default([])});h.ChatLoadMsg=u.z.object({type:u.z.literal("chat.load"),requestId:u.z.string(),sessionId:u.z.string()});h.ChatLoadResultMsg=u.z.object({type:u.z.literal("chat.load.result"),requestId:u.z.string(),ok:u.z.boolean(),projectId:u.z.string().default(""),messages:u.z.array(u.z.object({role:u.z.enum(["user","agent"]),text:u.z.string()})).default([]),error:u.z.string().optional()});h.BoardFetchMsg=u.z.object({type:u.z.literal("board.fetch"),requestId:u.z.string(),projectId:u.z.string()});h.BoardFetchResultMsg=u.z.object({type:u.z.literal("board.fetch.result"),requestId:u.z.string(),ok:u.z.boolean(),browseBaseUrl:u.z.string().default(""),columns:u.z.array(u.z.object({name:u.z.string(),issues:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),labels:u.z.array(u.z.string()).default([])})).default([])})).default([]),error:u.z.string().optional()});h.BoardTriggerMsg=u.z.object({type:u.z.literal("board.trigger"),requestId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),comment:u.z.string().max(2e3).default(""),removeLabel:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),reimplement:u.z.boolean().default(!1)});h.BoardTriggerResultMsg=u.z.object({type:u.z.literal("board.trigger.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});h.EpicListMsg=u.z.object({type:u.z.literal("epic.list"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().default("")});h.EpicChild=u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string(),statusCategory:u.z.string(),labels:u.z.array(u.z.string()).default([])});h.EpicListResultMsg=u.z.object({type:u.z.literal("epic.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),epics:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string()})).default([]),children:u.z.array(h.EpicChild).default([])});h.EpicSuggestMsg=u.z.object({type:u.z.literal("epic.suggest"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().min(1),model:u.z.string().default("")});h.EpicSuggestResultMsg=u.z.object({type:u.z.literal("epic.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),issueKey:u.z.string().default(""),reason:u.z.string().default(""),considered:u.z.number().int().default(0)});h.AuditRole=u.z.enum(["security","testing","architecture"]);h.AuditSeverity=u.z.enum(["critical","high","medium","low","info"]);h.AuditScope=u.z.object({kind:u.z.enum(["repo","ticket","branch"]).default("repo"),ref:u.z.string().default("")});h.AuditFinding=u.z.object({id:u.z.string().min(1),title:u.z.string().min(1),ruleId:u.z.string().max(20).default(""),severity:h.AuditSeverity,area:u.z.string().default(""),evidence:u.z.array(u.z.object({file:u.z.string().min(1),line:u.z.number().int().positive().optional(),note:u.z.string().default("")})).min(1),fix:u.z.string().default("")});h.AuditRecord=u.z.object({id:u.z.string(),role:h.AuditRole,createdAt:u.z.string(),model:u.z.string().default(""),summary:u.z.string().default(""),packNames:u.z.array(u.z.string()).default([]),findings:u.z.array(h.AuditFinding).default([]),costUsd:u.z.number().default(0),review:u.z.object({selected:u.z.array(u.z.string()),updatedAt:u.z.string()}).optional(),verdicts:u.z.record(u.z.object({verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().default(""),by:u.z.string().default(""),at:u.z.string().default("")})).default({}),lessonsWritten:u.z.array(u.z.string()).default([]),ticketed:u.z.record(u.z.string()).default({}),scope:h.AuditScope.default({kind:"repo",ref:""}),testRun:u.z.array(u.z.object({command:u.z.string(),exitCode:u.z.number().int(),durationMs:u.z.number().int().default(0),tail:u.z.string().default("")})).optional()});h.AuditStartMsg=u.z.object({type:u.z.literal("audit.start"),requestId:u.z.string(),projectId:u.z.string(),role:h.AuditRole,model:u.z.string().default(""),scope:h.AuditScope.default({kind:"repo",ref:""})});h.AuditStartResultMsg=u.z.object({type:u.z.literal("audit.start.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditListMsg=u.z.object({type:u.z.literal("audit.list"),requestId:u.z.string(),projectId:u.z.string()});h.AuditListResultMsg=u.z.object({type:u.z.literal("audit.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audits:u.z.array(u.z.object({id:u.z.string(),role:h.AuditRole,createdAt:u.z.string(),findingCount:u.z.number().int(),bySeverity:u.z.record(u.z.number().int()).default({})})).default([])});h.AuditGetMsg=u.z.object({type:u.z.literal("audit.get"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string()});h.AuditGetResultMsg=u.z.object({type:u.z.literal("audit.get.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditReviewMsg=u.z.object({type:u.z.literal("audit.review"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string(),selected:u.z.array(u.z.string()).optional(),ticketed:u.z.array(u.z.object({findingId:u.z.string(),issueKey:u.z.string()})).default([]),verdicts:u.z.array(u.z.object({findingId:u.z.string(),verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().max(2e3).default("")})).default([]),verdictBy:u.z.string().default("")});h.AuditReviewResultMsg=u.z.object({type:u.z.literal("audit.review.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.KnowledgeListMsg=u.z.object({type:u.z.literal("knowledge.list"),requestId:u.z.string(),projectId:u.z.string()});h.KnowledgeFile=u.z.object({role:h.AuditRole,level:u.z.enum(["global","org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string(),content:u.z.string(),editable:u.z.boolean().default(!1)});h.KnowledgeListResultMsg=u.z.object({type:u.z.literal("knowledge.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),files:u.z.array(h.KnowledgeFile).default([])});h.KnowledgeSaveMsg=u.z.object({type:u.z.literal("knowledge.save"),requestId:u.z.string(),projectId:u.z.string(),role:h.AuditRole,level:u.z.enum(["org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string().min(1).max(100),content:u.z.string().max(6e4),append:u.z.boolean().default(!1),by:u.z.string().default("")});h.KnowledgeSaveResultMsg=u.z.object({type:u.z.literal("knowledge.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});h.TeamCredsMsg=u.z.object({type:u.z.literal("team.creds"),requestId:u.z.string(),emails:u.z.array(u.z.string()).max(200)});h.TeamCredsResultMsg=u.z.object({type:u.z.literal("team.creds.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),githubShared:u.z.boolean().default(!1),sharedGithubLogin:u.z.string().default(""),entries:u.z.array(u.z.object({email:u.z.string(),jira:u.z.enum(["own","runner-account","missing"]),jiraAs:u.z.string().default(""),github:u.z.enum(["own","shared","missing"]),githubAs:u.z.string().default("")})).default([])});h.ChatFile=u.z.object({name:u.z.string().min(1).max(255),contentBase64:u.z.string().min(1).max(6e6)});h.ChatTurnMsg=u.z.object({type:u.z.literal("chat.turn"),requestId:u.z.string(),projectId:u.z.string(),sessionId:u.z.string().optional(),message:u.z.string().min(1).max(2e4),userName:u.z.string().default(""),model:u.z.string().default(""),files:u.z.array(h.ChatFile).max(8).default([])});h.ChatTurnResultMsg=u.z.object({type:u.z.literal("chat.turn.result"),requestId:u.z.string(),ok:u.z.boolean(),sessionId:u.z.string().default(""),reply:u.z.string().default(""),error:u.z.string().optional()});h.ChatCreateTicketMsg=u.z.object({type:u.z.literal("chat.create.ticket"),requestId:u.z.string(),projectId:u.z.string(),summary:u.z.string().min(1).max(250),description:u.z.string().default(""),triggerComment:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),asEpic:u.z.boolean().default(!1),children:u.z.array(u.z.object({summary:u.z.string().min(1),description:u.z.string().default("")})).max(20).default([]),files:u.z.array(h.ChatFile).max(8).default([])});h.ChatCreateTicketResultMsg=u.z.object({type:u.z.literal("chat.create.ticket.result"),requestId:u.z.string(),ok:u.z.boolean(),issueKey:u.z.string().default(""),error:u.z.string().optional(),childKeys:u.z.array(u.z.string()).default([])});h.EnvPreflightMsg=u.z.object({type:u.z.literal("env.preflight"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string().default(""),steps:u.z.array(h.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),workdir:u.z.string().default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default("")});h.EnvPreflightResultMsg=u.z.object({type:u.z.literal("env.preflight.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string().default("")})).default([])});h.DeploySuggestResultMsg=u.z.object({type:u.z.literal("deploy.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),steps:u.z.array(h.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),notes:u.z.string().default(""),error:u.z.string().optional()});h.SetupStatusMsg=u.z.object({type:u.z.literal("setup.status"),requestId:u.z.string(),repoNames:u.z.array(u.z.string()).max(100).default([])});h.SetupStatusResultMsg=u.z.object({type:u.z.literal("setup.status.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),jiraConfigured:u.z.boolean().default(!1),jiraEmail:u.z.string().default(""),claude:u.z.object({installed:u.z.boolean(),version:u.z.string().default(""),loggedIn:u.z.boolean()}).optional(),githubTokenSet:u.z.boolean().default(!1),githubLogin:u.z.string().default(""),deploysEnabled:u.z.boolean().default(!1),jiraUserCount:u.z.number().int().default(0),repos:u.z.array(u.z.object({repoName:u.z.string(),mapped:u.z.boolean(),pathExists:u.z.boolean().default(!1),isGit:u.z.boolean().default(!1),claudeMd:u.z.boolean().default(!1),deployMd:u.z.boolean().default(!1),testMd:u.z.boolean().default(!1)})).default([])});h.SetupClaudeMdGenerateMsg=u.z.object({type:u.z.literal("setup.claudemd.generate"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),streamId:u.z.string().default("")});h.SetupClaudeMdGenerateResultMsg=u.z.object({type:u.z.literal("setup.claudemd.generate.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),content:u.z.string().default("")});h.SetupClaudeMdSaveMsg=u.z.object({type:u.z.literal("setup.claudemd.save"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),overwrite:u.z.boolean().default(!1),content:u.z.string().max(1e5)});h.SetupClaudeMdSaveResultMsg=u.z.object({type:u.z.literal("setup.claudemd.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});h.RunnerUpdateMsg=u.z.object({type:u.z.literal("runner.update"),requestId:u.z.string()});h.RunnerUpdateResultMsg=u.z.object({type:u.z.literal("runner.update.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});h.RunnerToServerMsg=u.z.discriminatedUnion("type",[h.HelloMsg,h.HeartbeatMsg,h.RunClaimMsg,h.RunLogMsg,h.RunStatusMsg,h.ProjectTestResultMsg,h.RuleDiagnoseResultMsg,h.DeployClaimMsg,h.DeploySuggestResultMsg,h.EnvPreflightResultMsg,h.ChatTurnResultMsg,h.ChatStreamMsg,h.ChatCreateTicketResultMsg,h.ChatListResultMsg,h.ChatLoadResultMsg,h.BoardFetchResultMsg,h.BoardTriggerResultMsg,h.TeamCredsResultMsg,h.AuditStartResultMsg,h.AuditListResultMsg,h.AuditGetResultMsg,h.AuditReviewResultMsg,h.KnowledgeListResultMsg,h.KnowledgeSaveResultMsg,h.EpicListResultMsg,h.EpicSuggestResultMsg,h.JiraUsersResultMsg,h.SetupStatusResultMsg,h.SetupClaudeMdGenerateResultMsg,h.SetupClaudeMdSaveResultMsg,h.RunnerUpdateResultMsg]);h.HelloAckMsg=u.z.object({type:u.z.literal("hello.ack"),runnerId:u.z.string(),runnerName:u.z.string(),serverTime:u.z.string()});h.ConfigMsg=u.z.object({type:u.z.literal("config"),projects:u.z.array(h.ProjectConfig),rules:u.z.array(h.RuleConfig),environments:u.z.array(h.EnvironmentConfig).default([]),pollingPaused:u.z.boolean().default(!1)});h.RunClaimResultMsg=u.z.object({type:u.z.literal("run.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),reason:u.z.string().optional(),claudeProfile:u.z.string().optional(),actorEmail:u.z.string().optional()});h.ProjectTestMsg=u.z.object({type:u.z.literal("project.test"),requestId:u.z.string(),projectId:u.z.string()});h.RuleDiagnoseMsg=u.z.object({type:u.z.literal("rule.diagnose"),requestId:u.z.string(),ruleId:u.z.string()});h.RunCancelMsg=u.z.object({type:u.z.literal("run.cancel"),runId:u.z.string()});h.RunApprovedMsg=u.z.object({type:u.z.literal("run.approved"),runId:u.z.string(),headSha:u.z.string().optional()});h.RunRejectedMsg=u.z.object({type:u.z.literal("run.rejected"),runId:u.z.string()});h.RunRetryPushMsg=u.z.object({type:u.z.literal("run.retryPush"),runId:u.z.string()});h.DeployStartMsg=u.z.object({type:u.z.literal("deploy.start"),runId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environment:h.EnvironmentConfig,requestedBy:u.z.string().default(""),attempt:u.z.number().int().positive().default(1)});h.DeploySuggestMsg=u.z.object({type:u.z.literal("deploy.suggest"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),notes:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(1800).default(300)});h.JiraUsersMsg=u.z.object({type:u.z.literal("jira.users"),requestId:u.z.string(),query:u.z.string().default("")});h.ServerToRunnerMsg=u.z.discriminatedUnion("type",[h.HelloAckMsg,h.ConfigMsg,h.RunClaimResultMsg,h.ProjectTestMsg,h.RuleDiagnoseMsg,h.RunCancelMsg,h.RunApprovedMsg,h.RunRejectedMsg,h.RunRetryPushMsg,h.DeployClaimResultMsg,h.DeployStartMsg,h.DeploySuggestMsg,h.EnvPreflightMsg,h.ChatTurnMsg,h.ChatCreateTicketMsg,h.ChatListMsg,h.ChatLoadMsg,h.BoardFetchMsg,h.BoardTriggerMsg,h.TeamCredsMsg,h.AuditStartMsg,h.AuditListMsg,h.AuditGetMsg,h.AuditReviewMsg,h.KnowledgeListMsg,h.KnowledgeSaveMsg,h.EpicListMsg,h.EpicSuggestMsg,h.JiraUsersMsg,h.SetupStatusMsg,h.SetupClaudeMdGenerateMsg,h.SetupClaudeMdSaveMsg,h.RunnerUpdateMsg]);h.EnrollRequest=u.z.object({enrollToken:u.z.string().min(10),name:u.z.string().min(1).max(100),platform:u.z.string(),runnerVersion:u.z.string()});h.EnrollResponse=u.z.object({runnerId:u.z.string(),runnerToken:u.z.string(),controlPlaneWsUrl:u.z.string()});function xp(r){return h.RunnerToServerMsg.parse(r)}function Cp(r){return h.ServerToRunnerMsg.parse(r)}h.DEFAULT_PLAN_PROMPT_TEMPLATE=`You are a senior engineer asked to assess a Jira ticket. You have read-only access to the repository \u2014 do not attempt to modify anything.
23
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function _a(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}ba.Command=Ei});var xa=Y(Ie=>{var{Argument:ka}=is(),{Command:Ii}=wa(),{CommanderError:Zd,InvalidArgumentError:Sa}=Tn(),{Help:Kd}=_i(),{Option:Ta}=Si();Ie.program=new Ii;Ie.createCommand=r=>new Ii(r);Ie.createOption=(r,e)=>new Ta(r,e);Ie.createArgument=(r,e)=>new ka(r,e);Ie.Command=Ii;Ie.Option=Ta;Ie.Argument=ka;Ie.Help=Kd;Ie.CommanderError=Zd;Ie.InvalidArgumentError=Sa;Ie.InvalidOptionArgumentError=Sa});var Rn=Y(te=>{"use strict";Object.defineProperty(te,"__esModule",{value:!0});te.getParsedType=te.ZodParsedType=te.objectUtil=te.util=void 0;var Mi;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Mi||(te.util=Mi={}));var Wa;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Wa||(te.objectUtil=Wa={}));te.ZodParsedType=Mi.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var cf=r=>{switch(typeof r){case"undefined":return te.ZodParsedType.undefined;case"string":return te.ZodParsedType.string;case"number":return Number.isNaN(r)?te.ZodParsedType.nan:te.ZodParsedType.number;case"boolean":return te.ZodParsedType.boolean;case"function":return te.ZodParsedType.function;case"bigint":return te.ZodParsedType.bigint;case"symbol":return te.ZodParsedType.symbol;case"object":return Array.isArray(r)?te.ZodParsedType.array:r===null?te.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?te.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?te.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?te.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?te.ZodParsedType.date:te.ZodParsedType.object;default:return te.ZodParsedType.unknown}};te.getParsedType=cf});var _s=Y(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.ZodError=Ct.quotelessJson=Ct.ZodIssueCode=void 0;var Ja=Rn();Ct.ZodIssueCode=Ja.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var df=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");Ct.quotelessJson=df;var $n=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Ja.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};Ct.ZodError=$n;$n.create=r=>new $n(r)});var Di=Y(Li=>{"use strict";Object.defineProperty(Li,"__esModule",{value:!0});var me=_s(),er=Rn(),hf=(r,e)=>{let t;switch(r.code){case me.ZodIssueCode.invalid_type:r.received===er.ZodParsedType.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case me.ZodIssueCode.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,er.util.jsonStringifyReplacer)}`;break;case me.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${er.util.joinValues(r.keys,", ")}`;break;case me.ZodIssueCode.invalid_union:t="Invalid input";break;case me.ZodIssueCode.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${er.util.joinValues(r.options)}`;break;case me.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${er.util.joinValues(r.options)}, received '${r.received}'`;break;case me.ZodIssueCode.invalid_arguments:t="Invalid function arguments";break;case me.ZodIssueCode.invalid_return_type:t="Invalid function return type";break;case me.ZodIssueCode.invalid_date:t="Invalid date";break;case me.ZodIssueCode.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:er.util.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case me.ZodIssueCode.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case me.ZodIssueCode.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case me.ZodIssueCode.custom:t="Invalid input";break;case me.ZodIssueCode.invalid_intersection_types:t="Intersection results could not be merged";break;case me.ZodIssueCode.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case me.ZodIssueCode.not_finite:t="Number must be finite";break;default:t=e.defaultError,er.util.assertNever(r)}return{message:t}};Li.default=hf});var bs=Y(Et=>{"use strict";var ff=Et&&Et.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Et,"__esModule",{value:!0});Et.defaultErrorMap=void 0;Et.setErrorMap=pf;Et.getErrorMap=mf;var Ya=ff(Di());Et.defaultErrorMap=Ya.default;var Xa=Ya.default;function pf(r){Xa=r}function mf(){return Xa}});var Ui=Y(X=>{"use strict";var gf=X&&X.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(X,"__esModule",{value:!0});X.isAsync=X.isValid=X.isDirty=X.isAborted=X.OK=X.DIRTY=X.INVALID=X.ParseStatus=X.EMPTY_PATH=X.makeIssue=void 0;X.addIssueToContext=_f;var yf=bs(),Qa=gf(Di()),vf=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};X.makeIssue=vf;X.EMPTY_PATH=[];function _f(r,e){let t=(0,yf.getErrorMap)(),n=(0,X.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===Qa.default?void 0:Qa.default].filter(s=>!!s)});r.common.issues.push(n)}var zi=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return X.INVALID;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return X.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}};X.ParseStatus=zi;X.INVALID=Object.freeze({status:"aborted"});var bf=r=>({status:"dirty",value:r});X.DIRTY=bf;var wf=r=>({status:"valid",value:r});X.OK=wf;var kf=r=>r.status==="aborted";X.isAborted=kf;var Sf=r=>r.status==="dirty";X.isDirty=Sf;var Tf=r=>r.status==="valid";X.isValid=Tf;var xf=r=>typeof Promise<"u"&&r instanceof Promise;X.isAsync=xf});var tu=Y(eu=>{"use strict";Object.defineProperty(eu,"__esModule",{value:!0})});var nu=Y(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});ws.errorUtil=void 0;var ru;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(ru||(ws.errorUtil=ru={}))});var mu=Y(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.discriminatedUnion=y.date=y.boolean=y.bigint=y.array=y.any=y.coerce=y.ZodFirstPartyTypeKind=y.late=y.ZodSchema=y.Schema=y.ZodReadonly=y.ZodPipeline=y.ZodBranded=y.BRAND=y.ZodNaN=y.ZodCatch=y.ZodDefault=y.ZodNullable=y.ZodOptional=y.ZodTransformer=y.ZodEffects=y.ZodPromise=y.ZodNativeEnum=y.ZodEnum=y.ZodLiteral=y.ZodLazy=y.ZodFunction=y.ZodSet=y.ZodMap=y.ZodRecord=y.ZodTuple=y.ZodIntersection=y.ZodDiscriminatedUnion=y.ZodUnion=y.ZodObject=y.ZodArray=y.ZodVoid=y.ZodNever=y.ZodUnknown=y.ZodAny=y.ZodNull=y.ZodUndefined=y.ZodSymbol=y.ZodDate=y.ZodBoolean=y.ZodBigInt=y.ZodNumber=y.ZodString=y.ZodType=void 0;y.NEVER=y.void=y.unknown=y.union=y.undefined=y.tuple=y.transformer=y.symbol=y.string=y.strictObject=y.set=y.record=y.promise=y.preprocess=y.pipeline=y.ostring=y.optional=y.onumber=y.oboolean=y.object=y.number=y.nullable=y.null=y.never=y.nativeEnum=y.nan=y.map=y.literal=y.lazy=y.intersection=y.instanceof=y.function=y.enum=y.effect=void 0;y.datetimeRegex=uu;y.custom=cu;var E=_s(),ks=bs(),O=nu(),v=Ui(),I=Rn(),je=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},su=(r,e)=>{if((0,v.isValid)(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new E.ZodError(r.common.issues);return this._error=t,this._error}}};function K(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var V=class{get description(){return this._def.description}_getType(e){return(0,I.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,I.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new v.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,I.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if((0,v.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)},s=this._parseSync({data:e,path:n.path,parent:n});return su(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return(0,v.isValid)(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>(0,v.isValid)(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,I.getParsedType)(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await((0,v.isAsync)(s)?s:Promise.resolve(s));return su(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:E.ZodIssueCode.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new Te({schema:this,typeName:U.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Pe.create(this,this._def)}nullable(){return We.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return lt.create(this)}promise(){return Rt.create(this,this._def)}or(e){return ar.create([this,e],this._def)}and(e){return ur.create(this,e,this._def)}transform(e){return new Te({...K(this._def),schema:this,typeName:U.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new fr({...K(this._def),innerType:this,defaultValue:t,typeName:U.ZodDefault})}brand(){return new Pn({typeName:U.ZodBranded,type:this,...K(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new pr({...K(this._def),innerType:this,catchValue:t,typeName:U.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return jn.create(this,e)}readonly(){return mr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};y.ZodType=V;y.Schema=V;y.ZodSchema=V;var Cf=/^c[^\s-]{8,}$/i,Ef=/^[0-9a-z]+$/,If=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Af=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Rf=/^[a-z0-9_-]{21}$/i,$f=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Pf=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,jf=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Of="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",qi,Nf=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Mf=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Lf=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Df=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,zf=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Uf=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,ou="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",qf=new RegExp(`^${ou}$`);function au(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Bf(r){return new RegExp(`^${au(r)}$`)}function uu(r){let e=`${ou}T${au(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Ff(r,e){return!!((e==="v4"||!e)&&Nf.test(r)||(e==="v6"||!e)&&Lf.test(r))}function Zf(r,e){if(!$f.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function Kf(r,e){return!!((e==="v4"||!e)&&Mf.test(r)||(e==="v6"||!e)&&Df.test(r))}var It=class r extends V{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==I.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.string,received:i.parsedType}),v.INVALID}let n=new v.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")jf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"email",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")qi||(qi=new RegExp(Of,"u")),qi.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"emoji",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Af.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"uuid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Rf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"nanoid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Cf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cuid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Ef.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cuid2",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")If.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"ulid",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"url",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"regex",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?uu(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?qf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Bf(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Pf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"duration",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Ff(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"ip",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?Zf(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"jwt",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?Kf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"cidr",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?zf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"base64",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Uf.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{validation:"base64url",code:E.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):I.util.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:E.ZodIssueCode.invalid_string,...O.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...O.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...O.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...O.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...O.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...O.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...O.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...O.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...O.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...O.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...O.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...O.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...O.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...O.errorUtil.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...O.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...O.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...O.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...O.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...O.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...O.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...O.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...O.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...O.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...O.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,O.errorUtil.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodString=It;It.create=r=>new It({checks:[],typeName:U.ZodString,coerce:r?.coerce??!1,...K(r)});function Vf(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var tr=class r extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==I.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.number,received:i.parsedType}),v.INVALID}let n,s=new v.ParseStatus;for(let i of this._def.checks)i.kind==="int"?I.util.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Vf(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_finite,message:i.message}),s.dirty()):I.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,O.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:O.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:O.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:O.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:O.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:O.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:O.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:O.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:O.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&I.util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};y.ZodNumber=tr;tr.create=r=>new tr({checks:[],typeName:U.ZodNumber,coerce:r?.coerce||!1,...K(r)});var rr=class r extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==I.ZodParsedType.bigint)return this._getInvalidInput(e);let n,s=new v.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):I.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.bigint,received:t.parsedType}),v.INVALID}gte(e,t){return this.setLimit("min",e,!0,O.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:O.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:O.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:O.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:O.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodBigInt=rr;rr.create=r=>new rr({checks:[],typeName:U.ZodBigInt,coerce:r?.coerce??!1,...K(r)});var nr=class extends V{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==I.ZodParsedType.boolean){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.boolean,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodBoolean=nr;nr.create=r=>new nr({typeName:U.ZodBoolean,coerce:r?.coerce||!1,...K(r)});var sr=class r extends V{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==I.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.date,received:i.parsedType}),v.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_date}),v.INVALID}let n=new v.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,v.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):I.util.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:O.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:O.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};y.ZodDate=sr;sr.create=r=>new sr({checks:[],coerce:r?.coerce||!1,typeName:U.ZodDate,...K(r)});var Hr=class extends V{_parse(e){if(this._getType(e)!==I.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.symbol,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodSymbol=Hr;Hr.create=r=>new Hr({typeName:U.ZodSymbol,...K(r)});var ir=class extends V{_parse(e){if(this._getType(e)!==I.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.undefined,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodUndefined=ir;ir.create=r=>new ir({typeName:U.ZodUndefined,...K(r)});var or=class extends V{_parse(e){if(this._getType(e)!==I.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.null,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodNull=or;or.create=r=>new or({typeName:U.ZodNull,...K(r)});var At=class extends V{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,v.OK)(e.data)}};y.ZodAny=At;At.create=r=>new At({typeName:U.ZodAny,...K(r)});var ut=class extends V{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,v.OK)(e.data)}};y.ZodUnknown=ut;ut.create=r=>new ut({typeName:U.ZodUnknown,...K(r)});var Ue=class extends V{_parse(e){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.never,received:t.parsedType}),v.INVALID}};y.ZodNever=Ue;Ue.create=r=>new Ue({typeName:U.ZodNever,...K(r)});var Wr=class extends V{_parse(e){if(this._getType(e)!==I.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.void,received:n.parsedType}),v.INVALID}return(0,v.OK)(e.data)}};y.ZodVoid=Wr;Wr.create=r=>new Wr({typeName:U.ZodVoid,...K(r)});var lt=class r extends V{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==I.ZodParsedType.array)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.array,received:t.parsedType}),v.INVALID;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&((0,v.addIssueToContext)(t,{code:o?E.ZodIssueCode.too_big:E.ZodIssueCode.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new je(t,o,t.path,a)))).then(o=>v.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new je(t,o,t.path,a)));return v.ParseStatus.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:O.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:O.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:O.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};y.ZodArray=lt;lt.create=(r,e)=>new lt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:U.ZodArray,...K(e)});function Gr(r){if(r instanceof we){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Pe.create(Gr(n))}return new we({...r._def,shape:()=>e})}else return r instanceof lt?new lt({...r._def,type:Gr(r.element)}):r instanceof Pe?Pe.create(Gr(r.unwrap())):r instanceof We?We.create(Gr(r.unwrap())):r instanceof He?He.create(r.items.map(e=>Gr(e))):r}var we=class r extends V{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=I.util.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==I.ZodParsedType.object){let c=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(c,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:c.parsedType}),v.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ue&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let l=[];for(let c of o){let d=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:d._parse(new je(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof Ue){let c=this._def.unknownKeys;if(c==="passthrough")for(let d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(c==="strict")a.length>0&&((0,v.addIssueToContext)(s,{code:E.ZodIssueCode.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let d of a){let p=s.data[d];l.push({key:{status:"valid",value:d},value:c._parse(new je(s,p,s.path,d)),alwaysSet:d in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let d of l){let p=await d.key,_=await d.value;c.push({key:p,value:_,alwaysSet:d.alwaysSet})}return c}).then(c=>v.ParseStatus.mergeObjectSync(n,c)):v.ParseStatus.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return O.errorUtil.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:O.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:U.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of I.util.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of I.util.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return Gr(this)}partial(e){let t={};for(let n of I.util.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of I.util.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Pe;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return lu(I.util.objectKeys(this.shape))}};y.ZodObject=we;we.create=(r,e)=>new we({shape:()=>r,unknownKeys:"strip",catchall:Ue.create(),typeName:U.ZodObject,...K(e)});we.strictCreate=(r,e)=>new we({shape:()=>r,unknownKeys:"strict",catchall:Ue.create(),typeName:U.ZodObject,...K(e)});we.lazycreate=(r,e)=>new we({shape:r,unknownKeys:"strip",catchall:Ue.create(),typeName:U.ZodObject,...K(e)});var ar=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new E.ZodError(a.ctx.common.issues));return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union,unionErrors:o}),v.INVALID}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},d=l._parseSync({data:t.data,path:t.path,parent:c});if(d.status==="valid")return d;d.status==="dirty"&&!i&&(i={result:d,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(l=>new E.ZodError(l));return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union,unionErrors:a}),v.INVALID}}get options(){return this._def.options}};y.ZodUnion=ar;ar.create=(r,e)=>new ar({options:r,typeName:U.ZodUnion,...K(e)});var at=r=>r instanceof lr?at(r.schema):r instanceof Te?at(r.innerType()):r instanceof cr?[r.value]:r instanceof dr?r.options:r instanceof hr?I.util.objectValues(r.enum):r instanceof fr?at(r._def.innerType):r instanceof ir?[void 0]:r instanceof or?[null]:r instanceof Pe?[void 0,...at(r.unwrap())]:r instanceof We?[null,...at(r.unwrap())]:r instanceof Pn||r instanceof mr?at(r.unwrap()):r instanceof pr?at(r._def.innerType):[],Ss=class r extends V{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.object)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:t.parsedType}),v.INVALID;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):((0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),v.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=at(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:U.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...K(n)})}};y.ZodDiscriminatedUnion=Ss;function Bi(r,e){let t=(0,I.getParsedType)(r),n=(0,I.getParsedType)(e);if(r===e)return{valid:!0,data:r};if(t===I.ZodParsedType.object&&n===I.ZodParsedType.object){let s=I.util.objectKeys(e),i=I.util.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let l=Bi(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===I.ZodParsedType.array&&n===I.ZodParsedType.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],l=Bi(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===I.ZodParsedType.date&&n===I.ZodParsedType.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var ur=class extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,v.isAborted)(i)||(0,v.isAborted)(o))return v.INVALID;let a=Bi(i.value,o.value);return a.valid?(((0,v.isDirty)(i)||(0,v.isDirty)(o))&&t.dirty(),{status:t.value,value:a.data}):((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_intersection_types}),v.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};y.ZodIntersection=ur;ur.create=(r,e,t)=>new ur({left:r,right:e,typeName:U.ZodIntersection,...K(t)});var He=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.array)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.array,received:n.parsedType}),v.INVALID;if(n.data.length<this._def.items.length)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),v.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new je(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>v.ParseStatus.mergeArray(t,o)):v.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};y.ZodTuple=He;He.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new He({items:r,typeName:U.ZodTuple,rest:null,...K(e)})};var Ts=class r extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.object)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.object,received:n.parsedType}),v.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new je(n,a,n.path,a)),value:o._parse(new je(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?v.ParseStatus.mergeObjectAsync(t,s):v.ParseStatus.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof V?new r({keyType:e,valueType:t,typeName:U.ZodRecord,...K(n)}):new r({keyType:It.create(),valueType:e,typeName:U.ZodRecord,...K(t)})}};y.ZodRecord=Ts;var Jr=class extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.map)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.map,received:n.parsedType}),v.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new je(n,a,n.path,[c,"key"])),value:i._parse(new je(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,d=await l.value;if(c.status==="aborted"||d.status==="aborted")return v.INVALID;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let l of o){let c=l.key,d=l.value;if(c.status==="aborted"||d.status==="aborted")return v.INVALID;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}}}};y.ZodMap=Jr;Jr.create=(r,e,t)=>new Jr({valueType:e,keyType:r,typeName:U.ZodMap,...K(t)});var Yr=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==I.ZodParsedType.set)return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.set,received:n.parsedType}),v.INVALID;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&((0,v.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let d of l){if(d.status==="aborted")return v.INVALID;d.status==="dirty"&&t.dirty(),c.add(d.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new je(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:O.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:O.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};y.ZodSet=Yr;Yr.create=(r,e)=>new Yr({valueType:r,minSize:null,maxSize:null,typeName:U.ZodSet,...K(e)});var xs=class r extends V{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.function)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.function,received:t.parsedType}),v.INVALID;function n(a,l){return(0,v.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,ks.getErrorMap)(),ks.defaultErrorMap].filter(c=>!!c),issueData:{code:E.ZodIssueCode.invalid_arguments,argumentsError:l}})}function s(a,l){return(0,v.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,ks.getErrorMap)(),ks.defaultErrorMap].filter(c=>!!c),issueData:{code:E.ZodIssueCode.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Rt){let a=this;return(0,v.OK)(async function(...l){let c=new E.ZodError([]),d=await a._def.args.parseAsync(l,i).catch(S=>{throw c.addIssue(n(l,S)),c}),p=await Reflect.apply(o,this,d);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return(0,v.OK)(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new E.ZodError([n(l,c.error)]);let d=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(d,i);if(!p.success)throw new E.ZodError([s(d,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:He.create(e).rest(ut.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||He.create([]).rest(ut.create()),returns:t||ut.create(),typeName:U.ZodFunction,...K(n)})}};y.ZodFunction=xs;var lr=class extends V{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};y.ZodLazy=lr;lr.create=(r,e)=>new lr({getter:r,typeName:U.ZodLazy,...K(e)});var cr=class extends V{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(t,{received:t.data,code:E.ZodIssueCode.invalid_literal,expected:this._def.value}),v.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};y.ZodLiteral=cr;cr.create=(r,e)=>new cr({value:r,typeName:U.ZodLiteral,...K(e)});function lu(r,e){return new dr({values:r,typeName:U.ZodEnum,...K(e)})}var dr=class r extends V{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,v.addIssueToContext)(t,{expected:I.util.joinValues(n),received:t.parsedType,code:E.ZodIssueCode.invalid_type}),v.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,v.addIssueToContext)(t,{received:t.data,code:E.ZodIssueCode.invalid_enum_value,options:n}),v.INVALID}return(0,v.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};y.ZodEnum=dr;dr.create=lu;var hr=class extends V{_parse(e){let t=I.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==I.ZodParsedType.string&&n.parsedType!==I.ZodParsedType.number){let s=I.util.objectValues(t);return(0,v.addIssueToContext)(n,{expected:I.util.joinValues(s),received:n.parsedType,code:E.ZodIssueCode.invalid_type}),v.INVALID}if(this._cache||(this._cache=new Set(I.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=I.util.objectValues(t);return(0,v.addIssueToContext)(n,{received:n.data,code:E.ZodIssueCode.invalid_enum_value,options:s}),v.INVALID}return(0,v.OK)(e.data)}get enum(){return this._def.values}};y.ZodNativeEnum=hr;hr.create=(r,e)=>new hr({values:r,typeName:U.ZodNativeEnum,...K(e)});var Rt=class extends V{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==I.ZodParsedType.promise&&t.common.async===!1)return(0,v.addIssueToContext)(t,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.promise,received:t.parsedType}),v.INVALID;let n=t.parsedType===I.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,v.OK)(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};y.ZodPromise=Rt;Rt.create=(r,e)=>new Rt({type:r,typeName:U.ZodPromise,...K(e)});var Te=class extends V{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===U.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,v.addIssueToContext)(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return v.INVALID;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?v.INVALID:l.status==="dirty"||t.value==="dirty"?(0,v.DIRTY)(l.value):l});{if(t.value==="aborted")return v.INVALID;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?v.INVALID:a.status==="dirty"||t.value==="dirty"?(0,v.DIRTY)(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?v.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?v.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,v.isValid)(o))return v.INVALID;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>(0,v.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):v.INVALID);I.util.assertNever(s)}};y.ZodEffects=Te;y.ZodTransformer=Te;Te.create=(r,e,t)=>new Te({schema:r,typeName:U.ZodEffects,effect:e,...K(t)});Te.createWithPreprocess=(r,e,t)=>new Te({schema:e,effect:{type:"preprocess",transform:r},typeName:U.ZodEffects,...K(t)});var Pe=class extends V{_parse(e){return this._getType(e)===I.ZodParsedType.undefined?(0,v.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodOptional=Pe;Pe.create=(r,e)=>new Pe({innerType:r,typeName:U.ZodOptional,...K(e)});var We=class extends V{_parse(e){return this._getType(e)===I.ZodParsedType.null?(0,v.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodNullable=We;We.create=(r,e)=>new We({innerType:r,typeName:U.ZodNullable,...K(e)});var fr=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===I.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};y.ZodDefault=fr;fr.create=(r,e)=>new fr({innerType:r,typeName:U.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...K(e)});var pr=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,v.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new E.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new E.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};y.ZodCatch=pr;pr.create=(r,e)=>new pr({innerType:r,typeName:U.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...K(e)});var Xr=class extends V{_parse(e){if(this._getType(e)!==I.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,v.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:I.ZodParsedType.nan,received:n.parsedType}),v.INVALID}return{status:"valid",value:e.data}}};y.ZodNaN=Xr;Xr.create=r=>new Xr({typeName:U.ZodNaN,...K(r)});y.BRAND=Symbol("zod_brand");var Pn=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};y.ZodBranded=Pn;var jn=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?v.INVALID:i.status==="dirty"?(t.dirty(),(0,v.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?v.INVALID:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:U.ZodPipeline})}};y.ZodPipeline=jn;var mr=class extends V{_parse(e){let t=this._def.innerType._parse(e),n=s=>((0,v.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,v.isAsync)(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};y.ZodReadonly=mr;mr.create=(r,e)=>new mr({innerType:r,typeName:U.ZodReadonly,...K(e)});function iu(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function cu(r,e={},t){return r?At.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=iu(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=iu(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):At.create()}y.late={object:we.lazycreate};var U;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(U||(y.ZodFirstPartyTypeKind=U={}));var Gf=(r,e={message:`Input not instance of ${r.name}`})=>cu(t=>t instanceof r,e);y.instanceof=Gf;var du=It.create;y.string=du;var hu=tr.create;y.number=hu;var Hf=Xr.create;y.nan=Hf;var Wf=rr.create;y.bigint=Wf;var fu=nr.create;y.boolean=fu;var Jf=sr.create;y.date=Jf;var Yf=Hr.create;y.symbol=Yf;var Xf=ir.create;y.undefined=Xf;var Qf=or.create;y.null=Qf;var ep=At.create;y.any=ep;var tp=ut.create;y.unknown=tp;var rp=Ue.create;y.never=rp;var np=Wr.create;y.void=np;var sp=lt.create;y.array=sp;var ip=we.create;y.object=ip;var op=we.strictCreate;y.strictObject=op;var ap=ar.create;y.union=ap;var up=Ss.create;y.discriminatedUnion=up;var lp=ur.create;y.intersection=lp;var cp=He.create;y.tuple=cp;var dp=Ts.create;y.record=dp;var hp=Jr.create;y.map=hp;var fp=Yr.create;y.set=fp;var pp=xs.create;y.function=pp;var mp=lr.create;y.lazy=mp;var gp=cr.create;y.literal=gp;var yp=dr.create;y.enum=yp;var vp=hr.create;y.nativeEnum=vp;var _p=Rt.create;y.promise=_p;var pu=Te.create;y.effect=pu;y.transformer=pu;var bp=Pe.create;y.optional=bp;var wp=We.create;y.nullable=wp;var kp=Te.createWithPreprocess;y.preprocess=kp;var Sp=jn.create;y.pipeline=Sp;var Tp=()=>du().optional();y.ostring=Tp;var xp=()=>hu().optional();y.onumber=xp;var Cp=()=>fu().optional();y.oboolean=Cp;y.coerce={string:(r=>It.create({...r,coerce:!0})),number:(r=>tr.create({...r,coerce:!0})),boolean:(r=>nr.create({...r,coerce:!0})),bigint:(r=>rr.create({...r,coerce:!0})),date:(r=>sr.create({...r,coerce:!0}))};y.NEVER=v.INVALID});var Fi=Y(Oe=>{"use strict";var Ep=Oe&&Oe.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Qr=Oe&&Oe.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Ep(e,r,t)};Object.defineProperty(Oe,"__esModule",{value:!0});Qr(bs(),Oe);Qr(Ui(),Oe);Qr(tu(),Oe);Qr(Rn(),Oe);Qr(mu(),Oe);Qr(_s(),Oe)});var vu=Y(ke=>{"use strict";var gu=ke&&ke.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Ip=ke&&ke.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Ap=ke&&ke.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&gu(e,r,t);return Ip(e,r),e},Rp=ke&&ke.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&gu(e,r,t)};Object.defineProperty(ke,"__esModule",{value:!0});ke.z=void 0;var yu=Ap(Fi());ke.z=yu;Rp(Fi(),ke);ke.default=yu});var xe=Y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.EpicListResultMsg=h.EpicChild=h.EpicListMsg=h.BoardTriggerResultMsg=h.BoardTriggerMsg=h.BoardFetchResultMsg=h.BoardFetchMsg=h.ChatLoadResultMsg=h.ChatLoadMsg=h.ChatListResultMsg=h.ChatListMsg=h.ChatStreamMsg=h.JiraUsersResultMsg=h.DeployClaimResultMsg=h.DeployClaimMsg=h.RuleDiagnoseResultMsg=h.ProjectTestResultMsg=h.RunStatusMsg=h.RunLogMsg=h.RunClaimMsg=h.HeartbeatMsg=h.HelloMsg=h.RuleConfig=h.ProjectConfig=h.ActionConfig=h.DeployAction=h.EnvironmentConfig=h.PromotionMode=h.DeployStep=h.RespondAction=h.ImplementAction=h.PlanOnlyAction=h.TriggerConfig=h.StatusChangedTrigger=h.CommentKeywordTrigger=h.LabelAddedTrigger=h.ActionType=h.TriggerType=h.ACTIVE_RUN_STATUSES=h.RunStatus=h.needsInputMarkerIn=h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=h.NEEDS_INPUT_COMMENT_MARKER=h.NEEDS_INPUT_LABEL=h.NEEDS_INPUT_MARKER=h.BRANCH_DEPLOY_ISSUE_KEY=h.REQUIRED_AGENT_CAPABILITIES=h.DEFAULT_AGENT_ID=h.REGISTERED_AGENTS=h.PROTOCOL_VERSION=void 0;h.DeploySuggestMsg=h.DeployStartMsg=h.RunRetryPushMsg=h.RunRejectedMsg=h.RunApprovedMsg=h.RunCancelMsg=h.RuleDiagnoseMsg=h.ProjectTestMsg=h.RunClaimResultMsg=h.ConfigMsg=h.HelloAckMsg=h.RunnerToServerMsg=h.RunnerUpdateResultMsg=h.RunnerUpdateMsg=h.SetupClaudeMdSaveResultMsg=h.SetupClaudeMdSaveMsg=h.SetupClaudeMdGenerateResultMsg=h.SetupClaudeMdGenerateMsg=h.SetupStatusResultMsg=h.SetupStatusMsg=h.DeploySuggestResultMsg=h.EnvPreflightResultMsg=h.EnvPreflightMsg=h.ChatCreateTicketResultMsg=h.ChatCreateTicketMsg=h.ChatTurnResultMsg=h.ChatTurnMsg=h.ChatFile=h.TeamCredsResultMsg=h.TeamCredsMsg=h.KnowledgeSaveResultMsg=h.KnowledgeSaveMsg=h.KnowledgeListResultMsg=h.KnowledgeFile=h.KnowledgeListMsg=h.AuditReviewResultMsg=h.AuditReviewMsg=h.AuditGetResultMsg=h.AuditGetMsg=h.AuditListResultMsg=h.AuditListMsg=h.AuditStartResultMsg=h.AuditStartMsg=h.AuditRecord=h.AuditFinding=h.AuditScope=h.AuditSeverity=h.AuditRole=h.EpicSuggestResultMsg=h.EpicSuggestMsg=void 0;h.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=h.PROMPT_PRESETS=h.DEFAULT_RESPOND_PROMPT_TEMPLATE=h.BUGFIX_IMPLEMENT_PROMPT_TEMPLATE=h.BUG_INVESTIGATION_PROMPT_TEMPLATE=h.TECHNICAL_PLAN_PROMPT_TEMPLATE=h.MEMORY_UPDATE_PROMPT=h.DEFAULT_IMPLEMENT_PROMPT_TEMPLATE=h.DEFAULT_PLAN_PROMPT_TEMPLATE=h.EnrollResponse=h.EnrollRequest=h.ServerToRunnerMsg=h.JiraUsersMsg=void 0;h.missingAgentCapabilities=$p;h.parseRunnerMsg=jp;h.parseServerMsg=Op;var u=vu();h.PROTOCOL_VERSION="1.27";h.REGISTERED_AGENTS=[{id:"claude-code",displayName:"Claude Code",capabilities:{readOnlyJail:!0,editNoShellJail:!0,sessionResume:!0,costReporting:!0,modelSelection:!0,loginProfiles:!0},suggestedModels:["claude-fable-5","claude-opus-5","claude-sonnet-5","claude-haiku-4-5-20251001"],experimental:!1},{id:"codex",displayName:"OpenAI Codex CLI (experimental)",capabilities:{readOnlyJail:!0,editNoShellJail:!1,sessionResume:!1,costReporting:!1,modelSelection:!0,loginProfiles:!1},suggestedModels:[],experimental:!0}];h.DEFAULT_AGENT_ID="claude-code";h.REQUIRED_AGENT_CAPABILITIES={plan_only:["readOnlyJail","sessionResume"],respond:["readOnlyJail"],implement:["editNoShellJail","sessionResume"],deploy:[]};function $p(r,e){let t=h.REGISTERED_AGENTS.find(n=>n.id===r);return t?(h.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(n=>!t.capabilities[n]):null}h.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";h.NEEDS_INPUT_MARKER="NEEDS-INPUT";h.NEEDS_INPUT_LABEL="agent-needs-input";h.NEEDS_INPUT_COMMENT_MARKER="Allwright needs your input";h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=["TicketPilot needs your input"];var Pp=r=>r.includes(h.NEEDS_INPUT_COMMENT_MARKER)||h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));h.needsInputMarkerIn=Pp;h.RunStatus=u.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);h.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];h.TriggerType=u.z.enum(["label_added","comment_keyword","status_changed"]);h.ActionType=u.z.enum(["plan_only","implement","respond","deploy"]);h.LabelAddedTrigger=u.z.object({type:u.z.literal("label_added"),label:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-planned"),failedLabel:u.z.string().min(1).default("agent-failed")});h.CommentKeywordTrigger=u.z.object({type:u.z.literal("comment_keyword"),keyword:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-implemented"),failedLabel:u.z.string().min(1).default("agent-failed")});h.StatusChangedTrigger=u.z.object({type:u.z.literal("status_changed"),status:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-deployed"),failedLabel:u.z.string().min(1).default("agent-failed")});h.TriggerConfig=u.z.discriminatedUnion("type",[h.LabelAddedTrigger,h.CommentKeywordTrigger,h.StatusChangedTrigger]);h.PlanOnlyAction=u.z.object({type:u.z.literal("plan_only"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(900),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default("")});h.ImplementAction=u.z.object({type:u.z.literal("implement"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(7200).default(1800),maxTurns:u.z.number().int().positive().max(500).default(120),requireApproval:u.z.boolean().default(!0),branchTemplate:u.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:u.z.string().min(1).default("main"),jiraTransition:u.z.string().optional(),jiraTransitionOnStart:u.z.string().optional(),jiraTransitionOnMerge:u.z.string().optional(),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default(""),updateMemory:u.z.boolean().default(!1)});h.RespondAction=u.z.object({type:u.z.literal("respond"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(600),agent:u.z.string().default(h.DEFAULT_AGENT_ID),model:u.z.string().default("")});h.DeployStep=u.z.object({name:u.z.string().min(1).max(120),run:u.z.string().min(1).max(4e3),continueOnError:u.z.boolean().default(!1)});h.PromotionMode=u.z.enum(["deploy_only","merge_and_deploy"]);h.EnvironmentConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),rank:u.z.number().int().nonnegative(),auditBeforeDeploy:u.z.enum(["","security","testing"]).default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default(""),useDedicatedCheckout:u.z.boolean().default(!1),promotionMode:h.PromotionMode.default("deploy_only"),ticketBranchTemplate:u.z.string().default("agent/{{issueKey}}"),steps:u.z.array(h.DeployStep).default([]),workdir:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(21600).default(1800),requiredSecrets:u.z.array(u.z.string()).default([]),requireApproval:u.z.boolean().default(!1),requireSyncCheck:u.z.boolean().default(!1),previousEnvBranch:u.z.string().optional(),deployFromColumn:u.z.string().default(""),deployToColumn:u.z.string().default("")});h.DeployAction=u.z.object({type:u.z.literal("deploy"),envSelection:u.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:u.z.string().optional(),requireStatus:u.z.string().optional()});h.ActionConfig=u.z.discriminatedUnion("type",[h.PlanOnlyAction,h.ImplementAction,h.RespondAction,h.DeployAction]);h.ProjectConfig=u.z.object({id:u.z.string(),name:u.z.string(),jiraProjectKey:u.z.string(),repoName:u.z.string(),componentRoutes:u.z.array(u.z.object({component:u.z.string().min(1),repoName:u.z.string().min(1)})).default([])});h.RuleConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),enabled:u.z.boolean(),trigger:h.TriggerConfig,action:h.ActionConfig});h.HelloMsg=u.z.object({type:u.z.literal("hello"),protocolVersion:u.z.string(),runnerVersion:u.z.string(),platform:u.z.string(),justBooted:u.z.boolean().optional()});h.HeartbeatMsg=u.z.object({type:u.z.literal("heartbeat"),ts:u.z.string()});h.RunClaimMsg=u.z.object({type:u.z.literal("run.claim"),requestId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),triggerFingerprint:u.z.string(),dedupKey:u.z.string().optional(),triggeredByAccountId:u.z.string().optional()});h.RunLogMsg=u.z.object({type:u.z.literal("run.log"),runId:u.z.string(),seq:u.z.number().int().nonnegative(),ts:u.z.string(),level:u.z.enum(["info","warn","error","agent"]),message:u.z.string().max(16384)});h.RunStatusMsg=u.z.object({type:u.z.literal("run.status"),runId:u.z.string(),status:h.RunStatus,error:u.z.string().optional(),errorKind:u.z.enum(["guard"]).optional(),costUsd:u.z.number().nonnegative().optional(),inputTokens:u.z.number().int().nonnegative().optional(),outputTokens:u.z.number().int().nonnegative().optional(),resultSummary:u.z.string().max(2e3).optional(),billingMode:u.z.enum(["subscription","api","unknown"]).optional(),model:u.z.string().max(200).optional(),prUrl:u.z.string().optional(),headSha:u.z.string().optional(),deployedRef:u.z.string().optional(),retryAvailable:u.z.boolean().optional()});h.ProjectTestResultMsg=u.z.object({type:u.z.literal("project.test.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string()}))});h.RuleDiagnoseResultMsg=u.z.object({type:u.z.literal("rule.diagnose.result"),requestId:u.z.string(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string()})),matchedCount:u.z.number().int().nonnegative(),excludedCount:u.z.number().int().nonnegative(),excludedSample:u.z.array(u.z.string()).max(5)});h.DeployClaimMsg=u.z.object({type:u.z.literal("deploy.claim"),requestId:u.z.string(),projectId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environmentName:u.z.string(),requestedByAccountId:u.z.string().optional(),requestedByDisplayName:u.z.string().default(""),dedupKey:u.z.string(),triggerFingerprint:u.z.string()});h.DeployClaimResultMsg=u.z.object({type:u.z.literal("deploy.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),environment:h.EnvironmentConfig.optional(),reason:u.z.string().optional(),code:u.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});h.JiraUsersResultMsg=u.z.object({type:u.z.literal("jira.users.result"),requestId:u.z.string(),ok:u.z.boolean(),users:u.z.array(u.z.object({accountId:u.z.string(),displayName:u.z.string(),email:u.z.string().default(""),active:u.z.boolean().default(!0)})).default([]),error:u.z.string().optional()});h.ChatStreamMsg=u.z.object({type:u.z.literal("chat.stream"),requestId:u.z.string(),seq:u.z.number().int().nonnegative(),text:u.z.string().max(8e3)});h.ChatListMsg=u.z.object({type:u.z.literal("chat.list"),requestId:u.z.string(),projectId:u.z.string()});h.ChatListResultMsg=u.z.object({type:u.z.literal("chat.list.result"),requestId:u.z.string(),sessions:u.z.array(u.z.object({sessionId:u.z.string(),title:u.z.string().default(""),updatedAt:u.z.string().default(""),messageCount:u.z.number().int().nonnegative().default(0)})).default([])});h.ChatLoadMsg=u.z.object({type:u.z.literal("chat.load"),requestId:u.z.string(),sessionId:u.z.string()});h.ChatLoadResultMsg=u.z.object({type:u.z.literal("chat.load.result"),requestId:u.z.string(),ok:u.z.boolean(),projectId:u.z.string().default(""),messages:u.z.array(u.z.object({role:u.z.enum(["user","agent"]),text:u.z.string()})).default([]),error:u.z.string().optional()});h.BoardFetchMsg=u.z.object({type:u.z.literal("board.fetch"),requestId:u.z.string(),projectId:u.z.string()});h.BoardFetchResultMsg=u.z.object({type:u.z.literal("board.fetch.result"),requestId:u.z.string(),ok:u.z.boolean(),browseBaseUrl:u.z.string().default(""),columns:u.z.array(u.z.object({name:u.z.string(),issues:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),labels:u.z.array(u.z.string()).default([])})).default([])})).default([]),error:u.z.string().optional()});h.BoardTriggerMsg=u.z.object({type:u.z.literal("board.trigger"),requestId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),comment:u.z.string().max(2e3).default(""),removeLabel:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),reimplement:u.z.boolean().default(!1)});h.BoardTriggerResultMsg=u.z.object({type:u.z.literal("board.trigger.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});h.EpicListMsg=u.z.object({type:u.z.literal("epic.list"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().default("")});h.EpicChild=u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string(),statusCategory:u.z.string(),labels:u.z.array(u.z.string()).default([])});h.EpicListResultMsg=u.z.object({type:u.z.literal("epic.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),epics:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string()})).default([]),children:u.z.array(h.EpicChild).default([])});h.EpicSuggestMsg=u.z.object({type:u.z.literal("epic.suggest"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().min(1),model:u.z.string().default("")});h.EpicSuggestResultMsg=u.z.object({type:u.z.literal("epic.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),issueKey:u.z.string().default(""),reason:u.z.string().default(""),considered:u.z.number().int().default(0)});h.AuditRole=u.z.enum(["security","testing","architecture"]);h.AuditSeverity=u.z.enum(["critical","high","medium","low","info"]);h.AuditScope=u.z.object({kind:u.z.enum(["repo","ticket","branch"]).default("repo"),ref:u.z.string().default("")});h.AuditFinding=u.z.object({id:u.z.string().min(1),title:u.z.string().min(1),ruleId:u.z.string().max(20).default(""),severity:h.AuditSeverity,area:u.z.string().default(""),evidence:u.z.array(u.z.object({file:u.z.string().min(1),line:u.z.number().int().positive().optional(),note:u.z.string().default("")})).min(1),fix:u.z.string().default("")});h.AuditRecord=u.z.object({id:u.z.string(),role:h.AuditRole,createdAt:u.z.string(),model:u.z.string().default(""),summary:u.z.string().default(""),packNames:u.z.array(u.z.string()).default([]),findings:u.z.array(h.AuditFinding).default([]),costUsd:u.z.number().default(0),review:u.z.object({selected:u.z.array(u.z.string()),updatedAt:u.z.string()}).optional(),verdicts:u.z.record(u.z.object({verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().default(""),by:u.z.string().default(""),at:u.z.string().default("")})).default({}),lessonsWritten:u.z.array(u.z.string()).default([]),ticketed:u.z.record(u.z.string()).default({}),scope:h.AuditScope.default({kind:"repo",ref:""}),testRun:u.z.array(u.z.object({command:u.z.string(),exitCode:u.z.number().int(),durationMs:u.z.number().int().default(0),tail:u.z.string().default("")})).optional()});h.AuditStartMsg=u.z.object({type:u.z.literal("audit.start"),requestId:u.z.string(),projectId:u.z.string(),role:h.AuditRole,model:u.z.string().default(""),scope:h.AuditScope.default({kind:"repo",ref:""})});h.AuditStartResultMsg=u.z.object({type:u.z.literal("audit.start.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditListMsg=u.z.object({type:u.z.literal("audit.list"),requestId:u.z.string(),projectId:u.z.string()});h.AuditListResultMsg=u.z.object({type:u.z.literal("audit.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audits:u.z.array(u.z.object({id:u.z.string(),role:h.AuditRole,createdAt:u.z.string(),findingCount:u.z.number().int(),bySeverity:u.z.record(u.z.number().int()).default({})})).default([])});h.AuditGetMsg=u.z.object({type:u.z.literal("audit.get"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string()});h.AuditGetResultMsg=u.z.object({type:u.z.literal("audit.get.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditReviewMsg=u.z.object({type:u.z.literal("audit.review"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string(),selected:u.z.array(u.z.string()).optional(),ticketed:u.z.array(u.z.object({findingId:u.z.string(),issueKey:u.z.string()})).default([]),verdicts:u.z.array(u.z.object({findingId:u.z.string(),verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().max(2e3).default("")})).default([]),verdictBy:u.z.string().default("")});h.AuditReviewResultMsg=u.z.object({type:u.z.literal("audit.review.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:h.AuditRecord.optional()});h.KnowledgeListMsg=u.z.object({type:u.z.literal("knowledge.list"),requestId:u.z.string(),projectId:u.z.string()});h.KnowledgeFile=u.z.object({role:h.AuditRole,level:u.z.enum(["global","org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string(),content:u.z.string(),editable:u.z.boolean().default(!1)});h.KnowledgeListResultMsg=u.z.object({type:u.z.literal("knowledge.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),files:u.z.array(h.KnowledgeFile).default([])});h.KnowledgeSaveMsg=u.z.object({type:u.z.literal("knowledge.save"),requestId:u.z.string(),projectId:u.z.string(),role:h.AuditRole,level:u.z.enum(["org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string().min(1).max(100),content:u.z.string().max(6e4),append:u.z.boolean().default(!1),by:u.z.string().default("")});h.KnowledgeSaveResultMsg=u.z.object({type:u.z.literal("knowledge.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});h.TeamCredsMsg=u.z.object({type:u.z.literal("team.creds"),requestId:u.z.string(),emails:u.z.array(u.z.string()).max(200)});h.TeamCredsResultMsg=u.z.object({type:u.z.literal("team.creds.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),githubShared:u.z.boolean().default(!1),sharedGithubLogin:u.z.string().default(""),entries:u.z.array(u.z.object({email:u.z.string(),jira:u.z.enum(["own","runner-account","missing"]),jiraAs:u.z.string().default(""),github:u.z.enum(["own","shared","missing"]),githubAs:u.z.string().default("")})).default([])});h.ChatFile=u.z.object({name:u.z.string().min(1).max(255),contentBase64:u.z.string().min(1).max(6e6)});h.ChatTurnMsg=u.z.object({type:u.z.literal("chat.turn"),requestId:u.z.string(),projectId:u.z.string(),sessionId:u.z.string().optional(),message:u.z.string().min(1).max(2e4),userName:u.z.string().default(""),model:u.z.string().default(""),files:u.z.array(h.ChatFile).max(8).default([])});h.ChatTurnResultMsg=u.z.object({type:u.z.literal("chat.turn.result"),requestId:u.z.string(),ok:u.z.boolean(),sessionId:u.z.string().default(""),reply:u.z.string().default(""),error:u.z.string().optional()});h.ChatCreateTicketMsg=u.z.object({type:u.z.literal("chat.create.ticket"),requestId:u.z.string(),projectId:u.z.string(),summary:u.z.string().min(1).max(250),description:u.z.string().default(""),triggerComment:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),asEpic:u.z.boolean().default(!1),children:u.z.array(u.z.object({summary:u.z.string().min(1),description:u.z.string().default("")})).max(20).default([]),files:u.z.array(h.ChatFile).max(8).default([])});h.ChatCreateTicketResultMsg=u.z.object({type:u.z.literal("chat.create.ticket.result"),requestId:u.z.string(),ok:u.z.boolean(),issueKey:u.z.string().default(""),error:u.z.string().optional(),childKeys:u.z.array(u.z.string()).default([])});h.EnvPreflightMsg=u.z.object({type:u.z.literal("env.preflight"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string().default(""),steps:u.z.array(h.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),workdir:u.z.string().default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default("")});h.EnvPreflightResultMsg=u.z.object({type:u.z.literal("env.preflight.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string().default("")})).default([])});h.DeploySuggestResultMsg=u.z.object({type:u.z.literal("deploy.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),steps:u.z.array(h.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),notes:u.z.string().default(""),error:u.z.string().optional()});h.SetupStatusMsg=u.z.object({type:u.z.literal("setup.status"),requestId:u.z.string(),repoNames:u.z.array(u.z.string()).max(100).default([])});h.SetupStatusResultMsg=u.z.object({type:u.z.literal("setup.status.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),jiraConfigured:u.z.boolean().default(!1),jiraEmail:u.z.string().default(""),claude:u.z.object({installed:u.z.boolean(),version:u.z.string().default(""),loggedIn:u.z.boolean()}).optional(),githubTokenSet:u.z.boolean().default(!1),githubLogin:u.z.string().default(""),deploysEnabled:u.z.boolean().default(!1),jiraUserCount:u.z.number().int().default(0),repos:u.z.array(u.z.object({repoName:u.z.string(),mapped:u.z.boolean(),pathExists:u.z.boolean().default(!1),isGit:u.z.boolean().default(!1),claudeMd:u.z.boolean().default(!1),deployMd:u.z.boolean().default(!1),testMd:u.z.boolean().default(!1)})).default([])});h.SetupClaudeMdGenerateMsg=u.z.object({type:u.z.literal("setup.claudemd.generate"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),streamId:u.z.string().default("")});h.SetupClaudeMdGenerateResultMsg=u.z.object({type:u.z.literal("setup.claudemd.generate.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),content:u.z.string().default("")});h.SetupClaudeMdSaveMsg=u.z.object({type:u.z.literal("setup.claudemd.save"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),overwrite:u.z.boolean().default(!1),content:u.z.string().max(1e5)});h.SetupClaudeMdSaveResultMsg=u.z.object({type:u.z.literal("setup.claudemd.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});h.RunnerUpdateMsg=u.z.object({type:u.z.literal("runner.update"),requestId:u.z.string()});h.RunnerUpdateResultMsg=u.z.object({type:u.z.literal("runner.update.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});h.RunnerToServerMsg=u.z.discriminatedUnion("type",[h.HelloMsg,h.HeartbeatMsg,h.RunClaimMsg,h.RunLogMsg,h.RunStatusMsg,h.ProjectTestResultMsg,h.RuleDiagnoseResultMsg,h.DeployClaimMsg,h.DeploySuggestResultMsg,h.EnvPreflightResultMsg,h.ChatTurnResultMsg,h.ChatStreamMsg,h.ChatCreateTicketResultMsg,h.ChatListResultMsg,h.ChatLoadResultMsg,h.BoardFetchResultMsg,h.BoardTriggerResultMsg,h.TeamCredsResultMsg,h.AuditStartResultMsg,h.AuditListResultMsg,h.AuditGetResultMsg,h.AuditReviewResultMsg,h.KnowledgeListResultMsg,h.KnowledgeSaveResultMsg,h.EpicListResultMsg,h.EpicSuggestResultMsg,h.JiraUsersResultMsg,h.SetupStatusResultMsg,h.SetupClaudeMdGenerateResultMsg,h.SetupClaudeMdSaveResultMsg,h.RunnerUpdateResultMsg]);h.HelloAckMsg=u.z.object({type:u.z.literal("hello.ack"),runnerId:u.z.string(),runnerName:u.z.string(),serverTime:u.z.string()});h.ConfigMsg=u.z.object({type:u.z.literal("config"),projects:u.z.array(h.ProjectConfig),rules:u.z.array(h.RuleConfig),environments:u.z.array(h.EnvironmentConfig).default([]),pollingPaused:u.z.boolean().default(!1)});h.RunClaimResultMsg=u.z.object({type:u.z.literal("run.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),reason:u.z.string().optional(),claudeProfile:u.z.string().optional(),actorEmail:u.z.string().optional()});h.ProjectTestMsg=u.z.object({type:u.z.literal("project.test"),requestId:u.z.string(),projectId:u.z.string()});h.RuleDiagnoseMsg=u.z.object({type:u.z.literal("rule.diagnose"),requestId:u.z.string(),ruleId:u.z.string()});h.RunCancelMsg=u.z.object({type:u.z.literal("run.cancel"),runId:u.z.string()});h.RunApprovedMsg=u.z.object({type:u.z.literal("run.approved"),runId:u.z.string(),headSha:u.z.string().optional()});h.RunRejectedMsg=u.z.object({type:u.z.literal("run.rejected"),runId:u.z.string()});h.RunRetryPushMsg=u.z.object({type:u.z.literal("run.retryPush"),runId:u.z.string()});h.DeployStartMsg=u.z.object({type:u.z.literal("deploy.start"),runId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environment:h.EnvironmentConfig,requestedBy:u.z.string().default(""),attempt:u.z.number().int().positive().default(1)});h.DeploySuggestMsg=u.z.object({type:u.z.literal("deploy.suggest"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),notes:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(1800).default(300)});h.JiraUsersMsg=u.z.object({type:u.z.literal("jira.users"),requestId:u.z.string(),query:u.z.string().default("")});h.ServerToRunnerMsg=u.z.discriminatedUnion("type",[h.HelloAckMsg,h.ConfigMsg,h.RunClaimResultMsg,h.ProjectTestMsg,h.RuleDiagnoseMsg,h.RunCancelMsg,h.RunApprovedMsg,h.RunRejectedMsg,h.RunRetryPushMsg,h.DeployClaimResultMsg,h.DeployStartMsg,h.DeploySuggestMsg,h.EnvPreflightMsg,h.ChatTurnMsg,h.ChatCreateTicketMsg,h.ChatListMsg,h.ChatLoadMsg,h.BoardFetchMsg,h.BoardTriggerMsg,h.TeamCredsMsg,h.AuditStartMsg,h.AuditListMsg,h.AuditGetMsg,h.AuditReviewMsg,h.KnowledgeListMsg,h.KnowledgeSaveMsg,h.EpicListMsg,h.EpicSuggestMsg,h.JiraUsersMsg,h.SetupStatusMsg,h.SetupClaudeMdGenerateMsg,h.SetupClaudeMdSaveMsg,h.RunnerUpdateMsg]);h.EnrollRequest=u.z.object({enrollToken:u.z.string().min(10),name:u.z.string().min(1).max(100),platform:u.z.string(),runnerVersion:u.z.string()});h.EnrollResponse=u.z.object({runnerId:u.z.string(),runnerToken:u.z.string(),controlPlaneWsUrl:u.z.string()});function jp(r){return h.RunnerToServerMsg.parse(r)}function Op(r){return h.ServerToRunnerMsg.parse(r)}h.DEFAULT_PLAN_PROMPT_TEMPLATE=`You are a senior engineer asked to assess a Jira ticket. You have read-only access to the repository \u2014 do not attempt to modify anything.
24
24
 
25
25
  Ticket {{issueKey}}: {{summary}}
26
26
 
@@ -212,54 +212,54 @@ Rules for the steps:
212
212
  - Reference secrets as environment variables ($DEPLOY_HOST), never literal values, and list every variable you use in "requiredSecrets".
213
213
  - Prefer commands that are safe to re-run; a deploy may be retried.
214
214
  - Order matters: install, build, test (if cheap), then release.
215
- - If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var ku={};Qn(ku,{DELETE_MANIFEST_FILE:()=>Yr,MAX_CHANGED_FILES:()=>ks,MAX_CHANGED_LINES:()=>Ss,applyDeleteManifest:()=>Di,branchForIssue:()=>Vi,branchSha:()=>Cs,branchesDiffer:()=>Ji,checkDiffSafety:()=>Fi,commitAll:()=>xs,deleteStaleBranch:()=>qi,diffAgainstDefault:()=>Es,envCheckoutPath:()=>wu,envCheckoutsRoot:()=>bu,fetchBase:()=>Xr,headSha:()=>Pn,mergeTicketBranch:()=>Hi,originUrl:()=>gr,parseOwnerRepo:()=>yr,prepareEnvCheckout:()=>Gi,pruneWorktrees:()=>Ki,pushBranch:()=>Zi,pushEnvBranch:()=>Wi,pushWipBranch:()=>zi,removeWorktree:()=>Qr,statusSnapshot:()=>Ui,worktreeAdd:()=>Bi,worktreeFingerprint:()=>Ts,worktreesRoot:()=>$n});async function G(r,e,t={}){try{let{stdout:n}=await gu("git",["-C",r,...e],{timeout:t.timeoutMs??12e4,maxBuffer:16777216,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}});return n}catch(n){let s=n;throw new Error(`git ${e[0]} failed: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function Di(r){let e={deleted:[],refused:[]},t=re.default.join(r,Yr);if(!ce.default.existsSync(t))return e;let n=re.default.resolve(r),s=ce.default.readFileSync(t,"utf8").split(`
216
- `).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(re.default.isAbsolute(i)){e.refused.push(`${i} \u2014 absolute paths are not allowed`);continue}let o=re.default.resolve(n,i);if(o!==n&&!o.startsWith(n+re.default.sep)){e.refused.push(`${i} \u2014 escapes the worktree`);continue}let a=re.default.relative(n,o).split(re.default.sep).join("/");if(a===Yr)continue;if(_u.some(c=>c.test(a))){e.refused.push(`${i} \u2014 protected path (CI/hook files are never touched)`);continue}let l;try{l=ce.default.lstatSync(o)}catch{e.refused.push(`${i} \u2014 no such file`);continue}if(l.isDirectory()){e.refused.push(`${i} \u2014 is a directory (list the files inside it instead)`);continue}try{ce.default.rmSync(o),e.deleted.push(a)}catch(c){e.refused.push(`${i} \u2014 ${c instanceof Error?c.message:"delete failed"}`)}}return ce.default.rmSync(t,{force:!0}),e}async function zi(r,e){await G(r,["push","--force","origin",`HEAD:refs/heads/${e}`],{timeoutMs:3e5})}async function Ts(r){let e=await G(r,["status","--porcelain"]),t=await G(r,["diff","--numstat"]),n=e.split(`
217
- `).filter(s=>s.startsWith("??")).map(s=>s.slice(3).trim()).slice(0,500).map(s=>{try{let i=ce.default.statSync(re.default.join(r,s));return`${s}:${i.size}:${i.mtimeMs}`}catch{return s}}).join(`
215
+ - If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var Ru={};ns(Ru,{DELETE_MANIFEST_FILE:()=>en,MAX_CHANGED_FILES:()=>Is,MAX_CHANGED_LINES:()=>As,applyDeleteManifest:()=>Zi,branchForIssue:()=>Xi,branchSha:()=>Ps,branchesDiffer:()=>ro,checkDiffSafety:()=>Wi,commitAll:()=>$s,deleteStaleBranch:()=>Gi,diffAgainstDefault:()=>js,envCheckoutPath:()=>Au,envCheckoutsRoot:()=>Iu,fetchBase:()=>tn,headSha:()=>Mn,mergeTicketBranch:()=>eo,originUrl:()=>yr,parseOwnerRepo:()=>vr,prepareEnvCheckout:()=>Qi,pruneWorktrees:()=>Yi,pushBranch:()=>Ji,pushEnvBranch:()=>to,pushWipBranch:()=>Ki,removeWorktree:()=>rn,statusSnapshot:()=>Vi,worktreeAdd:()=>Hi,worktreeFingerprint:()=>Rs,worktreesRoot:()=>Nn});async function G(r,e,t={}){try{let{stdout:n}=await Tu("git",["-C",r,...e],{timeout:t.timeoutMs??12e4,maxBuffer:16777216,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}});return n}catch(n){let s=n;throw new Error(`git ${e[0]} failed: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function Zi(r){let e={deleted:[],refused:[]},t=ne.default.join(r,en);if(!de.default.existsSync(t))return e;let n=ne.default.resolve(r),s=de.default.readFileSync(t,"utf8").split(`
216
+ `).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(ne.default.isAbsolute(i)){e.refused.push(`${i} \u2014 absolute paths are not allowed`);continue}let o=ne.default.resolve(n,i);if(o!==n&&!o.startsWith(n+ne.default.sep)){e.refused.push(`${i} \u2014 escapes the worktree`);continue}let a=ne.default.relative(n,o).split(ne.default.sep).join("/");if(a===en)continue;if(Eu.some(c=>c.test(a))){e.refused.push(`${i} \u2014 protected path (CI/hook files are never touched)`);continue}let l;try{l=de.default.lstatSync(o)}catch{e.refused.push(`${i} \u2014 no such file`);continue}if(l.isDirectory()){e.refused.push(`${i} \u2014 is a directory (list the files inside it instead)`);continue}try{de.default.rmSync(o),e.deleted.push(a)}catch(c){e.refused.push(`${i} \u2014 ${c instanceof Error?c.message:"delete failed"}`)}}return de.default.rmSync(t,{force:!0}),e}async function Ki(r,e){await G(r,["push","--force","origin",`HEAD:refs/heads/${e}`],{timeoutMs:3e5})}async function Rs(r){let e=await G(r,["status","--porcelain"]),t=await G(r,["diff","--numstat"]),n=e.split(`
217
+ `).filter(s=>s.startsWith("??")).map(s=>s.slice(3).trim()).slice(0,500).map(s=>{try{let i=de.default.statSync(ne.default.join(r,s));return`${s}:${i.size}:${i.mtimeMs}`}catch{return s}}).join(`
218
218
  `);return`${e}
219
219
  --
220
220
  ${t}
221
221
  --
222
- ${n}`}async function Ui(r){let e=(await G(r,["rev-parse","--abbrev-ref","HEAD"])).trim(),t=(await G(r,["log","--oneline","-1"])).trim(),n=(await G(r,["status","--porcelain"])).trim(),s=n?n.split(`
222
+ ${n}`}async function Vi(r){let e=(await G(r,["rev-parse","--abbrev-ref","HEAD"])).trim(),t=(await G(r,["log","--oneline","-1"])).trim(),n=(await G(r,["status","--porcelain"])).trim(),s=n?n.split(`
223
223
  `):[],i=s.slice(0,15).join(`
224
224
  `),o=s.length>15?`
225
225
  (\u2026 ${s.length-15} more)`:"";return`branch ${e} @ ${t}
226
226
  working tree: ${s.length?`
227
- ${i}${o}`:"clean"}`}function $n(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(ce.default.existsSync(re.default.join(mr.default.homedir(),".cache","ticketpilot"))?re.default.join(mr.default.homedir(),".cache","ticketpilot"):re.default.join(mr.default.homedir(),".cache","allwright"));return re.default.join(r,"worktrees")}async function Xr(r,e){try{await G(r,["fetch","origin",e])}catch(t){throw new Error(`could not fetch base branch "${e}" from origin \u2014 check the rule's base branch and that this machine can reach the remote (${t instanceof Error?t.message:t})`)}}async function qi(r,e){try{let t=await G(r,["worktree","list","--porcelain"]),n=$n(),s=null;for(let i of t.split(`
228
- `))i.startsWith("worktree ")&&(s=i.slice(9).trim()),i===`branch refs/heads/${e}`&&s&&s.startsWith(n)&&await G(r,["worktree","remove","--force",s]);await G(r,["worktree","prune"])}catch{}try{await G(r,["branch","-D",e])}catch{}}async function Bi(r,e,t,n){ce.default.mkdirSync(re.default.dirname(e),{recursive:!0,mode:448}),await G(r,["worktree","add","-b",t,e,`origin/${n}`])}async function xs(r,e){if(await G(r,["add","-A"]),!(await G(r,["status","--porcelain"])).trim())throw new Error("Claude wrote no changes \u2014 nothing to commit");await G(r,["-c",`user.name=${yu}`,"-c",`user.email=${vu}`,"commit","-m",e])}async function Fi(r,e){let n=(await G(r,["diff","--name-only",`origin/${e}...HEAD`])).split(`
229
- `).filter(Boolean),s=n.filter(c=>_u.some(d=>d.test(c))),i=await G(r,["diff","--shortstat",`origin/${e}...HEAD`]),o=Number(/(\d+) insertion/.exec(i)?.[1]??0),a=Number(/(\d+) deletion/.exec(i)?.[1]??0);return{ok:s.length===0&&n.length<=ks&&o+a<=Ss,files:n.length,insertions:o,deletions:a,forbidden:s}}async function Zi(r,e){await G(r,["fetch","--prune","origin",`+refs/heads/${e}:refs/remotes/origin/${e}`],{timeoutMs:12e4}).catch(()=>G(r,["update-ref","-d",`refs/remotes/origin/${e}`]).catch(()=>{})),await G(r,["push","--force-with-lease","-u","origin",e],{timeoutMs:3e5})}async function Pn(r){return(await G(r,["rev-parse","HEAD"])).trim()}async function Cs(r,e){try{return(await G(r,["rev-parse","--verify",`refs/heads/${e}`])).trim()}catch{return null}}async function Qr(r,e){try{await G(r,["worktree","remove","--force",e])}catch{ce.default.rmSync(e,{recursive:!0,force:!0})}}async function Ki(r,e=[]){let t=new Set(e.map(s=>re.default.basename(re.default.resolve(s))).filter(s=>s.length>0)),n=$n();if(ce.default.existsSync(n))for(let s of ce.default.readdirSync(n))t.has(s)||ce.default.rmSync(re.default.join(n,s),{recursive:!0,force:!0});for(let s of r)try{await G(s,["worktree","prune"])}catch{}}async function Vi(r,e){return await G(r,["fetch","origin","--prune"]).catch(()=>{}),(await G(r,["branch","-r","--list",`*${e}*`])).split(`
230
- `).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Es(r,e,t=6e4){let s=(await G(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await G(r,["diff","--stat",`${s}...${e}`]),o=await G(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function bu(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(ce.default.existsSync(re.default.join(mr.default.homedir(),".cache","ticketpilot"))?re.default.join(mr.default.homedir(),".cache","ticketpilot"):re.default.join(mr.default.homedir(),".cache","allwright"));return re.default.join(r,"env-checkouts")}function fu(r){return r.replace(/[^\w.-]+/g,"_")}function wu(r,e){return re.default.join(bu(),fu(r),fu(e))}async function Gi(r){let e=wu(r.repoName,r.envName);return await G(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),ce.default.existsSync(re.default.join(e,".git"))?await G(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(ce.default.rmSync(e,{recursive:!0,force:!0}),ce.default.mkdirSync(re.default.dirname(e),{recursive:!0,mode:448}),await G(r.repoPath,["worktree","prune"]).catch(()=>{}),await G(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await G(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await G(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function Hi(r,e,t){try{await G(r,["fetch","origin",e],{timeoutMs:3e5})}catch{return{ok:!1,reason:`branch "${e}" does not exist on origin \u2014 nothing to promote. Check the environment's ticket branch template against the branch your implement rule creates.`}}try{return await G(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await G(r,["-c",`user.name=${yu}`,"-c",`user.email=${vu}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await G(r,["merge","--abort"]).catch(()=>{}),{ok:!1,reason:`could not merge "${e}" into the environment branch \u2014 ${n instanceof Error?n.message:n}. Resolve it manually and deploy again.`}}}async function Wi(r,e){try{await G(r,["push","origin",e],{timeoutMs:3e5})}catch(t){throw new Error(`could not push "${e}" \u2014 ${t instanceof Error?t.message:t}. Someone may have pushed to it since this deploy started; retry.`)}}async function Ji(r,e,t){try{return await gu("git",["-C",r,"diff","--quiet",e,t,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(n){let s=n;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${t}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function gr(r){return(await G(r,["config","--get","remote.origin.url"])).trim()}function yr(r){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(r)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(r)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(r);return e?{owner:e[1],repo:e[2]}:null}var ce,mr,re,pu,mu,gu,yu,vu,ks,Ss,_u,Yr,vr=ui(()=>{"use strict";ce=$(require("node:fs"),1),mr=$(require("node:os"),1),re=$(require("node:path"),1),pu=require("node:child_process"),mu=require("node:util"),gu=(0,mu.promisify)(pu.execFile),yu="Allwright Agent",vu="agent@ticketpilot.local",ks=200,Ss=2e4,_u=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];Yr=".ticketpilot-delete"});var nn={};Qn(nn,{GitHubClient:()=>Ne});var Fp,Ne,lt=ui(()=>{"use strict";Fp=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",Ne=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${Fp}${t}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...n!==void 0?{"Content-Type":"application/json"}:{}},body:n===void 0?void 0:JSON.stringify(n)}),i=await s.text(),o=null;try{o=i?JSON.parse(i):null}catch{}if(s.status===401)throw new Error("GitHub rejected the token (401) \u2014 expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let a=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${t} -> ${s.status}: ${a}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,t,n){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${t}/pulls`,n);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${t}/pulls?head=${encodeURIComponent(`${e}:${n.head}`)}&state=open`);if(o?.length){let a=o[0];return{number:a.number,url:a.html_url,state:a.state,merged:a.merged??!1,headSha:a.head.sha,mergeableState:null}}throw new Error(`GitHub refused the PR (422): ${i?.message??"validation failed"}`)}return{number:i.number,url:i.html_url,state:i.state,merged:i.merged??!1,headSha:i.head.sha,mergeableState:null}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async closePullRequest(e,t,n){await this.request("PATCH",`/repos/${e}/${t}/pulls/${n}`,{state:"closed"})}async deleteBranch(e,t,n){try{await this.request("DELETE",`/repos/${e}/${t}/git/refs/heads/${encodeURIComponent(n)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var ht=Y((z_,sc)=>{"use strict";var rc=["nodebuffer","arraybuffer","fragments"],nc=typeof Blob<"u";nc&&rc.push("blob");sc.exports={BINARY_TYPES:rc,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:nc,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Fn=Y((U_,Zs)=>{"use strict";var{EMPTY_BUFFER:Rm}=ht(),Ro=Buffer[Symbol.species];function $m(r,e){if(r.length===0)return Rm;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new Ro(t.buffer,t.byteOffset,n):t}function ic(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function oc(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Pm(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function $o(r){if($o.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new Ro(r):ArrayBuffer.isView(r)?e=new Ro(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),$o.readOnly=!1),e}Zs.exports={concat:$m,mask:ic,toArrayBuffer:Pm,toBuffer:$o,unmask:oc};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Zs.exports.mask=function(e,t,n,s,i){i<48?ic(e,t,n,s,i):r.mask(e,t,n,s,i)},Zs.exports.unmask=function(e,t){e.length<32?oc(e,t):r.unmask(e,t)}}catch{}});var lc=Y((q_,uc)=>{"use strict";var ac=Symbol("kDone"),Po=Symbol("kRun"),jo=class{constructor(e){this[ac]=()=>{this.pending--,this[Po]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Po]()}[Po](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[ac])}}};uc.exports=jo});var hn=Y((B_,fc)=>{"use strict";var Zn=require("zlib"),cc=Fn(),jm=lc(),{kStatusCode:dc}=ht(),Om=Buffer[Symbol.species],Nm=Buffer.from([0,0,255,255]),Vs=Symbol("permessage-deflate"),ft=Symbol("total-length"),cn=Symbol("callback"),Pt=Symbol("buffers"),dn=Symbol("error"),Ks,Oo=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Ks){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ks=new jm(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[cn];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ks.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ks.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Zn.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Zn.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Vs]=this,this._inflate[ft]=0,this._inflate[Pt]=[],this._inflate.on("error",Lm),this._inflate.on("data",hc)}this._inflate[cn]=n,this._inflate.write(e),t&&this._inflate.write(Nm),this._inflate.flush(()=>{let i=this._inflate[dn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=cc.concat(this._inflate[Pt],this._inflate[ft]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[ft]=0,this._inflate[Pt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Zn.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Zn.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[ft]=0,this._deflate[Pt]=[],this._deflate.on("data",Mm)}this._deflate[cn]=n,this._deflate.write(e),this._deflate.flush(Zn.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=cc.concat(this._deflate[Pt],this._deflate[ft]);t&&(i=new Om(i.buffer,i.byteOffset,i.length-4)),this._deflate[cn]=null,this._deflate[ft]=0,this._deflate[Pt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};fc.exports=Oo;function Mm(r){this[Pt].push(r),this[ft]+=r.length}function hc(r){if(this[ft]+=r.length,this[Vs]._maxPayload<1||this[ft]<=this[Vs]._maxPayload){this[Pt].push(r);return}this[dn]=new RangeError("Max payload size exceeded"),this[dn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[dn][dc]=1009,this.removeListener("data",hc),this.reset()}function Lm(r){if(this[Vs]._inflate=null,this[dn]){this[cn](this[dn]);return}r[dc]=1007,this[cn](r)}});var fn=Y((F_,Gs)=>{"use strict";var{isUtf8:pc}=require("buffer"),{hasBlob:Dm}=ht(),zm=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Um(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function No(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function qm(r){return Dm&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Gs.exports={isBlob:qm,isValidStatusCode:Um,isValidUTF8:No,tokenChars:zm};if(pc)Gs.exports.isValidUTF8=function(r){return r.length<24?No(r):pc(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Gs.exports.isValidUTF8=function(e){return e.length<32?No(e):r(e)}}catch{}});var Uo=Y((Z_,wc)=>{"use strict";var{Writable:Bm}=require("stream"),mc=hn(),{BINARY_TYPES:Fm,EMPTY_BUFFER:gc,kStatusCode:Zm,kWebSocket:Km}=ht(),{concat:Mo,toArrayBuffer:Vm,unmask:Gm}=Fn(),{isValidStatusCode:Hm,isValidUTF8:yc}=fn(),Hs=Buffer[Symbol.species],Me=0,vc=1,_c=2,bc=3,Lo=4,Do=5,Ws=6,zo=class extends Bm{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Fm[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Km]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._numFragments=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=Me}_write(e,t,n){if(this._opcode===8&&this._state==Me)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new Hs(n.buffer,n.byteOffset+e,n.length-e),new Hs(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new Hs(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case Me:this.getInfo(e);break;case vc:this.getPayloadLength16(e);break;case _c:this.getPayloadLength64(e);break;case bc:this.getMask();break;case Lo:this.getData(e);break;case Do:case Ws:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[mc.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=vc:this._payloadLength===127?this._state=_c:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=bc:this._state=Lo}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Lo}getData(e){let t=gc;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Gm(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let n=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(n);return}if(this._compressed){this._state=Do,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[mc.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===Me&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=Me;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Mo(n,t):this._binaryType==="arraybuffer"?s=Vm(Mo(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Me):(this._state=Ws,setImmediate(()=>{this.emit("message",s,!0),this._state=Me,this.startLoop(e)}))}else{let s=Mo(n,t);if(!this._skipUTF8Validation&&!yc(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Do||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Me):(this._state=Ws,setImmediate(()=>{this.emit("message",s,!1),this._state=Me,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,gc),this.end();else{let n=e.readUInt16BE(0);if(!Hm(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new Hs(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!yc(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=Me;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Me):(this._state=Ws,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Me,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[Zm]=s,o}};wc.exports=zo});var Fo=Y((V_,Tc)=>{"use strict";var{Duplex:K_}=require("stream"),{randomFillSync:Wm}=require("crypto"),{types:{isUint8Array:Jm}}=require("util"),kc=hn(),{EMPTY_BUFFER:Ym,kWebSocket:Xm,NOOP:Qm}=ht(),{isBlob:pn,isValidStatusCode:eg}=fn(),{mask:Sc,toBuffer:Cr}=Fn(),Le=Symbol("kByteLength"),tg=Buffer.alloc(4),Js=8*1024,Er,mn=Js,Be=0,rg=1,ng=2,qo=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Be,this.onerror=Qm,this[Xm]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||tg,t.generateMask?t.generateMask(n):(mn===Js&&(Er===void 0&&(Er=Buffer.alloc(Js)),Wm(Er,0,Js),mn=0),n[0]=Er[mn++],n[1]=Er[mn++],n[2]=Er[mn++],n[3]=Er[mn++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[Le]!==void 0?a=t[Le]:(e=Buffer.from(e),a=e.length):(a=e.length,s=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(Sc(e,n,c,i,a),[c]):(Sc(e,n,e,0,a),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=Ym;else{if(typeof e!="number"||!eg(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string")i.write(t,2);else if(Jm(t))i.set(t,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[Le]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Be?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pn(e)?(s=e.size,i=!1):(e=Cr(e),s=e.length,i=Cr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Le]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};pn(e)?this._state!==Be?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Be?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pn(e)?(s=e.size,i=!1):(e=Cr(e),s=e.length,i=Cr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Le]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};pn(e)?this._state!==Be?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Be?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[kc.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):pn(e)?(a=e.size,l=!1):(e=Cr(e),a=e.length,l=Cr.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[Le]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};pn(e)?this._state!==Be?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==Be?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[Le],this._state=ng,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Bo,this,a,s);return}this._bufferedBytes-=n[Le];let o=Cr(i);t?this.dispatch(o,t,n,s):(this._state=Be,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(sg,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[kc.extensionName];this._bufferedBytes+=n[Le],this._state=rg,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Bo(this,l,s);return}this._bufferedBytes-=n[Le],this._state=Be,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===Be&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Le],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Le],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Tc.exports=qo;function Bo(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function sg(r,e,t){Bo(r,e,t),r.onerror(e)}});var jc=Y((G_,Pc)=>{"use strict";var{kForOnEventAttribute:Kn,kListener:Zo}=ht(),xc=Symbol("kCode"),Cc=Symbol("kData"),Ec=Symbol("kError"),Ic=Symbol("kMessage"),Ac=Symbol("kReason"),gn=Symbol("kTarget"),Rc=Symbol("kType"),$c=Symbol("kWasClean"),pt=class{constructor(e){this[gn]=null,this[Rc]=e}get target(){return this[gn]}get type(){return this[Rc]}};Object.defineProperty(pt.prototype,"target",{enumerable:!0});Object.defineProperty(pt.prototype,"type",{enumerable:!0});var Ir=class extends pt{constructor(e,t={}){super(e),this[xc]=t.code===void 0?0:t.code,this[Ac]=t.reason===void 0?"":t.reason,this[$c]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[xc]}get reason(){return this[Ac]}get wasClean(){return this[$c]}};Object.defineProperty(Ir.prototype,"code",{enumerable:!0});Object.defineProperty(Ir.prototype,"reason",{enumerable:!0});Object.defineProperty(Ir.prototype,"wasClean",{enumerable:!0});var yn=class extends pt{constructor(e,t={}){super(e),this[Ec]=t.error===void 0?null:t.error,this[Ic]=t.message===void 0?"":t.message}get error(){return this[Ec]}get message(){return this[Ic]}};Object.defineProperty(yn.prototype,"error",{enumerable:!0});Object.defineProperty(yn.prototype,"message",{enumerable:!0});var Vn=class extends pt{constructor(e,t={}){super(e),this[Cc]=t.data===void 0?null:t.data}get data(){return this[Cc]}};Object.defineProperty(Vn.prototype,"data",{enumerable:!0});var ig={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Kn]&&s[Zo]===e&&!s[Kn])return;let n;if(r==="message")n=function(i,o){let a=new Vn("message",{data:o?i:i.toString()});a[gn]=this,Ys(e,this,a)};else if(r==="close")n=function(i,o){let a=new Ir("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[gn]=this,Ys(e,this,a)};else if(r==="error")n=function(i){let o=new yn("error",{error:i,message:i.message});o[gn]=this,Ys(e,this,o)};else if(r==="open")n=function(){let i=new pt("open");i[gn]=this,Ys(e,this,i)};else return;n[Kn]=!!t[Kn],n[Zo]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Zo]===e&&!t[Kn]){this.removeListener(r,t);break}}};Pc.exports={CloseEvent:Ir,ErrorEvent:yn,Event:pt,EventTarget:ig,MessageEvent:Vn};function Ys(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var Xs=Y((H_,Oc)=>{"use strict";var{tokenChars:Gn}=fn();function Ye(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function og(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,l=-1,c=-1,d=-1,p=0;for(;p<r.length;p++)if(c=r.charCodeAt(p),o===void 0)if(d===-1&&Gn[c]===1)l===-1&&(l=p);else if(p!==0&&(c===32||c===9))d===-1&&l!==-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p);let S=r.slice(l,d);c===44?(Ye(e,S,t),t=Object.create(null)):o=S,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(d===-1&&Gn[c]===1)l===-1&&(l=p);else if(c===32||c===9)d===-1&&l!==-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p),Ye(t,r.slice(l,d),!0),c===44&&(Ye(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=r.slice(l,p),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(Gn[c]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);l===-1?l=p:n||(n=!0),s=!1}else if(i)if(Gn[c]===1)l===-1&&(l=p);else if(c===34&&l!==-1)i=!1,d=p;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(c===34&&r.charCodeAt(p-1)===61)i=!0;else if(d===-1&&Gn[c]===1)l===-1&&(l=p);else if(l!==-1&&(c===32||c===9))d===-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p);let S=r.slice(l,d);n&&(S=S.replace(/\\/g,""),n=!1),Ye(t,a,S),c===44&&(Ye(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=p);let w=r.slice(l,d);return o===void 0?Ye(e,w,t):(a===void 0?Ye(t,w,!0):n?Ye(t,a,w.replace(/\\/g,"")):Ye(t,a,w),Ye(e,o,t)),e}function ag(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Oc.exports={format:ag,parse:og}});var ri=Y((Y_,Vc)=>{"use strict";var ug=require("events"),lg=require("https"),cg=require("http"),Lc=require("net"),dg=require("tls"),{randomBytes:hg,createHash:fg}=require("crypto"),{Duplex:W_,Readable:J_}=require("stream"),{URL:Ko}=require("url"),jt=hn(),pg=Uo(),mg=Fo(),{isBlob:gg}=fn(),{BINARY_TYPES:Nc,CLOSE_TIMEOUT:yg,EMPTY_BUFFER:Qs,GUID:vg,kForOnEventAttribute:Vo,kListener:_g,kStatusCode:bg,kWebSocket:oe,NOOP:Dc}=ht(),{EventTarget:{addEventListener:wg,removeEventListener:kg}}=jc(),{format:Sg,parse:Tg}=Xs(),{toBuffer:xg}=Fn(),zc=Symbol("kAborted"),Go=[8,13],mt=["CONNECTING","OPEN","CLOSING","CLOSED"],Cg=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,ne=class r extends ug{constructor(e,t,n){super(),this._binaryType=Nc[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Qs,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Uc(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Nc.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new pg({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:n.maxBufferedChunks,maxFragments:n.maxFragments,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new mg(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[oe]=this,i[oe]=this,e[oe]=this,s.on("conclude",Ag),s.on("drain",Rg),s.on("error",$g),s.on("message",Pg),s.on("ping",jg),s.on("pong",Og),i.onerror=Ng,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Fc),e.on("data",ti),e.on("end",Zc),e.on("error",Kc),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[jt.extensionName]&&this._extensions[jt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ce(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bc(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ho(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||Qs,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ho(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||Qs,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ho(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[jt.extensionName]||(s.compress=!1),this._sender.send(e||Qs,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ce(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(ne,"CONNECTING",{enumerable:!0,value:mt.indexOf("CONNECTING")});Object.defineProperty(ne.prototype,"CONNECTING",{enumerable:!0,value:mt.indexOf("CONNECTING")});Object.defineProperty(ne,"OPEN",{enumerable:!0,value:mt.indexOf("OPEN")});Object.defineProperty(ne.prototype,"OPEN",{enumerable:!0,value:mt.indexOf("OPEN")});Object.defineProperty(ne,"CLOSING",{enumerable:!0,value:mt.indexOf("CLOSING")});Object.defineProperty(ne.prototype,"CLOSING",{enumerable:!0,value:mt.indexOf("CLOSING")});Object.defineProperty(ne,"CLOSED",{enumerable:!0,value:mt.indexOf("CLOSED")});Object.defineProperty(ne.prototype,"CLOSED",{enumerable:!0,value:mt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(ne.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(ne.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Vo])return e[_g];return null},set(e){for(let t of this.listeners(r))if(t[Vo]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Vo]:!0})}})});ne.prototype.addEventListener=wg;ne.prototype.removeEventListener=kg;Vc.exports=ne;function Uc(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:yg,protocolVersion:Go[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Go.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Go.join(", ")})`);let i;if(e instanceof Ko)i=e;else try{i=new Ko(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let _=new SyntaxError(l);if(r._redirects===0)throw _;ei(r,_);return}let c=o?443:80,d=hg(16).toString("base64"),p=o?lg.request:cg.request,w=new Set,S;if(s.createConnection=s.createConnection||(o?Ig:Eg),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(S=new jt({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Sg({[jt.extensionName]:S.offer()})),t.length){for(let _ of t){if(typeof _!="string"||!Cg.test(_)||w.has(_))throw new SyntaxError("An invalid or duplicated subprotocol was specified");w.add(_)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let _=s.path.split(":");s.socketPath=_[0],s.path=_[1]}let x;if(s.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?s.socketPath:i.host;let _=n&&n.headers;if(n={...n,headers:{}},_)for(let[O,q]of Object.entries(_))n.headers[O.toLowerCase()]=q}else if(r.listenerCount("redirect")===0){let _=a?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!_||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,_||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),x=r._req=p(s),r._redirects&&r.emit("redirect",r.url,x)}else x=r._req=p(s);s.timeout&&x.on("timeout",()=>{Ce(r,x,"Opening handshake has timed out")}),x.on("error",_=>{x===null||x[zc]||(x=r._req=null,ei(r,_))}),x.on("response",_=>{let O=_.headers.location,q=_.statusCode;if(O&&s.followRedirects&&q>=300&&q<400){if(++r._redirects>s.maxRedirects){Ce(r,x,"Maximum redirects exceeded");return}x.abort();let f;try{f=new Ko(O,e)}catch{let b=new SyntaxError(`Invalid URL: ${O}`);ei(r,b);return}Uc(r,f,t,n)}else r.emit("unexpected-response",x,_)||Ce(r,x,`Unexpected server response: ${_.statusCode}`)}),x.on("upgrade",(_,O,q)=>{if(r.emit("upgrade",_),r.readyState!==ne.CONNECTING)return;x=r._req=null;let f=_.headers.upgrade;if(f===void 0||f.toLowerCase()!=="websocket"){Ce(r,O,"Invalid Upgrade header");return}let m=fg("sha1").update(d+vg).digest("base64");if(_.headers["sec-websocket-accept"]!==m){Ce(r,O,"Invalid Sec-WebSocket-Accept header");return}let b=_.headers["sec-websocket-protocol"],C;if(b!==void 0?w.size?w.has(b)||(C="Server sent an invalid subprotocol"):C="Server sent a subprotocol but none was requested":w.size&&(C="Server sent no subprotocol"),C){Ce(r,O,C);return}b&&(r._protocol=b);let P=_.headers["sec-websocket-extensions"];if(P!==void 0){if(!S){Ce(r,O,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let U;try{U=Tg(P)}catch{Ce(r,O,"Invalid Sec-WebSocket-Extensions header");return}let B=Object.keys(U);if(B.length!==1||B[0]!==jt.extensionName){Ce(r,O,"Server indicated an extension that was not requested");return}try{S.accept(U[jt.extensionName])}catch{Ce(r,O,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[jt.extensionName]=S}r.setSocket(O,q,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(x,r):x.end()}function ei(r,e){r._readyState=ne.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Eg(r){return r.path=r.socketPath,Lc.connect(r)}function Ig(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Lc.isIP(r.host)?"":r.host),dg.connect(r)}function Ce(r,e,t){r._readyState=ne.CLOSING;let n=new Error(t);Error.captureStackTrace(n,Ce),e.setHeader?(e[zc]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ei,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Ho(r,e,t){if(e){let n=gg(e)?e.size:xg(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${mt[r.readyState]})`);process.nextTick(t,n)}}function Ag(r,e){let t=this[oe];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[oe]!==void 0&&(t._socket.removeListener("data",ti),process.nextTick(qc,t._socket),r===1005?t.close():t.close(r,e))}function Rg(){let r=this[oe];r.isPaused||r._socket.resume()}function $g(r){let e=this[oe];e._socket[oe]!==void 0&&(e._socket.removeListener("data",ti),process.nextTick(qc,e._socket),e.close(r[bg])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Mc(){this[oe].emitClose()}function Pg(r,e){this[oe].emit("message",r,e)}function jg(r){let e=this[oe];e._autoPong&&e.pong(r,!this._isServer,Dc),e.emit("ping",r)}function Og(r){this[oe].emit("pong",r)}function qc(r){r.resume()}function Ng(r){let e=this[oe];e.readyState!==ne.CLOSED&&(e.readyState===ne.OPEN&&(e._readyState=ne.CLOSING,Bc(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Bc(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Fc(){let r=this[oe];if(this.removeListener("close",Fc),this.removeListener("data",ti),this.removeListener("end",Zc),r._readyState=ne.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[oe]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Mc),r._receiver.on("finish",Mc))}function ti(r){this[oe]._receiver.write(r)||this.pause()}function Zc(){let r=this[oe];r._readyState=ne.CLOSING,r._receiver.end(),this.end()}function Kc(){let r=this[oe];this.removeListener("error",Kc),this.on("error",Dc),r&&(r._readyState=ne.CLOSING,this.destroy())}});var Jc=Y((Q_,Wc)=>{"use strict";var X_=ri(),{Duplex:Mg}=require("stream");function Gc(r){r.emit("close")}function Lg(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Hc(r){this.removeListener("error",Hc),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Dg(r,e){let t=!0,n=new Mg({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(Gc,n);return}let o=!1;r.once("error",function(l){o=!0,i(l)}),r.once("close",function(){o||i(s),process.nextTick(Gc,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Lg),n.on("error",Hc),n}Wc.exports=Dg});var Wo=Y((eb,Yc)=>{"use strict";var{tokenChars:zg}=fn();function Ug(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&zg[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=r.slice(t,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Yc.exports={parse:Ug}});var sd=Y((rb,nd)=>{"use strict";var qg=require("events"),ni=require("http"),{Duplex:tb}=require("stream"),{createHash:Bg}=require("crypto"),Xc=Xs(),Ar=hn(),Fg=Wo(),Zg=ri(),{CLOSE_TIMEOUT:Kg,GUID:Vg,kWebSocket:Gg}=ht(),Hg=/^[+/0-9A-Za-z]{22}==$/,Qc=0,ed=1,rd=2,Jo=class extends qg{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:256*1024,maxFragments:16*1024,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Kg,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Zg,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ni.createServer((n,s)=>{let i=ni.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Wg(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Qc}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===rd){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Hn,this);return}if(e&&this.once("close",e),this._state!==ed)if(this._state=ed,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Hn,this):process.nextTick(Hn,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Hn(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",td);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Rr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Rr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Hg.test(i)){Rr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Rr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Wn(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Fg.parse(l)}catch{Rr(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&d!==void 0){let w=new Ar({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S=Xc.parse(d);S[Ar.extensionName]&&(w.accept(S[Ar.extensionName]),p[Ar.extensionName]=w)}catch{Rr(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let w={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(w,(S,x,_,O)=>{if(!S)return Wn(t,x||401,_,O);this.completeUpgrade(p,i,c,e,t,n,s)});return}if(!this.options.verifyClient(w))return Wn(t,401)}this.completeUpgrade(p,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Gg])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Qc)return Wn(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Bg("sha1").update(t+Vg).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let p=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;p&&(c.push(`Sec-WebSocket-Protocol: ${p}`),d._protocol=p)}if(e[Ar.extensionName]){let p=e[Ar.extensionName].params,w=Xc.format({[Ar.extensionName]:[p]});c.push(`Sec-WebSocket-Extensions: ${w}`),d._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
227
+ ${i}${o}`:"clean"}`}function Nn(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(de.default.existsSync(ne.default.join(gr.default.homedir(),".cache","ticketpilot"))?ne.default.join(gr.default.homedir(),".cache","ticketpilot"):ne.default.join(gr.default.homedir(),".cache","allwright"));return ne.default.join(r,"worktrees")}async function tn(r,e){try{await G(r,["fetch","origin",e])}catch(t){throw new Error(`could not fetch base branch "${e}" from origin \u2014 check the rule's base branch and that this machine can reach the remote (${t instanceof Error?t.message:t})`)}}async function Gi(r,e){try{let t=await G(r,["worktree","list","--porcelain"]),n=Nn(),s=null;for(let i of t.split(`
228
+ `))i.startsWith("worktree ")&&(s=i.slice(9).trim()),i===`branch refs/heads/${e}`&&s&&s.startsWith(n)&&await G(r,["worktree","remove","--force",s]);await G(r,["worktree","prune"])}catch{}try{await G(r,["branch","-D",e])}catch{}}async function Hi(r,e,t,n){de.default.mkdirSync(ne.default.dirname(e),{recursive:!0,mode:448}),await G(r,["worktree","add","-b",t,e,`origin/${n}`])}async function $s(r,e){if(await G(r,["add","-A"]),!(await G(r,["status","--porcelain"])).trim())throw new Error("Claude wrote no changes \u2014 nothing to commit");await G(r,["-c",`user.name=${xu}`,"-c",`user.email=${Cu}`,"commit","-m",e])}async function Wi(r,e){let n=(await G(r,["diff","--name-only",`origin/${e}...HEAD`])).split(`
229
+ `).filter(Boolean),s=n.filter(c=>Eu.some(d=>d.test(c))),i=await G(r,["diff","--shortstat",`origin/${e}...HEAD`]),o=Number(/(\d+) insertion/.exec(i)?.[1]??0),a=Number(/(\d+) deletion/.exec(i)?.[1]??0);return{ok:s.length===0&&n.length<=Is&&o+a<=As,files:n.length,insertions:o,deletions:a,forbidden:s}}async function Ji(r,e){await G(r,["fetch","--prune","origin",`+refs/heads/${e}:refs/remotes/origin/${e}`],{timeoutMs:12e4}).catch(()=>G(r,["update-ref","-d",`refs/remotes/origin/${e}`]).catch(()=>{})),await G(r,["push","--force-with-lease","-u","origin",e],{timeoutMs:3e5})}async function Mn(r){return(await G(r,["rev-parse","HEAD"])).trim()}async function Ps(r,e){try{return(await G(r,["rev-parse","--verify",`refs/heads/${e}`])).trim()}catch{return null}}async function rn(r,e){try{await G(r,["worktree","remove","--force",e])}catch{de.default.rmSync(e,{recursive:!0,force:!0})}}async function Yi(r,e=[]){let t=new Set(e.map(s=>ne.default.basename(ne.default.resolve(s))).filter(s=>s.length>0)),n=Nn();if(de.default.existsSync(n))for(let s of de.default.readdirSync(n))t.has(s)||de.default.rmSync(ne.default.join(n,s),{recursive:!0,force:!0});for(let s of r)try{await G(s,["worktree","prune"])}catch{}}async function Xi(r,e){return await G(r,["fetch","origin","--prune"]).catch(()=>{}),(await G(r,["branch","-r","--list",`*${e}*`])).split(`
230
+ `).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function js(r,e,t=6e4){let s=(await G(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await G(r,["diff","--stat",`${s}...${e}`]),o=await G(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function Iu(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(de.default.existsSync(ne.default.join(gr.default.homedir(),".cache","ticketpilot"))?ne.default.join(gr.default.homedir(),".cache","ticketpilot"):ne.default.join(gr.default.homedir(),".cache","allwright"));return ne.default.join(r,"env-checkouts")}function wu(r){return r.replace(/[^\w.-]+/g,"_")}function Au(r,e){return ne.default.join(Iu(),wu(r),wu(e))}async function Qi(r){let e=Au(r.repoName,r.envName);return await G(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),de.default.existsSync(ne.default.join(e,".git"))?await G(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(de.default.rmSync(e,{recursive:!0,force:!0}),de.default.mkdirSync(ne.default.dirname(e),{recursive:!0,mode:448}),await G(r.repoPath,["worktree","prune"]).catch(()=>{}),await G(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await G(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await G(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function eo(r,e,t){try{await G(r,["fetch","origin",e],{timeoutMs:3e5})}catch{return{ok:!1,reason:`branch "${e}" does not exist on origin \u2014 nothing to promote. Check the environment's ticket branch template against the branch your implement rule creates.`}}try{return await G(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await G(r,["-c",`user.name=${xu}`,"-c",`user.email=${Cu}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await G(r,["merge","--abort"]).catch(()=>{}),{ok:!1,reason:`could not merge "${e}" into the environment branch \u2014 ${n instanceof Error?n.message:n}. Resolve it manually and deploy again.`}}}async function to(r,e){try{await G(r,["push","origin",e],{timeoutMs:3e5})}catch(t){throw new Error(`could not push "${e}" \u2014 ${t instanceof Error?t.message:t}. Someone may have pushed to it since this deploy started; retry.`)}}async function ro(r,e,t){try{return await Tu("git",["-C",r,"diff","--quiet",e,t,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(n){let s=n;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${t}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function yr(r){return(await G(r,["config","--get","remote.origin.url"])).trim()}function vr(r){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(r)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(r)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(r);return e?{owner:e[1],repo:e[2]}:null}var de,gr,ne,ku,Su,Tu,xu,Cu,Is,As,Eu,en,_r=fi(()=>{"use strict";de=P(require("node:fs"),1),gr=P(require("node:os"),1),ne=P(require("node:path"),1),ku=require("node:child_process"),Su=require("node:util"),Tu=(0,Su.promisify)(ku.execFile),xu="Allwright Agent",Cu="agent@ticketpilot.local",Is=200,As=2e4,Eu=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];en=".ticketpilot-delete"});var an={};ns(an,{GitHubClient:()=>Me});var Yp,Me,ct=fi(()=>{"use strict";Yp=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",Me=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${Yp}${t}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...n!==void 0?{"Content-Type":"application/json"}:{}},body:n===void 0?void 0:JSON.stringify(n)}),i=await s.text(),o=null;try{o=i?JSON.parse(i):null}catch{}if(s.status===401)throw new Error("GitHub rejected the token (401) \u2014 expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let a=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${t} -> ${s.status}: ${a}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,t,n){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${t}/pulls`,n);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${t}/pulls?head=${encodeURIComponent(`${e}:${n.head}`)}&state=open`);if(o?.length){let a=o[0];return{number:a.number,url:a.html_url,state:a.state,merged:a.merged??!1,headSha:a.head.sha,mergeableState:null}}throw new Error(`GitHub refused the PR (422): ${i?.message??"validation failed"}`)}return{number:i.number,url:i.html_url,state:i.state,merged:i.merged??!1,headSha:i.head.sha,mergeableState:null}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async closePullRequest(e,t,n){await this.request("PATCH",`/repos/${e}/${t}/pulls/${n}`,{state:"closed"})}async deleteBranch(e,t,n){try{await this.request("DELETE",`/repos/${e}/${t}/git/refs/heads/${encodeURIComponent(n)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var ft=Y((H_,hc)=>{"use strict";var cc=["nodebuffer","arraybuffer","fragments"],dc=typeof Blob<"u";dc&&cc.push("blob");hc.exports={BINARY_TYPES:cc,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:dc,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Gn=Y((W_,Ws)=>{"use strict";var{EMPTY_BUFFER:Dm}=ft(),Lo=Buffer[Symbol.species];function zm(r,e){if(r.length===0)return Dm;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new Lo(t.buffer,t.byteOffset,n):t}function fc(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function pc(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Um(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Do(r){if(Do.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new Lo(r):ArrayBuffer.isView(r)?e=new Lo(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Do.readOnly=!1),e}Ws.exports={concat:zm,mask:fc,toArrayBuffer:Um,toBuffer:Do,unmask:pc};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Ws.exports.mask=function(e,t,n,s,i){i<48?fc(e,t,n,s,i):r.mask(e,t,n,s,i)},Ws.exports.unmask=function(e,t){e.length<32?pc(e,t):r.unmask(e,t)}}catch{}});var yc=Y((J_,gc)=>{"use strict";var mc=Symbol("kDone"),zo=Symbol("kRun"),Uo=class{constructor(e){this[mc]=()=>{this.pending--,this[zo]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[zo]()}[zo](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[mc])}}};gc.exports=Uo});var mn=Y((Y_,wc)=>{"use strict";var Hn=require("zlib"),vc=Gn(),qm=yc(),{kStatusCode:_c}=ft(),Bm=Buffer[Symbol.species],Fm=Buffer.from([0,0,255,255]),Ys=Symbol("permessage-deflate"),pt=Symbol("total-length"),fn=Symbol("callback"),jt=Symbol("buffers"),pn=Symbol("error"),Js,qo=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Js){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Js=new qm(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[fn];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Js.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Js.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Hn.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Hn.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Ys]=this,this._inflate[pt]=0,this._inflate[jt]=[],this._inflate.on("error",Km),this._inflate.on("data",bc)}this._inflate[fn]=n,this._inflate.write(e),t&&this._inflate.write(Fm),this._inflate.flush(()=>{let i=this._inflate[pn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=vc.concat(this._inflate[jt],this._inflate[pt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[pt]=0,this._inflate[jt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Hn.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Hn.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[pt]=0,this._deflate[jt]=[],this._deflate.on("data",Zm)}this._deflate[fn]=n,this._deflate.write(e),this._deflate.flush(Hn.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=vc.concat(this._deflate[jt],this._deflate[pt]);t&&(i=new Bm(i.buffer,i.byteOffset,i.length-4)),this._deflate[fn]=null,this._deflate[pt]=0,this._deflate[jt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};wc.exports=qo;function Zm(r){this[jt].push(r),this[pt]+=r.length}function bc(r){if(this[pt]+=r.length,this[Ys]._maxPayload<1||this[pt]<=this[Ys]._maxPayload){this[jt].push(r);return}this[pn]=new RangeError("Max payload size exceeded"),this[pn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[pn][_c]=1009,this.removeListener("data",bc),this.reset()}function Km(r){if(this[Ys]._inflate=null,this[pn]){this[fn](this[pn]);return}r[_c]=1007,this[fn](r)}});var gn=Y((X_,Xs)=>{"use strict";var{isUtf8:kc}=require("buffer"),{hasBlob:Vm}=ft(),Gm=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Hm(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Bo(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Wm(r){return Vm&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Xs.exports={isBlob:Wm,isValidStatusCode:Hm,isValidUTF8:Bo,tokenChars:Gm};if(kc)Xs.exports.isValidUTF8=function(r){return r.length<24?Bo(r):kc(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Xs.exports.isValidUTF8=function(e){return e.length<32?Bo(e):r(e)}}catch{}});var Go=Y((Q_,Ac)=>{"use strict";var{Writable:Jm}=require("stream"),Sc=mn(),{BINARY_TYPES:Ym,EMPTY_BUFFER:Tc,kStatusCode:Xm,kWebSocket:Qm}=ft(),{concat:Fo,toArrayBuffer:eg,unmask:tg}=Gn(),{isValidStatusCode:rg,isValidUTF8:xc}=gn(),Qs=Buffer[Symbol.species],Le=0,Cc=1,Ec=2,Ic=3,Zo=4,Ko=5,ei=6,Vo=class extends Jm{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ym[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Qm]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._numFragments=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=Le}_write(e,t,n){if(this._opcode===8&&this._state==Le)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new Qs(n.buffer,n.byteOffset+e,n.length-e),new Qs(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new Qs(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case Le:this.getInfo(e);break;case Cc:this.getPayloadLength16(e);break;case Ec:this.getPayloadLength64(e);break;case Ic:this.getMask();break;case Zo:this.getData(e);break;case Ko:case ei:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[Sc.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=Cc:this._payloadLength===127?this._state=Ec:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=Ic:this._state=Zo}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Zo}getData(e){let t=Tc;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&tg(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let n=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(n);return}if(this._compressed){this._state=Ko,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Sc.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===Le&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=Le;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Fo(n,t):this._binaryType==="arraybuffer"?s=eg(Fo(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Le):(this._state=ei,setImmediate(()=>{this.emit("message",s,!0),this._state=Le,this.startLoop(e)}))}else{let s=Fo(n,t);if(!this._skipUTF8Validation&&!xc(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ko||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Le):(this._state=ei,setImmediate(()=>{this.emit("message",s,!1),this._state=Le,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Tc),this.end();else{let n=e.readUInt16BE(0);if(!rg(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new Qs(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!xc(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=Le;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Le):(this._state=ei,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Le,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[Xm]=s,o}};Ac.exports=Vo});var Jo=Y((tb,Pc)=>{"use strict";var{Duplex:eb}=require("stream"),{randomFillSync:ng}=require("crypto"),{types:{isUint8Array:sg}}=require("util"),Rc=mn(),{EMPTY_BUFFER:ig,kWebSocket:og,NOOP:ag}=ft(),{isBlob:yn,isValidStatusCode:ug}=gn(),{mask:$c,toBuffer:Ir}=Gn(),De=Symbol("kByteLength"),lg=Buffer.alloc(4),ti=8*1024,Ar,vn=ti,Fe=0,cg=1,dg=2,Ho=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Fe,this.onerror=ag,this[og]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||lg,t.generateMask?t.generateMask(n):(vn===ti&&(Ar===void 0&&(Ar=Buffer.alloc(ti)),ng(Ar,0,ti),vn=0),n[0]=Ar[vn++],n[1]=Ar[vn++],n[2]=Ar[vn++],n[3]=Ar[vn++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[De]!==void 0?a=t[De]:(e=Buffer.from(e),a=e.length):(a=e.length,s=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?($c(e,n,c,i,a),[c]):($c(e,n,e,0,a),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=ig;else{if(typeof e!="number"||!ug(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string")i.write(t,2);else if(sg(t))i.set(t,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[De]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Fe?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):yn(e)?(s=e.size,i=!1):(e=Ir(e),s=e.length,i=Ir.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[De]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};yn(e)?this._state!==Fe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Fe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):yn(e)?(s=e.size,i=!1):(e=Ir(e),s=e.length,i=Ir.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[De]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};yn(e)?this._state!==Fe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Fe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Rc.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):yn(e)?(a=e.size,l=!1):(e=Ir(e),a=e.length,l=Ir.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[De]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};yn(e)?this._state!==Fe?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==Fe?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[De],this._state=dg,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Wo,this,a,s);return}this._bufferedBytes-=n[De];let o=Ir(i);t?this.dispatch(o,t,n,s):(this._state=Fe,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(hg,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Rc.extensionName];this._bufferedBytes+=n[De],this._state=cg,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Wo(this,l,s);return}this._bufferedBytes-=n[De],this._state=Fe,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===Fe&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][De],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][De],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Pc.exports=Ho;function Wo(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function hg(r,e,t){Wo(r,e,t),r.onerror(e)}});var qc=Y((rb,Uc)=>{"use strict";var{kForOnEventAttribute:Wn,kListener:Yo}=ft(),jc=Symbol("kCode"),Oc=Symbol("kData"),Nc=Symbol("kError"),Mc=Symbol("kMessage"),Lc=Symbol("kReason"),_n=Symbol("kTarget"),Dc=Symbol("kType"),zc=Symbol("kWasClean"),mt=class{constructor(e){this[_n]=null,this[Dc]=e}get target(){return this[_n]}get type(){return this[Dc]}};Object.defineProperty(mt.prototype,"target",{enumerable:!0});Object.defineProperty(mt.prototype,"type",{enumerable:!0});var Rr=class extends mt{constructor(e,t={}){super(e),this[jc]=t.code===void 0?0:t.code,this[Lc]=t.reason===void 0?"":t.reason,this[zc]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[jc]}get reason(){return this[Lc]}get wasClean(){return this[zc]}};Object.defineProperty(Rr.prototype,"code",{enumerable:!0});Object.defineProperty(Rr.prototype,"reason",{enumerable:!0});Object.defineProperty(Rr.prototype,"wasClean",{enumerable:!0});var bn=class extends mt{constructor(e,t={}){super(e),this[Nc]=t.error===void 0?null:t.error,this[Mc]=t.message===void 0?"":t.message}get error(){return this[Nc]}get message(){return this[Mc]}};Object.defineProperty(bn.prototype,"error",{enumerable:!0});Object.defineProperty(bn.prototype,"message",{enumerable:!0});var Jn=class extends mt{constructor(e,t={}){super(e),this[Oc]=t.data===void 0?null:t.data}get data(){return this[Oc]}};Object.defineProperty(Jn.prototype,"data",{enumerable:!0});var fg={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Wn]&&s[Yo]===e&&!s[Wn])return;let n;if(r==="message")n=function(i,o){let a=new Jn("message",{data:o?i:i.toString()});a[_n]=this,ri(e,this,a)};else if(r==="close")n=function(i,o){let a=new Rr("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[_n]=this,ri(e,this,a)};else if(r==="error")n=function(i){let o=new bn("error",{error:i,message:i.message});o[_n]=this,ri(e,this,o)};else if(r==="open")n=function(){let i=new mt("open");i[_n]=this,ri(e,this,i)};else return;n[Wn]=!!t[Wn],n[Yo]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Yo]===e&&!t[Wn]){this.removeListener(r,t);break}}};Uc.exports={CloseEvent:Rr,ErrorEvent:bn,Event:mt,EventTarget:fg,MessageEvent:Jn};function ri(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var ni=Y((nb,Bc)=>{"use strict";var{tokenChars:Yn}=gn();function Qe(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function pg(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,l=-1,c=-1,d=-1,p=0;for(;p<r.length;p++)if(c=r.charCodeAt(p),o===void 0)if(d===-1&&Yn[c]===1)l===-1&&(l=p);else if(p!==0&&(c===32||c===9))d===-1&&l!==-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p);let S=r.slice(l,d);c===44?(Qe(e,S,t),t=Object.create(null)):o=S,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(d===-1&&Yn[c]===1)l===-1&&(l=p);else if(c===32||c===9)d===-1&&l!==-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p),Qe(t,r.slice(l,d),!0),c===44&&(Qe(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=r.slice(l,p),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(Yn[c]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);l===-1?l=p:n||(n=!0),s=!1}else if(i)if(Yn[c]===1)l===-1&&(l=p);else if(c===34&&l!==-1)i=!1,d=p;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(c===34&&r.charCodeAt(p-1)===61)i=!0;else if(d===-1&&Yn[c]===1)l===-1&&(l=p);else if(l!==-1&&(c===32||c===9))d===-1&&(d=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1&&(d=p);let S=r.slice(l,d);n&&(S=S.replace(/\\/g,""),n=!1),Qe(t,a,S),c===44&&(Qe(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=p);let _=r.slice(l,d);return o===void 0?Qe(e,_,t):(a===void 0?Qe(t,_,!0):n?Qe(t,a,_.replace(/\\/g,"")):Qe(t,a,_),Qe(e,o,t)),e}function mg(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Bc.exports={format:mg,parse:pg}});var ai=Y((ob,ed)=>{"use strict";var gg=require("events"),yg=require("https"),vg=require("http"),Kc=require("net"),_g=require("tls"),{randomBytes:bg,createHash:wg}=require("crypto"),{Duplex:sb,Readable:ib}=require("stream"),{URL:Xo}=require("url"),Ot=mn(),kg=Go(),Sg=Jo(),{isBlob:Tg}=gn(),{BINARY_TYPES:Fc,CLOSE_TIMEOUT:xg,EMPTY_BUFFER:si,GUID:Cg,kForOnEventAttribute:Qo,kListener:Eg,kStatusCode:Ig,kWebSocket:ae,NOOP:Vc}=ft(),{EventTarget:{addEventListener:Ag,removeEventListener:Rg}}=qc(),{format:$g,parse:Pg}=ni(),{toBuffer:jg}=Gn(),Gc=Symbol("kAborted"),ea=[8,13],gt=["CONNECTING","OPEN","CLOSING","CLOSED"],Og=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,se=class r extends gg{constructor(e,t,n){super(),this._binaryType=Fc[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=si,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Hc(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Fc.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new kg({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:n.maxBufferedChunks,maxFragments:n.maxFragments,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Sg(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[ae]=this,i[ae]=this,e[ae]=this,s.on("conclude",Lg),s.on("drain",Dg),s.on("error",zg),s.on("message",Ug),s.on("ping",qg),s.on("pong",Bg),i.onerror=Fg,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Yc),e.on("data",oi),e.on("end",Xc),e.on("error",Qc),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Ot.extensionName]&&this._extensions[Ot.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ee(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Jc(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){ta(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||si,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){ta(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||si,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){ta(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Ot.extensionName]||(s.compress=!1),this._sender.send(e||si,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ee(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(se,"CONNECTING",{enumerable:!0,value:gt.indexOf("CONNECTING")});Object.defineProperty(se.prototype,"CONNECTING",{enumerable:!0,value:gt.indexOf("CONNECTING")});Object.defineProperty(se,"OPEN",{enumerable:!0,value:gt.indexOf("OPEN")});Object.defineProperty(se.prototype,"OPEN",{enumerable:!0,value:gt.indexOf("OPEN")});Object.defineProperty(se,"CLOSING",{enumerable:!0,value:gt.indexOf("CLOSING")});Object.defineProperty(se.prototype,"CLOSING",{enumerable:!0,value:gt.indexOf("CLOSING")});Object.defineProperty(se,"CLOSED",{enumerable:!0,value:gt.indexOf("CLOSED")});Object.defineProperty(se.prototype,"CLOSED",{enumerable:!0,value:gt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(se.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(se.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Qo])return e[Eg];return null},set(e){for(let t of this.listeners(r))if(t[Qo]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Qo]:!0})}})});se.prototype.addEventListener=Ag;se.prototype.removeEventListener=Rg;ed.exports=se;function Hc(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:xg,protocolVersion:ea[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!ea.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${ea.join(", ")})`);let i;if(e instanceof Xo)i=e;else try{i=new Xo(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let C=new SyntaxError(l);if(r._redirects===0)throw C;ii(r,C);return}let c=o?443:80,d=bg(16).toString("base64"),p=o?yg.request:vg.request,_=new Set,S;if(s.createConnection=s.createConnection||(o?Mg:Ng),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(S=new Ot({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=$g({[Ot.extensionName]:S.offer()})),t.length){for(let C of t){if(typeof C!="string"||!Og.test(C)||_.has(C))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(C)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let C=s.path.split(":");s.socketPath=C[0],s.path=C[1]}let T;if(s.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?s.socketPath:i.host;let C=n&&n.headers;if(n={...n,headers:{}},C)for(let[k,B]of Object.entries(C))n.headers[k.toLowerCase()]=B}else if(r.listenerCount("redirect")===0){let C=a?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!C||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,C||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),T=r._req=p(s),r._redirects&&r.emit("redirect",r.url,T)}else T=r._req=p(s);s.timeout&&T.on("timeout",()=>{Ee(r,T,"Opening handshake has timed out")}),T.on("error",C=>{T===null||T[Gc]||(T=r._req=null,ii(r,C))}),T.on("response",C=>{let k=C.headers.location,B=C.statusCode;if(k&&s.followRedirects&&B>=300&&B<400){if(++r._redirects>s.maxRedirects){Ee(r,T,"Maximum redirects exceeded");return}T.abort();let q;try{q=new Xo(k,e)}catch{let m=new SyntaxError(`Invalid URL: ${k}`);ii(r,m);return}Hc(r,q,t,n)}else r.emit("unexpected-response",T,C)||Ee(r,T,`Unexpected server response: ${C.statusCode}`)}),T.on("upgrade",(C,k,B)=>{if(r.emit("upgrade",C),r.readyState!==se.CONNECTING)return;T=r._req=null;let q=C.headers.upgrade;if(q===void 0||q.toLowerCase()!=="websocket"){Ee(r,k,"Invalid Upgrade header");return}let f=wg("sha1").update(d+Cg).digest("base64");if(C.headers["sec-websocket-accept"]!==f){Ee(r,k,"Invalid Sec-WebSocket-Accept header");return}let m=C.headers["sec-websocket-protocol"],b;if(m!==void 0?_.size?_.has(m)||(b="Server sent an invalid subprotocol"):b="Server sent a subprotocol but none was requested":_.size&&(b="Server sent no subprotocol"),b){Ee(r,k,b);return}m&&(r._protocol=m);let A=C.headers["sec-websocket-extensions"];if(A!==void 0){if(!S){Ee(r,k,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let N;try{N=Pg(A)}catch{Ee(r,k,"Invalid Sec-WebSocket-Extensions header");return}let F=Object.keys(N);if(F.length!==1||F[0]!==Ot.extensionName){Ee(r,k,"Server indicated an extension that was not requested");return}try{S.accept(N[Ot.extensionName])}catch{Ee(r,k,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Ot.extensionName]=S}r.setSocket(k,B,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(T,r):T.end()}function ii(r,e){r._readyState=se.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Ng(r){return r.path=r.socketPath,Kc.connect(r)}function Mg(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Kc.isIP(r.host)?"":r.host),_g.connect(r)}function Ee(r,e,t){r._readyState=se.CLOSING;let n=new Error(t);Error.captureStackTrace(n,Ee),e.setHeader?(e[Gc]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ii,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function ta(r,e,t){if(e){let n=Tg(e)?e.size:jg(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${gt[r.readyState]})`);process.nextTick(t,n)}}function Lg(r,e){let t=this[ae];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[ae]!==void 0&&(t._socket.removeListener("data",oi),process.nextTick(Wc,t._socket),r===1005?t.close():t.close(r,e))}function Dg(){let r=this[ae];r.isPaused||r._socket.resume()}function zg(r){let e=this[ae];e._socket[ae]!==void 0&&(e._socket.removeListener("data",oi),process.nextTick(Wc,e._socket),e.close(r[Ig])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Zc(){this[ae].emitClose()}function Ug(r,e){this[ae].emit("message",r,e)}function qg(r){let e=this[ae];e._autoPong&&e.pong(r,!this._isServer,Vc),e.emit("ping",r)}function Bg(r){this[ae].emit("pong",r)}function Wc(r){r.resume()}function Fg(r){let e=this[ae];e.readyState!==se.CLOSED&&(e.readyState===se.OPEN&&(e._readyState=se.CLOSING,Jc(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Jc(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Yc(){let r=this[ae];if(this.removeListener("close",Yc),this.removeListener("data",oi),this.removeListener("end",Xc),r._readyState=se.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[ae]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Zc),r._receiver.on("finish",Zc))}function oi(r){this[ae]._receiver.write(r)||this.pause()}function Xc(){let r=this[ae];r._readyState=se.CLOSING,r._receiver.end(),this.end()}function Qc(){let r=this[ae];this.removeListener("error",Qc),this.on("error",Vc),r&&(r._readyState=se.CLOSING,this.destroy())}});var sd=Y((ub,nd)=>{"use strict";var ab=ai(),{Duplex:Zg}=require("stream");function td(r){r.emit("close")}function Kg(){!this.destroyed&&this._writableState.finished&&this.destroy()}function rd(r){this.removeListener("error",rd),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Vg(r,e){let t=!0,n=new Zg({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(td,n);return}let o=!1;r.once("error",function(l){o=!0,i(l)}),r.once("close",function(){o||i(s),process.nextTick(td,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Kg),n.on("error",rd),n}nd.exports=Vg});var ra=Y((lb,id)=>{"use strict";var{tokenChars:Gg}=gn();function Hg(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Gg[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=r.slice(t,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}id.exports={parse:Hg}});var hd=Y((db,dd)=>{"use strict";var Wg=require("events"),ui=require("http"),{Duplex:cb}=require("stream"),{createHash:Jg}=require("crypto"),od=ni(),$r=mn(),Yg=ra(),Xg=ai(),{CLOSE_TIMEOUT:Qg,GUID:ey,kWebSocket:ty}=ft(),ry=/^[+/0-9A-Za-z]{22}==$/,ad=0,ud=1,cd=2,na=class extends Wg{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:256*1024,maxFragments:16*1024,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Qg,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Xg,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ui.createServer((n,s)=>{let i=ui.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=ny(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=ad}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===cd){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xn,this);return}if(e&&this.once("close",e),this._state!==ud)if(this._state=ud,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Xn,this):process.nextTick(Xn,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Xn(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",ld);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Pr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Pr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!ry.test(i)){Pr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Pr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Qn(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Yg.parse(l)}catch{Pr(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&d!==void 0){let _=new $r({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S=od.parse(d);S[$r.extensionName]&&(_.accept(S[$r.extensionName]),p[$r.extensionName]=_)}catch{Pr(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(S,T,C,k)=>{if(!S)return Qn(t,T||401,C,k);this.completeUpgrade(p,i,c,e,t,n,s)});return}if(!this.options.verifyClient(_))return Qn(t,401)}this.completeUpgrade(p,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[ty])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ad)return Qn(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Jg("sha1").update(t+ey).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let p=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;p&&(c.push(`Sec-WebSocket-Protocol: ${p}`),d._protocol=p)}if(e[$r.extensionName]){let p=e[$r.extensionName].params,_=od.format({[$r.extensionName]:[p]});c.push(`Sec-WebSocket-Extensions: ${_}`),d._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
231
231
  `).join(`\r
232
- `)),i.removeListener("error",td),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Hn,this)})),a(d,s)}};nd.exports=Jo;function Wg(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Hn(r){r._state=rd,r.emit("close")}function td(){this.destroy()}function Wn(r,e,t,n){t=t||ni.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${ni.STATUS_CODES[e]}\r
232
+ `)),i.removeListener("error",ld),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Xn,this)})),a(d,s)}};dd.exports=na;function ny(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Xn(r){r._state=cd,r.emit("close")}function ld(){this.destroy()}function Qn(r,e,t,n){t=t||ui.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${ui.STATUS_CODES[e]}\r
233
233
  `+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
234
234
  `)+`\r
235
235
  \r
236
- `+t)}function Rr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Rr),r.emit("wsClientError",o,t,e)}else Wn(t,n,s,i)}});var fd={};Qn(fd,{buildSetupReport:()=>ly,claudeLoggedIn:()=>hd});function hd(r=cd.default.homedir()){if(Ot.default.existsSync($r.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Ot.default.readFileSync($r.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function ly(r,e){let t=!1,n="";if(Yn&&Date.now()-Yn.at<6e4)t=Yn.installed,n=Yn.version;else{try{let{stdout:o}=await uy(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}Yn={at:Date.now(),installed:t,version:n}}let s=e.map(o=>{let a=r.repos[o];if(!a)return{repoName:o,mapped:!1,pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1};let l=Ot.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:l,isGit:l&&Ot.default.existsSync($r.default.join(a.path,".git")),claudeMd:l&&Ot.default.existsSync($r.default.join(a.path,"CLAUDE.md")),deployMd:l&&Ot.default.existsSync($r.default.join(a.path,"DEPLOY.md")),testMd:l&&Ot.default.existsSync($r.default.join(a.path,"TEST.md"))}}),i=Object.values(r.repos).find(o=>o.github?.token);return{jiraConfigured:!!r.jira,jiraEmail:r.jira?.email??"",claude:{installed:t,version:n,loggedIn:hd()},githubTokenSet:!!(r.github?.token||i),githubLogin:r.github?.login??i?.github?.login??"",deploysEnabled:r.deploy.enabled,jiraUserCount:Object.keys(r.jiraUsers).length,repos:s}}var ld,Ot,cd,$r,dd,uy,Yn,pd=ui(()=>{"use strict";ld=require("node:child_process"),Ot=$(require("node:fs"),1),cd=$(require("node:os"),1),$r=$(require("node:path"),1),dd=require("node:util"),uy=(0,dd.promisify)(ld.execFile);Yn=null});var gt=$(require("node:fs"),1),md=$(require("node:os"),1),_n=$(require("node:path"),1),Nt=require("node:child_process"),oi=require("node:crypto"),Pr=$(require("node:readline/promises"),1);var _a=$(va(),1),{program:_y,createCommand:by,createArgument:wy,createOption:ky,CommanderError:Sy,InvalidArgumentError:Ty,InvalidOptionArgumentError:xy,Command:ba,Argument:Cy,Option:Ey,Help:Iy}=_a.default;var st=$(require("node:fs"),1),as=$(require("node:os"),1),us=$(require("node:path"),1);var k={};Qn(k,{BRAND:()=>lh,DIRTY:()=>Mt,EMPTY_PATH:()=>qd,INVALID:()=>M,NEVER:()=>Gh,OK:()=>he,ParseStatus:()=>ue,Schema:()=>H,ZodAny:()=>bt,ZodArray:()=>nt,ZodBigInt:()=>Dt,ZodBoolean:()=>zt,ZodBranded:()=>Sn,ZodCatch:()=>Jt,ZodDate:()=>Ut,ZodDefault:()=>Wt,ZodDiscriminatedUnion:()=>ss,ZodEffects:()=>Re,ZodEnum:()=>Gt,ZodError:()=>ve,ZodFirstPartyTypeKind:()=>L,ZodFunction:()=>os,ZodIntersection:()=>Zt,ZodIssueCode:()=>T,ZodLazy:()=>Kt,ZodLiteral:()=>Vt,ZodMap:()=>Dr,ZodNaN:()=>Ur,ZodNativeEnum:()=>Ht,ZodNever:()=>De,ZodNull:()=>Bt,ZodNullable:()=>Ke,ZodNumber:()=>Lt,ZodObject:()=>_e,ZodOptional:()=>Ie,ZodParsedType:()=>R,ZodPipeline:()=>Tn,ZodPromise:()=>wt,ZodReadonly:()=>Yt,ZodRecord:()=>is,ZodSchema:()=>H,ZodSet:()=>zr,ZodString:()=>_t,ZodSymbol:()=>Mr,ZodTransformer:()=>Re,ZodTuple:()=>Ze,ZodType:()=>H,ZodUndefined:()=>qt,ZodUnion:()=>Ft,ZodUnknown:()=>rt,ZodVoid:()=>Lr,addIssueToContext:()=>A,any:()=>vh,array:()=>kh,bigint:()=>fh,boolean:()=>$a,coerce:()=>Vh,custom:()=>Ia,date:()=>ph,datetimeRegex:()=>Ca,defaultErrorMap:()=>et,discriminatedUnion:()=>Ch,effect:()=>Dh,enum:()=>Nh,function:()=>Ph,getErrorMap:()=>jr,getParsedType:()=>Fe,instanceof:()=>dh,intersection:()=>Eh,isAborted:()=>rs,isAsync:()=>Or,isDirty:()=>ns,isValid:()=>vt,late:()=>ch,lazy:()=>jh,literal:()=>Oh,makeIssue:()=>kn,map:()=>Rh,nan:()=>hh,nativeEnum:()=>Mh,never:()=>bh,null:()=>yh,nullable:()=>Uh,number:()=>Ra,object:()=>Sh,objectUtil:()=>Ti,oboolean:()=>Kh,onumber:()=>Zh,optional:()=>zh,ostring:()=>Fh,pipeline:()=>Bh,preprocess:()=>qh,promise:()=>Lh,quotelessJson:()=>Dd,record:()=>Ah,set:()=>$h,setErrorMap:()=>Ud,strictObject:()=>Th,string:()=>Aa,symbol:()=>mh,transformer:()=>Dh,tuple:()=>Ih,undefined:()=>gh,union:()=>xh,unknown:()=>_h,util:()=>W,void:()=>wh});var W;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(W||(W={}));var Ti;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Ti||(Ti={}));var R=W.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Fe=r=>{switch(typeof r){case"undefined":return R.undefined;case"string":return R.string;case"number":return Number.isNaN(r)?R.nan:R.number;case"boolean":return R.boolean;case"function":return R.function;case"bigint":return R.bigint;case"symbol":return R.symbol;case"object":return Array.isArray(r)?R.array:r===null?R.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?R.promise:typeof Map<"u"&&r instanceof Map?R.map:typeof Set<"u"&&r instanceof Set?R.set:typeof Date<"u"&&r instanceof Date?R.date:R.object;default:return R.unknown}};var T=W.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Dd=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),ve=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,W.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};ve.create=r=>new ve(r);var zd=(r,e)=>{let t;switch(r.code){case T.invalid_type:r.received===R.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case T.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,W.jsonStringifyReplacer)}`;break;case T.unrecognized_keys:t=`Unrecognized key(s) in object: ${W.joinValues(r.keys,", ")}`;break;case T.invalid_union:t="Invalid input";break;case T.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${W.joinValues(r.options)}`;break;case T.invalid_enum_value:t=`Invalid enum value. Expected ${W.joinValues(r.options)}, received '${r.received}'`;break;case T.invalid_arguments:t="Invalid function arguments";break;case T.invalid_return_type:t="Invalid function return type";break;case T.invalid_date:t="Invalid date";break;case T.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:W.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case T.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case T.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case T.custom:t="Invalid input";break;case T.invalid_intersection_types:t="Intersection results could not be merged";break;case T.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case T.not_finite:t="Number must be finite";break;default:t=e.defaultError,W.assertNever(r)}return{message:t}},et=zd;var wa=et;function Ud(r){wa=r}function jr(){return wa}var kn=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},qd=[];function A(r,e){let t=jr(),n=kn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===et?void 0:et].filter(s=>!!s)});r.common.issues.push(n)}var ue=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return M;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return M;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}},M=Object.freeze({status:"aborted"}),Mt=r=>({status:"dirty",value:r}),he=r=>({status:"valid",value:r}),rs=r=>r.status==="aborted",ns=r=>r.status==="dirty",vt=r=>r.status==="valid",Or=r=>typeof Promise<"u"&&r instanceof Promise;var j;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(j||(j={}));var Ae=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},ka=(r,e)=>{if(vt(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new ve(r.common.issues);return this._error=t,this._error}}};function F(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var H=class{get description(){return this._def.description}_getType(e){return Fe(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Fe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ue,ctx:{common:e.parent.common,data:e.data,parsedType:Fe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Or(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Fe(e)},s=this._parseSync({data:e,path:n.path,parent:n});return ka(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Fe(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return vt(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>vt(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Fe(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(Or(s)?s:Promise.resolve(s));return ka(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:T.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new Re({schema:this,typeName:L.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ie.create(this,this._def)}nullable(){return Ke.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return nt.create(this)}promise(){return wt.create(this,this._def)}or(e){return Ft.create([this,e],this._def)}and(e){return Zt.create(this,e,this._def)}transform(e){return new Re({...F(this._def),schema:this,typeName:L.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new Wt({...F(this._def),innerType:this,defaultValue:t,typeName:L.ZodDefault})}brand(){return new Sn({typeName:L.ZodBranded,type:this,...F(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new Jt({...F(this._def),innerType:this,catchValue:t,typeName:L.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Tn.create(this,e)}readonly(){return Yt.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Bd=/^c[^\s-]{8,}$/i,Fd=/^[0-9a-z]+$/,Zd=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Kd=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Vd=/^[a-z0-9_-]{21}$/i,Gd=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Hd=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Wd=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Jd="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",xi,Yd=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Xd=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Qd=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,eh=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,th=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,rh=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ta="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",nh=new RegExp(`^${Ta}$`);function xa(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function sh(r){return new RegExp(`^${xa(r)}$`)}function Ca(r){let e=`${Ta}T${xa(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function ih(r,e){return!!((e==="v4"||!e)&&Yd.test(r)||(e==="v6"||!e)&&Qd.test(r))}function oh(r,e){if(!Gd.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function ah(r,e){return!!((e==="v4"||!e)&&Xd.test(r)||(e==="v6"||!e)&&eh.test(r))}var _t=class r extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==R.string){let i=this._getOrReturnCtx(e);return A(i,{code:T.invalid_type,expected:R.string,received:i.parsedType}),M}let n=new ue,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),A(s,{code:T.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),A(s,{code:T.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?A(s,{code:T.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&A(s,{code:T.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Wd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"email",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")xi||(xi=new RegExp(Jd,"u")),xi.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"emoji",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Kd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"uuid",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Vd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"nanoid",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Bd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"cuid",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Fd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"cuid2",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Zd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"ulid",code:T.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),A(s,{validation:"url",code:T.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"regex",code:T.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Ca(i).test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?nh.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?sh(i).test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{code:T.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Hd.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"duration",code:T.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?ih(e.data,i.version)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"ip",code:T.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?oh(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"jwt",code:T.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?ah(e.data,i.version)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"cidr",code:T.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?th.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"base64",code:T.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?rh.test(e.data)||(s=this._getOrReturnCtx(e,s),A(s,{validation:"base64url",code:T.invalid_string,message:i.message}),n.dirty()):W.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:T.invalid_string,...j.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...j.errToObj(e)})}url(e){return this._addCheck({kind:"url",...j.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...j.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...j.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...j.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...j.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...j.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...j.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...j.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...j.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...j.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...j.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...j.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...j.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...j.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...j.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...j.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...j.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...j.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...j.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...j.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...j.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...j.errToObj(t)})}nonempty(e){return this.min(1,j.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};_t.create=r=>new _t({checks:[],typeName:L.ZodString,coerce:r?.coerce??!1,...F(r)});function uh(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Lt=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==R.number){let i=this._getOrReturnCtx(e);return A(i,{code:T.invalid_type,expected:R.number,received:i.parsedType}),M}let n,s=new ue;for(let i of this._def.checks)i.kind==="int"?W.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),A(n,{code:T.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?uh(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),A(n,{code:T.not_finite,message:i.message}),s.dirty()):W.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,j.toString(t))}gt(e,t){return this.setLimit("min",e,!1,j.toString(t))}lte(e,t){return this.setLimit("max",e,!0,j.toString(t))}lt(e,t){return this.setLimit("max",e,!1,j.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:j.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:j.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:j.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:j.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:j.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:j.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:j.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:j.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:j.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:j.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&W.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Lt.create=r=>new Lt({checks:[],typeName:L.ZodNumber,coerce:r?.coerce||!1,...F(r)});var Dt=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==R.bigint)return this._getInvalidInput(e);let n,s=new ue;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),A(n,{code:T.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):W.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return A(t,{code:T.invalid_type,expected:R.bigint,received:t.parsedType}),M}gte(e,t){return this.setLimit("min",e,!0,j.toString(t))}gt(e,t){return this.setLimit("min",e,!1,j.toString(t))}lte(e,t){return this.setLimit("max",e,!0,j.toString(t))}lt(e,t){return this.setLimit("max",e,!1,j.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:j.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:j.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:j.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:j.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:j.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:j.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Dt.create=r=>new Dt({checks:[],typeName:L.ZodBigInt,coerce:r?.coerce??!1,...F(r)});var zt=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==R.boolean){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.boolean,received:n.parsedType}),M}return he(e.data)}};zt.create=r=>new zt({typeName:L.ZodBoolean,coerce:r?.coerce||!1,...F(r)});var Ut=class r extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==R.date){let i=this._getOrReturnCtx(e);return A(i,{code:T.invalid_type,expected:R.date,received:i.parsedType}),M}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return A(i,{code:T.invalid_date}),M}let n=new ue,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),A(s,{code:T.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),A(s,{code:T.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):W.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:j.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:j.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};Ut.create=r=>new Ut({checks:[],coerce:r?.coerce||!1,typeName:L.ZodDate,...F(r)});var Mr=class extends H{_parse(e){if(this._getType(e)!==R.symbol){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.symbol,received:n.parsedType}),M}return he(e.data)}};Mr.create=r=>new Mr({typeName:L.ZodSymbol,...F(r)});var qt=class extends H{_parse(e){if(this._getType(e)!==R.undefined){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.undefined,received:n.parsedType}),M}return he(e.data)}};qt.create=r=>new qt({typeName:L.ZodUndefined,...F(r)});var Bt=class extends H{_parse(e){if(this._getType(e)!==R.null){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.null,received:n.parsedType}),M}return he(e.data)}};Bt.create=r=>new Bt({typeName:L.ZodNull,...F(r)});var bt=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return he(e.data)}};bt.create=r=>new bt({typeName:L.ZodAny,...F(r)});var rt=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return he(e.data)}};rt.create=r=>new rt({typeName:L.ZodUnknown,...F(r)});var De=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return A(t,{code:T.invalid_type,expected:R.never,received:t.parsedType}),M}};De.create=r=>new De({typeName:L.ZodNever,...F(r)});var Lr=class extends H{_parse(e){if(this._getType(e)!==R.undefined){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.void,received:n.parsedType}),M}return he(e.data)}};Lr.create=r=>new Lr({typeName:L.ZodVoid,...F(r)});var nt=class r extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==R.array)return A(t,{code:T.invalid_type,expected:R.array,received:t.parsedType}),M;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&(A(t,{code:o?T.too_big:T.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&(A(t,{code:T.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&(A(t,{code:T.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Ae(t,o,t.path,a)))).then(o=>ue.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Ae(t,o,t.path,a)));return ue.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:j.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:j.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:j.toString(t)}})}nonempty(e){return this.min(1,e)}};nt.create=(r,e)=>new nt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:L.ZodArray,...F(e)});function Nr(r){if(r instanceof _e){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ie.create(Nr(n))}return new _e({...r._def,shape:()=>e})}else return r instanceof nt?new nt({...r._def,type:Nr(r.element)}):r instanceof Ie?Ie.create(Nr(r.unwrap())):r instanceof Ke?Ke.create(Nr(r.unwrap())):r instanceof Ze?Ze.create(r.items.map(e=>Nr(e))):r}var _e=class r extends H{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=W.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==R.object){let c=this._getOrReturnCtx(e);return A(c,{code:T.invalid_type,expected:R.object,received:c.parsedType}),M}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof De&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let l=[];for(let c of o){let d=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:d._parse(new Ae(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof De){let c=this._def.unknownKeys;if(c==="passthrough")for(let d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(c==="strict")a.length>0&&(A(s,{code:T.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let d of a){let p=s.data[d];l.push({key:{status:"valid",value:d},value:c._parse(new Ae(s,p,s.path,d)),alwaysSet:d in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let d of l){let p=await d.key,w=await d.value;c.push({key:p,value:w,alwaysSet:d.alwaysSet})}return c}).then(c=>ue.mergeObjectSync(n,c)):ue.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return j.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:j.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:L.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of W.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of W.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return Nr(this)}partial(e){let t={};for(let n of W.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of W.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Ie;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Ea(W.objectKeys(this.shape))}};_e.create=(r,e)=>new _e({shape:()=>r,unknownKeys:"strip",catchall:De.create(),typeName:L.ZodObject,...F(e)});_e.strictCreate=(r,e)=>new _e({shape:()=>r,unknownKeys:"strict",catchall:De.create(),typeName:L.ZodObject,...F(e)});_e.lazycreate=(r,e)=>new _e({shape:r,unknownKeys:"strip",catchall:De.create(),typeName:L.ZodObject,...F(e)});var Ft=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new ve(a.ctx.common.issues));return A(t,{code:T.invalid_union,unionErrors:o}),M}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},d=l._parseSync({data:t.data,path:t.path,parent:c});if(d.status==="valid")return d;d.status==="dirty"&&!i&&(i={result:d,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(l=>new ve(l));return A(t,{code:T.invalid_union,unionErrors:a}),M}}get options(){return this._def.options}};Ft.create=(r,e)=>new Ft({options:r,typeName:L.ZodUnion,...F(e)});var tt=r=>r instanceof Kt?tt(r.schema):r instanceof Re?tt(r.innerType()):r instanceof Vt?[r.value]:r instanceof Gt?r.options:r instanceof Ht?W.objectValues(r.enum):r instanceof Wt?tt(r._def.innerType):r instanceof qt?[void 0]:r instanceof Bt?[null]:r instanceof Ie?[void 0,...tt(r.unwrap())]:r instanceof Ke?[null,...tt(r.unwrap())]:r instanceof Sn||r instanceof Yt?tt(r.unwrap()):r instanceof Jt?tt(r._def.innerType):[],ss=class r extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==R.object)return A(t,{code:T.invalid_type,expected:R.object,received:t.parsedType}),M;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(A(t,{code:T.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),M)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=tt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:L.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...F(n)})}};function Ci(r,e){let t=Fe(r),n=Fe(e);if(r===e)return{valid:!0,data:r};if(t===R.object&&n===R.object){let s=W.objectKeys(e),i=W.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let l=Ci(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===R.array&&n===R.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],l=Ci(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===R.date&&n===R.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var Zt=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(rs(i)||rs(o))return M;let a=Ci(i.value,o.value);return a.valid?((ns(i)||ns(o))&&t.dirty(),{status:t.value,value:a.data}):(A(n,{code:T.invalid_intersection_types}),M)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Zt.create=(r,e,t)=>new Zt({left:r,right:e,typeName:L.ZodIntersection,...F(t)});var Ze=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.array)return A(n,{code:T.invalid_type,expected:R.array,received:n.parsedType}),M;if(n.data.length<this._def.items.length)return A(n,{code:T.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),M;!this._def.rest&&n.data.length>this._def.items.length&&(A(n,{code:T.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new Ae(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>ue.mergeArray(t,o)):ue.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};Ze.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ze({items:r,typeName:L.ZodTuple,rest:null,...F(e)})};var is=class r extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.object)return A(n,{code:T.invalid_type,expected:R.object,received:n.parsedType}),M;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new Ae(n,a,n.path,a)),value:o._parse(new Ae(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?ue.mergeObjectAsync(t,s):ue.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof H?new r({keyType:e,valueType:t,typeName:L.ZodRecord,...F(n)}):new r({keyType:_t.create(),valueType:e,typeName:L.ZodRecord,...F(t)})}},Dr=class extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.map)return A(n,{code:T.invalid_type,expected:R.map,received:n.parsedType}),M;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new Ae(n,a,n.path,[c,"key"])),value:i._parse(new Ae(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,d=await l.value;if(c.status==="aborted"||d.status==="aborted")return M;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let l of o){let c=l.key,d=l.value;if(c.status==="aborted"||d.status==="aborted")return M;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}}}};Dr.create=(r,e,t)=>new Dr({valueType:e,keyType:r,typeName:L.ZodMap,...F(t)});var zr=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.set)return A(n,{code:T.invalid_type,expected:R.set,received:n.parsedType}),M;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&(A(n,{code:T.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&(A(n,{code:T.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let d of l){if(d.status==="aborted")return M;d.status==="dirty"&&t.dirty(),c.add(d.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new Ae(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:j.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:j.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};zr.create=(r,e)=>new zr({valueType:r,minSize:null,maxSize:null,typeName:L.ZodSet,...F(e)});var os=class r extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==R.function)return A(t,{code:T.invalid_type,expected:R.function,received:t.parsedType}),M;function n(a,l){return kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,jr(),et].filter(c=>!!c),issueData:{code:T.invalid_arguments,argumentsError:l}})}function s(a,l){return kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,jr(),et].filter(c=>!!c),issueData:{code:T.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof wt){let a=this;return he(async function(...l){let c=new ve([]),d=await a._def.args.parseAsync(l,i).catch(S=>{throw c.addIssue(n(l,S)),c}),p=await Reflect.apply(o,this,d);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return he(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new ve([n(l,c.error)]);let d=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(d,i);if(!p.success)throw new ve([s(d,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:Ze.create(e).rest(rt.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||Ze.create([]).rest(rt.create()),returns:t||rt.create(),typeName:L.ZodFunction,...F(n)})}},Kt=class extends H{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Kt.create=(r,e)=>new Kt({getter:r,typeName:L.ZodLazy,...F(e)});var Vt=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return A(t,{received:t.data,code:T.invalid_literal,expected:this._def.value}),M}return{status:"valid",value:e.data}}get value(){return this._def.value}};Vt.create=(r,e)=>new Vt({value:r,typeName:L.ZodLiteral,...F(e)});function Ea(r,e){return new Gt({values:r,typeName:L.ZodEnum,...F(e)})}var Gt=class r extends H{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return A(t,{expected:W.joinValues(n),received:t.parsedType,code:T.invalid_type}),M}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return A(t,{received:t.data,code:T.invalid_enum_value,options:n}),M}return he(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};Gt.create=Ea;var Ht=class extends H{_parse(e){let t=W.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==R.string&&n.parsedType!==R.number){let s=W.objectValues(t);return A(n,{expected:W.joinValues(s),received:n.parsedType,code:T.invalid_type}),M}if(this._cache||(this._cache=new Set(W.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=W.objectValues(t);return A(n,{received:n.data,code:T.invalid_enum_value,options:s}),M}return he(e.data)}get enum(){return this._def.values}};Ht.create=(r,e)=>new Ht({values:r,typeName:L.ZodNativeEnum,...F(e)});var wt=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==R.promise&&t.common.async===!1)return A(t,{code:T.invalid_type,expected:R.promise,received:t.parsedType}),M;let n=t.parsedType===R.promise?t.data:Promise.resolve(t.data);return he(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};wt.create=(r,e)=>new wt({type:r,typeName:L.ZodPromise,...F(e)});var Re=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===L.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{A(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return M;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?M:l.status==="dirty"?Mt(l.value):t.value==="dirty"?Mt(l.value):l});{if(t.value==="aborted")return M;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?M:a.status==="dirty"?Mt(a.value):t.value==="dirty"?Mt(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?M:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?M:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!vt(o))return M;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>vt(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):M);W.assertNever(s)}};Re.create=(r,e,t)=>new Re({schema:r,typeName:L.ZodEffects,effect:e,...F(t)});Re.createWithPreprocess=(r,e,t)=>new Re({schema:e,effect:{type:"preprocess",transform:r},typeName:L.ZodEffects,...F(t)});var Ie=class extends H{_parse(e){return this._getType(e)===R.undefined?he(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ie.create=(r,e)=>new Ie({innerType:r,typeName:L.ZodOptional,...F(e)});var Ke=class extends H{_parse(e){return this._getType(e)===R.null?he(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ke.create=(r,e)=>new Ke({innerType:r,typeName:L.ZodNullable,...F(e)});var Wt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===R.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Wt.create=(r,e)=>new Wt({innerType:r,typeName:L.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...F(e)});var Jt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Or(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new ve(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new ve(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Jt.create=(r,e)=>new Jt({innerType:r,typeName:L.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...F(e)});var Ur=class extends H{_parse(e){if(this._getType(e)!==R.nan){let n=this._getOrReturnCtx(e);return A(n,{code:T.invalid_type,expected:R.nan,received:n.parsedType}),M}return{status:"valid",value:e.data}}};Ur.create=r=>new Ur({typeName:L.ZodNaN,...F(r)});var lh=Symbol("zod_brand"),Sn=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Tn=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?M:i.status==="dirty"?(t.dirty(),Mt(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?M:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:L.ZodPipeline})}},Yt=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=s=>(vt(s)&&(s.value=Object.freeze(s.value)),s);return Or(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};Yt.create=(r,e)=>new Yt({innerType:r,typeName:L.ZodReadonly,...F(e)});function Sa(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Ia(r,e={},t){return r?bt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Sa(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=Sa(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):bt.create()}var ch={object:_e.lazycreate},L;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(L||(L={}));var dh=(r,e={message:`Input not instance of ${r.name}`})=>Ia(t=>t instanceof r,e),Aa=_t.create,Ra=Lt.create,hh=Ur.create,fh=Dt.create,$a=zt.create,ph=Ut.create,mh=Mr.create,gh=qt.create,yh=Bt.create,vh=bt.create,_h=rt.create,bh=De.create,wh=Lr.create,kh=nt.create,Sh=_e.create,Th=_e.strictCreate,xh=Ft.create,Ch=ss.create,Eh=Zt.create,Ih=Ze.create,Ah=is.create,Rh=Dr.create,$h=zr.create,Ph=os.create,jh=Kt.create,Oh=Vt.create,Nh=Gt.create,Mh=Ht.create,Lh=wt.create,Dh=Re.create,zh=Ie.create,Uh=Ke.create,qh=Re.createWithPreprocess,Bh=Tn.create,Fh=()=>Aa().optional(),Zh=()=>Ra().optional(),Kh=()=>$a().optional(),Vh={string:(r=>_t.create({...r,coerce:!0})),number:(r=>Lt.create({...r,coerce:!0})),boolean:(r=>zt.create({...r,coerce:!0})),bigint:(r=>Dt.create({...r,coerce:!0})),date:(r=>Ut.create({...r,coerce:!0}))};var Gh=M;var Pa=k.object({baseUrl:k.string().url(),email:k.string().email(),apiToken:k.string().min(1)}),Ei=k.object({controlPlaneUrl:k.string().url(),runnerId:k.string().optional(),runnerToken:k.string().optional(),runnerName:k.string().default(as.default.hostname()),jira:Pa.optional(),repos:k.record(k.object({path:k.string(),jira:Pa.optional(),github:k.object({token:k.string().min(1),login:k.string().optional()}).optional()})).default({}),github:k.object({token:k.string().min(1),login:k.string().optional()}).optional(),githubUsers:k.record(k.object({token:k.string().min(1),login:k.string().optional()})).default({}),deploy:k.object({enabled:k.boolean().default(!1)}).default({enabled:!1}),environments:k.record(k.object({secrets:k.record(k.string()).default({})})).default({}),claudeProfiles:k.record(k.object({configDir:k.string()})).default({}),claudeBin:k.string().default("claude"),agents:k.record(k.object({bin:k.string()})).default({}),jiraUsers:k.record(k.object({email:k.string().email(),apiToken:k.string().min(1)})).default({}),auditSchedules:k.array(k.object({repoName:k.string(),role:k.enum(["security","testing"]),intervalHours:k.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:k.number().int().min(10).max(600).default(30)});function ee(){let r=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(r)return r;let e=us.default.join(as.default.homedir(),".config","allwright"),t=us.default.join(as.default.homedir(),".config","ticketpilot");return!st.default.existsSync(e)&&st.default.existsSync(t)?t:e}function kt(){return us.default.join(ee(),"runner.json")}function le(){let r=kt();if(!st.default.existsSync(r))return null;let e=JSON.parse(st.default.readFileSync(r,"utf8"));return Ei.parse(e)}function ie(r){let e=ee();st.default.mkdirSync(e,{recursive:!0,mode:448});let t=kt(),n=t+".tmp";st.default.writeFileSync(n,JSON.stringify(r,null,2)+`
237
- `,{mode:384}),st.default.renameSync(n,t),st.default.chmodSync(t,384)}function ls(r,e){return`${r}:${e}`}function Xt(r,e,t){return r.environments[ls(e,t)]?.secrets??{}}function Q(){let r=le();if(!r)throw new Error(`No runner config found at ${kt()}. Run \`allwright init\` first.`);return r}var cs=require("node:child_process"),ke=$(require("node:fs"),1),ds=$(require("node:path"),1);var Hh=new Set(["runner.log","runner.pid"]);function Wh(r){return ke.default.readdirSync(r).filter(e=>!Hh.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function ja(r){let e=ee();if(!ke.default.existsSync(e))throw new Error(`nothing to export \u2014 ${e} does not exist`);let t=Wh(e);if(!t.length)throw new Error(`nothing to export \u2014 ${e} is empty`);let n=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-"),s=ds.default.resolve(r||`ticketpilot-backup-${n}.tgz`);return ke.default.writeFileSync(s,"",{mode:384}),(0,cs.execFileSync)("tar",["-czf",s,"-C",e,...t]),ke.default.chmodSync(s,384),{file:s,entries:t}}function Oa(r){let e=ds.default.resolve(r);if(!ke.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let t=(0,cs.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
238
- `).filter(Boolean);for(let i of t)if(i.startsWith("/")||i.split("/").includes(".."))throw new Error(`refusing to import \u2014 unsafe path in archive: ${i}`);let n=ee(),s;ke.default.existsSync(n)&&ke.default.readdirSync(n).length&&(s=`${n}.bak-${Date.now()}`,ke.default.renameSync(n,s)),ke.default.mkdirSync(n,{recursive:!0,mode:448}),(0,cs.execFileSync)("tar",["-xzf",e,"-C",n]);for(let i of ke.default.readdirSync(n)){let o=ds.default.join(n,i);ke.default.statSync(o).isFile()&&ke.default.chmodSync(o,384)}return{restored:t.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var qr=$(require("node:fs"),1),St=$(require("node:path"),1),hs=".ticketpilot-attachments",Jh=15*1024*1024,Yh=50*1024*1024,Na=20;function Ma(r,e){let t=St.default.basename(r).replace(/[^\w.\- ()]/g,"_").replace(/^\.+/,"").slice(-100)||"file",n=t,s=1;for(;e.has(n);)n=`${s++}-${t}`;return e.add(n),n}async function Br(r,e,t,n){if(!e.length)return"";let s=St.default.join(t,hs);qr.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],a=0;for(let l of e){if(o.length>=Na){n("warn",`attachment cap reached (${Na} files) \u2014 skipping the rest`);break}if(l.size>Jh){n("warn",`skipping attachment "${l.filename}" \u2014 ${ef(l.size)} MB exceeds the 15 MB limit`);continue}if(a+l.size>Yh){n("warn",`attachment size budget reached \u2014 skipping "${l.filename}" and the rest`);break}try{let c=await r.downloadAttachment(l.contentUrl),d=Ma(l.filename,i);qr.default.writeFileSync(St.default.join(s,d),c),a+=c.length,o.push(`- ${hs}/${d} (${l.mimeType||"unknown type"}, ${Ii(c.length)} KB)`),n("info",`Downloaded attachment "${l.filename}" (${Ii(c.length)} KB)`)}catch(c){n("warn",`could not download attachment "${l.filename}": ${c instanceof Error?c.message:c}`)}}return o.length?`
236
+ `+t)}function Pr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Pr),r.emit("wsClientError",o,t,e)}else Qn(t,n,s,i)}});var wd={};ns(wd,{buildSetupReport:()=>yy,claudeLoggedIn:()=>bd});function bd(r=vd.default.homedir()){if(Nt.default.existsSync(jr.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Nt.default.readFileSync(jr.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function yy(r,e){let t=!1,n="";if(ts&&Date.now()-ts.at<6e4)t=ts.installed,n=ts.version;else{try{let{stdout:o}=await gy(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}ts={at:Date.now(),installed:t,version:n}}let s=e.map(o=>{let a=r.repos[o];if(!a)return{repoName:o,mapped:!1,pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1};let l=Nt.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:l,isGit:l&&Nt.default.existsSync(jr.default.join(a.path,".git")),claudeMd:l&&Nt.default.existsSync(jr.default.join(a.path,"CLAUDE.md")),deployMd:l&&Nt.default.existsSync(jr.default.join(a.path,"DEPLOY.md")),testMd:l&&Nt.default.existsSync(jr.default.join(a.path,"TEST.md"))}}),i=Object.values(r.repos).find(o=>o.github?.token);return{jiraConfigured:!!r.jira,jiraEmail:r.jira?.email??"",claude:{installed:t,version:n,loggedIn:bd()},githubTokenSet:!!(r.github?.token||i),githubLogin:r.github?.login??i?.github?.login??"",deploysEnabled:r.deploy.enabled,jiraUserCount:Object.keys(r.jiraUsers).length,repos:s}}var yd,Nt,vd,jr,_d,gy,ts,kd=fi(()=>{"use strict";yd=require("node:child_process"),Nt=P(require("node:fs"),1),vd=P(require("node:os"),1),jr=P(require("node:path"),1),_d=require("node:util"),gy=(0,_d.promisify)(yd.execFile);ts=null});var yt=P(require("node:fs"),1),Sd=P(require("node:os"),1),kn=P(require("node:path"),1),Mt=require("node:child_process"),di=require("node:crypto"),Or=P(require("node:readline/promises"),1);var Ca=P(xa(),1),{program:Ey,createCommand:Iy,createArgument:Ay,createOption:Ry,CommanderError:$y,InvalidArgumentError:Py,InvalidOptionArgumentError:jy,Command:Ea,Argument:Oy,Option:Ny,Help:My}=Ca.default;var ot=P(require("node:fs"),1),ds=P(require("node:os"),1),hs=P(require("node:path"),1);var w={};ns(w,{BRAND:()=>yh,DIRTY:()=>Lt,EMPTY_PATH:()=>Wd,INVALID:()=>D,NEVER:()=>tf,OK:()=>fe,ParseStatus:()=>le,Schema:()=>H,ZodAny:()=>wt,ZodArray:()=>it,ZodBigInt:()=>zt,ZodBoolean:()=>Ut,ZodBranded:()=>Cn,ZodCatch:()=>Yt,ZodDate:()=>qt,ZodDefault:()=>Jt,ZodDiscriminatedUnion:()=>us,ZodEffects:()=>$e,ZodEnum:()=>Ht,ZodError:()=>_e,ZodFirstPartyTypeKind:()=>z,ZodFunction:()=>cs,ZodIntersection:()=>Kt,ZodIssueCode:()=>x,ZodLazy:()=>Vt,ZodLiteral:()=>Gt,ZodMap:()=>Ur,ZodNaN:()=>Br,ZodNativeEnum:()=>Wt,ZodNever:()=>ze,ZodNull:()=>Ft,ZodNullable:()=>Ge,ZodNumber:()=>Dt,ZodObject:()=>be,ZodOptional:()=>Ae,ZodParsedType:()=>$,ZodPipeline:()=>En,ZodPromise:()=>kt,ZodReadonly:()=>Xt,ZodRecord:()=>ls,ZodSchema:()=>H,ZodSet:()=>qr,ZodString:()=>bt,ZodSymbol:()=>Dr,ZodTransformer:()=>$e,ZodTuple:()=>Ve,ZodType:()=>H,ZodUndefined:()=>Bt,ZodUnion:()=>Zt,ZodUnknown:()=>st,ZodVoid:()=>zr,addIssueToContext:()=>R,any:()=>Ch,array:()=>Rh,bigint:()=>wh,boolean:()=>Da,coerce:()=>ef,custom:()=>Na,date:()=>kh,datetimeRegex:()=>ja,defaultErrorMap:()=>rt,discriminatedUnion:()=>Oh,effect:()=>Vh,enum:()=>Fh,function:()=>Uh,getErrorMap:()=>Nr,getParsedType:()=>Ke,instanceof:()=>_h,intersection:()=>Nh,isAborted:()=>os,isAsync:()=>Mr,isDirty:()=>as,isValid:()=>_t,late:()=>vh,lazy:()=>qh,literal:()=>Bh,makeIssue:()=>xn,map:()=>Dh,nan:()=>bh,nativeEnum:()=>Zh,never:()=>Ih,null:()=>xh,nullable:()=>Hh,number:()=>La,object:()=>$h,objectUtil:()=>Ai,oboolean:()=>Qh,onumber:()=>Xh,optional:()=>Gh,ostring:()=>Yh,pipeline:()=>Jh,preprocess:()=>Wh,promise:()=>Kh,quotelessJson:()=>Vd,record:()=>Lh,set:()=>zh,setErrorMap:()=>Hd,strictObject:()=>Ph,string:()=>Ma,symbol:()=>Sh,transformer:()=>Vh,tuple:()=>Mh,undefined:()=>Th,union:()=>jh,unknown:()=>Eh,util:()=>W,void:()=>Ah});var W;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(W||(W={}));var Ai;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Ai||(Ai={}));var $=W.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Ke=r=>{switch(typeof r){case"undefined":return $.undefined;case"string":return $.string;case"number":return Number.isNaN(r)?$.nan:$.number;case"boolean":return $.boolean;case"function":return $.function;case"bigint":return $.bigint;case"symbol":return $.symbol;case"object":return Array.isArray(r)?$.array:r===null?$.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?$.promise:typeof Map<"u"&&r instanceof Map?$.map:typeof Set<"u"&&r instanceof Set?$.set:typeof Date<"u"&&r instanceof Date?$.date:$.object;default:return $.unknown}};var x=W.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Vd=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),_e=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,W.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};_e.create=r=>new _e(r);var Gd=(r,e)=>{let t;switch(r.code){case x.invalid_type:r.received===$.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case x.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,W.jsonStringifyReplacer)}`;break;case x.unrecognized_keys:t=`Unrecognized key(s) in object: ${W.joinValues(r.keys,", ")}`;break;case x.invalid_union:t="Invalid input";break;case x.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${W.joinValues(r.options)}`;break;case x.invalid_enum_value:t=`Invalid enum value. Expected ${W.joinValues(r.options)}, received '${r.received}'`;break;case x.invalid_arguments:t="Invalid function arguments";break;case x.invalid_return_type:t="Invalid function return type";break;case x.invalid_date:t="Invalid date";break;case x.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:W.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case x.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case x.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case x.custom:t="Invalid input";break;case x.invalid_intersection_types:t="Intersection results could not be merged";break;case x.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case x.not_finite:t="Number must be finite";break;default:t=e.defaultError,W.assertNever(r)}return{message:t}},rt=Gd;var Ia=rt;function Hd(r){Ia=r}function Nr(){return Ia}var xn=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},Wd=[];function R(r,e){let t=Nr(),n=xn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===rt?void 0:rt].filter(s=>!!s)});r.common.issues.push(n)}var le=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return D;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return D;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}},D=Object.freeze({status:"aborted"}),Lt=r=>({status:"dirty",value:r}),fe=r=>({status:"valid",value:r}),os=r=>r.status==="aborted",as=r=>r.status==="dirty",_t=r=>r.status==="valid",Mr=r=>typeof Promise<"u"&&r instanceof Promise;var j;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(j||(j={}));var Re=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Aa=(r,e)=>{if(_t(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new _e(r.common.issues);return this._error=t,this._error}}};function Z(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var H=class{get description(){return this._def.description}_getType(e){return Ke(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Ke(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new le,ctx:{common:e.parent.common,data:e.data,parsedType:Ke(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Mr(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Ke(e)},s=this._parseSync({data:e,path:n.path,parent:n});return Aa(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Ke(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return _t(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>_t(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Ke(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(Mr(s)?s:Promise.resolve(s));return Aa(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:x.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new $e({schema:this,typeName:z.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ae.create(this,this._def)}nullable(){return Ge.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return it.create(this)}promise(){return kt.create(this,this._def)}or(e){return Zt.create([this,e],this._def)}and(e){return Kt.create(this,e,this._def)}transform(e){return new $e({...Z(this._def),schema:this,typeName:z.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new Jt({...Z(this._def),innerType:this,defaultValue:t,typeName:z.ZodDefault})}brand(){return new Cn({typeName:z.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new Yt({...Z(this._def),innerType:this,catchValue:t,typeName:z.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return En.create(this,e)}readonly(){return Xt.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Jd=/^c[^\s-]{8,}$/i,Yd=/^[0-9a-z]+$/,Xd=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Qd=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,eh=/^[a-z0-9_-]{21}$/i,th=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,rh=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,nh=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,sh="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Ri,ih=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,oh=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ah=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,uh=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,lh=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ch=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,$a="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",dh=new RegExp(`^${$a}$`);function Pa(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function hh(r){return new RegExp(`^${Pa(r)}$`)}function ja(r){let e=`${$a}T${Pa(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function fh(r,e){return!!((e==="v4"||!e)&&ih.test(r)||(e==="v6"||!e)&&ah.test(r))}function ph(r,e){if(!th.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function mh(r,e){return!!((e==="v4"||!e)&&oh.test(r)||(e==="v6"||!e)&&uh.test(r))}var bt=class r extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==$.string){let i=this._getOrReturnCtx(e);return R(i,{code:x.invalid_type,expected:$.string,received:i.parsedType}),D}let n=new le,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),R(s,{code:x.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),R(s,{code:x.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?R(s,{code:x.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&R(s,{code:x.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")nh.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"email",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")Ri||(Ri=new RegExp(sh,"u")),Ri.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"emoji",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Qd.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"uuid",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")eh.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"nanoid",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Jd.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"cuid",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Yd.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"cuid2",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Xd.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"ulid",code:x.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),R(s,{validation:"url",code:x.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"regex",code:x.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?ja(i).test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?dh.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?hh(i).test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{code:x.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?rh.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"duration",code:x.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?fh(e.data,i.version)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"ip",code:x.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?ph(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"jwt",code:x.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?mh(e.data,i.version)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"cidr",code:x.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?lh.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"base64",code:x.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?ch.test(e.data)||(s=this._getOrReturnCtx(e,s),R(s,{validation:"base64url",code:x.invalid_string,message:i.message}),n.dirty()):W.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:x.invalid_string,...j.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...j.errToObj(e)})}url(e){return this._addCheck({kind:"url",...j.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...j.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...j.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...j.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...j.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...j.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...j.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...j.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...j.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...j.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...j.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...j.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...j.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...j.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...j.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...j.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...j.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...j.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...j.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...j.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...j.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...j.errToObj(t)})}nonempty(e){return this.min(1,j.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};bt.create=r=>new bt({checks:[],typeName:z.ZodString,coerce:r?.coerce??!1,...Z(r)});function gh(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Dt=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==$.number){let i=this._getOrReturnCtx(e);return R(i,{code:x.invalid_type,expected:$.number,received:i.parsedType}),D}let n,s=new le;for(let i of this._def.checks)i.kind==="int"?W.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),R(n,{code:x.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?gh(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),R(n,{code:x.not_finite,message:i.message}),s.dirty()):W.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,j.toString(t))}gt(e,t){return this.setLimit("min",e,!1,j.toString(t))}lte(e,t){return this.setLimit("max",e,!0,j.toString(t))}lt(e,t){return this.setLimit("max",e,!1,j.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:j.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:j.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:j.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:j.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:j.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:j.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:j.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:j.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:j.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:j.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&W.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Dt.create=r=>new Dt({checks:[],typeName:z.ZodNumber,coerce:r?.coerce||!1,...Z(r)});var zt=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==$.bigint)return this._getInvalidInput(e);let n,s=new le;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),R(n,{code:x.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):W.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return R(t,{code:x.invalid_type,expected:$.bigint,received:t.parsedType}),D}gte(e,t){return this.setLimit("min",e,!0,j.toString(t))}gt(e,t){return this.setLimit("min",e,!1,j.toString(t))}lte(e,t){return this.setLimit("max",e,!0,j.toString(t))}lt(e,t){return this.setLimit("max",e,!1,j.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:j.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:j.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:j.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:j.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:j.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:j.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};zt.create=r=>new zt({checks:[],typeName:z.ZodBigInt,coerce:r?.coerce??!1,...Z(r)});var Ut=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==$.boolean){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.boolean,received:n.parsedType}),D}return fe(e.data)}};Ut.create=r=>new Ut({typeName:z.ZodBoolean,coerce:r?.coerce||!1,...Z(r)});var qt=class r extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==$.date){let i=this._getOrReturnCtx(e);return R(i,{code:x.invalid_type,expected:$.date,received:i.parsedType}),D}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return R(i,{code:x.invalid_date}),D}let n=new le,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),R(s,{code:x.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),R(s,{code:x.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):W.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:j.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:j.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};qt.create=r=>new qt({checks:[],coerce:r?.coerce||!1,typeName:z.ZodDate,...Z(r)});var Dr=class extends H{_parse(e){if(this._getType(e)!==$.symbol){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.symbol,received:n.parsedType}),D}return fe(e.data)}};Dr.create=r=>new Dr({typeName:z.ZodSymbol,...Z(r)});var Bt=class extends H{_parse(e){if(this._getType(e)!==$.undefined){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.undefined,received:n.parsedType}),D}return fe(e.data)}};Bt.create=r=>new Bt({typeName:z.ZodUndefined,...Z(r)});var Ft=class extends H{_parse(e){if(this._getType(e)!==$.null){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.null,received:n.parsedType}),D}return fe(e.data)}};Ft.create=r=>new Ft({typeName:z.ZodNull,...Z(r)});var wt=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return fe(e.data)}};wt.create=r=>new wt({typeName:z.ZodAny,...Z(r)});var st=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return fe(e.data)}};st.create=r=>new st({typeName:z.ZodUnknown,...Z(r)});var ze=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return R(t,{code:x.invalid_type,expected:$.never,received:t.parsedType}),D}};ze.create=r=>new ze({typeName:z.ZodNever,...Z(r)});var zr=class extends H{_parse(e){if(this._getType(e)!==$.undefined){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.void,received:n.parsedType}),D}return fe(e.data)}};zr.create=r=>new zr({typeName:z.ZodVoid,...Z(r)});var it=class r extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==$.array)return R(t,{code:x.invalid_type,expected:$.array,received:t.parsedType}),D;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&(R(t,{code:o?x.too_big:x.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&(R(t,{code:x.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&(R(t,{code:x.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Re(t,o,t.path,a)))).then(o=>le.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Re(t,o,t.path,a)));return le.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:j.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:j.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:j.toString(t)}})}nonempty(e){return this.min(1,e)}};it.create=(r,e)=>new it({type:r,minLength:null,maxLength:null,exactLength:null,typeName:z.ZodArray,...Z(e)});function Lr(r){if(r instanceof be){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ae.create(Lr(n))}return new be({...r._def,shape:()=>e})}else return r instanceof it?new it({...r._def,type:Lr(r.element)}):r instanceof Ae?Ae.create(Lr(r.unwrap())):r instanceof Ge?Ge.create(Lr(r.unwrap())):r instanceof Ve?Ve.create(r.items.map(e=>Lr(e))):r}var be=class r extends H{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=W.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==$.object){let c=this._getOrReturnCtx(e);return R(c,{code:x.invalid_type,expected:$.object,received:c.parsedType}),D}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof ze&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let l=[];for(let c of o){let d=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:d._parse(new Re(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof ze){let c=this._def.unknownKeys;if(c==="passthrough")for(let d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(c==="strict")a.length>0&&(R(s,{code:x.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let d of a){let p=s.data[d];l.push({key:{status:"valid",value:d},value:c._parse(new Re(s,p,s.path,d)),alwaysSet:d in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let d of l){let p=await d.key,_=await d.value;c.push({key:p,value:_,alwaysSet:d.alwaysSet})}return c}).then(c=>le.mergeObjectSync(n,c)):le.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return j.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:j.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:z.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of W.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of W.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return Lr(this)}partial(e){let t={};for(let n of W.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of W.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Ae;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Oa(W.objectKeys(this.shape))}};be.create=(r,e)=>new be({shape:()=>r,unknownKeys:"strip",catchall:ze.create(),typeName:z.ZodObject,...Z(e)});be.strictCreate=(r,e)=>new be({shape:()=>r,unknownKeys:"strict",catchall:ze.create(),typeName:z.ZodObject,...Z(e)});be.lazycreate=(r,e)=>new be({shape:r,unknownKeys:"strip",catchall:ze.create(),typeName:z.ZodObject,...Z(e)});var Zt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new _e(a.ctx.common.issues));return R(t,{code:x.invalid_union,unionErrors:o}),D}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},d=l._parseSync({data:t.data,path:t.path,parent:c});if(d.status==="valid")return d;d.status==="dirty"&&!i&&(i={result:d,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(l=>new _e(l));return R(t,{code:x.invalid_union,unionErrors:a}),D}}get options(){return this._def.options}};Zt.create=(r,e)=>new Zt({options:r,typeName:z.ZodUnion,...Z(e)});var nt=r=>r instanceof Vt?nt(r.schema):r instanceof $e?nt(r.innerType()):r instanceof Gt?[r.value]:r instanceof Ht?r.options:r instanceof Wt?W.objectValues(r.enum):r instanceof Jt?nt(r._def.innerType):r instanceof Bt?[void 0]:r instanceof Ft?[null]:r instanceof Ae?[void 0,...nt(r.unwrap())]:r instanceof Ge?[null,...nt(r.unwrap())]:r instanceof Cn||r instanceof Xt?nt(r.unwrap()):r instanceof Yt?nt(r._def.innerType):[],us=class r extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==$.object)return R(t,{code:x.invalid_type,expected:$.object,received:t.parsedType}),D;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(R(t,{code:x.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),D)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=nt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:z.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...Z(n)})}};function $i(r,e){let t=Ke(r),n=Ke(e);if(r===e)return{valid:!0,data:r};if(t===$.object&&n===$.object){let s=W.objectKeys(e),i=W.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let l=$i(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===$.array&&n===$.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],l=$i(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===$.date&&n===$.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var Kt=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(os(i)||os(o))return D;let a=$i(i.value,o.value);return a.valid?((as(i)||as(o))&&t.dirty(),{status:t.value,value:a.data}):(R(n,{code:x.invalid_intersection_types}),D)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Kt.create=(r,e,t)=>new Kt({left:r,right:e,typeName:z.ZodIntersection,...Z(t)});var Ve=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==$.array)return R(n,{code:x.invalid_type,expected:$.array,received:n.parsedType}),D;if(n.data.length<this._def.items.length)return R(n,{code:x.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),D;!this._def.rest&&n.data.length>this._def.items.length&&(R(n,{code:x.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new Re(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>le.mergeArray(t,o)):le.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};Ve.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ve({items:r,typeName:z.ZodTuple,rest:null,...Z(e)})};var ls=class r extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==$.object)return R(n,{code:x.invalid_type,expected:$.object,received:n.parsedType}),D;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new Re(n,a,n.path,a)),value:o._parse(new Re(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?le.mergeObjectAsync(t,s):le.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof H?new r({keyType:e,valueType:t,typeName:z.ZodRecord,...Z(n)}):new r({keyType:bt.create(),valueType:e,typeName:z.ZodRecord,...Z(t)})}},Ur=class extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==$.map)return R(n,{code:x.invalid_type,expected:$.map,received:n.parsedType}),D;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new Re(n,a,n.path,[c,"key"])),value:i._parse(new Re(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,d=await l.value;if(c.status==="aborted"||d.status==="aborted")return D;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let l of o){let c=l.key,d=l.value;if(c.status==="aborted"||d.status==="aborted")return D;(c.status==="dirty"||d.status==="dirty")&&t.dirty(),a.set(c.value,d.value)}return{status:t.value,value:a}}}};Ur.create=(r,e,t)=>new Ur({valueType:e,keyType:r,typeName:z.ZodMap,...Z(t)});var qr=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==$.set)return R(n,{code:x.invalid_type,expected:$.set,received:n.parsedType}),D;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&(R(n,{code:x.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&(R(n,{code:x.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let d of l){if(d.status==="aborted")return D;d.status==="dirty"&&t.dirty(),c.add(d.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new Re(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:j.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:j.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};qr.create=(r,e)=>new qr({valueType:r,minSize:null,maxSize:null,typeName:z.ZodSet,...Z(e)});var cs=class r extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==$.function)return R(t,{code:x.invalid_type,expected:$.function,received:t.parsedType}),D;function n(a,l){return xn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Nr(),rt].filter(c=>!!c),issueData:{code:x.invalid_arguments,argumentsError:l}})}function s(a,l){return xn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Nr(),rt].filter(c=>!!c),issueData:{code:x.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof kt){let a=this;return fe(async function(...l){let c=new _e([]),d=await a._def.args.parseAsync(l,i).catch(S=>{throw c.addIssue(n(l,S)),c}),p=await Reflect.apply(o,this,d);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return fe(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new _e([n(l,c.error)]);let d=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(d,i);if(!p.success)throw new _e([s(d,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:Ve.create(e).rest(st.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||Ve.create([]).rest(st.create()),returns:t||st.create(),typeName:z.ZodFunction,...Z(n)})}},Vt=class extends H{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Vt.create=(r,e)=>new Vt({getter:r,typeName:z.ZodLazy,...Z(e)});var Gt=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return R(t,{received:t.data,code:x.invalid_literal,expected:this._def.value}),D}return{status:"valid",value:e.data}}get value(){return this._def.value}};Gt.create=(r,e)=>new Gt({value:r,typeName:z.ZodLiteral,...Z(e)});function Oa(r,e){return new Ht({values:r,typeName:z.ZodEnum,...Z(e)})}var Ht=class r extends H{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return R(t,{expected:W.joinValues(n),received:t.parsedType,code:x.invalid_type}),D}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return R(t,{received:t.data,code:x.invalid_enum_value,options:n}),D}return fe(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};Ht.create=Oa;var Wt=class extends H{_parse(e){let t=W.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==$.string&&n.parsedType!==$.number){let s=W.objectValues(t);return R(n,{expected:W.joinValues(s),received:n.parsedType,code:x.invalid_type}),D}if(this._cache||(this._cache=new Set(W.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=W.objectValues(t);return R(n,{received:n.data,code:x.invalid_enum_value,options:s}),D}return fe(e.data)}get enum(){return this._def.values}};Wt.create=(r,e)=>new Wt({values:r,typeName:z.ZodNativeEnum,...Z(e)});var kt=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==$.promise&&t.common.async===!1)return R(t,{code:x.invalid_type,expected:$.promise,received:t.parsedType}),D;let n=t.parsedType===$.promise?t.data:Promise.resolve(t.data);return fe(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};kt.create=(r,e)=>new kt({type:r,typeName:z.ZodPromise,...Z(e)});var $e=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===z.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{R(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return D;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?D:l.status==="dirty"?Lt(l.value):t.value==="dirty"?Lt(l.value):l});{if(t.value==="aborted")return D;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?D:a.status==="dirty"?Lt(a.value):t.value==="dirty"?Lt(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?D:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?D:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!_t(o))return D;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>_t(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):D);W.assertNever(s)}};$e.create=(r,e,t)=>new $e({schema:r,typeName:z.ZodEffects,effect:e,...Z(t)});$e.createWithPreprocess=(r,e,t)=>new $e({schema:e,effect:{type:"preprocess",transform:r},typeName:z.ZodEffects,...Z(t)});var Ae=class extends H{_parse(e){return this._getType(e)===$.undefined?fe(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ae.create=(r,e)=>new Ae({innerType:r,typeName:z.ZodOptional,...Z(e)});var Ge=class extends H{_parse(e){return this._getType(e)===$.null?fe(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ge.create=(r,e)=>new Ge({innerType:r,typeName:z.ZodNullable,...Z(e)});var Jt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===$.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Jt.create=(r,e)=>new Jt({innerType:r,typeName:z.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Z(e)});var Yt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Mr(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new _e(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new _e(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Yt.create=(r,e)=>new Yt({innerType:r,typeName:z.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Z(e)});var Br=class extends H{_parse(e){if(this._getType(e)!==$.nan){let n=this._getOrReturnCtx(e);return R(n,{code:x.invalid_type,expected:$.nan,received:n.parsedType}),D}return{status:"valid",value:e.data}}};Br.create=r=>new Br({typeName:z.ZodNaN,...Z(r)});var yh=Symbol("zod_brand"),Cn=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},En=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?D:i.status==="dirty"?(t.dirty(),Lt(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?D:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:z.ZodPipeline})}},Xt=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=s=>(_t(s)&&(s.value=Object.freeze(s.value)),s);return Mr(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};Xt.create=(r,e)=>new Xt({innerType:r,typeName:z.ZodReadonly,...Z(e)});function Ra(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Na(r,e={},t){return r?wt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Ra(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=Ra(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):wt.create()}var vh={object:be.lazycreate},z;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(z||(z={}));var _h=(r,e={message:`Input not instance of ${r.name}`})=>Na(t=>t instanceof r,e),Ma=bt.create,La=Dt.create,bh=Br.create,wh=zt.create,Da=Ut.create,kh=qt.create,Sh=Dr.create,Th=Bt.create,xh=Ft.create,Ch=wt.create,Eh=st.create,Ih=ze.create,Ah=zr.create,Rh=it.create,$h=be.create,Ph=be.strictCreate,jh=Zt.create,Oh=us.create,Nh=Kt.create,Mh=Ve.create,Lh=ls.create,Dh=Ur.create,zh=qr.create,Uh=cs.create,qh=Vt.create,Bh=Gt.create,Fh=Ht.create,Zh=Wt.create,Kh=kt.create,Vh=$e.create,Gh=Ae.create,Hh=Ge.create,Wh=$e.createWithPreprocess,Jh=En.create,Yh=()=>Ma().optional(),Xh=()=>La().optional(),Qh=()=>Da().optional(),ef={string:(r=>bt.create({...r,coerce:!0})),number:(r=>Dt.create({...r,coerce:!0})),boolean:(r=>Ut.create({...r,coerce:!0})),bigint:(r=>zt.create({...r,coerce:!0})),date:(r=>qt.create({...r,coerce:!0}))};var tf=D;var za=w.object({baseUrl:w.string().url(),email:w.string().email(),apiToken:w.string().min(1)}),Pi=w.object({controlPlaneUrl:w.string().url(),runnerId:w.string().optional(),runnerToken:w.string().optional(),runnerName:w.string().default(ds.default.hostname()),jira:za.optional(),repos:w.record(w.object({path:w.string(),jira:za.optional(),github:w.object({token:w.string().min(1),login:w.string().optional()}).optional()})).default({}),github:w.object({token:w.string().min(1),login:w.string().optional()}).optional(),githubUsers:w.record(w.object({token:w.string().min(1),login:w.string().optional()})).default({}),deploy:w.object({enabled:w.boolean().default(!1)}).default({enabled:!1}),environments:w.record(w.object({secrets:w.record(w.string()).default({})})).default({}),claudeProfiles:w.record(w.object({configDir:w.string()})).default({}),claudeBin:w.string().default("claude"),agents:w.record(w.object({bin:w.string()})).default({}),jiraUsers:w.record(w.object({email:w.string().email(),apiToken:w.string().min(1)})).default({}),auditSchedules:w.array(w.object({repoName:w.string(),role:w.enum(["security","testing"]),intervalHours:w.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:w.number().int().min(10).max(600).default(30)});function Q(){let r=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(r)return r;let e=hs.default.join(ds.default.homedir(),".config","allwright"),t=hs.default.join(ds.default.homedir(),".config","ticketpilot");return!ot.default.existsSync(e)&&ot.default.existsSync(t)?t:e}function St(){return hs.default.join(Q(),"runner.json")}function ce(){let r=St();if(!ot.default.existsSync(r))return null;let e=JSON.parse(ot.default.readFileSync(r,"utf8"));return Pi.parse(e)}function oe(r){let e=Q();ot.default.mkdirSync(e,{recursive:!0,mode:448});let t=St(),n=t+".tmp";ot.default.writeFileSync(n,JSON.stringify(r,null,2)+`
237
+ `,{mode:384}),ot.default.renameSync(n,t),ot.default.chmodSync(t,384)}function fs(r,e){return`${r}:${e}`}function Qt(r,e,t){return r.environments[fs(e,t)]?.secrets??{}}function ee(){let r=ce();if(!r)throw new Error(`No runner config found at ${St()}. Run \`allwright init\` first.`);return r}var ps=require("node:child_process"),Se=P(require("node:fs"),1),ms=P(require("node:path"),1);var rf=new Set(["runner.log","runner.pid"]);function nf(r){return Se.default.readdirSync(r).filter(e=>!rf.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function Ua(r){let e=Q();if(!Se.default.existsSync(e))throw new Error(`nothing to export \u2014 ${e} does not exist`);let t=nf(e);if(!t.length)throw new Error(`nothing to export \u2014 ${e} is empty`);let n=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-"),s=ms.default.resolve(r||`ticketpilot-backup-${n}.tgz`);return Se.default.writeFileSync(s,"",{mode:384}),(0,ps.execFileSync)("tar",["-czf",s,"-C",e,...t]),Se.default.chmodSync(s,384),{file:s,entries:t}}function qa(r){let e=ms.default.resolve(r);if(!Se.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let t=(0,ps.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
238
+ `).filter(Boolean);for(let i of t)if(i.startsWith("/")||i.split("/").includes(".."))throw new Error(`refusing to import \u2014 unsafe path in archive: ${i}`);let n=Q(),s;Se.default.existsSync(n)&&Se.default.readdirSync(n).length&&(s=`${n}.bak-${Date.now()}`,Se.default.renameSync(n,s)),Se.default.mkdirSync(n,{recursive:!0,mode:448}),(0,ps.execFileSync)("tar",["-xzf",e,"-C",n]);for(let i of Se.default.readdirSync(n)){let o=ms.default.join(n,i);Se.default.statSync(o).isFile()&&Se.default.chmodSync(o,384)}return{restored:t.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var Fr=P(require("node:fs"),1),Tt=P(require("node:path"),1),gs=".ticketpilot-attachments",sf=15*1024*1024,of=50*1024*1024,Ba=20;function Fa(r,e){let t=Tt.default.basename(r).replace(/[^\w.\- ()]/g,"_").replace(/^\.+/,"").slice(-100)||"file",n=t,s=1;for(;e.has(n);)n=`${s++}-${t}`;return e.add(n),n}async function Zr(r,e,t,n){if(!e.length)return"";let s=Tt.default.join(t,gs);Fr.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],a=0;for(let l of e){if(o.length>=Ba){n("warn",`attachment cap reached (${Ba} files) \u2014 skipping the rest`);break}if(l.size>sf){n("warn",`skipping attachment "${l.filename}" \u2014 ${lf(l.size)} MB exceeds the 15 MB limit`);continue}if(a+l.size>of){n("warn",`attachment size budget reached \u2014 skipping "${l.filename}" and the rest`);break}try{let c=await r.downloadAttachment(l.contentUrl),d=Fa(l.filename,i);Fr.default.writeFileSync(Tt.default.join(s,d),c),a+=c.length,o.push(`- ${gs}/${d} (${l.mimeType||"unknown type"}, ${ji(c.length)} KB)`),n("info",`Downloaded attachment "${l.filename}" (${ji(c.length)} KB)`)}catch(c){n("warn",`could not download attachment "${l.filename}": ${c instanceof Error?c.message:c}`)}}return o.length?`
239
239
 
240
240
  Files attached to the Jira ticket, downloaded locally for this run. They are reference material and NOT part of the repository \u2014 never commit, copy, or edit them:
241
241
  ${o.join(`
242
242
  `)}
243
- Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(Tt(t),"")}function Tt(r){qr.default.rmSync(St.default.join(r,hs),{recursive:!0,force:!0})}var Xh=4*1024*1024,Qh=16*1024*1024;function La(r,e,t){let n=St.default.join(r,hs,`chat-${e.replace(/[^\w-]/g,"")}`);if(!t.length)return{section:"",dir:n};qr.default.mkdirSync(n,{recursive:!0});let s=new Set,i=[],o=0,a=St.default.relative(r,n);for(let c of t){let d=Buffer.from(c.contentBase64,"base64");if(d.length>Xh||o+d.length>Qh){i.push(`- (skipped "${c.name}" \u2014 over the upload size budget)`);continue}let p=Ma(c.name,s);qr.default.writeFileSync(St.default.join(n,p),d),o+=d.length,i.push(`- ${a}/${p} (${Ii(d.length)} KB)`)}return{section:`
243
+ Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(xt(t),"")}function xt(r){Fr.default.rmSync(Tt.default.join(r,gs),{recursive:!0,force:!0})}var af=4*1024*1024,uf=16*1024*1024;function Za(r,e,t){let n=Tt.default.join(r,gs,`chat-${e.replace(/[^\w-]/g,"")}`);if(!t.length)return{section:"",dir:n};Fr.default.mkdirSync(n,{recursive:!0});let s=new Set,i=[],o=0,a=Tt.default.relative(r,n);for(let c of t){let d=Buffer.from(c.contentBase64,"base64");if(d.length>af||o+d.length>uf){i.push(`- (skipped "${c.name}" \u2014 over the upload size budget)`);continue}let p=Fa(c.name,s);Fr.default.writeFileSync(Tt.default.join(n,p),d),o+=d.length,i.push(`- ${a}/${p} (${ji(d.length)} KB)`)}return{section:`
244
244
 
245
245
  The user attached file(s) with this message, staged locally for you. They are reference material and NOT part of the repository \u2014 never commit, copy, or edit them. If a ticket is created from this chat, these files are attached to it automatically, so reference them by filename instead of pasting their content:
246
246
  ${i.join(`
247
247
  `)}
248
- Read them with the Read tool; images can be viewed directly.`,dir:n}}var Ii=r=>Math.max(1,Math.round(r/1024)),ef=r=>Math.round(r/(1024*1024)*10)/10;var it=$(require("node:fs"),1),Ai=$(require("node:path"),1);function xn(){return Ai.default.join(ee(),"runner.pid")}function fs(){return Ai.default.join(ee(),"runner.log")}function Da(){it.default.mkdirSync(ee(),{recursive:!0,mode:448});let r=it.default.openSync(fs(),"a",384);try{it.default.chmodSync(fs(),384)}catch{}return r}function Fr(){let r=xn();if(!it.default.existsSync(r))return null;let e=Number(it.default.readFileSync(r,"utf8").trim());return Number.isFinite(e)&&e>0?e:null}function Cn(r){try{return process.kill(r,0),!0}catch{return!1}}function za(r){it.default.mkdirSync(ee(),{recursive:!0,mode:448}),it.default.writeFileSync(xn(),String(r),{mode:384})}function Ua(r){Fr()===r&&it.default.rmSync(xn(),{force:!0})}var du=$(Te(),1);async function hu(r,e){let t=await fetch(new URL("/api/runners/enroll",r.controlPlaneUrl),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enrollToken:e,name:r.runnerName,platform:`${process.platform}/${process.arch}`,runnerVersion:ws})});if(!t.ok){let i=await t.text().catch(()=>"");throw new Error(`enrollment failed (${t.status}): ${i.slice(0,300)}`)}let n=du.EnrollResponse.parse(await t.json()),s={...r,runnerId:n.runnerId,runnerToken:n.runnerToken};return ie(s),s}var ws="1.1.0";vr();var Tu="Posted automatically by Allwright",Ep=["Posted automatically by TicketPilot"],He=r=>r.includes(Tu)||Ep.some(e=>r.includes(e));var Ue=class{constructor(e){this.auth=e}auth;headers(){return{Authorization:`Basic ${Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64")}`,Accept:"application/json","Content-Type":"application/json"}}async request(e,t,n){let s=new URL(t,this.auth.baseUrl).toString(),i=await fetch(s,{method:e,headers:this.headers(),body:n===void 0?void 0:JSON.stringify(n)});if(!i.ok){let o=await i.text().catch(()=>"");throw new Error(`Jira ${e} ${t} -> ${i.status}: ${o.slice(0,500)}`)}if(i.status!==204)return await i.json()}async myself(){return this.request("GET","/rest/api/3/myself")}async searchUsers(e,t=20){let n=await this.userSearch(e,t);return n.length||!e.includes("@")?n:this.userSearch(e.slice(0,e.indexOf("@")),t)}async userSearch(e,t){return e.trim()?(await this.request("GET",`/rest/api/3/user/search?query=${encodeURIComponent(e)}&maxResults=${t}`)??[]).filter(s=>s.accountId&&(s.accountType??"atlassian")==="atlassian").map(s=>({accountId:s.accountId,displayName:s.displayName??"(no name)",email:s.emailAddress??"",active:s.active??!0})):[]}async search(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","components"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",components:(s.fields?.components??[]).map(i=>i.name??"").filter(Boolean)}))}async projectStatuses(e){let t=await this.request("GET",`/rest/api/3/project/${encodeURIComponent(e)}/statuses`),n=new Map;for(let i of t??[])for(let o of i.statuses??[])o.name&&!n.has(o.name)&&n.set(o.name,o.statusCategory?.key??"indeterminate");let s=i=>i==="new"?0:i==="done"?2:1;return[...n.entries()].sort((i,o)=>s(i[1])-s(o[1])).map(([i])=>i)}async searchEpics(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:`project = "${e}" AND issuetype = Epic AND statusCategory != Done ORDER BY created DESC`,maxResults:t,fields:["summary","status"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??""}))}async epicChildren(e,t=50){return((await this.request("POST","/rest/api/3/search/jql",{jql:`parent = "${e}" ORDER BY created ASC`,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"",statusCategory:s.fields?.status?.statusCategory?.key??"indeterminate",labels:s.fields?.labels??[]}))}async searchBoard(e,t=100){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"(no status)",statusId:s.fields?.status?.id??"",labels:s.fields?.labels??[]}))}async boardColumns(e){try{let n=(await this.request("GET",`/rest/agile/1.0/board?projectKeyOrId=${encodeURIComponent(e)}`)).values?.[0]?.id;if(!n)return null;let i=((await this.request("GET",`/rest/agile/1.0/board/${n}/configuration`)).columnConfig?.columns??[]).filter(o=>(o.statuses??[]).length>0&&o.name).map(o=>({name:o.name,statusIds:(o.statuses??[]).map(a=>a.id??"").filter(Boolean)}));return i.length?i:null}catch{return null}}async getIssue(e){let t=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?fields=summary,description,labels,comment,status,attachment`),n;try{n=await this.listAllComments(e)}catch{n=t.fields.comment?.comments??[]}let s=n.map(o=>({id:o.id??"",author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null,created:o.created,body:Su(o.body)})),i=(t.fields.attachment??[]).filter(o=>o.id&&o.filename&&o.content).map(o=>({id:o.id,filename:o.filename,mimeType:o.mimeType??"",size:o.size??0,contentUrl:o.content}));return{key:t.key,summary:t.fields.summary??"",description:Su(t.fields.description),labels:t.fields.labels??[],status:t.fields.status?.name??"",comments:s,attachments:i}}async listAllComments(e){let t=await this.fetchCommentPage(e,0),n=t.total??t.comments.length;if(n<=t.comments.length)return t.comments;let s=Math.max(0,n-200),i=s===0?[...t.comments]:[];for(;i.length<Math.min(n,200);){let o=await this.fetchCommentPage(e,s+i.length);if(!o.comments.length)break;i.push(...o.comments)}return i.slice(-200)}async fetchCommentPage(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/comment?startAt=${t}&maxResults=100`);return{comments:n.comments??[],total:n.total}}async downloadAttachment(e){let t=await fetch(e,{headers:this.headers()});if(!t.ok)throw new Error(`attachment download failed: ${t.status}`);return Buffer.from(await t.arrayBuffer())}async lastEnteredStatus(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?expand=changelog&fields=status`),s=t.toLowerCase(),i=null;for(let o of n.changelog?.histories??[])(o.items??[]).some(l=>(l.field==="status"||l.fieldId==="status")&&(l.toString??"").toLowerCase()===s)&&(!i||new Date(o.created)>new Date(i.at))&&(i={at:o.created,author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null});return i}async createIssue(e,t,n,s="Task",i){return{key:(await this.request("POST","/rest/api/3/issue",{fields:{project:{key:e},issuetype:{name:s},summary:t.slice(0,250),description:Yi(n),...i?{parent:{key:i}}:{}}})).key}}async addAttachments(e,t){if(!t.length)return;let n=new FormData;for(let a of t)n.append("file",new Blob([new Uint8Array(a.content)]),a.name.slice(0,255));let s=new URL(`/rest/api/3/issue/${encodeURIComponent(e)}/attachments`,this.auth.baseUrl).toString(),i=Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64"),o=await fetch(s,{method:"POST",headers:{Authorization:`Basic ${i}`,Accept:"application/json","X-Atlassian-Token":"no-check"},body:n});if(!o.ok)throw new Error(`Jira attachment upload failed: HTTP ${o.status}`)}async addTriggerComment(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:Yi(t)})}async addComment(e,t){let n=`${t}
248
+ Read them with the Read tool; images can be viewed directly.`,dir:n}}var ji=r=>Math.max(1,Math.round(r/1024)),lf=r=>Math.round(r/(1024*1024)*10)/10;var pe=P(require("node:fs"),1),vs=P(require("node:path"),1);function In(){return vs.default.join(Q(),"runner.pid")}function ys(){return vs.default.join(Q(),"runner.log")}function Ka(){pe.default.mkdirSync(Q(),{recursive:!0,mode:448});let r=pe.default.openSync(ys(),"a",384);try{pe.default.chmodSync(ys(),384)}catch{}return r}function Kr(){let r=In();if(!pe.default.existsSync(r))return null;let e=Number(pe.default.readFileSync(r,"utf8").trim());return Number.isFinite(e)&&e>0?e:null}function Vr(r){try{return process.kill(r,0),!0}catch{return!1}}function Va(r){pe.default.mkdirSync(Q(),{recursive:!0,mode:448}),pe.default.writeFileSync(In(),String(r),{mode:384})}function Ga(r){Kr()===r&&pe.default.rmSync(In(),{force:!0})}function Oi(){return vs.default.join(Q(),"runner.lock")}function An(){let r=Oi();if(!pe.default.existsSync(r))return null;let e=Number(pe.default.readFileSync(r,"utf8").trim());return!Number.isFinite(e)||e<=0||e===process.pid?null:Vr(e)?e:null}function Ha(){let r=An();return r?{ok:!1,pid:r}:(pe.default.mkdirSync(Q(),{recursive:!0,mode:448}),pe.default.writeFileSync(Oi(),String(process.pid),{mode:384}),{ok:!0})}function Ni(){try{let r=Oi();pe.default.existsSync(r)&&Number(pe.default.readFileSync(r,"utf8").trim())===process.pid&&pe.default.rmSync(r,{force:!0})}catch{}}var Cs=P(require("node:fs"),1),On=P(require("node:path"),1),_u=P(xe(),1);async function bu(r,e){let t=await fetch(new URL("/api/runners/enroll",r.controlPlaneUrl),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enrollToken:e,name:r.runnerName,platform:`${process.platform}/${process.arch}`,runnerVersion:Es})});if(!t.ok){let i=await t.text().catch(()=>"");throw new Error(`enrollment failed (${t.status}): ${i.slice(0,300)}`)}let n=_u.EnrollResponse.parse(await t.json()),s={...r,runnerId:n.runnerId,runnerToken:n.runnerToken};return oe(s),s}function Np(){try{let r=process.argv[1]?Cs.default.realpathSync(process.argv[1]):"";for(let e of[On.default.dirname(r),On.default.dirname(On.default.dirname(r))]){let t=On.default.join(e,"package.json");if(!Cs.default.existsSync(t))continue;let n=JSON.parse(Cs.default.readFileSync(t,"utf8")).version;if(typeof n=="string"&&n)return n}}catch{}return"0.0.0"}var Es=Np();_r();var Pu="Posted automatically by Allwright",Mp=["Posted automatically by TicketPilot"],Je=r=>r.includes(Pu)||Mp.some(e=>r.includes(e));var qe=class{constructor(e){this.auth=e}auth;headers(){return{Authorization:`Basic ${Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64")}`,Accept:"application/json","Content-Type":"application/json"}}async request(e,t,n){let s=new URL(t,this.auth.baseUrl).toString(),i=await fetch(s,{method:e,headers:this.headers(),body:n===void 0?void 0:JSON.stringify(n)});if(!i.ok){let o=await i.text().catch(()=>"");throw new Error(`Jira ${e} ${t} -> ${i.status}: ${o.slice(0,500)}`)}if(i.status!==204)return await i.json()}async myself(){return this.request("GET","/rest/api/3/myself")}async searchUsers(e,t=20){let n=await this.userSearch(e,t);return n.length||!e.includes("@")?n:this.userSearch(e.slice(0,e.indexOf("@")),t)}async userSearch(e,t){return e.trim()?(await this.request("GET",`/rest/api/3/user/search?query=${encodeURIComponent(e)}&maxResults=${t}`)??[]).filter(s=>s.accountId&&(s.accountType??"atlassian")==="atlassian").map(s=>({accountId:s.accountId,displayName:s.displayName??"(no name)",email:s.emailAddress??"",active:s.active??!0})):[]}async search(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","components"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",components:(s.fields?.components??[]).map(i=>i.name??"").filter(Boolean)}))}async projectStatuses(e){let t=await this.request("GET",`/rest/api/3/project/${encodeURIComponent(e)}/statuses`),n=new Map;for(let i of t??[])for(let o of i.statuses??[])o.name&&!n.has(o.name)&&n.set(o.name,o.statusCategory?.key??"indeterminate");let s=i=>i==="new"?0:i==="done"?2:1;return[...n.entries()].sort((i,o)=>s(i[1])-s(o[1])).map(([i])=>i)}async searchEpics(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:`project = "${e}" AND issuetype = Epic AND statusCategory != Done ORDER BY created DESC`,maxResults:t,fields:["summary","status"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??""}))}async epicChildren(e,t=50){return((await this.request("POST","/rest/api/3/search/jql",{jql:`parent = "${e}" ORDER BY created ASC`,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"",statusCategory:s.fields?.status?.statusCategory?.key??"indeterminate",labels:s.fields?.labels??[]}))}async searchBoard(e,t=100){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"(no status)",statusId:s.fields?.status?.id??"",labels:s.fields?.labels??[]}))}async boardColumns(e){try{let n=(await this.request("GET",`/rest/agile/1.0/board?projectKeyOrId=${encodeURIComponent(e)}`)).values?.[0]?.id;if(!n)return null;let i=((await this.request("GET",`/rest/agile/1.0/board/${n}/configuration`)).columnConfig?.columns??[]).filter(o=>(o.statuses??[]).length>0&&o.name).map(o=>({name:o.name,statusIds:(o.statuses??[]).map(a=>a.id??"").filter(Boolean)}));return i.length?i:null}catch{return null}}async getIssue(e){let t=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?fields=summary,description,labels,comment,status,attachment`),n;try{n=await this.listAllComments(e)}catch{n=t.fields.comment?.comments??[]}let s=n.map(o=>({id:o.id??"",author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null,created:o.created,body:$u(o.body)})),i=(t.fields.attachment??[]).filter(o=>o.id&&o.filename&&o.content).map(o=>({id:o.id,filename:o.filename,mimeType:o.mimeType??"",size:o.size??0,contentUrl:o.content}));return{key:t.key,summary:t.fields.summary??"",description:$u(t.fields.description),labels:t.fields.labels??[],status:t.fields.status?.name??"",comments:s,attachments:i}}async listAllComments(e){let t=await this.fetchCommentPage(e,0),n=t.total??t.comments.length;if(n<=t.comments.length)return t.comments;let s=Math.max(0,n-200),i=s===0?[...t.comments]:[];for(;i.length<Math.min(n,200);){let o=await this.fetchCommentPage(e,s+i.length);if(!o.comments.length)break;i.push(...o.comments)}return i.slice(-200)}async fetchCommentPage(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/comment?startAt=${t}&maxResults=100`);return{comments:n.comments??[],total:n.total}}async downloadAttachment(e){let t=await fetch(e,{headers:this.headers()});if(!t.ok)throw new Error(`attachment download failed: ${t.status}`);return Buffer.from(await t.arrayBuffer())}async lastEnteredStatus(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?expand=changelog&fields=status`),s=t.toLowerCase(),i=null;for(let o of n.changelog?.histories??[])(o.items??[]).some(l=>(l.field==="status"||l.fieldId==="status")&&(l.toString??"").toLowerCase()===s)&&(!i||new Date(o.created)>new Date(i.at))&&(i={at:o.created,author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null});return i}async createIssue(e,t,n,s="Task",i){return{key:(await this.request("POST","/rest/api/3/issue",{fields:{project:{key:e},issuetype:{name:s},summary:t.slice(0,250),description:no(n),...i?{parent:{key:i}}:{}}})).key}}async addAttachments(e,t){if(!t.length)return;let n=new FormData;for(let a of t)n.append("file",new Blob([new Uint8Array(a.content)]),a.name.slice(0,255));let s=new URL(`/rest/api/3/issue/${encodeURIComponent(e)}/attachments`,this.auth.baseUrl).toString(),i=Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64"),o=await fetch(s,{method:"POST",headers:{Authorization:`Basic ${i}`,Accept:"application/json","X-Atlassian-Token":"no-check"},body:n});if(!o.ok)throw new Error(`Jira attachment upload failed: HTTP ${o.status}`)}async addTriggerComment(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:no(t)})}async addComment(e,t){let n=`${t}
249
249
 
250
250
  ---
251
- _${Tu} \u2014 never treated as a trigger._`;await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:Yi(n)})}async editLabels(e,t){let n=[...(t.add??[]).map(s=>({add:s})),...(t.remove??[]).map(s=>({remove:s}))];await this.request("PUT",`/rest/api/3/issue/${encodeURIComponent(e)}`,{update:{labels:n}})}async getTransitions(e){return((await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`)).transitions??[]).map(n=>({id:n.id,name:n.name}))}async transition(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`,{transition:{id:t}})}async transitionByName(e,t){let s=(await this.getTransitions(e)).find(i=>i.name.toLowerCase()===t.toLowerCase());return s?(await this.transition(e,s.id),!0):!1}};function Su(r){if(!r)return"";let e=[],t=n=>{n.text&&e.push(n.text),n.type==="hardBreak"&&e.push(`
251
+ _${Pu} \u2014 never treated as a trigger._`;await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:no(n)})}async editLabels(e,t){let n=[...(t.add??[]).map(s=>({add:s})),...(t.remove??[]).map(s=>({remove:s}))];await this.request("PUT",`/rest/api/3/issue/${encodeURIComponent(e)}`,{update:{labels:n}})}async getTransitions(e){return((await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`)).transitions??[]).map(n=>({id:n.id,name:n.name}))}async transition(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`,{transition:{id:t}})}async transitionByName(e,t){let s=(await this.getTransitions(e)).find(i=>i.name.toLowerCase()===t.toLowerCase());return s?(await this.transition(e,s.id),!0):!1}};function $u(r){if(!r)return"";let e=[],t=n=>{n.text&&e.push(n.text),n.type==="hardBreak"&&e.push(`
252
252
  `);for(let s of n.content??[])t(s);n.type&&["paragraph","heading","listItem","codeBlock","blockquote"].includes(n.type)&&e.push(`
253
253
  `)};return t(r),e.join("").replace(/\n{3,}/g,`
254
254
 
255
- `).trim()}function Yi(r){let e=r.replace(/\r\n/g,`
255
+ `).trim()}function no(r){let e=r.replace(/\r\n/g,`
256
256
  `).split(`
257
257
  `),t=[],n=0,s=i=>{let o=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g,l=0,c;for(;(c=a.exec(i))!==null;){c.index>l&&o.push({type:"text",text:i.slice(l,c.index)});let d=c[0];d.startsWith("**")?o.push({type:"text",text:d.slice(2,-2),marks:[{type:"strong"}]}):o.push({type:"text",text:d.slice(1,-1),marks:[{type:"code"}]}),l=c.index+d.length}return l<i.length&&o.push({type:"text",text:i.slice(l)}),o.length?o:[{type:"text",text:" "}]};for(;n<e.length;){let i=e[n];if(i.trim()===""){n++;continue}let o=i.match(/^```(\w*)\s*$/);if(o){let p=[];for(n++;n<e.length&&!/^```\s*$/.test(e[n]);)p.push(e[n]),n++;n++,t.push({type:"codeBlock",attrs:o[1]?{language:o[1]}:{},content:[{type:"text",text:p.join(`
258
- `)||" "}]});continue}let a=i.match(/^(#{1,6})\s+(.*)$/);if(a){t.push({type:"heading",attrs:{level:a[1].length},content:s(a[2])}),n++;continue}if(i.match(/^\s*[-*]\s+(.*)$/)){let p=[];for(;n<e.length;){let w=e[n].match(/^\s*[-*]\s+(.*)$/);if(!w)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(w[1])}]}),n++}t.push({type:"bulletList",content:p});continue}if(i.match(/^\s*\d+[.)]\s+(.*)$/)){let p=[];for(;n<e.length;){let w=e[n].match(/^\s*\d+[.)]\s+(.*)$/);if(!w)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(w[1])}]}),n++}t.push({type:"orderedList",content:p});continue}let d=[i];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6}\s|```|\s*[-*]\s|\s*\d+[.)]\s)/.test(e[n]);)d.push(e[n]),n++;t.push({type:"paragraph",content:s(d.join(" "))})}return{type:"doc",version:1,content:t}}function xu(r,e,t){let n=r.repos[e]?.jira??r.jira;if(!n)return{kind:"legacy"};let s=t.trim().toLowerCase();if(!s)return{kind:"legacy"};if(s===n.email.toLowerCase())return{kind:"self"};let i=r.jiraUsers[s];return i?{kind:"user",creds:{baseUrl:n.baseUrl,email:i.email,apiToken:i.apiToken}}:{kind:"missing",error:`Jira actions from Allwright post under YOUR OWN Atlassian identity, and no Jira credential is set up for ${s} on the runner yet. Ask your admin to run this on the runner machine:
258
+ `)||" "}]});continue}let a=i.match(/^(#{1,6})\s+(.*)$/);if(a){t.push({type:"heading",attrs:{level:a[1].length},content:s(a[2])}),n++;continue}if(i.match(/^\s*[-*]\s+(.*)$/)){let p=[];for(;n<e.length;){let _=e[n].match(/^\s*[-*]\s+(.*)$/);if(!_)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(_[1])}]}),n++}t.push({type:"bulletList",content:p});continue}if(i.match(/^\s*\d+[.)]\s+(.*)$/)){let p=[];for(;n<e.length;){let _=e[n].match(/^\s*\d+[.)]\s+(.*)$/);if(!_)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(_[1])}]}),n++}t.push({type:"orderedList",content:p});continue}let d=[i];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6}\s|```|\s*[-*]\s|\s*\d+[.)]\s)/.test(e[n]);)d.push(e[n]),n++;t.push({type:"paragraph",content:s(d.join(" "))})}return{type:"doc",version:1,content:t}}function ju(r,e,t){let n=r.repos[e]?.jira??r.jira;if(!n)return{kind:"legacy"};let s=t.trim().toLowerCase();if(!s)return{kind:"legacy"};if(s===n.email.toLowerCase())return{kind:"self"};let i=r.jiraUsers[s];return i?{kind:"user",creds:{baseUrl:n.baseUrl,email:i.email,apiToken:i.apiToken}}:{kind:"missing",error:`Jira actions from Allwright post under YOUR OWN Atlassian identity, and no Jira credential is set up for ${s} on the runner yet. Ask your admin to run this on the runner machine:
259
259
 
260
260
  allwright jira user-add ${s}
261
261
 
262
- It prompts for your Atlassian email and an API token (create one at id.atlassian.com -> Security -> API tokens). Takes effect immediately \u2014 then just retry this action.`}}function Is(r,e,t){let n=(t??"").trim().toLowerCase(),s=n?r.githubUsers[n]?.token:void 0;if(s)return{token:s,source:"user"};let i=r.repos[e]?.github?.token;return i?{token:i,source:"repo"}:r.github?.token?{token:r.github.token,source:"global"}:null}function Rt(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function Cu(r,e){let t=[r.jira,...Object.values(r.repos).map(a=>a.jira)].filter(a=>!!a),n=new Set(t.map(a=>a.email.toLowerCase())),s=!!r.github?.token||Object.values(r.repos).some(a=>a.github?.token),i=r.github?.login??Object.values(r.repos).find(a=>a.github?.login)?.github?.login??"",o=e.map(a=>{let l=a.trim().toLowerCase(),c=r.jiraUsers[l]?"own":n.has(l)?"runner-account":"missing",d=c==="own"?r.jiraUsers[l].email:c==="runner-account"?l:"",p=r.githubUsers[l]?"own":s?"shared":"missing",w=p==="own"?r.githubUsers[l].login??"":p==="shared"?i:"";return{email:l,jira:c,jiraAs:d,github:p,githubAs:w}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var jn=require("node:child_process"),en=$(require("node:fs"),1),Xi=$(require("node:os"),1),Qi=$(require("node:path"),1),As="allwright",Eu=`/etc/systemd/system/${As}.service`,Ip="ticketpilot-runner";function eo(){let r=process.env.SUDO_USER&&process.env.SUDO_USER!=="root"?process.env.SUDO_USER:"",e=r||Xi.default.userInfo().username,t=r?Qi.default.join("/home",r):Xi.default.homedir();return{nodePath:process.execPath,scriptPath:en.default.realpathSync(process.argv[1]),user:e,home:t}}function to(r){let e=Qi.default.dirname(r.nodePath);return`[Unit]
262
+ It prompts for your Atlassian email and an API token (create one at id.atlassian.com -> Security -> API tokens). Takes effect immediately \u2014 then just retry this action.`}}function Os(r,e,t){let n=(t??"").trim().toLowerCase(),s=n?r.githubUsers[n]?.token:void 0;if(s)return{token:s,source:"user"};let i=r.repos[e]?.github?.token;return i?{token:i,source:"repo"}:r.github?.token?{token:r.github.token,source:"global"}:null}function $t(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function Ou(r,e){let t=[r.jira,...Object.values(r.repos).map(a=>a.jira)].filter(a=>!!a),n=new Set(t.map(a=>a.email.toLowerCase())),s=!!r.github?.token||Object.values(r.repos).some(a=>a.github?.token),i=r.github?.login??Object.values(r.repos).find(a=>a.github?.login)?.github?.login??"",o=e.map(a=>{let l=a.trim().toLowerCase(),c=r.jiraUsers[l]?"own":n.has(l)?"runner-account":"missing",d=c==="own"?r.jiraUsers[l].email:c==="runner-account"?l:"",p=r.githubUsers[l]?"own":s?"shared":"missing",_=p==="own"?r.githubUsers[l].login??"":p==="shared"?i:"";return{email:l,jira:c,jiraAs:d,github:p,githubAs:_}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var br=require("node:child_process"),nn=P(require("node:fs"),1),so=P(require("node:os"),1),oo=P(require("node:path"),1);var Ln="allwright",Nu=`/etc/systemd/system/${Ln}.service`,io="ticketpilot-runner";function ao(){let r=process.env.SUDO_USER&&process.env.SUDO_USER!=="root"?process.env.SUDO_USER:"",e=r||so.default.userInfo().username,t=r?oo.default.join("/home",r):so.default.homedir();return{nodePath:process.execPath,scriptPath:nn.default.realpathSync(process.argv[1]),user:e,home:t}}function uo(r){let e=oo.default.dirname(r.nodePath);return`[Unit]
263
263
  Description=Allwright runner
264
264
  After=network-online.target
265
265
 
@@ -274,8 +274,8 @@ RestartSec=5
274
274
 
275
275
  [Install]
276
276
  WantedBy=multi-user.target
277
- `}function Iu(){return process.platform==="linux"&&en.default.existsSync("/run/systemd/system")}function Au(r){if(!Iu())throw new Error(process.platform==="win32"?"Windows service install isn't built in yet \u2014 use NSSM: nssm install allwright <node> <this script> start --foreground":"no systemd on this machine \u2014 run `allwright start` (background mode) instead");let e=eo(),t=to(e);if(typeof process.getuid=="function"&&process.getuid()!==0){r.info("Root is needed to write the unit. Re-run as:"),r.info(' sudo env "PATH=$PATH" allwright service install'),r.info("(the env PATH part matters when node is installed via nvm \u2014 plain sudo can't find it)"),r.info(""),r.info(`This is exactly what it will write to ${Eu}:`),r.info(`
278
- `+t);return}en.default.writeFileSync(Eu,t),(0,jn.execFileSync)("systemctl",["daemon-reload"]),(0,jn.execFileSync)("systemctl",["enable","--now",As]),r.info(`Installed and started (runs as ${e.user}, survives reboots).`),r.info(`Watch it: journalctl -u ${As} -f`),r.info("Status: allwright service status")}function Ru(r){if(!Iu())throw new Error("no systemd on this machine");if(typeof process.getuid=="function"&&process.getuid()!==0)throw new Error("root is needed \u2014 run: sudo allwright service uninstall");for(let e of[As,Ip]){try{(0,jn.execFileSync)("systemctl",["disable","--now",e])}catch{}let t=`/etc/systemd/system/${e}.service`;en.default.existsSync(t)&&en.default.rmSync(t)}(0,jn.execFileSync)("systemctl",["daemon-reload"]),r.info("Service removed. The runner config and credentials were not touched.")}var $u=$(Te(),1);function Pu(r){return r.filter(e=>e.statusCategory!=="done"&&!e.labels.includes("agent-implemented")&&!e.labels.includes($u.NEEDS_INPUT_LABEL))}function ju(r,e,t){let n=t.map(s=>{let i=(s.description??"").trim().slice(0,600);return`- ${s.key} [${s.status}] ${s.summary}${i?`
277
+ `}function Mu(){return process.platform==="linux"&&nn.default.existsSync("/run/systemd/system")}function Lu(r){if(!Mu())throw new Error(process.platform==="win32"?"Windows service install isn't built in yet \u2014 use NSSM: nssm install allwright <node> <this script> start --foreground":"no systemd on this machine \u2014 run `allwright start` (background mode) instead");let e=ao(),t=uo(e);if(typeof process.getuid=="function"&&process.getuid()!==0){r.info("Root is needed to write the unit. Re-run as:"),r.info(' sudo env "PATH=$PATH" allwright service install'),r.info("(the env PATH part matters when node is installed via nvm \u2014 plain sudo can't find it)"),r.info(""),r.info(`This is exactly what it will write to ${Nu}:`),r.info(`
278
+ `+t);return}try{(0,br.execFileSync)("systemctl",["disable","--now",io]),r.info(`stopped the old ${io} service \u2014 this one replaces it`)}catch{}let n=An();if(n)try{process.kill(n,"SIGTERM"),r.info(`stopped the running runner (pid ${n}) \u2014 the service takes over`)}catch{}nn.default.writeFileSync(Nu,t),(0,br.execFileSync)("systemctl",["daemon-reload"]),(0,br.execFileSync)("systemctl",["enable","--now",Ln]),(0,br.execFileSync)("systemctl",["restart",Ln]),r.info(`Installed and started (runs as ${e.user}, survives reboots).`),r.info(`Watch it: journalctl -u ${Ln} -f`),r.info("Status: allwright service status")}function Du(r){if(!Mu())throw new Error("no systemd on this machine");if(typeof process.getuid=="function"&&process.getuid()!==0)throw new Error("root is needed \u2014 run: sudo allwright service uninstall");for(let e of[Ln,io]){try{(0,br.execFileSync)("systemctl",["disable","--now",e])}catch{}let t=`/etc/systemd/system/${e}.service`;nn.default.existsSync(t)&&nn.default.rmSync(t)}(0,br.execFileSync)("systemctl",["daemon-reload"]),r.info("Service removed. The runner config and credentials were not touched.")}var zu=P(xe(),1);function Uu(r){return r.filter(e=>e.statusCategory!=="done"&&!e.labels.includes("agent-implemented")&&!e.labels.includes(zu.NEEDS_INPUT_LABEL))}function qu(r,e,t){let n=t.map(s=>{let i=(s.description??"").trim().slice(0,600);return`- ${s.key} [${s.status}] ${s.summary}${i?`
279
279
  ${i.replace(/\n+/g," ")}`:""}`}).join(`
280
280
  `);return`You are looking at this repository to help sequence work on the Jira epic ${r} ("${e}"). These child tickets are still pending:
281
281
 
@@ -286,7 +286,7 @@ Pick the ONE ticket that should be implemented FIRST. Weigh, in this order: (1)
286
286
  Answer with ONLY a fenced json block, nothing after it:
287
287
  \`\`\`json
288
288
  {"issueKey": "<one of the keys above>", "reason": "<2-3 sentences: why this one first, and what it unblocks>"}
289
- \`\`\``}function Ou(r,e){let n=r.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??r.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!n)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(n),i=typeof s.issueKey=="string"?s.issueKey.trim():"",o=typeof s.reason=="string"?s.reason.trim():"";return e.includes(i)?{issueKey:i,reason:o||"(no reasoning given)"}:{error:`the agent recommended "${i}", which is not a pending child of this epic`}}catch{return{error:"the agent's JSON recommendation did not parse"}}}var lo=require("node:crypto"),cl=$(require("node:fs"),1);var ro=$(require("node:fs"),1),Nu=$(require("node:os"),1),Rs=$(require("node:path"),1),Mu=require("node:child_process"),Lu=$(require("node:readline"),1),Du=$(Te(),1),Ap={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Rp(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??Rs.default.join(Nu.default.homedir(),".claude");try{if(ro.default.existsSync(Rs.default.join(e,".credentials.json"))||ro.default.existsSync(Rs.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function $p(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Ap[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Rp(r.configDir);return t!=="unknown"&&r.onLog("info",t==="subscription"?"Billing: Claude subscription \u2014 costs shown are notional list prices, not money charged":"Billing: Anthropic API key \u2014 costs shown are actual metered spend"),new Promise(n=>{let s=(0,Mu.spawn)(r.bin,e,{cwd:r.repoPath,env:r.configDir?{...process.env,CLAUDE_CONFIG_DIR:r.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,billingMode:t==="subscription"?"subscription":t==="API key"?"api":"unknown"},o=!1,a=()=>{o||(o=!0,clearTimeout(l),n(i))},l=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);s.stdin.write(r.prompt),s.stdin.end(),Lu.default.createInterface({input:s.stdout}).on("line",p=>{if(!p.trim())return;let w;try{w=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}if(w.type==="system"&&w.subtype==="init")i.model=typeof w.model=="string"?w.model:void 0,r.onLog("info",`Claude Code session started (model: ${w.model??"default"})`);else if(w.type==="assistant"){for(let S of w.message?.content??[])if(S.type==="text"&&S.text?.trim())r.onLog("agent",S.text.trim().slice(0,4e3));else if(S.type==="tool_use"){let x=JSON.stringify(S.input??{}).slice(0,300);r.onLog("info",`tool ${S.name} ${x}`)}}else w.type==="result"&&(i.costUsd=Number(w.total_cost_usd??0),i.inputTokens=Number(w.usage?.input_tokens??0),i.outputTokens=Number(w.usage?.output_tokens??0),w.subtype==="success"&&!w.is_error?(i.ok=!0,i.resultText=String(w.result??"")):w.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${r.maxTurns??60}-turn limit before finishing`):(i.error=String(w.result??w.subtype??"unknown Claude Code error"),/rate.?limit|usage limit|limit (reached|exceeded)|overloaded/i.test(i.error)&&(i.error=`Claude usage limit hit for this account \u2014 the run will work again once the limit window resets. Original error: ${i.error.slice(0,400)}`)))});let d="";s.stderr.on("data",p=>{d=(d+p.toString()).slice(-2e3)}),s.on("error",p=>{i.error=`failed to start ${r.bin}: ${p.message}`,r.onLog("error",i.error),a()}),s.on("close",p=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${p}${d?`: ${d.slice(-500)}`:""}`),a()})})}var Oe={id:"claude-code",displayName:"Claude Code",capabilities:Du.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:$p};var $s=$(Te(),1),Pp={security:"You are a security auditor. You can READ this repository; you can never run or change anything. Audit it against the knowledge packs below and report real, exploitable-here problems \u2014 not checklist theatre.",testing:"You are a test-coverage auditor. You can READ this repository (code and tests); you can never run anything. Find what is untested and fragile against the knowledge packs below \u2014 gaps that would actually bite this product, not generic coverage philosophy.",architecture:"You are a software architecture auditor. You can READ this repository; you can never run or change anything. Judge whether it is structurally HEALTHY for what it is trying to be, against the knowledge packs below \u2014 real structural pain for this team, not textbook purity."};function Uu(r,e,t,n={}){let s=e.map(l=>`### Pack: ${l.name}
289
+ \`\`\``}function Bu(r,e){let n=r.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??r.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!n)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(n),i=typeof s.issueKey=="string"?s.issueKey.trim():"",o=typeof s.reason=="string"?s.reason.trim():"";return e.includes(i)?{issueKey:i,reason:o||"(no reasoning given)"}:{error:`the agent recommended "${i}", which is not a pending child of this epic`}}catch{return{error:"the agent's JSON recommendation did not parse"}}}var yo=require("node:crypto"),vl=P(require("node:fs"),1);var lo=P(require("node:fs"),1),Fu=P(require("node:os"),1),Ns=P(require("node:path"),1),Zu=require("node:child_process"),Ku=P(require("node:readline"),1),Vu=P(xe(),1),Lp={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Dp(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??Ns.default.join(Fu.default.homedir(),".claude");try{if(lo.default.existsSync(Ns.default.join(e,".credentials.json"))||lo.default.existsSync(Ns.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function zp(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Lp[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Dp(r.configDir);return t!=="unknown"&&r.onLog("info",t==="subscription"?"Billing: Claude subscription \u2014 costs shown are notional list prices, not money charged":"Billing: Anthropic API key \u2014 costs shown are actual metered spend"),new Promise(n=>{let s=(0,Zu.spawn)(r.bin,e,{cwd:r.repoPath,env:r.configDir?{...process.env,CLAUDE_CONFIG_DIR:r.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,billingMode:t==="subscription"?"subscription":t==="API key"?"api":"unknown"},o=!1,a=()=>{o||(o=!0,clearTimeout(l),n(i))},l=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);s.stdin.write(r.prompt),s.stdin.end(),Ku.default.createInterface({input:s.stdout}).on("line",p=>{if(!p.trim())return;let _;try{_=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}if(_.type==="system"&&_.subtype==="init")i.model=typeof _.model=="string"?_.model:void 0,r.onLog("info",`Claude Code session started (model: ${_.model??"default"})`);else if(_.type==="assistant"){for(let S of _.message?.content??[])if(S.type==="text"&&S.text?.trim())r.onLog("agent",S.text.trim().slice(0,4e3));else if(S.type==="tool_use"){let T=JSON.stringify(S.input??{}).slice(0,300);r.onLog("info",`tool ${S.name} ${T}`)}}else _.type==="result"&&(i.costUsd=Number(_.total_cost_usd??0),i.inputTokens=Number(_.usage?.input_tokens??0),i.outputTokens=Number(_.usage?.output_tokens??0),_.subtype==="success"&&!_.is_error?(i.ok=!0,i.resultText=String(_.result??"")):_.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${r.maxTurns??60}-turn limit before finishing`):(i.error=String(_.result??_.subtype??"unknown Claude Code error"),/rate.?limit|usage limit|limit (reached|exceeded)|overloaded/i.test(i.error)&&(i.error=`Claude usage limit hit for this account \u2014 the run will work again once the limit window resets. Original error: ${i.error.slice(0,400)}`)))});let d="";s.stderr.on("data",p=>{d=(d+p.toString()).slice(-2e3)}),s.on("error",p=>{i.error=`failed to start ${r.bin}: ${p.message}`,r.onLog("error",i.error),a()}),s.on("close",p=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${p}${d?`: ${d.slice(-500)}`:""}`),a()})})}var Ne={id:"claude-code",displayName:"Claude Code",capabilities:Vu.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:zp};var Ms=P(xe(),1),Up={security:"You are a security auditor. You can READ this repository; you can never run or change anything. Audit it against the knowledge packs below and report real, exploitable-here problems \u2014 not checklist theatre.",testing:"You are a test-coverage auditor. You can READ this repository (code and tests); you can never run anything. Find what is untested and fragile against the knowledge packs below \u2014 gaps that would actually bite this product, not generic coverage philosophy.",architecture:"You are a software architecture auditor. You can READ this repository; you can never run or change anything. Judge whether it is structurally HEALTHY for what it is trying to be, against the knowledge packs below \u2014 real structural pain for this team, not textbook purity."};function Hu(r,e,t,n={}){let s=e.map(l=>`### Pack: ${l.name}
290
290
 
291
291
  ${l.content}`).join(`
292
292
 
@@ -306,7 +306,7 @@ Read whatever surrounding code you need for context, but every finding must be a
306
306
 
307
307
  ${n.testResults}
308
308
 
309
- Fold what these results show \u2014 failures, flaky exits, suspiciously green suites \u2014 into your findings with the rest of the audit.`:"";return`${Pp[r]}
309
+ Fold what these results show \u2014 failures, flaky exits, suspiciously green suites \u2014 into your findings with the rest of the audit.`:"";return`${Up[r]}
310
310
 
311
311
  Knowledge below is LAYERED: global (product) -> org (this company) -> project (this repo). More specific levels OVERRIDE general ones; entries referencing a rule id (SEC-001 style) modify or disable that rule.
312
312
 
@@ -320,7 +320,7 @@ Explore the repository first \u2014 entry points, routes, storage, tests \u2014
320
320
  "evidence": [{"file": "<repo-relative path>", "line": <number, omit if n/a>, "note": "<what is there>"}],
321
321
  "fix": "<2-4 sentences: concrete fix, specific to this code>"}]}
322
322
  \`\`\`
323
- Rules: every finding needs at least one evidence file you actually read \u2014 findings without real evidence will be DELETED from your report. Max 25 findings, worst first. An empty findings list with an honest summary is a valid, good answer.`}function qu(r){let t=r.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??r.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!t)return{error:"the agent's report contained no JSON block"};let n;try{n=JSON.parse(t)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(n.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let a of n.findings.slice(0,25)){let l=jp(a),c=l?$s.AuditFinding.safeParse(l):null;if(!c?.success){i++;continue}let d=c.data.id;for(;o.has(d);)d=`${d}-2`;o.add(d),s.push({...c.data,id:d})}return{summary:typeof n.summary=="string"?n.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function jp(r){if(typeof r!="object"||r===null)return null;let e=r,t=typeof e.severity=="string"?e.severity.toLowerCase():"",n=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...zu(i.line)?{line:zu(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:Op(typeof e.id=="string"&&e.id?e.id:String(e.title??"")),ruleId:/^[A-Z]{2,8}-\d{1,4}$/.test(s)?s:"",title:typeof e.title=="string"?e.title.slice(0,200):"",severity:$s.AuditSeverity.options.includes(t)?t:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:n,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function zu(r){let e=typeof r=="number"?r:typeof r=="string"?parseInt(r,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function Op(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}var On=$(require("node:fs"),1),no=$(require("node:path"),1),Bu=$(Te(),1);var Np=20;function Fu(){return no.default.join(ee(),"audits.json")}function Nn(){try{return{byProject:JSON.parse(On.default.readFileSync(Fu(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function Zu(r){let e=Fu();On.default.mkdirSync(no.default.dirname(e),{recursive:!0,mode:448});let t=e+".tmp";On.default.writeFileSync(t,JSON.stringify(r,null,2),{mode:384}),On.default.renameSync(t,e)}function Ku(r,e){let t=Nn(),n=t.byProject[r]??[];n.unshift(Bu.AuditRecord.parse(e)),t.byProject[r]=n.slice(0,Np),Zu(t)}function Vu(r){return(Nn().byProject[r]??[]).map(e=>{let t={};for(let n of e.findings)t[n.severity]=(t[n.severity]??0)+1;return{id:e.id,role:e.role,createdAt:e.createdAt,findingCount:e.findings.length,bySeverity:t}})}function so(r,e,t){let n=Nn(),i=(n.byProject[r]??[]).find(a=>a.id===e);if(!i)return null;i.ticketed??={},i.verdicts??={},i.lessonsWritten??=[];let o=new Set(i.findings.map(a=>a.id));t.selected&&(i.review={selected:t.selected.filter(a=>o.has(a)),updatedAt:new Date().toISOString()});for(let a of t.ticketed??[])o.has(a.findingId)&&(i.ticketed={...i.ticketed,[a.findingId]:a.issueKey});for(let a of t.verdicts??[])o.has(a.findingId)&&(i.verdicts={...i.verdicts,[a.findingId]:{verdict:a.verdict,note:a.note,by:t.verdictBy??"",at:new Date().toISOString()}});for(let a of t.markLessonsWritten??[])o.has(a)&&!i.lessonsWritten.includes(a)&&i.lessonsWritten.push(a);return Zu(n),i}function Gu(r,e){return(Nn().byProject[r]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function Hu(r,e){return(Nn().byProject[r]??[]).find(t=>t.id===e)??null}vr();var pe=$(require("node:fs"),1),We=$(require("node:path"),1),Ju=$(Te(),1);var Mp=`# Security baseline \u2014 what to check in any repo
323
+ Rules: every finding needs at least one evidence file you actually read \u2014 findings without real evidence will be DELETED from your report. Max 25 findings, worst first. An empty findings list with an honest summary is a valid, good answer.`}function Wu(r){let t=r.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??r.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!t)return{error:"the agent's report contained no JSON block"};let n;try{n=JSON.parse(t)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(n.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let a of n.findings.slice(0,25)){let l=qp(a),c=l?Ms.AuditFinding.safeParse(l):null;if(!c?.success){i++;continue}let d=c.data.id;for(;o.has(d);)d=`${d}-2`;o.add(d),s.push({...c.data,id:d})}return{summary:typeof n.summary=="string"?n.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function qp(r){if(typeof r!="object"||r===null)return null;let e=r,t=typeof e.severity=="string"?e.severity.toLowerCase():"",n=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...Gu(i.line)?{line:Gu(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:Bp(typeof e.id=="string"&&e.id?e.id:String(e.title??"")),ruleId:/^[A-Z]{2,8}-\d{1,4}$/.test(s)?s:"",title:typeof e.title=="string"?e.title.slice(0,200):"",severity:Ms.AuditSeverity.options.includes(t)?t:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:n,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function Gu(r){let e=typeof r=="number"?r:typeof r=="string"?parseInt(r,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function Bp(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}var Dn=P(require("node:fs"),1),co=P(require("node:path"),1),Ju=P(xe(),1);var Fp=20;function Yu(){return co.default.join(Q(),"audits.json")}function zn(){try{return{byProject:JSON.parse(Dn.default.readFileSync(Yu(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function Xu(r){let e=Yu();Dn.default.mkdirSync(co.default.dirname(e),{recursive:!0,mode:448});let t=e+".tmp";Dn.default.writeFileSync(t,JSON.stringify(r,null,2),{mode:384}),Dn.default.renameSync(t,e)}function Qu(r,e){let t=zn(),n=t.byProject[r]??[];n.unshift(Ju.AuditRecord.parse(e)),t.byProject[r]=n.slice(0,Fp),Xu(t)}function el(r){return(zn().byProject[r]??[]).map(e=>{let t={};for(let n of e.findings)t[n.severity]=(t[n.severity]??0)+1;return{id:e.id,role:e.role,createdAt:e.createdAt,findingCount:e.findings.length,bySeverity:t}})}function ho(r,e,t){let n=zn(),i=(n.byProject[r]??[]).find(a=>a.id===e);if(!i)return null;i.ticketed??={},i.verdicts??={},i.lessonsWritten??=[];let o=new Set(i.findings.map(a=>a.id));t.selected&&(i.review={selected:t.selected.filter(a=>o.has(a)),updatedAt:new Date().toISOString()});for(let a of t.ticketed??[])o.has(a.findingId)&&(i.ticketed={...i.ticketed,[a.findingId]:a.issueKey});for(let a of t.verdicts??[])o.has(a.findingId)&&(i.verdicts={...i.verdicts,[a.findingId]:{verdict:a.verdict,note:a.note,by:t.verdictBy??"",at:new Date().toISOString()}});for(let a of t.markLessonsWritten??[])o.has(a)&&!i.lessonsWritten.includes(a)&&i.lessonsWritten.push(a);return Xu(n),i}function tl(r,e){return(zn().byProject[r]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function rl(r,e){return(zn().byProject[r]??[]).find(t=>t.id===e)??null}_r();var ge=P(require("node:fs"),1),Ye=P(require("node:path"),1),sl=P(xe(),1);var Zp=`# Security baseline \u2014 what to check in any repo
324
324
 
325
325
  Every rule has a stable id. Findings must cite the id they violate.
326
326
 
@@ -363,7 +363,7 @@ Every rule has a stable id. Findings must cite the id they violate.
363
363
  - **SEC-042** TLS/redirect handling that downgrades to http.
364
364
 
365
365
  Prioritize by real exploitability in THIS codebase, not by rule order.
366
- `,Lp=`# Test gaps \u2014 what to check in any repo
366
+ `,Kp=`# Test gaps \u2014 what to check in any repo
367
367
 
368
368
  Every rule has a stable id. Findings must cite the id they violate.
369
369
 
@@ -393,7 +393,7 @@ Every rule has a stable id. Findings must cite the id they violate.
393
393
  flaky suspects.
394
394
 
395
395
  Report the GAP and why it is risky here, not generic coverage philosophy.
396
- `,Dp=`# GDPR readiness \u2014 data-protection audit for repos with EU exposure
396
+ `,Vp=`# GDPR readiness \u2014 data-protection audit for repos with EU exposure
397
397
 
398
398
  FIRST decide exposure: if this product clearly has no EU users, no personal
399
399
  data, or is a purely static/internal tool, say so in ONE summary sentence and
@@ -437,7 +437,7 @@ rules below. Cite the rule id AND map the area to the closest GDPR article
437
437
 
438
438
  Severity: many users' data exposed or a missing legal-basis mechanism is
439
439
  high/critical; hygiene and documentation gaps are medium/low.
440
- `,zp=`# Architecture health \u2014 is this repository structurally sound?
440
+ `,Gp=`# Architecture health \u2014 is this repository structurally sound?
441
441
 
442
442
  Every rule has a stable id. Findings must cite the id they violate. Judge
443
443
  against what THIS codebase is trying to be (a static site does not need
@@ -476,200 +476,200 @@ deviations.
476
476
 
477
477
  Summarize with an overall verdict: is this repository HEALTHY for its
478
478
  purpose, and what are the 2-3 structural moves with the best payoff?
479
- `,Wu={security:[{name:"baseline.md",content:Mp},{name:"gdpr.md",content:Dp}],testing:[{name:"test-gaps.md",content:Lp}],architecture:[{name:"architecture-health.md",content:zp}]},Up=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function io(r){return We.default.join(ee(),"knowledge",r)}function Yu(r,e){return We.default.join(r,".ticketpilot","knowledge",`${e}.md`)}function oo(r,e){return We.default.join(r,".ticketpilot","lessons",`${e}.md`)}function Xu(r,e){let t=[],n=io(r),s=[];if(pe.default.existsSync(n)){for(let l of pe.default.readdirSync(n)){if(!l.endsWith(".md"))continue;let c=We.default.join(n,l),d=pe.default.readFileSync(c,"utf8");if(Up.some(p=>d.includes(p))&&Wu[r].map(w=>w.name).includes(l)&&!d.includes("SEC-0")&&!d.includes("TEST-0")&&!d.includes("GDPR-0")){pe.default.rmSync(c);continue}s.push(l)}s.sort()}let i=new Set(s);for(let l of Wu[r])i.has(l.name)||t.push({level:"global",source:"pack",name:l.name,content:l.content,editable:!1});for(let l of s)t.push({level:"org",source:"pack",name:l,content:pe.default.readFileSync(We.default.join(n,l),"utf8").slice(0,3e4),editable:!0});let o=Yu(e,r);pe.default.existsSync(o)&&t.push({level:"project",source:"pack",name:`${r}.md`,content:pe.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let a=oo(e,r);return pe.default.existsSync(a)&&t.push({level:"project",source:"lessons",name:`${r}.md`,content:pe.default.readFileSync(a,"utf8").slice(0,2e4),editable:!0}),t}function Qu(r,e){let t=Xu(r,e);return{packs:t.filter(n=>n.source==="pack").map(n=>({name:`${n.level}/${n.name}`,content:n.content})),lessons:t.find(n=>n.source==="lessons")?.content??"",layers:t}}function ao(r,e,t,n="project"){let s=n==="org"?We.default.join(io(e),"org-lessons.md"):oo(r,e);pe.default.mkdirSync(We.default.dirname(s),{recursive:!0});let i=pe.default.existsSync(s)?"":`# ${e} lessons (${n} level)
479
+ `,nl={security:[{name:"baseline.md",content:Zp},{name:"gdpr.md",content:Vp}],testing:[{name:"test-gaps.md",content:Kp}],architecture:[{name:"architecture-health.md",content:Gp}]},Hp=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function fo(r){return Ye.default.join(Q(),"knowledge",r)}function il(r,e){return Ye.default.join(r,".ticketpilot","knowledge",`${e}.md`)}function po(r,e){return Ye.default.join(r,".ticketpilot","lessons",`${e}.md`)}function ol(r,e){let t=[],n=fo(r),s=[];if(ge.default.existsSync(n)){for(let l of ge.default.readdirSync(n)){if(!l.endsWith(".md"))continue;let c=Ye.default.join(n,l),d=ge.default.readFileSync(c,"utf8");if(Hp.some(p=>d.includes(p))&&nl[r].map(_=>_.name).includes(l)&&!d.includes("SEC-0")&&!d.includes("TEST-0")&&!d.includes("GDPR-0")){ge.default.rmSync(c);continue}s.push(l)}s.sort()}let i=new Set(s);for(let l of nl[r])i.has(l.name)||t.push({level:"global",source:"pack",name:l.name,content:l.content,editable:!1});for(let l of s)t.push({level:"org",source:"pack",name:l,content:ge.default.readFileSync(Ye.default.join(n,l),"utf8").slice(0,3e4),editable:!0});let o=il(e,r);ge.default.existsSync(o)&&t.push({level:"project",source:"pack",name:`${r}.md`,content:ge.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let a=po(e,r);return ge.default.existsSync(a)&&t.push({level:"project",source:"lessons",name:`${r}.md`,content:ge.default.readFileSync(a,"utf8").slice(0,2e4),editable:!0}),t}function al(r,e){let t=ol(r,e);return{packs:t.filter(n=>n.source==="pack").map(n=>({name:`${n.level}/${n.name}`,content:n.content})),lessons:t.find(n=>n.source==="lessons")?.content??"",layers:t}}function mo(r,e,t,n="project"){let s=n==="org"?Ye.default.join(fo(e),"org-lessons.md"):po(r,e);ge.default.mkdirSync(Ye.default.dirname(s),{recursive:!0});let i=ge.default.existsSync(s)?"":`# ${e} lessons (${n} level)
480
480
 
481
481
  Human-confirmed corrections and rules. Every ${e} audit reads this FIRST. Reference rule ids (SEC-001 style) when overriding a rule.
482
482
 
483
- `;pe.default.appendFileSync(s,i+t.trimEnd()+`
483
+ `;ge.default.appendFileSync(s,i+t.trimEnd()+`
484
484
 
485
- `)}function el(r,e,t,n){let s=new Date().toISOString().slice(0,10),i=r.evidence[0]?` (${r.evidence[0].file}${r.evidence[0].line?`:${r.evidence[0].line}`:""})`:"",o=r.ruleId?` \xB7 rule ${r.ruleId}`:"";return`## ${s} \xB7 ${e}${o} \xB7 ${r.title}${i}
485
+ `)}function ul(r,e,t,n){let s=new Date().toISOString().slice(0,10),i=r.evidence[0]?` (${r.evidence[0].file}${r.evidence[0].line?`:${r.evidence[0].line}`:""})`:"",o=r.ruleId?` \xB7 rule ${r.ruleId}`:"";return`## ${s} \xB7 ${e}${o} \xB7 ${r.title}${i}
486
486
  Finding \`${r.id}\` [${r.severity}] was marked **${e}**`+(n?` by ${n}`:"")+`.${t?` Reason: ${t}`:""}
487
- `+(e==="false-positive"?"Do not raise this class of finding here again unless the code meaningfully changes.":"Known and accepted \u2014 do not re-raise; mention only if its risk materially grows.")}function tl(r,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
488
- ${r.trim()}`}function rl(r){let e=[];for(let t of Ju.AuditRole.options)for(let n of Xu(t,r))e.push({role:t,...n});return e}function nl(r,e,t,n,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=t==="org"?We.default.join(io(e),s):n==="lessons"?oo(r,e):Yu(r,e);pe.default.mkdirSync(We.default.dirname(o),{recursive:!0}),pe.default.writeFileSync(o,i,{mode:t==="org"?384:420})}var uo=()=>new Date().toISOString(),g={info:r=>console.log(`${uo()} [info] ${r}`),warn:r=>console.warn(`${uo()} [warn] ${r}`),error:r=>console.error(`${uo()} [error] ${r}`)};var sl=require("node:child_process"),il=$(require("node:fs"),1),ol=$(require("node:path"),1);function al(r){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let t=ol.default.join(r,e);if(il.default.existsSync(t))return t}return null}function ul(r){let e=[];for(let t of r.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let n of t[1].split(`
489
- `)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function ll(r,e,t={}){let n=[],s=t.perCommandTimeoutMs??6e5;for(let i of e){t.onProgress?.(`running: ${i}`);let o=Date.now(),a=await new Promise(l=>{let c=(0,sl.spawn)("bash",["-lc",i],{cwd:r,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),d="",p=S=>{d+=S.toString(),d.length>2e5&&(d=d.slice(-1e5))};c.stdout.on("data",p),c.stderr.on("data",p);let w=setTimeout(()=>{c.kill("SIGKILL"),d+=`
490
- [killed: timed out]`},s);c.on("close",S=>{clearTimeout(w),l({command:i,exitCode:S??-1,durationMs:Date.now()-o,tail:d.slice(-4e3)})}),c.on("error",S=>{clearTimeout(w),l({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(S)})})});t.onProgress?.(`exit ${a.exitCode} in ${Math.round(a.durationMs/1e3)}s: ${i}`),n.push(a)}return n}async function tn(r){let{packs:e,lessons:t}=Qu(r.role,r.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${r.role} role \u2014 add markdown files under ~/.config/ticketpilot/knowledge/${r.role}/ on the runner`};let n="";if(r.scope.kind==="ticket"&&r.scope.ref){let d=r.scope.ref,p="";try{let S=await r.jira.getIssue(d);p=`Ticket ${d}: ${S.summary}
487
+ `+(e==="false-positive"?"Do not raise this class of finding here again unless the code meaningfully changes.":"Known and accepted \u2014 do not re-raise; mention only if its risk materially grows.")}function ll(r,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
488
+ ${r.trim()}`}function cl(r){let e=[];for(let t of sl.AuditRole.options)for(let n of ol(t,r))e.push({role:t,...n});return e}function dl(r,e,t,n,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=t==="org"?Ye.default.join(fo(e),s):n==="lessons"?po(r,e):il(r,e);ge.default.mkdirSync(Ye.default.dirname(o),{recursive:!0}),ge.default.writeFileSync(o,i,{mode:t==="org"?384:420})}var go=()=>new Date().toISOString(),g={info:r=>console.log(`${go()} [info] ${r}`),warn:r=>console.warn(`${go()} [warn] ${r}`),error:r=>console.error(`${go()} [error] ${r}`)};var hl=require("node:child_process"),fl=P(require("node:fs"),1),pl=P(require("node:path"),1);function ml(r){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let t=pl.default.join(r,e);if(fl.default.existsSync(t))return t}return null}function gl(r){let e=[];for(let t of r.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let n of t[1].split(`
489
+ `)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function yl(r,e,t={}){let n=[],s=t.perCommandTimeoutMs??6e5;for(let i of e){t.onProgress?.(`running: ${i}`);let o=Date.now(),a=await new Promise(l=>{let c=(0,hl.spawn)("bash",["-lc",i],{cwd:r,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),d="",p=S=>{d+=S.toString(),d.length>2e5&&(d=d.slice(-1e5))};c.stdout.on("data",p),c.stderr.on("data",p);let _=setTimeout(()=>{c.kill("SIGKILL"),d+=`
490
+ [killed: timed out]`},s);c.on("close",S=>{clearTimeout(_),l({command:i,exitCode:S??-1,durationMs:Date.now()-o,tail:d.slice(-4e3)})}),c.on("error",S=>{clearTimeout(_),l({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(S)})})});t.onProgress?.(`exit ${a.exitCode} in ${Math.round(a.durationMs/1e3)}s: ${i}`),n.push(a)}return n}async function sn(r){let{packs:e,lessons:t}=al(r.role,r.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${r.role} role \u2014 add markdown files under ~/.config/ticketpilot/knowledge/${r.role}/ on the runner`};let n="";if(r.scope.kind==="ticket"&&r.scope.ref){let d=r.scope.ref,p="";try{let S=await r.jira.getIssue(d);p=`Ticket ${d}: ${S.summary}
491
491
 
492
- ${S.description}`.slice(0,4e3)}catch{p=`Ticket ${d} (could not fetch its text from Jira).`}let w=await Vi(r.repoPath,d).catch(()=>null);if(w){let{base:S,stat:x,diff:_}=await Es(r.repoPath,w).catch(()=>({base:"",stat:"",diff:""}));n=`${p}
492
+ ${S.description}`.slice(0,4e3)}catch{p=`Ticket ${d} (could not fetch its text from Jira).`}let _=await Xi(r.repoPath,d).catch(()=>null);if(_){let{base:S,stat:T,diff:C}=await js(r.repoPath,_).catch(()=>({base:"",stat:"",diff:""}));n=`${p}
493
493
 
494
- Its implementation branch \`${w}\` vs \`${S}\`:
494
+ Its implementation branch \`${_}\` vs \`${S}\`:
495
495
  \`\`\`
496
- ${x}\`\`\`
496
+ ${T}\`\`\`
497
497
  \`\`\`diff
498
- ${_}
498
+ ${C}
499
499
  \`\`\``}else n=`${p}
500
500
 
501
- No implementation branch found for ${d} \u2014 audit the parts of the codebase this ticket touches or would touch.`}else if(r.scope.kind==="branch"&&r.scope.ref){let{base:d,stat:p,diff:w}=await Es(r.repoPath,r.scope.ref);n=`The diff of \`${r.scope.ref}\` vs \`${d}\`:
501
+ No implementation branch found for ${d} \u2014 audit the parts of the codebase this ticket touches or would touch.`}else if(r.scope.kind==="branch"&&r.scope.ref){let{base:d,stat:p,diff:_}=await js(r.repoPath,r.scope.ref);n=`The diff of \`${r.scope.ref}\` vs \`${d}\`:
502
502
  \`\`\`
503
503
  ${p}\`\`\`
504
504
  \`\`\`diff
505
- ${w}
506
- \`\`\``}let s,i;if(r.role==="testing"){let d=al(r.repoPath),p=d?ul(cl.default.readFileSync(d,"utf8")):[];p.length&&(g.info(`Audit (testing): executing ${p.length} TEST.md command(s)`),i=await ll(r.repoPath,p,{onProgress:w=>g.info(`[test-run] ${w}`)}),s=i.map(w=>`$ ${w.command}
507
- (exit ${w.exitCode}, ${Math.round(w.durationMs/1e3)}s)
508
- ${w.tail.slice(-2e3)}`).join(`
505
+ ${_}
506
+ \`\`\``}let s,i;if(r.role==="testing"){let d=ml(r.repoPath),p=d?gl(vl.default.readFileSync(d,"utf8")):[];p.length&&(g.info(`Audit (testing): executing ${p.length} TEST.md command(s)`),i=await yl(r.repoPath,p,{onProgress:_=>g.info(`[test-run] ${_}`)}),s=i.map(_=>`$ ${_.command}
507
+ (exit ${_.exitCode}, ${Math.round(_.durationMs/1e3)}s)
508
+ ${_.tail.slice(-2e3)}`).join(`
509
509
 
510
510
  ---
511
511
 
512
- `))}let o=r.model||"claude-fable-5",a=await Oe.run({repoPath:r.repoPath,prompt:Uu(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.claudeBin,mode:"read_only",maxTurns:120,sessionId:(0,lo.randomUUID)(),model:o,onLog:(d,p)=>{d==="agent"&&g.info(`[audit:${r.role}] ${p.slice(0,160)}`)}}),l=qu(a.resultText);if("error"in l)return{ok:!1,error:l.error};let c={id:(0,lo.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:l.summary,packNames:e.map(d=>d.name),findings:l.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return Ku(r.projectId,c),g.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${l.findings.length} finding(s)`+(l.dropped?`, ${l.dropped} dropped for missing evidence`:"")),{ok:!0,audit:c}}var Tr=$(Te(),1);var wl=$(require("node:path"),1),Ls=require("node:crypto"),xe=$(Te(),1);var Mn=$(Te(),1);var dl=require("node:child_process"),hl=$(require("node:readline"),1),fl=$(Te(),1);async function qp(r){if(r.mode!=="read_only")return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,error:"the codex adapter only supports read-only runs \u2014 its write sandbox cannot exclude shell, and Allwright never weakens a guarantee silently"};if(r.resume)return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,error:"the codex adapter cannot resume sessions"};let e=["exec","--json","--sandbox","read-only","--skip-git-repo-check","--cd",r.repoPath,...r.model?["--model",r.model]:[],"-"];return new Promise(t=>{let n=(0,dl.spawn)(r.bin,e,{cwd:r.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0},i="",o=!1,a=()=>{o||(o=!0,clearTimeout(l),t(s))},l=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",s.error),n.kill("SIGTERM"),setTimeout(()=>n.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);n.stdin.write(r.prompt),n.stdin.end(),hl.default.createInterface({input:n.stdout}).on("line",p=>{if(!p.trim())return;let w;try{w=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}let S=w.item??w.msg??w,x=S?.type??w.type,_=S?.text??S?.message??"";x==="agent_message"&&typeof _=="string"&&_.trim()?(i=_,r.onLog("agent",_.trim().slice(0,4e3))):x==="command_execution"||x==="exec_command_begin"?r.onLog("info",`tool ${String(S?.command??"").slice(0,300)}`):x==="error"&&typeof _=="string"&&_&&r.onLog("error",_.slice(0,1e3))});let d="";n.stderr.on("data",p=>{d=(d+p.toString()).slice(-2e3)}),n.on("error",p=>{s.error=`failed to start ${r.bin}: ${p.message} \u2014 is the Codex CLI installed and logged in?`,r.onLog("error",s.error),a()}),n.on("close",p=>{p===0&&i.trim()?(s.ok=!0,s.resultText=i):s.error||(s.error=`codex exited with code ${p}`+(i?"":" and produced no answer")+(d?`: ${d.slice(-500)}`:"")),a()})})}var co={id:"codex",displayName:"OpenAI Codex CLI (experimental)",capabilities:fl.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:qp};var Bp={[Oe.id]:Oe,[co.id]:co};function _r(r){return Bp[r||Mn.DEFAULT_AGENT_ID]??null}function rn(r,e){return!e||e===Oe.id?r.claudeBin:r.agents[e]?.bin??e}function Ps(r,e){let t=_r(r);if(!t)return`no agent adapter named "${r}" on this runner \u2014 update the runner, or set the rule's agent to "${Mn.DEFAULT_AGENT_ID}"`;let n=(0,Mn.missingAgentCapabilities)(t.id,e);return n&&n.length?`agent "${t.displayName}" cannot run ${e} rules: it cannot guarantee ${n.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function $t(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}lt();vr();var me=$(require("node:fs"),1),sn=$(require("node:path"),1);var Zp=k.object({runId:k.string(),issueKey:k.string(),repoName:k.string(),owner:k.string(),repo:k.string(),prNumber:k.number().int(),prUrl:k.string(),branch:k.string(),headSha:k.string(),doneLabel:k.string(),failedLabel:k.string(),jiraTransition:k.string().optional(),changesRequestedNotified:k.boolean().optional(),conflictNotified:k.boolean().optional()}),Kp=k.record(Zp),Vp=k.object({runId:k.string(),issueKey:k.string(),issueSummary:k.string().default(""),projectId:k.string(),repoName:k.string(),environmentName:k.string(),requestedBy:k.string().default(""),createdAt:k.string()}),Gp=k.record(Vp),Hp=k.object({runId:k.string(),issueKey:k.string(),kind:k.enum(["plan","implement"]),repoPath:k.string(),sessionId:k.string(),doneLabel:k.string(),failedLabel:k.string(),timeoutSeconds:k.number(),createdAt:k.string(),questionsPostedAt:k.string(),rounds:k.number().int().default(1),nextLogSeq:k.number().int().nonnegative().default(0),baseRepoPath:k.string().optional(),repoName:k.string().optional(),branch:k.string().optional(),baseBranch:k.string().optional(),jiraTransition:k.string().optional(),jiraTransitionOnMerge:k.string().optional(),requireApproval:k.boolean().optional(),maxTurns:k.number().int().optional(),issueSummary:k.string().default(""),claudeConfigDir:k.string().optional(),agent:k.string().optional(),model:k.string().optional(),actorEmail:k.string().optional()}),Wp=k.object({runId:k.string(),issueKey:k.string(),issueSummary:k.string().default(""),repoName:k.string(),baseRepoPath:k.string(),branch:k.string(),baseBranch:k.string(),headSha:k.string(),requireApproval:k.boolean(),doneLabel:k.string(),failedLabel:k.string(),jiraTransition:k.string().optional(),jiraTransitionOnMerge:k.string().optional(),actorEmail:k.string().optional(),resultSummary:k.string().default(""),costUsd:k.number().default(0),nextLogSeq:k.number().int().default(1e5),createdAt:k.string()}),Jp=k.record(Wp),Yp=k.object({runId:k.string(),issueKey:k.string(),repoName:k.string(),owner:k.string(),repo:k.string(),prNumber:k.number().int(),prUrl:k.string(),jiraTransitionOnMerge:k.string().default(""),createdAt:k.string()}),Xp=k.record(Yp),Qp=k.record(Hp);function pl(){return sn.default.join(ee(),"pending-runs.json")}function ho(){return sn.default.join(ee(),"pending-deploys.json")}function fo(){return sn.default.join(ee(),"pending-inputs.json")}function po(){return sn.default.join(ee(),"merge-watch.json")}function mo(){return sn.default.join(ee(),"pending-pushes.json")}function go(){let r=mo();if(!me.default.existsSync(r))return{};try{return Jp.parse(JSON.parse(me.default.readFileSync(r,"utf8")))}catch{return{}}}function yo(r){let e=go();e[r.runId]=r,ct(mo(),e)}function js(r){return go()[r]??null}function vo(r){let e=go();r in e&&(delete e[r],ct(mo(),e))}function Os(){let r=po();if(!me.default.existsSync(r))return{};try{return Xp.parse(JSON.parse(me.default.readFileSync(r,"utf8")))}catch{return{}}}function ml(r){let e=Os();e[r.runId]=r,ct(po(),e)}function Ln(r){let e=Os();r in e&&(delete e[r],ct(po(),e))}function Dn(){let r=pl();if(!me.default.existsSync(r))return{};try{return Kp.parse(JSON.parse(me.default.readFileSync(r,"utf8")))}catch{return{}}}function ct(r,e){me.default.mkdirSync(ee(),{recursive:!0,mode:448});let t=r+".tmp";me.default.writeFileSync(t,JSON.stringify(e,null,2)+`
513
- `,{mode:384}),me.default.renameSync(t,r),me.default.chmodSync(r,384)}function gl(r){ct(pl(),r)}function on(r){let e=Dn();e[r.runId]=r,gl(e)}function _o(r){return Dn()[r]??null}function br(r){let e=Dn();r in e&&(delete e[r],gl(e))}function bo(){let r=ho();if(!me.default.existsSync(r))return{};try{return Gp.parse(JSON.parse(me.default.readFileSync(r,"utf8")))}catch{return{}}}function yl(r){let e=bo();e[r.runId]=r,ct(ho(),e)}function Ns(r){return bo()[r]??null}function Ms(r){let e=bo();r in e&&(delete e[r],ct(ho(),e))}function an(){let r=fo();if(!me.default.existsSync(r))return{};try{return Qp.parse(JSON.parse(me.default.readFileSync(r,"utf8")))}catch{return{}}}function vl(r){let e=an();e[r.runId]=r,ct(fo(),e)}function Je(r){let e=an();r in e&&(delete e[r],ct(fo(),e))}var kl=5,_l=2,em=8,bl=2,tm="You stopped because the session hit its turn limit \u2014 nothing failed. Continue exactly where you left off. Do not re-read files you already know or redo completed work; be economical with tool calls and finish the remaining work. Then end with your final summary exactly as the original instructions asked.";async function Un(r,e,t,n){let s=Date.now(),i="";n&&(i=await n().catch(()=>""));let o=await r.run(e),a=0,l="",c=n?em:_l;for(;!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume;){if(a>=c){l=`resume cap (${c}) reached`;break}if(n&&a>=_l){let p=await n().catch(()=>""),w=p!==""&&p!==i;if(i=p,!w){l="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*bl*1e3){l=`wall-clock budget (${bl}x the rule's timeout) exhausted`;break}}a++,t("info",`Turn limit hit mid-work \u2014 auto-resuming the same session (resume ${a}, cap ${c})`);let d=await r.run({...e,prompt:tm,resume:!0});d.costUsd+=o.costUsd,d.inputTokens+=o.inputTokens,d.outputTokens+=o.outputTokens,o=d}return!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} \u2014 even after ${a} automatic same-session resume(s)${l?` (stopped: ${l})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}function wr(r,e,t=0){let n=t;return{emit:(o,a)=>{e.send({type:"run.log",runId:r,seq:n++,ts:new Date().toISOString(),level:o,message:a}),o!=="agent"&&g.info(`[run ${r}] ${a}`)},setStatus:(o,a={})=>{e.send({type:"run.status",runId:r,status:o,...a})},nextSeq:()=>n}}async function wo(r){return r.rule.action.type==="implement"?sm(r):r.rule.action.type==="respond"?nm(r):rm(r)}async function rm(r){let{emit:e,setStatus:t,nextSeq:n}=wr(r.runId,r.transport),{trigger:s}=r.rule,i=r.rule.action;if(i.type!=="plan_only")return;let o=Ps(i.agent,i.type);if(o){e("error",o),await un(r,o),t("failed",{error:o});return}let a=(0,Ls.randomUUID)();try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", plan-only)`),e("info",`Fetching ${r.issueKey} from Jira`);let l=await r.jira.getIssue(r.issueKey),c=$t(i.promptTemplate,{issueKey:l.key,summary:l.summary,description:l.description||"(no description)",comments:Bn(l.comments)})+await Br(r.jira,l.attachments,r.repoPath,e);e("info",`Starting Claude Code in ${r.repoPath} \u2014 read-only tools, path-jailed to the repo, timeout ${i.timeoutSeconds}s`);let d=await Un(_r(i.agent),{repoPath:r.repoPath,prompt:c,timeoutSeconds:i.timeoutSeconds,bin:rn(r.cfg,i.agent),configDir:r.claudeConfigDir,mode:"read_only",model:i.model||void 0,sessionId:a,onLog:(S,x)=>e(S,x)},e),p={costUsd:d.costUsd,inputTokens:d.inputTokens,outputTokens:d.outputTokens,billingMode:d.billingMode,model:d.model};if(!d.ok||!d.resultText.trim()){let S=d.error??"Claude Code produced no output";e("error",`Run failed: ${S}`),await un(r,S),t(d.timedOut?"timed_out":"failed",{error:S,...p});return}let w=Ds(d.resultText);if(w){await zs({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:a,doneLabel:s.doneLabel,failedLabel:s.failedLabel,timeoutSeconds:i.timeoutSeconds,jira:r.jira,nextLogSeq:n(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:i.agent,model:i.model},w,e,t,p);return}await Tl({runId:r.runId,issueKey:r.issueKey,doneLabel:s.doneLabel,jira:r.jira,resultText:d.resultText,costFields:p,emit:e,setStatus:t})}catch(l){let c=l instanceof Error?l.message:String(l);e("error",`Run failed: ${c}`),await un(r,c),t("failed",{error:c})}finally{Tt(r.repoPath)}}async function Sl(r,e,t,n){let{emit:s,setStatus:i,nextSeq:o}=wr(r.runId,n.transport,r.nextLogSeq);try{i("running"),s("info",`Reply received on ${r.issueKey} \u2014 continuing run \`${r.runId}\``);let a=Nl(e)+await Br(n.jiraFor(r.repoName??""),t,r.repoPath,s),l=await Un(_r(r.agent),{repoPath:r.repoPath,prompt:a,timeoutSeconds:r.timeoutSeconds,bin:rn(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"read_only",model:r.model||void 0,sessionId:r.sessionId,resume:!0,onLog:(p,w)=>s(p,w)},s),c={costUsd:l.costUsd,inputTokens:l.inputTokens,outputTokens:l.outputTokens,billingMode:l.billingMode,model:l.model};if(!l.ok||!l.resultText.trim()){let p=l.error??"Claude Code produced no output";s("error",`Run failed: ${p}`),await dt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,p),Je(r.runId),i(l.timedOut?"timed_out":"failed",{error:p,...c});return}let d=Ds(l.resultText);if(d){if(r.rounds>=kl){await Ml(n.jiraFor(r.repoName??""),r,s,i,c);return}await zs({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:o(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model},d,s,i,c);return}await Tl({runId:r.runId,issueKey:r.issueKey,doneLabel:r.doneLabel,jira:n.jiraFor(r.repoName??""),resultText:l.resultText,costFields:c,emit:s,setStatus:i}),Je(r.runId)}catch(a){let l=a instanceof Error?a.message:String(a);s("error",`Run failed: ${l}`),await dt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,l),Je(r.runId),i("failed",{error:l})}finally{Tt(r.repoPath)}}async function Tl(r){let{runId:e,issueKey:t,doneLabel:n,jira:s,resultText:i,costFields:o,emit:a,setStatus:l}=r;l("posting",o),a("info",`Posting plan to ${t} (${i.length} chars)`);let c=`
512
+ `))}let o=r.model||"claude-fable-5",a=await Ne.run({repoPath:r.repoPath,prompt:Hu(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.claudeBin,mode:"read_only",maxTurns:120,sessionId:(0,yo.randomUUID)(),model:o,onLog:(d,p)=>{d==="agent"&&g.info(`[audit:${r.role}] ${p.slice(0,160)}`)}}),l=Wu(a.resultText);if("error"in l)return{ok:!1,error:l.error};let c={id:(0,yo.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:l.summary,packNames:e.map(d=>d.name),findings:l.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return Qu(r.projectId,c),g.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${l.findings.length} finding(s)`+(l.dropped?`, ${l.dropped} dropped for missing evidence`:"")),{ok:!0,audit:c}}var Cr=P(xe(),1);var Al=P(require("node:path"),1),Bs=require("node:crypto"),Ce=P(xe(),1);var Un=P(xe(),1);var _l=require("node:child_process"),bl=P(require("node:readline"),1),wl=P(xe(),1);async function Wp(r){if(r.mode!=="read_only")return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,error:"the codex adapter only supports read-only runs \u2014 its write sandbox cannot exclude shell, and Allwright never weakens a guarantee silently"};if(r.resume)return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,error:"the codex adapter cannot resume sessions"};let e=["exec","--json","--sandbox","read-only","--skip-git-repo-check","--cd",r.repoPath,...r.model?["--model",r.model]:[],"-"];return new Promise(t=>{let n=(0,_l.spawn)(r.bin,e,{cwd:r.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0},i="",o=!1,a=()=>{o||(o=!0,clearTimeout(l),t(s))},l=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",s.error),n.kill("SIGTERM"),setTimeout(()=>n.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);n.stdin.write(r.prompt),n.stdin.end(),bl.default.createInterface({input:n.stdout}).on("line",p=>{if(!p.trim())return;let _;try{_=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}let S=_.item??_.msg??_,T=S?.type??_.type,C=S?.text??S?.message??"";T==="agent_message"&&typeof C=="string"&&C.trim()?(i=C,r.onLog("agent",C.trim().slice(0,4e3))):T==="command_execution"||T==="exec_command_begin"?r.onLog("info",`tool ${String(S?.command??"").slice(0,300)}`):T==="error"&&typeof C=="string"&&C&&r.onLog("error",C.slice(0,1e3))});let d="";n.stderr.on("data",p=>{d=(d+p.toString()).slice(-2e3)}),n.on("error",p=>{s.error=`failed to start ${r.bin}: ${p.message} \u2014 is the Codex CLI installed and logged in?`,r.onLog("error",s.error),a()}),n.on("close",p=>{p===0&&i.trim()?(s.ok=!0,s.resultText=i):s.error||(s.error=`codex exited with code ${p}`+(i?"":" and produced no answer")+(d?`: ${d.slice(-500)}`:"")),a()})})}var vo={id:"codex",displayName:"OpenAI Codex CLI (experimental)",capabilities:wl.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:Wp};var Jp={[Ne.id]:Ne,[vo.id]:vo};function wr(r){return Jp[r||Un.DEFAULT_AGENT_ID]??null}function on(r,e){return!e||e===Ne.id?r.claudeBin:r.agents[e]?.bin??e}function Ls(r,e){let t=wr(r);if(!t)return`no agent adapter named "${r}" on this runner \u2014 update the runner, or set the rule's agent to "${Un.DEFAULT_AGENT_ID}"`;let n=(0,Un.missingAgentCapabilities)(t.id,e);return n&&n.length?`agent "${t.displayName}" cannot run ${e} rules: it cannot guarantee ${n.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function Pt(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}ct();_r();var ye=P(require("node:fs"),1),un=P(require("node:path"),1);var Xp=w.object({runId:w.string(),issueKey:w.string(),repoName:w.string(),owner:w.string(),repo:w.string(),prNumber:w.number().int(),prUrl:w.string(),branch:w.string(),headSha:w.string(),doneLabel:w.string(),failedLabel:w.string(),jiraTransition:w.string().optional(),changesRequestedNotified:w.boolean().optional(),conflictNotified:w.boolean().optional()}),Qp=w.record(Xp),em=w.object({runId:w.string(),issueKey:w.string(),issueSummary:w.string().default(""),projectId:w.string(),repoName:w.string(),environmentName:w.string(),requestedBy:w.string().default(""),createdAt:w.string()}),tm=w.record(em),rm=w.object({runId:w.string(),issueKey:w.string(),kind:w.enum(["plan","implement"]),repoPath:w.string(),sessionId:w.string(),doneLabel:w.string(),failedLabel:w.string(),timeoutSeconds:w.number(),createdAt:w.string(),questionsPostedAt:w.string(),rounds:w.number().int().default(1),nextLogSeq:w.number().int().nonnegative().default(0),baseRepoPath:w.string().optional(),repoName:w.string().optional(),branch:w.string().optional(),baseBranch:w.string().optional(),jiraTransition:w.string().optional(),jiraTransitionOnMerge:w.string().optional(),requireApproval:w.boolean().optional(),maxTurns:w.number().int().optional(),issueSummary:w.string().default(""),claudeConfigDir:w.string().optional(),agent:w.string().optional(),model:w.string().optional(),actorEmail:w.string().optional()}),nm=w.object({runId:w.string(),issueKey:w.string(),issueSummary:w.string().default(""),repoName:w.string(),baseRepoPath:w.string(),branch:w.string(),baseBranch:w.string(),headSha:w.string(),requireApproval:w.boolean(),doneLabel:w.string(),failedLabel:w.string(),jiraTransition:w.string().optional(),jiraTransitionOnMerge:w.string().optional(),actorEmail:w.string().optional(),resultSummary:w.string().default(""),costUsd:w.number().default(0),nextLogSeq:w.number().int().default(1e5),createdAt:w.string()}),sm=w.record(nm),im=w.object({runId:w.string(),issueKey:w.string(),repoName:w.string(),owner:w.string(),repo:w.string(),prNumber:w.number().int(),prUrl:w.string(),jiraTransitionOnMerge:w.string().default(""),createdAt:w.string()}),om=w.record(im),am=w.record(rm);function kl(){return un.default.join(Q(),"pending-runs.json")}function _o(){return un.default.join(Q(),"pending-deploys.json")}function bo(){return un.default.join(Q(),"pending-inputs.json")}function wo(){return un.default.join(Q(),"merge-watch.json")}function ko(){return un.default.join(Q(),"pending-pushes.json")}function So(){let r=ko();if(!ye.default.existsSync(r))return{};try{return sm.parse(JSON.parse(ye.default.readFileSync(r,"utf8")))}catch{return{}}}function To(r){let e=So();e[r.runId]=r,dt(ko(),e)}function Ds(r){return So()[r]??null}function xo(r){let e=So();r in e&&(delete e[r],dt(ko(),e))}function zs(){let r=wo();if(!ye.default.existsSync(r))return{};try{return om.parse(JSON.parse(ye.default.readFileSync(r,"utf8")))}catch{return{}}}function Sl(r){let e=zs();e[r.runId]=r,dt(wo(),e)}function qn(r){let e=zs();r in e&&(delete e[r],dt(wo(),e))}function Bn(){let r=kl();if(!ye.default.existsSync(r))return{};try{return Qp.parse(JSON.parse(ye.default.readFileSync(r,"utf8")))}catch{return{}}}function dt(r,e){ye.default.mkdirSync(Q(),{recursive:!0,mode:448});let t=r+".tmp";ye.default.writeFileSync(t,JSON.stringify(e,null,2)+`
513
+ `,{mode:384}),ye.default.renameSync(t,r),ye.default.chmodSync(r,384)}function Tl(r){dt(kl(),r)}function ln(r){let e=Bn();e[r.runId]=r,Tl(e)}function Co(r){return Bn()[r]??null}function kr(r){let e=Bn();r in e&&(delete e[r],Tl(e))}function Eo(){let r=_o();if(!ye.default.existsSync(r))return{};try{return tm.parse(JSON.parse(ye.default.readFileSync(r,"utf8")))}catch{return{}}}function xl(r){let e=Eo();e[r.runId]=r,dt(_o(),e)}function Us(r){return Eo()[r]??null}function qs(r){let e=Eo();r in e&&(delete e[r],dt(_o(),e))}function cn(){let r=bo();if(!ye.default.existsSync(r))return{};try{return am.parse(JSON.parse(ye.default.readFileSync(r,"utf8")))}catch{return{}}}function Cl(r){let e=cn();e[r.runId]=r,dt(bo(),e)}function Xe(r){let e=cn();r in e&&(delete e[r],dt(bo(),e))}var Rl=5,El=2,um=8,Il=2,lm="You stopped because the session hit its turn limit \u2014 nothing failed. Continue exactly where you left off. Do not re-read files you already know or redo completed work; be economical with tool calls and finish the remaining work. Then end with your final summary exactly as the original instructions asked.";async function Zn(r,e,t,n){let s=Date.now(),i="";n&&(i=await n().catch(()=>""));let o=await r.run(e),a=0,l="",c=n?um:El;for(;!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume;){if(a>=c){l=`resume cap (${c}) reached`;break}if(n&&a>=El){let p=await n().catch(()=>""),_=p!==""&&p!==i;if(i=p,!_){l="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*Il*1e3){l=`wall-clock budget (${Il}x the rule's timeout) exhausted`;break}}a++,t("info",`Turn limit hit mid-work \u2014 auto-resuming the same session (resume ${a}, cap ${c})`);let d=await r.run({...e,prompt:lm,resume:!0});d.costUsd+=o.costUsd,d.inputTokens+=o.inputTokens,d.outputTokens+=o.outputTokens,o=d}return!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} \u2014 even after ${a} automatic same-session resume(s)${l?` (stopped: ${l})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}function Sr(r,e,t=0){let n=t;return{emit:(o,a)=>{e.send({type:"run.log",runId:r,seq:n++,ts:new Date().toISOString(),level:o,message:a}),o!=="agent"&&g.info(`[run ${r}] ${a}`)},setStatus:(o,a={})=>{e.send({type:"run.status",runId:r,status:o,...a})},nextSeq:()=>n}}async function Io(r){return r.rule.action.type==="implement"?hm(r):r.rule.action.type==="respond"?dm(r):cm(r)}async function cm(r){let{emit:e,setStatus:t,nextSeq:n}=Sr(r.runId,r.transport),{trigger:s}=r.rule,i=r.rule.action;if(i.type!=="plan_only")return;let o=Ls(i.agent,i.type);if(o){e("error",o),await dn(r,o),t("failed",{error:o});return}let a=(0,Bs.randomUUID)();try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", plan-only)`),e("info",`Fetching ${r.issueKey} from Jira`);let l=await r.jira.getIssue(r.issueKey),c=Pt(i.promptTemplate,{issueKey:l.key,summary:l.summary,description:l.description||"(no description)",comments:Vn(l.comments)})+await Zr(r.jira,l.attachments,r.repoPath,e);e("info",`Starting Claude Code in ${r.repoPath} \u2014 read-only tools, path-jailed to the repo, timeout ${i.timeoutSeconds}s`);let d=await Zn(wr(i.agent),{repoPath:r.repoPath,prompt:c,timeoutSeconds:i.timeoutSeconds,bin:on(r.cfg,i.agent),configDir:r.claudeConfigDir,mode:"read_only",model:i.model||void 0,sessionId:a,onLog:(S,T)=>e(S,T)},e),p={costUsd:d.costUsd,inputTokens:d.inputTokens,outputTokens:d.outputTokens,billingMode:d.billingMode,model:d.model};if(!d.ok||!d.resultText.trim()){let S=d.error??"Claude Code produced no output";e("error",`Run failed: ${S}`),await dn(r,S),t(d.timedOut?"timed_out":"failed",{error:S,...p});return}let _=Fs(d.resultText);if(_){await Zs({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:a,doneLabel:s.doneLabel,failedLabel:s.failedLabel,timeoutSeconds:i.timeoutSeconds,jira:r.jira,nextLogSeq:n(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:i.agent,model:i.model},_,e,t,p);return}await Pl({runId:r.runId,issueKey:r.issueKey,doneLabel:s.doneLabel,jira:r.jira,resultText:d.resultText,costFields:p,emit:e,setStatus:t})}catch(l){let c=l instanceof Error?l.message:String(l);e("error",`Run failed: ${c}`),await dn(r,c),t("failed",{error:c})}finally{xt(r.repoPath)}}async function $l(r,e,t,n){let{emit:s,setStatus:i,nextSeq:o}=Sr(r.runId,n.transport,r.nextLogSeq);try{i("running"),s("info",`Reply received on ${r.issueKey} \u2014 continuing run \`${r.runId}\``);let a=Fl(e)+await Zr(n.jiraFor(r.repoName??""),t,r.repoPath,s),l=await Zn(wr(r.agent),{repoPath:r.repoPath,prompt:a,timeoutSeconds:r.timeoutSeconds,bin:on(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"read_only",model:r.model||void 0,sessionId:r.sessionId,resume:!0,onLog:(p,_)=>s(p,_)},s),c={costUsd:l.costUsd,inputTokens:l.inputTokens,outputTokens:l.outputTokens,billingMode:l.billingMode,model:l.model};if(!l.ok||!l.resultText.trim()){let p=l.error??"Claude Code produced no output";s("error",`Run failed: ${p}`),await ht(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,p),Xe(r.runId),i(l.timedOut?"timed_out":"failed",{error:p,...c});return}let d=Fs(l.resultText);if(d){if(r.rounds>=Rl){await Zl(n.jiraFor(r.repoName??""),r,s,i,c);return}await Zs({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:o(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model},d,s,i,c);return}await Pl({runId:r.runId,issueKey:r.issueKey,doneLabel:r.doneLabel,jira:n.jiraFor(r.repoName??""),resultText:l.resultText,costFields:c,emit:s,setStatus:i}),Xe(r.runId)}catch(a){let l=a instanceof Error?a.message:String(a);s("error",`Run failed: ${l}`),await ht(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,l),Xe(r.runId),i("failed",{error:l})}finally{xt(r.repoPath)}}async function Pl(r){let{runId:e,issueKey:t,doneLabel:n,jira:s,resultText:i,costFields:o,emit:a,setStatus:l}=r;l("posting",o),a("info",`Posting plan to ${t} (${i.length} chars)`);let c=`
514
514
 
515
515
  ---
516
- _Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(t,i+c),await s.editLabels(t,{add:[n],remove:[xe.NEEDS_INPUT_LABEL]}),a("info",`Labeled ${t} with "${n}"`),l("succeeded",{...o,resultSummary:zn(i)}),a("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function nm(r){let{emit:e,setStatus:t}=wr(r.runId,r.transport),n=r.rule.action;if(n.type!=="respond")return;let s=Ps(n.agent,n.type);if(s){e("error",s),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
516
+ _Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(t,i+c),await s.editLabels(t,{add:[n],remove:[Ce.NEEDS_INPUT_LABEL]}),a("info",`Labeled ${t} with "${n}"`),l("succeeded",{...o,resultSummary:Fn(i)}),a("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function dm(r){let{emit:e,setStatus:t}=Sr(r.runId,r.transport),n=r.rule.action;if(n.type!=="respond")return;let s=Ls(n.agent,n.type);if(s){e("error",s),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
517
517
 
518
- ${s}`).catch(()=>{}),t("failed",{error:s});return}try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", respond`+(r.question?`, question from ${r.question.author}`:"")+")"),e("info",`Fetching ${r.issueKey} from Jira`);let i=await r.jira.getIssue(r.issueKey),o=$t(n.promptTemplate,{issueKey:i.key,summary:i.summary,description:i.description||"(no description)",comments:Bn(i.comments),question:r.question?.body??"(see the latest comment on the ticket)",questionAuthor:r.question?.author??"the commenter"})+await Br(r.jira,i.attachments,r.repoPath,e);e("info",`Starting Claude Code in ${r.repoPath} \u2014 read-only tools, path-jailed, timeout ${n.timeoutSeconds}s`);let a=await Un(_r(n.agent),{repoPath:r.repoPath,prompt:o,timeoutSeconds:n.timeoutSeconds,bin:rn(r.cfg,n.agent),configDir:r.claudeConfigDir,mode:"read_only",model:n.model||void 0,sessionId:(0,Ls.randomUUID)(),onLog:(c,d)=>e(c,d)},e),l={costUsd:a.costUsd,inputTokens:a.inputTokens,outputTokens:a.outputTokens,billingMode:a.billingMode,model:a.model};if(!a.ok||!a.resultText.trim()){let c=a.error??"Claude Code produced no answer";e("error",`Run failed: ${c}`),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
518
+ ${s}`).catch(()=>{}),t("failed",{error:s});return}try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", respond`+(r.question?`, question from ${r.question.author}`:"")+")"),e("info",`Fetching ${r.issueKey} from Jira`);let i=await r.jira.getIssue(r.issueKey),o=Pt(n.promptTemplate,{issueKey:i.key,summary:i.summary,description:i.description||"(no description)",comments:Vn(i.comments),question:r.question?.body??"(see the latest comment on the ticket)",questionAuthor:r.question?.author??"the commenter"})+await Zr(r.jira,i.attachments,r.repoPath,e);e("info",`Starting Claude Code in ${r.repoPath} \u2014 read-only tools, path-jailed, timeout ${n.timeoutSeconds}s`);let a=await Zn(wr(n.agent),{repoPath:r.repoPath,prompt:o,timeoutSeconds:n.timeoutSeconds,bin:on(r.cfg,n.agent),configDir:r.claudeConfigDir,mode:"read_only",model:n.model||void 0,sessionId:(0,Bs.randomUUID)(),onLog:(c,d)=>e(c,d)},e),l={costUsd:a.costUsd,inputTokens:a.inputTokens,outputTokens:a.outputTokens,billingMode:a.billingMode,model:a.model};if(!a.ok||!a.resultText.trim()){let c=a.error??"Claude Code produced no answer";e("error",`Run failed: ${c}`),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
519
519
 
520
520
  Error: ${c.slice(0,800)}
521
521
 
522
- Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(d=>g.error(`could not post answer failure to ${r.issueKey}: ${d}`)),t(a.timedOut?"timed_out":"failed",{error:c,...l});return}t("posting",l),e("info",`Posting answer to ${r.issueKey} (${a.resultText.length} chars)`),await r.jira.addComment(r.issueKey,a.resultText),t("succeeded",{...l,resultSummary:zn(a.resultText)}),e("info",`Run succeeded \xB7 $${a.costUsd.toFixed(4)}`)}catch(i){let o=i instanceof Error?i.message:String(i);e("error",`Run failed: ${o}`),t("failed",{error:o})}finally{Tt(r.repoPath)}}async function xl(r,e,t,n){let s=`${e}-wip`;try{return Tt(r),await xs(r,`WIP: turn limit exhausted (Allwright run ${t})`),await zi(r,s),n("info",`Partial work preserved on branch "${s}"`),s}catch(i){return n("warn",`could not preserve partial work: ${i instanceof Error?i.message:i}`),null}}function Cl(r){return`
522
+ Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(d=>g.error(`could not post answer failure to ${r.issueKey}: ${d}`)),t(a.timedOut?"timed_out":"failed",{error:c,...l});return}t("posting",l),e("info",`Posting answer to ${r.issueKey} (${a.resultText.length} chars)`),await r.jira.addComment(r.issueKey,a.resultText),t("succeeded",{...l,resultSummary:Fn(a.resultText)}),e("info",`Run succeeded \xB7 $${a.costUsd.toFixed(4)}`)}catch(i){let o=i instanceof Error?i.message:String(i);e("error",`Run failed: ${o}`),t("failed",{error:o})}finally{xt(r.repoPath)}}async function jl(r,e,t,n){let s=`${e}-wip`;try{return xt(r),await $s(r,`WIP: turn limit exhausted (Allwright run ${t})`),await Ki(r,s),n("info",`Partial work preserved on branch "${s}"`),s}catch(i){return n("warn",`could not preserve partial work: ${i instanceof Error?i.message:i}`),null}}function Ol(r){return`
523
523
 
524
- Partial work from this run is saved on branch \`${r}\` \u2014 it was NOT safety-checked or reviewed and never merges on its own; a future run or a developer can pick it up.`}async function sm(r){let{emit:e,setStatus:t,nextSeq:n}=wr(r.runId,r.transport),{trigger:s}=r.rule,i=r.rule.action;if(i.type!=="implement")return;let o=Ps(i.agent,i.type);if(o){e("error",o),await un(r,o),t("failed",{error:o});return}let a=wl.default.join($n(),r.runId),l=$t(i.branchTemplate,{issueKey:r.issueKey}),c=(0,Ls.randomUUID)(),d=!1,p=!1;try{if(!Is(le()??r.cfg,r.project.repoName,r.actorEmail))throw new Error("no GitHub token applies to this repo \u2014 run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");if(l===i.baseBranch)throw new Error(`rendered branch "${l}" equals the base branch \u2014 refusing (check the rule's branch template)`);if(t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", implement)`),i.jiraTransitionOnStart)try{await r.jira.transitionByName(r.issueKey,i.jiraTransitionOnStart)?e("info",`Jira transition "${i.jiraTransitionOnStart}" applied at run start`):e("warn",`no transition named "${i.jiraTransitionOnStart}" is available from this ticket's current status \u2014 continuing anyway`)}catch(f){e("warn",`Jira start transition failed: ${f instanceof Error?f.message:f} \u2014 continuing anyway`)}let w=await gr(r.repoPath);if(e("info",`Repo origin: ${w}`),!yr(w))throw new Error(`origin "${w}" is not a GitHub remote \u2014 implement mode supports GitHub only`);e("info",`Fetching ${r.issueKey} from Jira`);let S=await r.jira.getIssue(r.issueKey);e("info",`Preparing worktree on branch "${l}" from origin/${i.baseBranch}`),await Xr(r.repoPath,i.baseBranch),await qi(r.repoPath,l),await Bi(r.repoPath,a,l,i.baseBranch),d=!0;let x=$t(i.promptTemplate,{issueKey:S.key,summary:S.summary,description:S.description||"(no description)",comments:Bn(S.comments)})+await Br(r.jira,S.attachments,a,e)+(i.updateMemory?xe.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree \u2014 edit tools enabled, path-jailed, no shell, timeout ${i.timeoutSeconds}s`);let _=await Un(_r(i.agent),{repoPath:a,prompt:x,timeoutSeconds:i.timeoutSeconds,bin:rn(r.cfg,i.agent),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:i.model||void 0,maxTurns:i.maxTurns,sessionId:c,onLog:(f,m)=>e(f,m)},e,()=>Ts(a)),O={costUsd:_.costUsd,inputTokens:_.inputTokens,outputTokens:_.outputTokens,billingMode:_.billingMode,model:_.model};if(!_.ok){let f=_.error??"Claude Code failed";e("error",`Run failed: ${f}`);let m=f;if(_.turnLimitHit){let b=await xl(a,l,r.runId,e);b&&(m+=Cl(b))}await un(r,m),t(_.timedOut?"timed_out":"failed",{error:f,...O});return}let q=Ds(_.resultText);if(q){p=!0,await zs({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:a,sessionId:c,doneLabel:s.doneLabel,failedLabel:s.failedLabel,timeoutSeconds:i.timeoutSeconds,jira:r.jira,nextLogSeq:n(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:i.agent,model:i.model,actorEmail:r.actorEmail,baseRepoPath:r.repoPath,repoName:r.project.repoName,branch:l,baseBranch:i.baseBranch,jiraTransition:i.jiraTransition,jiraTransitionOnMerge:i.jiraTransitionOnMerge,requireApproval:i.requireApproval,maxTurns:i.maxTurns,issueSummary:S.summary},q,e,t,O);return}Tt(a),await Il({runId:r.runId,issueKey:r.issueKey,issueSummary:S.summary,worktreePath:a,baseRepoPath:r.repoPath,branch:l,baseBranch:i.baseBranch,jiraTransition:i.jiraTransition,jiraTransitionOnMerge:i.jiraTransitionOnMerge,requireApproval:i.requireApproval,doneLabel:s.doneLabel,failedLabel:s.failedLabel,repoName:r.project.repoName,jira:r.jira,cfg:r.cfg,actorEmail:r.actorEmail,resultText:_.resultText,costFields:O,emit:e,setStatus:t})}catch(w){let S=w instanceof Error?w.message:String(w);e("error",`Run failed: ${S}`),await un(r,S),t("failed",{error:S})}finally{d&&!p&&await Qr(r.repoPath,a).catch(()=>{})}}async function El(r,e,t,n){let{emit:s,setStatus:i,nextSeq:o}=wr(r.runId,n.transport,r.nextLogSeq),a=r.repoPath,l=!1;try{if(!Is(le()??n.cfg,r.repoName??"",r.actorEmail))throw new Error("no GitHub token applies to this repo \u2014 run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");i("running"),s("info",`Reply received on ${r.issueKey} \u2014 continuing run \`${r.runId}\``);let c=Nl(e)+await Br(n.jiraFor(r.repoName??""),t,a,s),d=await Un(_r(r.agent),{repoPath:a,prompt:c,timeoutSeconds:r.timeoutSeconds,bin:rn(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:r.model||void 0,maxTurns:r.maxTurns??120,sessionId:r.sessionId,resume:!0,onLog:(S,x)=>s(S,x)},s,()=>Ts(a)),p={costUsd:d.costUsd,inputTokens:d.inputTokens,outputTokens:d.outputTokens,billingMode:d.billingMode,model:d.model};if(!d.ok){let S=d.error??"Claude Code failed";s("error",`Run failed: ${S}`);let x=S;if(d.turnLimitHit&&r.branch){let _=await xl(a,r.branch,r.runId,s);_&&(x+=Cl(_))}await dt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,x),Je(r.runId),i(d.timedOut?"timed_out":"failed",{error:S,...p});return}let w=Ds(d.resultText);if(w){if(r.rounds>=kl){await Ml(n.jiraFor(r.repoName??""),r,s,i,p);return}l=!0,await zs({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:a,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:o(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary},w,s,i,p);return}Tt(a),await Il({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,worktreePath:a,baseRepoPath:r.baseRepoPath??a,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,requireApproval:r.requireApproval??!0,doneLabel:r.doneLabel,failedLabel:r.failedLabel,repoName:r.repoName,jira:n.jiraFor(r.repoName??""),cfg:n.cfg,actorEmail:r.actorEmail,resultText:d.resultText,costFields:p,emit:s,setStatus:i}),Je(r.runId)}catch(c){let d=c instanceof Error?c.message:String(c);s("error",`Run failed: ${d}`),await dt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,d),Je(r.runId),i("failed",{error:d})}finally{l||await Qr(r.baseRepoPath??a,a).catch(()=>{})}}async function Il(r){let{runId:e,issueKey:t,issueSummary:n,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:w,repoName:S,jira:x,cfg:_,actorEmail:O,resultText:q,costFields:f,emit:m,setStatus:b}=r,C=await Di(s);C.deleted.length&&m("info",`Deleted ${C.deleted.length} file(s) listed in ${Yr}: `+C.deleted.slice(0,10).join(", ")+(C.deleted.length>10?", \u2026":""));for(let V of C.refused)m("warn",`${Yr} entry refused: ${V}`);m("info","Committing changes"),await xs(s,`${t}: ${n}
524
+ Partial work from this run is saved on branch \`${r}\` \u2014 it was NOT safety-checked or reviewed and never merges on its own; a future run or a developer can pick it up.`}async function hm(r){let{emit:e,setStatus:t,nextSeq:n}=Sr(r.runId,r.transport),{trigger:s}=r.rule,i=r.rule.action;if(i.type!=="implement")return;let o=Ls(i.agent,i.type);if(o){e("error",o),await dn(r,o),t("failed",{error:o});return}let a=Al.default.join(Nn(),r.runId),l=Pt(i.branchTemplate,{issueKey:r.issueKey}),c=(0,Bs.randomUUID)(),d=!1,p=!1;try{if(!Os(ce()??r.cfg,r.project.repoName,r.actorEmail))throw new Error("no GitHub token applies to this repo \u2014 run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");if(l===i.baseBranch)throw new Error(`rendered branch "${l}" equals the base branch \u2014 refusing (check the rule's branch template)`);if(t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", implement)`),i.jiraTransitionOnStart)try{await r.jira.transitionByName(r.issueKey,i.jiraTransitionOnStart)?e("info",`Jira transition "${i.jiraTransitionOnStart}" applied at run start`):e("warn",`no transition named "${i.jiraTransitionOnStart}" is available from this ticket's current status \u2014 continuing anyway`)}catch(q){e("warn",`Jira start transition failed: ${q instanceof Error?q.message:q} \u2014 continuing anyway`)}let _=await yr(r.repoPath);if(e("info",`Repo origin: ${_}`),!vr(_))throw new Error(`origin "${_}" is not a GitHub remote \u2014 implement mode supports GitHub only`);e("info",`Fetching ${r.issueKey} from Jira`);let S=await r.jira.getIssue(r.issueKey);e("info",`Preparing worktree on branch "${l}" from origin/${i.baseBranch}`),await tn(r.repoPath,i.baseBranch),await Gi(r.repoPath,l),await Hi(r.repoPath,a,l,i.baseBranch),d=!0;let T=Pt(i.promptTemplate,{issueKey:S.key,summary:S.summary,description:S.description||"(no description)",comments:Vn(S.comments)})+await Zr(r.jira,S.attachments,a,e)+(i.updateMemory?Ce.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree \u2014 edit tools enabled, path-jailed, no shell, timeout ${i.timeoutSeconds}s`);let C=await Zn(wr(i.agent),{repoPath:a,prompt:T,timeoutSeconds:i.timeoutSeconds,bin:on(r.cfg,i.agent),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:i.model||void 0,maxTurns:i.maxTurns,sessionId:c,onLog:(q,f)=>e(q,f)},e,()=>Rs(a)),k={costUsd:C.costUsd,inputTokens:C.inputTokens,outputTokens:C.outputTokens,billingMode:C.billingMode,model:C.model};if(!C.ok){let q=C.error??"Claude Code failed";e("error",`Run failed: ${q}`);let f=q;if(C.turnLimitHit){let m=await jl(a,l,r.runId,e);m&&(f+=Ol(m))}await dn(r,f),t(C.timedOut?"timed_out":"failed",{error:q,...k});return}let B=Fs(C.resultText);if(B){p=!0,await Zs({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:a,sessionId:c,doneLabel:s.doneLabel,failedLabel:s.failedLabel,timeoutSeconds:i.timeoutSeconds,jira:r.jira,nextLogSeq:n(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:i.agent,model:i.model,actorEmail:r.actorEmail,baseRepoPath:r.repoPath,repoName:r.project.repoName,branch:l,baseBranch:i.baseBranch,jiraTransition:i.jiraTransition,jiraTransitionOnMerge:i.jiraTransitionOnMerge,requireApproval:i.requireApproval,maxTurns:i.maxTurns,issueSummary:S.summary},B,e,t,k);return}xt(a),await Ml({runId:r.runId,issueKey:r.issueKey,issueSummary:S.summary,worktreePath:a,baseRepoPath:r.repoPath,branch:l,baseBranch:i.baseBranch,jiraTransition:i.jiraTransition,jiraTransitionOnMerge:i.jiraTransitionOnMerge,requireApproval:i.requireApproval,doneLabel:s.doneLabel,failedLabel:s.failedLabel,repoName:r.project.repoName,jira:r.jira,cfg:r.cfg,actorEmail:r.actorEmail,resultText:C.resultText,costFields:k,emit:e,setStatus:t})}catch(_){let S=_ instanceof Error?_.message:String(_);e("error",`Run failed: ${S}`),await dn(r,S),t("failed",{error:S})}finally{d&&!p&&await rn(r.repoPath,a).catch(()=>{})}}async function Nl(r,e,t,n){let{emit:s,setStatus:i,nextSeq:o}=Sr(r.runId,n.transport,r.nextLogSeq),a=r.repoPath,l=!1;try{if(!Os(ce()??n.cfg,r.repoName??"",r.actorEmail))throw new Error("no GitHub token applies to this repo \u2014 run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");i("running"),s("info",`Reply received on ${r.issueKey} \u2014 continuing run \`${r.runId}\``);let c=Fl(e)+await Zr(n.jiraFor(r.repoName??""),t,a,s),d=await Zn(wr(r.agent),{repoPath:a,prompt:c,timeoutSeconds:r.timeoutSeconds,bin:on(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:r.model||void 0,maxTurns:r.maxTurns??120,sessionId:r.sessionId,resume:!0,onLog:(S,T)=>s(S,T)},s,()=>Rs(a)),p={costUsd:d.costUsd,inputTokens:d.inputTokens,outputTokens:d.outputTokens,billingMode:d.billingMode,model:d.model};if(!d.ok){let S=d.error??"Claude Code failed";s("error",`Run failed: ${S}`);let T=S;if(d.turnLimitHit&&r.branch){let C=await jl(a,r.branch,r.runId,s);C&&(T+=Ol(C))}await ht(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,T),Xe(r.runId),i(d.timedOut?"timed_out":"failed",{error:S,...p});return}let _=Fs(d.resultText);if(_){if(r.rounds>=Rl){await Zl(n.jiraFor(r.repoName??""),r,s,i,p);return}l=!0,await Zs({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:a,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:o(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary},_,s,i,p);return}xt(a),await Ml({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,worktreePath:a,baseRepoPath:r.baseRepoPath??a,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,requireApproval:r.requireApproval??!0,doneLabel:r.doneLabel,failedLabel:r.failedLabel,repoName:r.repoName,jira:n.jiraFor(r.repoName??""),cfg:n.cfg,actorEmail:r.actorEmail,resultText:d.resultText,costFields:p,emit:s,setStatus:i}),Xe(r.runId)}catch(c){let d=c instanceof Error?c.message:String(c);s("error",`Run failed: ${d}`),await ht(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,d),Xe(r.runId),i("failed",{error:d})}finally{l||await rn(r.baseRepoPath??a,a).catch(()=>{})}}async function Ml(r){let{runId:e,issueKey:t,issueSummary:n,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:_,repoName:S,jira:T,cfg:C,actorEmail:k,resultText:B,costFields:q,emit:f,setStatus:m}=r,b=await Zi(s);b.deleted.length&&f("info",`Deleted ${b.deleted.length} file(s) listed in ${en}: `+b.deleted.slice(0,10).join(", ")+(b.deleted.length>10?", \u2026":""));for(let M of b.refused)f("warn",`${en} entry refused: ${M}`);f("info","Committing changes"),await $s(s,`${t}: ${n}
525
525
 
526
- Allwright run ${e}`);let P=await Fi(s,a);if(!P.ok){let V=P.forbidden.length?`refusing to push: changes touch protected paths (${P.forbidden.slice(0,5).join(", ")}) \u2014 CI/workflow files can exfiltrate repo secrets and are never pushed by the agent`:`refusing to push: change is too large (${P.files} files, ${P.insertions+P.deletions} lines; limits ${ks}/${Ss})`;m("error",V),await dt(x,t,e,w,V),b("failed",{error:V,...f});return}m("info",`Diff: ${P.files} file(s), +${P.insertions}/-${P.deletions}`);let U=await gr(s),B=yr(U);if(!B){let V=`origin "${U}" is not a GitHub remote \u2014 implement mode supports GitHub only`;m("error",V),await dt(x,t,e,w,V),b("failed",{error:V,...f});return}let J=await Pn(s),z=im(q);try{await Al({gitDir:s,ownerRepo:B,runId:e,issueKey:t,issueSummary:n,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:w,repoName:S,jira:x,cfg:_,actorEmail:O,summary:z,cost:f,emit:m,setStatus:b})}catch(V){let ge=V instanceof Error?V.message:String(V);yo({runId:e,issueKey:t,issueSummary:n,repoName:S,baseRepoPath:i,branch:o,baseBranch:a,headSha:J,requireApproval:d,doneLabel:p,failedLabel:w,jiraTransition:l,jiraTransitionOnMerge:c,actorEmail:O,resultSummary:z,costUsd:f.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),m("error",`Run failed: ${ge}`),m("info",`The commit itself survived on the runner (branch ${o}) \u2014 fix the cause, then use "Retry push" on this run's dashboard page.`),await dt(x,t,e,w,`${ge}
526
+ Allwright run ${e}`);let A=await Wi(s,a);if(!A.ok){let M=A.forbidden.length?`refusing to push: changes touch protected paths (${A.forbidden.slice(0,5).join(", ")}) \u2014 CI/workflow files can exfiltrate repo secrets and are never pushed by the agent`:`refusing to push: change is too large (${A.files} files, ${A.insertions+A.deletions} lines; limits ${Is}/${As})`;f("error",M),await ht(T,t,e,_,M),m("failed",{error:M,...q});return}f("info",`Diff: ${A.files} file(s), +${A.insertions}/-${A.deletions}`);let N=await yr(s),F=vr(N);if(!F){let M=`origin "${N}" is not a GitHub remote \u2014 implement mode supports GitHub only`;f("error",M),await ht(T,t,e,_,M),m("failed",{error:M,...q});return}let L=await Mn(s),re=fm(B);try{await Ll({gitDir:s,ownerRepo:F,runId:e,issueKey:t,issueSummary:n,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:_,repoName:S,jira:T,cfg:C,actorEmail:k,summary:re,cost:q,emit:f,setStatus:m})}catch(M){let J=M instanceof Error?M.message:String(M);To({runId:e,issueKey:t,issueSummary:n,repoName:S,baseRepoPath:i,branch:o,baseBranch:a,headSha:L,requireApproval:d,doneLabel:p,failedLabel:_,jiraTransition:l,jiraTransitionOnMerge:c,actorEmail:k,resultSummary:re,costUsd:q.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),f("error",`Run failed: ${J}`),f("info",`The commit itself survived on the runner (branch ${o}) \u2014 fix the cause, then use "Retry push" on this run's dashboard page.`),await ht(T,t,e,_,`${J}
527
527
 
528
- The agent's commit survived on the runner \u2014 "Retry push" on the dashboard's run page re-pushes it without a new agent run.`),b("failed",{error:ge,retryAvailable:!0,...f})}}async function Al(r){let{gitDir:e,ownerRepo:t,runId:n,issueKey:s,issueSummary:i,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:w,repoName:S,jira:x,cfg:_,actorEmail:O,summary:q,cost:f,emit:m,setStatus:b}=r;m("info",`Pushing ${o} to origin`),await Zi(e,o);let C=await Cs(e,o),P=`${q}
528
+ The agent's commit survived on the runner \u2014 "Retry push" on the dashboard's run page re-pushes it without a new agent run.`),m("failed",{error:J,retryAvailable:!0,...q})}}async function Ll(r){let{gitDir:e,ownerRepo:t,runId:n,issueKey:s,issueSummary:i,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:d,doneLabel:p,failedLabel:_,repoName:S,jira:T,cfg:C,actorEmail:k,summary:B,cost:q,emit:f,setStatus:m}=r;f("info",`Pushing ${o} to origin`),await Ji(e,o);let b=await Ps(e,o),A=`${B}
529
529
 
530
530
  ---
531
- Jira: ${new URL(`/browse/${s}`,_.jira?.baseUrl??"").toString()}
532
- _Allwright implement run \`${n}\` \xB7 cost $${f.costUsd.toFixed(4)}. The agent could not run tests \u2014 review accordingly._`;m("info","Opening pull request");let U=Is(le()??_,S,O);U.source==="user"&&m("info",`PR will be authored with ${O}'s own GitHub token`);let J=await new Ne(U.token).createPullRequest(t.owner,t.repo,{title:`${s}: ${i}`.slice(0,250),head:o,base:a,body:P});m("info",`PR ready: ${J.url}`),ml({runId:n,issueKey:s,repoName:S,owner:t.owner,repo:t.repo,prNumber:J.number,prUrl:J.url,jiraTransitionOnMerge:c??"",createdAt:new Date().toISOString()}),b("posting",f);let z={runId:n,issueKey:s,repoName:S,owner:t.owner,repo:t.repo,prNumber:J.number,prUrl:J.url,branch:o,headSha:C,doneLabel:p,failedLabel:w,jiraTransition:l};d?(on(z),await x.addComment(s,`**Allwright opened a pull request for review.**
531
+ Jira: ${new URL(`/browse/${s}`,C.jira?.baseUrl??"").toString()}
532
+ _Allwright implement run \`${n}\` \xB7 cost $${q.costUsd.toFixed(4)}. The agent could not run tests \u2014 review accordingly._`;f("info","Opening pull request");let N=Os(ce()??C,S,k);N.source==="user"&&f("info",`PR will be authored with ${k}'s own GitHub token`);let L=await new Me(N.token).createPullRequest(t.owner,t.repo,{title:`${s}: ${i}`.slice(0,250),head:o,base:a,body:A});f("info",`PR ready: ${L.url}`),Sl({runId:n,issueKey:s,repoName:S,owner:t.owner,repo:t.repo,prNumber:L.number,prUrl:L.url,jiraTransitionOnMerge:c??"",createdAt:new Date().toISOString()}),m("posting",q);let re={runId:n,issueKey:s,repoName:S,owner:t.owner,repo:t.repo,prNumber:L.number,prUrl:L.url,branch:o,headSha:b,doneLabel:p,failedLabel:_,jiraTransition:l};d?(ln(re),await T.addComment(s,`**Allwright opened a pull request for review.**
533
533
 
534
- PR: ${J.url}
534
+ PR: ${L.url}
535
535
 
536
- Approve the PR on GitHub OR on the Allwright dashboard \u2014 either completes the run. Rejecting on the dashboard closes the PR and deletes the branch. (run \`${n}\`)`),b("awaiting_approval",{...f,prUrl:J.url,headSha:C,resultSummary:zn(q),retryAvailable:!1}),m("info",`Awaiting approval on the dashboard \xB7 $${f.costUsd.toFixed(4)}`)):(await Rl({jira:x,issueKey:s},z,m),b("succeeded",{...f,prUrl:J.url,headSha:C,resultSummary:zn(q),retryAvailable:!1}),m("info",`Run succeeded \xB7 ${J.url} \xB7 $${f.costUsd.toFixed(4)}`))}async function Rl(r,e,t){let n=null;if(e.jiraTransition)try{await r.jira.transitionByName(e.issueKey,e.jiraTransition)?t("info",`Jira transition "${e.jiraTransition}" applied`):(n=`no transition named "${e.jiraTransition}" is available from this ticket's current status \u2014 the PR is fine, but move the ticket manually`,t("warn",n))}catch(s){n=`Jira transition failed: ${s instanceof Error?s.message:s}`,t("warn",n)}return await r.jira.addComment(e.issueKey,`**Allwright: implementation complete.**
536
+ Approve the PR on GitHub OR on the Allwright dashboard \u2014 either completes the run. Rejecting on the dashboard closes the PR and deletes the branch. (run \`${n}\`)`),m("awaiting_approval",{...q,prUrl:L.url,headSha:b,resultSummary:Fn(B),retryAvailable:!1}),f("info",`Awaiting approval on the dashboard \xB7 $${q.costUsd.toFixed(4)}`)):(await Dl({jira:T,issueKey:s},re,f),m("succeeded",{...q,prUrl:L.url,headSha:b,resultSummary:Fn(B),retryAvailable:!1}),f("info",`Run succeeded \xB7 ${L.url} \xB7 $${q.costUsd.toFixed(4)}`))}async function Dl(r,e,t){let n=null;if(e.jiraTransition)try{await r.jira.transitionByName(e.issueKey,e.jiraTransition)?t("info",`Jira transition "${e.jiraTransition}" applied`):(n=`no transition named "${e.jiraTransition}" is available from this ticket's current status \u2014 the PR is fine, but move the ticket manually`,t("warn",n))}catch(s){n=`Jira transition failed: ${s instanceof Error?s.message:s}`,t("warn",n)}return await r.jira.addComment(e.issueKey,`**Allwright: implementation complete.**
537
537
 
538
538
  PR: ${e.prUrl}`+(n?`
539
539
 
540
540
  Note: ${n}`:"")+`
541
541
 
542
- (run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[xe.NEEDS_INPUT_LABEL]}),n}async function qn(r,e,t){let n=_o(e);if(!n){g.warn(`run.approved for ${e}: no pending entry (already processed?) \u2014 ignoring`);return}let{emit:s,setStatus:i}=jl(r,e);try{let o=Rt(le()??r.cfg,n.repoName);if(!o)throw new Error("GitHub token missing on this runner");let a=new Ne(o);s("info",`Approval received for ${n.issueKey} \u2014 verifying PR state`);let l=await a.getPullRequest(n.owner,n.repo,n.prNumber);if(!l)throw new Error(`PR #${n.prNumber} no longer exists on GitHub`);if(l.state==="closed"&&!l.merged)throw new Error(`PR #${n.prNumber} was closed on GitHub without merging`);let c=t??n.headSha;if(l.state==="open"&&l.headSha!==c){let d=`PR #${n.prNumber} changed since review started (${c.slice(0,7)} \u2192 ${l.headSha.slice(0,7)}) \u2014 approval not applied. Re-review the PR and approve again.`;s("warn",d),await r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${d}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:l.headSha,resultSummary:d});return}await Rl({jira:r.jiraFor(n.repoName??""),issueKey:n.issueKey},n,s),i("succeeded",{prUrl:n.prUrl}),s("info","Run completed after approval"),br(e)}catch(o){let a=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${a}`),await Ol(r,n,a),i("failed",{error:a}),br(e)}}async function $l(r,e){let t=_o(e);if(!t){g.warn(`run.rejected for ${e}: no pending entry (already processed?) \u2014 ignoring`);return}let{emit:n,setStatus:s}=jl(r,e);try{let i=Rt(le()??r.cfg,t.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new Ne(i);n("info",`Rejection received for ${t.issueKey} \u2014 closing PR #${t.prNumber}`);let a=await o.getPullRequest(t.owner,t.repo,t.prNumber);a&&a.state==="open"&&await o.closePullRequest(t.owner,t.repo,t.prNumber),a?.merged||await o.deleteBranch(t.owner,t.repo,t.branch),await r.jiraFor(t.repoName??"").addComment(t.issueKey,`**Allwright: changes rejected.**
542
+ (run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[Ce.NEEDS_INPUT_LABEL]}),n}async function Kn(r,e,t){let n=Co(e);if(!n){g.warn(`run.approved for ${e}: no pending entry (already processed?) \u2014 ignoring`);return}let{emit:s,setStatus:i}=ql(r,e);try{let o=$t(ce()??r.cfg,n.repoName);if(!o)throw new Error("GitHub token missing on this runner");let a=new Me(o);s("info",`Approval received for ${n.issueKey} \u2014 verifying PR state`);let l=await a.getPullRequest(n.owner,n.repo,n.prNumber);if(!l)throw new Error(`PR #${n.prNumber} no longer exists on GitHub`);if(l.state==="closed"&&!l.merged)throw new Error(`PR #${n.prNumber} was closed on GitHub without merging`);let c=t??n.headSha;if(l.state==="open"&&l.headSha!==c){let d=`PR #${n.prNumber} changed since review started (${c.slice(0,7)} \u2192 ${l.headSha.slice(0,7)}) \u2014 approval not applied. Re-review the PR and approve again.`;s("warn",d),await r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${d}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:l.headSha,resultSummary:d});return}await Dl({jira:r.jiraFor(n.repoName??""),issueKey:n.issueKey},n,s),i("succeeded",{prUrl:n.prUrl}),s("info","Run completed after approval"),kr(e)}catch(o){let a=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${a}`),await Bl(r,n,a),i("failed",{error:a}),kr(e)}}async function zl(r,e){let t=Co(e);if(!t){g.warn(`run.rejected for ${e}: no pending entry (already processed?) \u2014 ignoring`);return}let{emit:n,setStatus:s}=ql(r,e);try{let i=$t(ce()??r.cfg,t.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new Me(i);n("info",`Rejection received for ${t.issueKey} \u2014 closing PR #${t.prNumber}`);let a=await o.getPullRequest(t.owner,t.repo,t.prNumber);a&&a.state==="open"&&await o.closePullRequest(t.owner,t.repo,t.prNumber),a?.merged||await o.deleteBranch(t.owner,t.repo,t.branch),await r.jiraFor(t.repoName??"").addComment(t.issueKey,`**Allwright: changes rejected.**
543
543
 
544
- The pull request was closed and the branch deleted. This ticket is labeled \`${t.failedLabel}\`; remove the label to try again. (run \`${t.runId}\`)`),await r.jiraFor(t.repoName??"").editLabels(t.issueKey,{add:[t.failedLabel]}),s("failed",{error:"rejected by user"}),n("info","PR closed, branch deleted, ticket labeled"),br(e)}catch(i){let o=i instanceof Error?i.message:String(i);n("error",`Rejection handling failed: ${o}`),await Ol(r,t,o),s("failed",{error:o}),br(e)}}async function Pl(r,e){let t=js(e);if(!t){g.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:o,setStatus:a}=wr(e,r.transport,1e5);o("error","Retry push requested, but this runner holds no retry record for the run \u2014 it was already used or never saved. Re-run the ticket instead."),a("failed",{retryAvailable:!1});return}let{emit:n,setStatus:s,nextSeq:i}=wr(e,r.transport,t.nextLogSeq);try{let o=await Cs(t.baseRepoPath,t.branch);if(o!==t.headSha){n("error",`Retry push aborted: branch ${t.branch} no longer holds the commit this run produced (expected ${t.headSha.slice(0,7)}, ${o?`found ${o.slice(0,7)}`:"the branch is gone"}) \u2014 a newer run has likely reused the branch. Re-run the ticket instead.`),vo(e),s("failed",{retryAvailable:!1});return}let a=await gr(t.baseRepoPath),l=yr(a);if(!l)throw new Error(`origin "${a}" is not a GitHub remote`);n("info",`Retry push for ${t.issueKey}: branch ${t.branch} at ${t.headSha.slice(0,7)}`);let c=r.jiraFor(t.repoName);await Al({gitDir:t.baseRepoPath,ownerRepo:l,runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:c,cfg:le()??r.cfg,actorEmail:t.actorEmail,summary:t.resultSummary,cost:{costUsd:t.costUsd},emit:n,setStatus:s}),vo(e),await c.editLabels(t.issueKey,{remove:[t.failedLabel]}).catch(()=>{})}catch(o){let a=o instanceof Error?o.message:String(o);n("error",`Retry push failed: ${a}`),yo({...t,nextLogSeq:i()}),s("failed",{error:a,retryAvailable:!0})}}function jl(r,e){let t=1e5;return{emit:(i,o)=>{r.transport.send({type:"run.log",runId:e,seq:t++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&g.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{r.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function Ol(r,e,t){try{await r.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
544
+ The pull request was closed and the branch deleted. This ticket is labeled \`${t.failedLabel}\`; remove the label to try again. (run \`${t.runId}\`)`),await r.jiraFor(t.repoName??"").editLabels(t.issueKey,{add:[t.failedLabel]}),s("failed",{error:"rejected by user"}),n("info","PR closed, branch deleted, ticket labeled"),kr(e)}catch(i){let o=i instanceof Error?i.message:String(i);n("error",`Rejection handling failed: ${o}`),await Bl(r,t,o),s("failed",{error:o}),kr(e)}}async function Ul(r,e){let t=Ds(e);if(!t){g.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:o,setStatus:a}=Sr(e,r.transport,1e5);o("error","Retry push requested, but this runner holds no retry record for the run \u2014 it was already used or never saved. Re-run the ticket instead."),a("failed",{retryAvailable:!1});return}let{emit:n,setStatus:s,nextSeq:i}=Sr(e,r.transport,t.nextLogSeq);try{let o=await Ps(t.baseRepoPath,t.branch);if(o!==t.headSha){n("error",`Retry push aborted: branch ${t.branch} no longer holds the commit this run produced (expected ${t.headSha.slice(0,7)}, ${o?`found ${o.slice(0,7)}`:"the branch is gone"}) \u2014 a newer run has likely reused the branch. Re-run the ticket instead.`),xo(e),s("failed",{retryAvailable:!1});return}let a=await yr(t.baseRepoPath),l=vr(a);if(!l)throw new Error(`origin "${a}" is not a GitHub remote`);n("info",`Retry push for ${t.issueKey}: branch ${t.branch} at ${t.headSha.slice(0,7)}`);let c=r.jiraFor(t.repoName);await Ll({gitDir:t.baseRepoPath,ownerRepo:l,runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:c,cfg:ce()??r.cfg,actorEmail:t.actorEmail,summary:t.resultSummary,cost:{costUsd:t.costUsd},emit:n,setStatus:s}),xo(e),await c.editLabels(t.issueKey,{remove:[t.failedLabel]}).catch(()=>{})}catch(o){let a=o instanceof Error?o.message:String(o);n("error",`Retry push failed: ${a}`),To({...t,nextLogSeq:i()}),s("failed",{error:a,retryAvailable:!0})}}function ql(r,e){let t=1e5;return{emit:(i,o)=>{r.transport.send({type:"run.log",runId:e,seq:t++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&g.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{r.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function Bl(r,e,t){try{await r.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
545
545
 
546
546
  Error: ${t.slice(0,800)}
547
547
 
548
548
  PR: ${e.prUrl}
549
- (run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){g.error(`could not post decision failure to ${e.issueKey}: ${n}`)}}function Bn(r){if(!r.length)return"(no comments)";let e=6e4,t=r.map(i=>`${i.author} (${i.created}):
549
+ (run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){g.error(`could not post decision failure to ${e.issueKey}: ${n}`)}}function Vn(r){if(!r.length)return"(no comments)";let e=6e4,t=r.map(i=>`${i.author} (${i.created}):
550
550
  ${i.body}`),n=[],s=0;for(let i=t.length-1;i>=0;i--){if(s+=t[i].length+6,s>e){n.unshift(`(\u2026 ${i+1} earlier comment(s) omitted for length \u2026)`);break}n.unshift(t[i])}return n.join(`
551
551
  ---
552
- `)}function Nl(r){return`The ticket author replied:
552
+ `)}function Fl(r){return`The ticket author replied:
553
553
 
554
554
  ${r}
555
555
 
556
- Continue from where you left off now that you have this information. If you are still missing what you need, ask again the same way as before (the ${xe.NEEDS_INPUT_MARKER} marker).`}function Ds(r){let e=r.trim(),t=e.split(`
557
- `,1)[0].trim(),n=o=>o.replace(/[^a-z]/gi,"").toUpperCase();if(n(t)!==n(xe.NEEDS_INPUT_MARKER))return null;let s=e.indexOf(`
558
- `);return s<0?null:e.slice(s+1).trim()||null}async function zs(r,e,t,n,s){t("info",`Claude needs more information \u2014 posting questions to ${r.issueKey}`),await r.jira.addComment(r.issueKey,`**${xe.NEEDS_INPUT_COMMENT_MARKER} before it can continue.**
556
+ Continue from where you left off now that you have this information. If you are still missing what you need, ask again the same way as before (the ${Ce.NEEDS_INPUT_MARKER} marker).`}function Fs(r){let e=r.trim(),t=e.split(`
557
+ `,1)[0].trim(),n=o=>o.replace(/[^a-z]/gi,"").toUpperCase();if(n(t)!==n(Ce.NEEDS_INPUT_MARKER))return null;let s=e.indexOf(`
558
+ `);return s<0?null:e.slice(s+1).trim()||null}async function Zs(r,e,t,n,s){t("info",`Claude needs more information \u2014 posting questions to ${r.issueKey}`),await r.jira.addComment(r.issueKey,`**${Ce.NEEDS_INPUT_COMMENT_MARKER} before it can continue.**
559
559
 
560
560
  ${e}
561
561
 
562
- Reply with your answers in a comment on this ticket \u2014 this run will pick up right where it left off, automatically, once you do. (run \`${r.runId}\`)`);let i=new Date().toISOString();await r.jira.editLabels(r.issueKey,{add:[xe.NEEDS_INPUT_LABEL]}),vl({runId:r.runId,issueKey:r.issueKey,kind:r.kind,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,createdAt:r.createdAt??i,questionsPostedAt:i,rounds:r.rounds,nextLogSeq:r.nextLogSeq,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary??"",claudeConfigDir:r.claudeConfigDir,agent:r.agent,model:r.model,actorEmail:r.actorEmail}),n("needs_input",{...s,resultSummary:zn(e)}),t("info",`Waiting for a reply on ${r.issueKey} (label "${xe.NEEDS_INPUT_LABEL}")`)}async function Ml(r,e,t,n,s){let i=`Claude asked for clarification ${e.rounds} times without reaching a result \u2014 giving up. Answer more completely and re-trigger manually if you want another attempt.`;t("error",i),await dt(r,e.issueKey,e.runId,e.failedLabel,i),Je(e.runId),n("failed",{error:i,...s})}async function un(r,e){await dt(r.jira,r.issueKey,r.runId,r.rule.trigger.failedLabel,e)}async function dt(r,e,t,n,s){try{await r.addComment(e,`**Allwright run failed.**
562
+ Reply with your answers in a comment on this ticket \u2014 this run will pick up right where it left off, automatically, once you do. (run \`${r.runId}\`)`);let i=new Date().toISOString();await r.jira.editLabels(r.issueKey,{add:[Ce.NEEDS_INPUT_LABEL]}),Cl({runId:r.runId,issueKey:r.issueKey,kind:r.kind,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,createdAt:r.createdAt??i,questionsPostedAt:i,rounds:r.rounds,nextLogSeq:r.nextLogSeq,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary??"",claudeConfigDir:r.claudeConfigDir,agent:r.agent,model:r.model,actorEmail:r.actorEmail}),n("needs_input",{...s,resultSummary:Fn(e)}),t("info",`Waiting for a reply on ${r.issueKey} (label "${Ce.NEEDS_INPUT_LABEL}")`)}async function Zl(r,e,t,n,s){let i=`Claude asked for clarification ${e.rounds} times without reaching a result \u2014 giving up. Answer more completely and re-trigger manually if you want another attempt.`;t("error",i),await ht(r,e.issueKey,e.runId,e.failedLabel,i),Xe(e.runId),n("failed",{error:i,...s})}async function dn(r,e){await ht(r.jira,r.issueKey,r.runId,r.rule.trigger.failedLabel,e)}async function ht(r,e,t,n,s){try{await r.addComment(e,`**Allwright run failed.**
563
563
 
564
564
  Error: ${s.slice(0,800)}
565
565
 
566
- This ticket has been labeled \`${n}\` and will not be retried automatically. To retry, fix the cause and remove the \`${n}\` label. (run \`${t}\`)`),await r.editLabels(e,{add:[n],remove:[xe.NEEDS_INPUT_LABEL]})}catch(i){g.error(`could not post failure comment to ${e}: ${i}`)}}function im(r){let e=/##\s*Summary of changes\s*\n([\s\S]*)$/i.exec(r);return(e?e[1]:r).trim().slice(0,8e3)||"(no summary provided)"}function zn(r){for(let e of r.split(`
567
- `)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var ln=$(require("node:fs"),1),kr=$(require("node:path"),1),Us=require("node:child_process"),So=$(require("node:readline"),1),Bl=require("node:crypto"),Sr=$(Te(),1);vr();lt();var Ll=4e3,om=4e3;function To(r){let e=0;return{emit:(s,i)=>{r.transport.send({type:"run.log",runId:r.runId,seq:e++,ts:new Date().toISOString(),level:s,message:i.slice(0,om)}),s!=="agent"&&g.info(`[deploy ${r.runId}] ${i}`)},setStatus:(s,i={})=>{r.transport.send({type:"run.status",runId:r.runId,status:s,...i})}}}async function qs(r){let{emit:e,setStatus:t}=To(r),n=r.environment;try{let s=am(r);if(s){e("error",s),await qe(r,`**Allwright could not deploy to \`${n.name}\`.**
566
+ This ticket has been labeled \`${n}\` and will not be retried automatically. To retry, fix the cause and remove the \`${n}\` label. (run \`${t}\`)`),await r.editLabels(e,{add:[n],remove:[Ce.NEEDS_INPUT_LABEL]})}catch(i){g.error(`could not post failure comment to ${e}: ${i}`)}}function fm(r){let e=/##\s*Summary of changes\s*\n([\s\S]*)$/i.exec(r);return(e?e[1]:r).trim().slice(0,8e3)||"(no summary provided)"}function Fn(r){for(let e of r.split(`
567
+ `)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var hn=P(require("node:fs"),1),Tr=P(require("node:path"),1),Ks=require("node:child_process"),Ro=P(require("node:readline"),1),Jl=require("node:crypto"),xr=P(xe(),1);_r();ct();var Kl=4e3,pm=4e3;function $o(r){let e=0;return{emit:(s,i)=>{r.transport.send({type:"run.log",runId:r.runId,seq:e++,ts:new Date().toISOString(),level:s,message:i.slice(0,pm)}),s!=="agent"&&g.info(`[deploy ${r.runId}] ${i}`)},setStatus:(s,i={})=>{r.transport.send({type:"run.status",runId:r.runId,status:s,...i})}}}async function Vs(r){let{emit:e,setStatus:t}=$o(r),n=r.environment;try{let s=mm(r);if(s){e("error",s),await Be(r,`**Allwright could not deploy to \`${n.name}\`.**
568
568
 
569
- ${s}`),t("failed",{error:s});return}if(n.requireApproval){yl({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,projectId:r.project.id,repoName:r.project.repoName,environmentName:n.name,requestedBy:r.requestedBy,createdAt:new Date().toISOString()}),e("info",`Deploy to "${n.name}" is waiting for approval on the dashboard \u2014 no step has run yet`),await qe(r,`**Allwright: deploy to \`${n.name}\` needs approval.**
569
+ ${s}`),t("failed",{error:s});return}if(n.requireApproval){xl({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,projectId:r.project.id,repoName:r.project.repoName,environmentName:n.name,requestedBy:r.requestedBy,createdAt:new Date().toISOString()}),e("info",`Deploy to "${n.name}" is waiting for approval on the dashboard \u2014 no step has run yet`),await Be(r,`**Allwright: deploy to \`${n.name}\` needs approval.**
570
570
 
571
- ${r.requestedBy?`Requested by ${r.requestedBy}. `:""}Nothing has been executed yet. Approve it on the Allwright dashboard to run the ${n.steps.length} deploy step(s), or reject to cancel. (run \`${r.runId}\`)`),t("awaiting_approval",{resultSummary:`Awaiting approval to deploy ${r.issueKey} to ${n.name}`});return}await Fl(r,e,t)}catch(s){let i=s instanceof Error?s.message:String(s);e("error",`Deploy failed: ${i}`),await qe(r,`**Allwright deploy to \`${n.name}\` failed.**
571
+ ${r.requestedBy?`Requested by ${r.requestedBy}. `:""}Nothing has been executed yet. Approve it on the Allwright dashboard to run the ${n.steps.length} deploy step(s), or reject to cancel. (run \`${r.runId}\`)`),t("awaiting_approval",{resultSummary:`Awaiting approval to deploy ${r.issueKey} to ${n.name}`});return}await Yl(r,e,t)}catch(s){let i=s instanceof Error?s.message:String(s);e("error",`Deploy failed: ${i}`),await Be(r,`**Allwright deploy to \`${n.name}\` failed.**
572
572
 
573
573
  ${i.slice(0,800)}
574
574
 
575
- (run \`${r.runId}\`)`),t("failed",{error:i})}}function am(r){let e=r.environment;if(!r.cfg.deploy.enabled)return"deployments are turned off on this runner. Deploy steps are shell commands, so they stay disabled until someone with access to this machine runs `allwright deploy enable`.";if(!e.steps.length)return`environment "${e.name}" has no deploy steps configured \u2014 add them in the dashboard first`;if(e.promotionMode==="merge_and_deploy"&&!e.branch)return`environment "${e.name}" is set to merge-and-deploy but has no branch configured`;if(e.useDedicatedCheckout&&!e.branch)return`environment "${e.name}" wants a dedicated checkout but has no branch configured`;let t=Xt(r.cfg,r.project.repoName,e.name),n=e.requiredSecrets.filter(s=>!t[s]&&!process.env[s]);return n.length?`missing deploy secret(s) on this runner: ${n.join(", ")}. Set them with: allwright env set "${r.project.repoName}" "${e.name}" ${n[0]}=...`:null}async function Fl(r,e,t){let n=r.environment,s=Xt(r.cfg,r.project.repoName,n.name),i=hm(Object.values(s)),o=Date.now();if(t("running"),e("info",`Deploying ${r.issueKey} to "${n.name}"`+(r.requestedBy?` (requested by ${r.requestedBy})`:"")+` \u2014 ${n.steps.length} step(s), ${n.timeoutSeconds}s budget`),n.auditBeforeDeploy){e("info",`Pre-deploy ${n.auditBeforeDeploy} audit starting (advisory \u2014 will not block)`);try{let O=await tn({projectId:r.project.id,repoPath:r.repoPath,role:n.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",claudeBin:r.cfg.claudeBin,jira:r.jira});if(!O.ok)e("warn",`Pre-deploy audit could not run: ${O.error} \u2014 deploying anyway (advisory)`);else if(!O.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let q={};for(let f of O.audit.findings)q[f.severity]=(q[f.severity]??0)+1;e("warn",`Pre-deploy audit: ${O.audit.findings.length} finding(s) (`+Object.entries(q).map(([f,m])=>`${m} ${f}`).join(", ")+") \u2014 full report on the Audits page. Deploying anyway (advisory).");for(let f of O.audit.findings.slice(0,5))e("warn",` [${f.severity}] ${f.title} \u2014 ${f.evidence[0]?.file??""}`)}}catch(O){e("warn",`Pre-deploy audit crashed: ${O instanceof Error?O.message:String(O)} \u2014 deploying anyway`)}}if(n.requireSyncCheck){if(!n.previousEnvBranch||!n.branch){let q=n.branch?`"${n.name}" requires a branch sync check, but no earlier stage in the pipeline has a branch to compare against. Check the pipeline order on the Environments page (was "${n.name}" moved to the top?), or turn the check off.`:`"${n.name}" requires a branch sync check but has no branch set \u2014 set it, or turn the check off`;e("error",q),await qe(r,`**Allwright refused to deploy to \`${n.name}\`.**
575
+ (run \`${r.runId}\`)`),t("failed",{error:i})}}function mm(r){let e=r.environment;if(!r.cfg.deploy.enabled)return"deployments are turned off on this runner. Deploy steps are shell commands, so they stay disabled until someone with access to this machine runs `allwright deploy enable`.";if(!e.steps.length)return`environment "${e.name}" has no deploy steps configured \u2014 add them in the dashboard first`;if(e.promotionMode==="merge_and_deploy"&&!e.branch)return`environment "${e.name}" is set to merge-and-deploy but has no branch configured`;if(e.useDedicatedCheckout&&!e.branch)return`environment "${e.name}" wants a dedicated checkout but has no branch configured`;let t=Qt(r.cfg,r.project.repoName,e.name),n=e.requiredSecrets.filter(s=>!t[s]&&!process.env[s]);return n.length?`missing deploy secret(s) on this runner: ${n.join(", ")}. Set them with: allwright env set "${r.project.repoName}" "${e.name}" ${n[0]}=...`:null}async function Yl(r,e,t){let n=r.environment,s=Qt(r.cfg,r.project.repoName,n.name),i=bm(Object.values(s)),o=Date.now();if(t("running"),e("info",`Deploying ${r.issueKey} to "${n.name}"`+(r.requestedBy?` (requested by ${r.requestedBy})`:"")+` \u2014 ${n.steps.length} step(s), ${n.timeoutSeconds}s budget`),n.auditBeforeDeploy){e("info",`Pre-deploy ${n.auditBeforeDeploy} audit starting (advisory \u2014 will not block)`);try{let k=await sn({projectId:r.project.id,repoPath:r.repoPath,role:n.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",claudeBin:r.cfg.claudeBin,jira:r.jira});if(!k.ok)e("warn",`Pre-deploy audit could not run: ${k.error} \u2014 deploying anyway (advisory)`);else if(!k.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let B={};for(let q of k.audit.findings)B[q.severity]=(B[q.severity]??0)+1;e("warn",`Pre-deploy audit: ${k.audit.findings.length} finding(s) (`+Object.entries(B).map(([q,f])=>`${f} ${q}`).join(", ")+") \u2014 full report on the Audits page. Deploying anyway (advisory).");for(let q of k.audit.findings.slice(0,5))e("warn",` [${q.severity}] ${q.title} \u2014 ${q.evidence[0]?.file??""}`)}}catch(k){e("warn",`Pre-deploy audit crashed: ${k instanceof Error?k.message:String(k)} \u2014 deploying anyway`)}}if(n.requireSyncCheck){if(!n.previousEnvBranch||!n.branch){let B=n.branch?`"${n.name}" requires a branch sync check, but no earlier stage in the pipeline has a branch to compare against. Check the pipeline order on the Environments page (was "${n.name}" moved to the top?), or turn the check off.`:`"${n.name}" requires a branch sync check but has no branch set \u2014 set it, or turn the check off`;e("error",B),await Be(r,`**Allwright refused to deploy to \`${n.name}\`.**
576
576
 
577
- ${q}
577
+ ${B}
578
578
 
579
- (run \`${r.runId}\`)`),t("failed",{error:q,errorKind:"guard"});return}let O=await lm(r,e);if(O){await qe(r,O.comment),t("failed",{error:O.error,...O.guard?{errorKind:"guard"}:{}});return}}let a=r.repoPath;if(n.useDedicatedCheckout||n.promotionMode==="merge_and_deploy"?(e("info",`Preparing ${n.name} checkout at origin/${n.branch}`),a=await Gi({repoPath:r.repoPath,repoName:r.project.repoName,envName:n.name,branch:n.branch,attached:n.promotionMode==="merge_and_deploy"})):e("info",`No dedicated checkout for "${n.name}" \u2014 running the steps in the mapped checkout as it is`),n.promotionMode==="merge_and_deploy"){let O=$t(n.ticketBranchTemplate,{issueKey:r.issueKey});e("info",`Merging "${O}" into "${n.branch}"`);let q=await Hi(a,O,`Deploy ${r.issueKey} to ${n.name}
579
+ (run \`${r.runId}\`)`),t("failed",{error:B,errorKind:"guard"});return}let k=await ym(r,e);if(k){await Be(r,k.comment),t("failed",{error:k.error,...k.guard?{errorKind:"guard"}:{}});return}}let a=r.repoPath;if(n.useDedicatedCheckout||n.promotionMode==="merge_and_deploy"?(e("info",`Preparing ${n.name} checkout at origin/${n.branch}`),a=await Qi({repoPath:r.repoPath,repoName:r.project.repoName,envName:n.name,branch:n.branch,attached:n.promotionMode==="merge_and_deploy"})):e("info",`No dedicated checkout for "${n.name}" \u2014 running the steps in the mapped checkout as it is`),n.promotionMode==="merge_and_deploy"){let k=Pt(n.ticketBranchTemplate,{issueKey:r.issueKey});e("info",`Merging "${k}" into "${n.branch}"`);let B=await eo(a,k,`Deploy ${r.issueKey} to ${n.name}
580
580
 
581
- Allwright run ${r.runId}`);if(!q.ok){e("error",q.reason??"merge failed"),await qe(r,`**Allwright deploy to \`${n.name}\` failed before running anything.**
581
+ Allwright run ${r.runId}`);if(!B.ok){e("error",B.reason??"merge failed"),await Be(r,`**Allwright deploy to \`${n.name}\` failed before running anything.**
582
582
 
583
- ${q.reason}`),t("failed",{error:q.reason});return}q.alreadyMerged?e("info",`"${O}" is already in "${n.branch}" \u2014 nothing to merge`):(e("info",`Pushing "${n.branch}" to origin`),await Wi(a,n.branch))}let c=await Pn(a).catch(()=>"");c&&e("info",`Deploying commit ${c.slice(0,10)}`);let d=cm(a,n.workdir),p={...process.env,...s,ALLWRIGHT_ENVIRONMENT:n.name,ALLWRIGHT_ISSUE_KEY:r.issueKey,ALLWRIGHT_RUN_ID:r.runId,ALLWRIGHT_DEPLOY_REF:c,ALLWRIGHT_BRANCH:n.branch,TICKETPILOT_ENVIRONMENT:n.name,TICKETPILOT_ISSUE_KEY:r.issueKey,TICKETPILOT_RUN_ID:r.runId,TICKETPILOT_DEPLOY_REF:c,TICKETPILOT_BRANCH:n.branch},w=0,S=n.timeoutSeconds*1e3;for(let[O,q]of n.steps.entries()){let f=S-(Date.now()-o);if(f<=0){let b=`deploy exceeded its ${n.timeoutSeconds}s budget before step ${O+1}`;e("error",b),await qe(r,`**Allwright deploy to \`${n.name}\` timed out.**
583
+ ${B.reason}`),t("failed",{error:B.reason});return}B.alreadyMerged?e("info",`"${k}" is already in "${n.branch}" \u2014 nothing to merge`):(e("info",`Pushing "${n.branch}" to origin`),await to(a,n.branch))}let c=await Mn(a).catch(()=>"");c&&e("info",`Deploying commit ${c.slice(0,10)}`);let d=vm(a,n.workdir),p={...process.env,...s,ALLWRIGHT_ENVIRONMENT:n.name,ALLWRIGHT_ISSUE_KEY:r.issueKey,ALLWRIGHT_RUN_ID:r.runId,ALLWRIGHT_DEPLOY_REF:c,ALLWRIGHT_BRANCH:n.branch,TICKETPILOT_ENVIRONMENT:n.name,TICKETPILOT_ISSUE_KEY:r.issueKey,TICKETPILOT_RUN_ID:r.runId,TICKETPILOT_DEPLOY_REF:c,TICKETPILOT_BRANCH:n.branch},_=0,S=n.timeoutSeconds*1e3;for(let[k,B]of n.steps.entries()){let q=S-(Date.now()-o);if(q<=0){let m=`deploy exceeded its ${n.timeoutSeconds}s budget before step ${k+1}`;e("error",m),await Be(r,`**Allwright deploy to \`${n.name}\` timed out.**
584
584
 
585
- ${b}`),t("timed_out",{error:b,deployedRef:c});return}e("info",`\u25B6 step ${O+1}/${n.steps.length}: ${q.name}`);let m=await dm({command:q.run,cwd:d,env:p,timeoutMs:f,onLine:(b,C)=>{w++,w===Ll&&e("warn","(output truncated \u2014 deploy log limit reached)"),!(w>=Ll)&&e(b,i(C))}});if(m.timedOut){let b=`step "${q.name}" hit the ${n.timeoutSeconds}s deploy budget and was killed`;e("error",b),await qe(r,`**Allwright deploy to \`${n.name}\` timed out.**
585
+ ${m}`),t("timed_out",{error:m,deployedRef:c});return}e("info",`\u25B6 step ${k+1}/${n.steps.length}: ${B.name}`);let f=await _m({command:B.run,cwd:d,env:p,timeoutMs:q,onLine:(m,b)=>{_++,_===Kl&&e("warn","(output truncated \u2014 deploy log limit reached)"),!(_>=Kl)&&e(m,i(b))}});if(f.timedOut){let m=`step "${B.name}" hit the ${n.timeoutSeconds}s deploy budget and was killed`;e("error",m),await Be(r,`**Allwright deploy to \`${n.name}\` timed out.**
586
586
 
587
- ${b}`),t("timed_out",{error:b,deployedRef:c});return}if(m.code!==0){if(q.continueOnError){e("warn",`step "${q.name}" exited ${m.code} \u2014 continuing (marked continue-on-error)`);continue}let b="";try{b=i(await Ui(a))}catch{}let C=`step ${O+1} "${q.name}" failed with exit code ${m.code}`+(m.tail?`: ${i(m.tail)}`:"")+(b?`
587
+ ${m}`),t("timed_out",{error:m,deployedRef:c});return}if(f.code!==0){if(B.continueOnError){e("warn",`step "${B.name}" exited ${f.code} \u2014 continuing (marked continue-on-error)`);continue}let m="";try{m=i(await Vi(a))}catch{}let b=`step ${k+1} "${B.name}" failed with exit code ${f.code}`+(f.tail?`: ${i(f.tail)}`:"")+(m?`
588
588
 
589
589
  Checkout at failure:
590
- ${b}`:"");e("error",C),await qe(r,`**Allwright deploy to \`${n.name}\` failed.**
590
+ ${m}`:"");e("error",b),await Be(r,`**Allwright deploy to \`${n.name}\` failed.**
591
591
 
592
- Step ${O+1} \`${q.name}\` exited ${m.code}.
592
+ Step ${k+1} \`${B.name}\` exited ${f.code}.
593
593
 
594
- `+(m.tail?`\`\`\`
595
- ${i(m.tail).slice(0,1200)}
594
+ `+(f.tail?`\`\`\`
595
+ ${i(f.tail).slice(0,1200)}
596
596
  \`\`\`
597
597
 
598
- `:"")+(b?`Checkout at failure:
598
+ `:"")+(m?`Checkout at failure:
599
599
  \`\`\`
600
- ${b.slice(0,800)}
600
+ ${m.slice(0,800)}
601
601
  \`\`\`
602
602
 
603
- `:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${r.runId}\`)`),t("failed",{error:C.slice(0,1600),deployedRef:c});return}e("info",`\u2713 step ${O+1}/${n.steps.length}: ${q.name}`)}t("posting");let x=Math.round((Date.now()-o)/1e3);r.issueKey!==Sr.BRANCH_DEPLOY_ISSUE_KEY&&await qe(r,`**Allwright deployed \`${r.issueKey}\` to \`${n.name}\`.**
603
+ `:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${r.runId}\`)`),t("failed",{error:b.slice(0,1600),deployedRef:c});return}e("info",`\u2713 step ${k+1}/${n.steps.length}: ${B.name}`)}t("posting");let T=Math.round((Date.now()-o)/1e3);r.issueKey!==xr.BRANCH_DEPLOY_ISSUE_KEY&&await Be(r,`**Allwright deployed \`${r.issueKey}\` to \`${n.name}\`.**
604
604
 
605
605
  `+(c?`Commit: \`${c.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
606
- `:"")+`${n.steps.length} step(s) in ${x}s.`+(r.requestedBy?` Requested by ${r.requestedBy}.`:"")+`
606
+ `:"")+`${n.steps.length} step(s) in ${T}s.`+(r.requestedBy?` Requested by ${r.requestedBy}.`:"")+`
607
607
 
608
- (run \`${r.runId}\`)`);let _=await um(r,e,c);t("succeeded",{resultSummary:`Deployed to ${n.name}${c?` at ${c.slice(0,10)}`:""} in ${x}s`+(_!==null?` \xB7 ${_} ticket(s) moved to "${n.deployToColumn}"`:""),deployedRef:c}),e("info",`Deploy to "${n.name}" succeeded in ${x}s`)}async function um(r,e,t){let n=r.environment;if(!n.deployFromColumn||!n.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await r.jira.search(`project = "${r.project.jiraProjectKey}" AND status = "${n.deployFromColumn}" ORDER BY updated ASC`,50)}catch(a){return e("warn",`deploy succeeded, but listing tickets in "${n.deployFromColumn}" failed: ${a instanceof Error?a.message:a} \u2014 move them by hand`),null}if(!i.length)return e("info",`No tickets in "${n.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${n.deployFromColumn}" to "${n.deployToColumn}"`);let o=0;for(let a of i)try{if(await r.jira.addComment(a.key,`**Allwright: deployed to \`${n.name}\` on ${s}.**
608
+ (run \`${r.runId}\`)`);let C=await gm(r,e,c);t("succeeded",{resultSummary:`Deployed to ${n.name}${c?` at ${c.slice(0,10)}`:""} in ${T}s`+(C!==null?` \xB7 ${C} ticket(s) moved to "${n.deployToColumn}"`:""),deployedRef:c}),e("info",`Deploy to "${n.name}" succeeded in ${T}s`)}async function gm(r,e,t){let n=r.environment;if(!n.deployFromColumn||!n.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await r.jira.search(`project = "${r.project.jiraProjectKey}" AND status = "${n.deployFromColumn}" ORDER BY updated ASC`,50)}catch(a){return e("warn",`deploy succeeded, but listing tickets in "${n.deployFromColumn}" failed: ${a instanceof Error?a.message:a} \u2014 move them by hand`),null}if(!i.length)return e("info",`No tickets in "${n.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${n.deployFromColumn}" to "${n.deployToColumn}"`);let o=0;for(let a of i)try{if(await r.jira.addComment(a.key,`**Allwright: deployed to \`${n.name}\` on ${s}.**
609
609
 
610
610
  `+(t?`Commit: \`${t.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
611
- `:"")+(r.requestedBy?`Requested by ${r.requestedBy}. `:"")+`(run \`${r.runId}\`)`),!await r.jira.transitionByName(a.key,n.deployToColumn)){e("warn",`${a.key}: no workflow transition to "${n.deployToColumn}" from its current status \u2014 left in place`),await r.jira.addComment(a.key,`**Allwright could not move this ticket to \`${n.deployToColumn}\`** \u2014 no such transition from its current status. The deploy itself succeeded; move it by hand. (run \`${r.runId}\`)`).catch(()=>{});continue}o++,e("info",`\u2713 ${a.key} \u2192 "${n.deployToColumn}"`)}catch(l){e("warn",`${a.key}: sweep failed (${l instanceof Error?l.message:l}) \u2014 left in "${n.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${n.deployToColumn}"`),o}async function lm(r,e){let t=r.environment,n=t.previousEnvBranch,s=(a,l=!1)=>({error:a,guard:l,comment:`**Allwright could not deploy \`${r.issueKey}\` to \`${t.name}\`.**
611
+ `:"")+(r.requestedBy?`Requested by ${r.requestedBy}. `:"")+`(run \`${r.runId}\`)`),!await r.jira.transitionByName(a.key,n.deployToColumn)){e("warn",`${a.key}: no workflow transition to "${n.deployToColumn}" from its current status \u2014 left in place`),await r.jira.addComment(a.key,`**Allwright could not move this ticket to \`${n.deployToColumn}\`** \u2014 no such transition from its current status. The deploy itself succeeded; move it by hand. (run \`${r.runId}\`)`).catch(()=>{});continue}o++,e("info",`\u2713 ${a.key} \u2192 "${n.deployToColumn}"`)}catch(l){e("warn",`${a.key}: sweep failed (${l instanceof Error?l.message:l}) \u2014 left in "${n.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${n.deployToColumn}"`),o}async function ym(r,e){let t=r.environment,n=t.previousEnvBranch,s=(a,l=!1)=>({error:a,guard:l,comment:`**Allwright could not deploy \`${r.issueKey}\` to \`${t.name}\`.**
612
612
 
613
613
  ${a}
614
614
 
615
- (run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await Xr(r.repoPath,n),await Xr(r.repoPath,t.branch)}catch(a){return s(`sync check could not fetch branches: ${a instanceof Error?a.message:String(a)}`)}let i;try{i=await Ji(r.repoPath,`origin/${n}`,`origin/${t.branch}`)}catch(a){return s(`sync check failed: ${a instanceof Error?a.message:String(a)}`)}if(!i)return e("info",`"${t.branch}" already matches "${n}" \u2014 continuing`),null;e("warn",`"${t.branch}" and "${n}" have diverged \u2014 opening a PR instead of deploying`);let o=Rt(le()??r.cfg,r.project.repoName);if(!o)return s(`"${t.branch}" and "${n}" have diverged, and no GitHub token applies to this repo to open a PR. Run \`allwright github set-token\`, or merge them manually, then retry the deploy.`,!0);try{let a=await gr(r.repoPath),l=yr(a);if(!l)throw new Error(`could not parse a GitHub owner/repo from origin "${a}"`);let d=await new Ne(o).createPullRequest(l.owner,l.repo,{title:`Sync ${t.name} (${t.branch}) with ${n}`,head:n,base:t.branch,body:`Allwright opened this automatically while trying to deploy \`${r.issueKey}\` to \`${t.name}\`: \`${t.branch}\` doesn't have everything that's on \`${n}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
615
+ (run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await tn(r.repoPath,n),await tn(r.repoPath,t.branch)}catch(a){return s(`sync check could not fetch branches: ${a instanceof Error?a.message:String(a)}`)}let i;try{i=await ro(r.repoPath,`origin/${n}`,`origin/${t.branch}`)}catch(a){return s(`sync check failed: ${a instanceof Error?a.message:String(a)}`)}if(!i)return e("info",`"${t.branch}" already matches "${n}" \u2014 continuing`),null;e("warn",`"${t.branch}" and "${n}" have diverged \u2014 opening a PR instead of deploying`);let o=$t(ce()??r.cfg,r.project.repoName);if(!o)return s(`"${t.branch}" and "${n}" have diverged, and no GitHub token applies to this repo to open a PR. Run \`allwright github set-token\`, or merge them manually, then retry the deploy.`,!0);try{let a=await yr(r.repoPath),l=vr(a);if(!l)throw new Error(`could not parse a GitHub owner/repo from origin "${a}"`);let d=await new Me(o).createPullRequest(l.owner,l.repo,{title:`Sync ${t.name} (${t.branch}) with ${n}`,head:n,base:t.branch,body:`Allwright opened this automatically while trying to deploy \`${r.issueKey}\` to \`${t.name}\`: \`${t.branch}\` doesn't have everything that's on \`${n}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
616
616
 
617
- (run \`${r.runId}\`)`});return s(`"${t.branch}" is not in sync with "${n}" \u2014 opened ${d.url} to catch it up. Merge that, then retry the deploy.`,!0)}catch(a){return s(`could not open a sync PR: ${a instanceof Error?a.message:String(a)}`)}}function cm(r,e){if(!e.trim())return r;let t=kr.default.resolve(r,e),n=kr.default.relative(r,t);if(n.startsWith("..")||kr.default.isAbsolute(n))throw new Error(`working directory "${e}" is outside the repository checkout`);return t}function dm(r){return new Promise(e=>{let t=(0,Us.spawn)("bash",["-lc",r.command],{cwd:r.cwd,env:r.env,detached:!0,stdio:["ignore","pipe","pipe"]}),n=[],s=c=>{n.push(c),n.length>20&&n.shift()},i=!1,o=!1,a=c=>{i||(i=!0,clearTimeout(l),e({code:c,timedOut:o,tail:n.join(`
618
- `)}))},l=setTimeout(()=>{o=!0,Dl(t.pid,"SIGTERM"),setTimeout(()=>Dl(t.pid,"SIGKILL"),1e4).unref()},r.timeoutMs);So.default.createInterface({input:t.stdout}).on("line",c=>{s(c),r.onLine("info",c)}),So.default.createInterface({input:t.stderr}).on("line",c=>{s(c),r.onLine("warn",c)}),t.on("error",c=>{s(`failed to start: ${c.message}`),a(127)}),t.on("close",c=>a(c??1))})}function Dl(r,e){if(r)try{process.kill(-r,e)}catch{try{process.kill(r,e)}catch{}}}function hm(r){let e=r.filter(t=>t&&t.length>=6).sort((t,n)=>n.length-t.length);return e.length?t=>{let n=t;for(let s of e)n=n.split(s).join("***");return n}:t=>t}async function qe(r,e){if(r.issueKey!==Sr.BRANCH_DEPLOY_ISSUE_KEY)try{await r.jira.addComment(r.issueKey,e)}catch(t){g.error(`could not post deploy comment to ${r.issueKey}: ${t}`)}}function xo(r){return Ns(r)!==null}async function Zl(r,e){let t=Ns(e);if(!t)return;let{emit:n,setStatus:s}=To({runId:e,transport:r.transport}),i=r.lookup(t.projectId,t.environmentName);if(!i){let a=`approved, but environment "${t.environmentName}" is no longer in this runner's config (deleted or renamed?) \u2014 nothing was deployed`;n("error",a),s("failed",{error:a}),Ms(e);return}Ms(e);let o={runId:e,project:i.project,environment:i.environment,issueKey:t.issueKey,issueSummary:t.issueSummary,repoPath:i.repoPath,cfg:r.cfg,jira:r.jiraFor(i.project.repoName),transport:r.transport,requestedBy:t.requestedBy};n("info",`Approved \u2014 running the ${i.environment.steps.length} deploy step(s) now`);try{await Fl(o,n,s)}catch(a){let l=a instanceof Error?a.message:String(a);n("error",`Deploy failed: ${l}`),await qe(o,`**Allwright deploy failed.**
617
+ (run \`${r.runId}\`)`});return s(`"${t.branch}" is not in sync with "${n}" \u2014 opened ${d.url} to catch it up. Merge that, then retry the deploy.`,!0)}catch(a){return s(`could not open a sync PR: ${a instanceof Error?a.message:String(a)}`)}}function vm(r,e){if(!e.trim())return r;let t=Tr.default.resolve(r,e),n=Tr.default.relative(r,t);if(n.startsWith("..")||Tr.default.isAbsolute(n))throw new Error(`working directory "${e}" is outside the repository checkout`);return t}function _m(r){return new Promise(e=>{let t=(0,Ks.spawn)("bash",["-lc",r.command],{cwd:r.cwd,env:r.env,detached:!0,stdio:["ignore","pipe","pipe"]}),n=[],s=c=>{n.push(c),n.length>20&&n.shift()},i=!1,o=!1,a=c=>{i||(i=!0,clearTimeout(l),e({code:c,timedOut:o,tail:n.join(`
618
+ `)}))},l=setTimeout(()=>{o=!0,Vl(t.pid,"SIGTERM"),setTimeout(()=>Vl(t.pid,"SIGKILL"),1e4).unref()},r.timeoutMs);Ro.default.createInterface({input:t.stdout}).on("line",c=>{s(c),r.onLine("info",c)}),Ro.default.createInterface({input:t.stderr}).on("line",c=>{s(c),r.onLine("warn",c)}),t.on("error",c=>{s(`failed to start: ${c.message}`),a(127)}),t.on("close",c=>a(c??1))})}function Vl(r,e){if(r)try{process.kill(-r,e)}catch{try{process.kill(r,e)}catch{}}}function bm(r){let e=r.filter(t=>t&&t.length>=6).sort((t,n)=>n.length-t.length);return e.length?t=>{let n=t;for(let s of e)n=n.split(s).join("***");return n}:t=>t}async function Be(r,e){if(r.issueKey!==xr.BRANCH_DEPLOY_ISSUE_KEY)try{await r.jira.addComment(r.issueKey,e)}catch(t){g.error(`could not post deploy comment to ${r.issueKey}: ${t}`)}}function Po(r){return Us(r)!==null}async function Xl(r,e){let t=Us(e);if(!t)return;let{emit:n,setStatus:s}=$o({runId:e,transport:r.transport}),i=r.lookup(t.projectId,t.environmentName);if(!i){let a=`approved, but environment "${t.environmentName}" is no longer in this runner's config (deleted or renamed?) \u2014 nothing was deployed`;n("error",a),s("failed",{error:a}),qs(e);return}qs(e);let o={runId:e,project:i.project,environment:i.environment,issueKey:t.issueKey,issueSummary:t.issueSummary,repoPath:i.repoPath,cfg:r.cfg,jira:r.jiraFor(i.project.repoName),transport:r.transport,requestedBy:t.requestedBy};n("info",`Approved \u2014 running the ${i.environment.steps.length} deploy step(s) now`);try{await Yl(o,n,s)}catch(a){let l=a instanceof Error?a.message:String(a);n("error",`Deploy failed: ${l}`),await Be(o,`**Allwright deploy failed.**
619
619
 
620
- ${l.slice(0,800)}`),s("failed",{error:l})}}async function Kl(r,e){let t=Ns(e);if(!t)return;let{emit:n,setStatus:s}=To({runId:e,transport:r.transport});Ms(e),n("info",`Deploy to "${t.environmentName}" was rejected \u2014 nothing ran`);let i=r.lookup(t.projectId,t.environmentName);try{await r.jiraFor(i?.project.repoName??"").addComment(t.issueKey,`**Allwright: deploy to \`${t.environmentName}\` was rejected.**
620
+ ${l.slice(0,800)}`),s("failed",{error:l})}}async function Ql(r,e){let t=Us(e);if(!t)return;let{emit:n,setStatus:s}=$o({runId:e,transport:r.transport});qs(e),n("info",`Deploy to "${t.environmentName}" was rejected \u2014 nothing ran`);let i=r.lookup(t.projectId,t.environmentName);try{await r.jiraFor(i?.project.repoName??"").addComment(t.issueKey,`**Allwright: deploy to \`${t.environmentName}\` was rejected.**
621
621
 
622
- No deploy step was executed. (run \`${e}\`)`)}catch(o){g.error(`could not post rejection comment to ${t.issueKey}: ${o}`)}s("failed",{error:"deploy rejected by a reviewer"})}var fm=k.object({steps:k.array(Sr.DeployStep).max(50).default([]),requiredSecrets:k.array(k.string()).max(50).default([]),notes:k.string().default("")}),pm=[".ticketpilot/deploy.md","DEPLOY.md","DEPLOYMENT.md","docs/DEPLOY.md","docs/deploy.md","docs/deployment.md"],zl=24e3;function Co(r){for(let e of pm){let t=kr.default.join(r,e);try{if(!ln.default.existsSync(t))continue;let n=ln.default.readFileSync(t,"utf8");if(!n.trim())continue;return{path:e,content:n.length>zl?n.slice(0,zl)+`
622
+ No deploy step was executed. (run \`${e}\`)`)}catch(o){g.error(`could not post rejection comment to ${t.issueKey}: ${o}`)}s("failed",{error:"deploy rejected by a reviewer"})}var wm=w.object({steps:w.array(xr.DeployStep).max(50).default([]),requiredSecrets:w.array(w.string()).max(50).default([]),notes:w.string().default("")}),km=[".ticketpilot/deploy.md","DEPLOY.md","DEPLOYMENT.md","docs/DEPLOY.md","docs/deploy.md","docs/deployment.md"],Gl=24e3;function jo(r){for(let e of km){let t=Tr.default.join(r,e);try{if(!hn.default.existsSync(t))continue;let n=hn.default.readFileSync(t,"utf8");if(!n.trim())continue;return{path:e,content:n.length>Gl?n.slice(0,Gl)+`
623
623
 
624
- [\u2026document truncated\u2026]`:n}}catch{continue}}return null}var Ul=["docker","docker-compose","pm2","systemctl","node","pnpm","npm","yarn","make","python3","pip","rsync","ssh","caddy","nginx"];function Vl(r){return Gl("bash",["-lc",`command -v ${JSON.stringify(r)}`]).trim().length>0}function Gl(r,e){try{let t=(0,Us.spawnSync)(r,e,{encoding:"utf8",timeout:5e3});return t.status===0?t.stdout??"":""}catch{return""}}async function mm(r,e){let t;try{t=new URL(r)}catch{e.push({name:"public-url",ok:!1,detail:`not a valid URL: ${r}`});return}try{let{lookup:n}=await import("node:dns/promises"),s=await n(t.hostname);e.push({name:"public-url-dns",ok:!0,detail:`${t.hostname} \u2192 ${s.address}`})}catch{e.push({name:"public-url-dns",ok:!1,detail:`${t.hostname} does not resolve \u2014 add an A/CNAME record for it at your DNS provider (changes can take a few minutes to propagate)`});return}if(t.protocol==="https:"){let n=await import("node:tls");await new Promise(s=>{let i=n.connect({host:t.hostname,port:Number(t.port||443),servername:t.hostname,timeout:8e3},()=>{let o=i.getPeerCertificate(),a=o?.valid_to?Math.round((new Date(o.valid_to).getTime()-Date.now())/864e5):NaN;e.push(Number.isFinite(a)&&a>0?{name:"public-url-tls",ok:a>14,detail:`certificate valid, expires in ${a} day(s)${a<=14?" \u2014 renew soon":""}`}:{name:"public-url-tls",ok:!1,detail:"certificate expired or unreadable"}),i.end(),s()});i.on("error",o=>{e.push({name:"public-url-tls",ok:!1,detail:`TLS handshake failed: ${o.message} \u2014 is a certificate installed for this hostname?`}),s()}),i.on("timeout",()=>{e.push({name:"public-url-tls",ok:!1,detail:"TLS handshake timed out"}),i.destroy(),s()})})}try{let n=await fetch(t.toString(),{method:"GET",redirect:"manual",signal:AbortSignal.timeout(1e4)});e.push({name:"public-url-reachable",ok:n.status<500,detail:`HTTP ${n.status}${n.status>=300&&n.status<400?` \u2192 ${n.headers.get("location")??""}`:""}`})}catch(n){e.push({name:"public-url-reachable",ok:!1,detail:`not reachable from the runner: ${n instanceof Error?n.message:String(n)}`})}}function gm(r){let e=r.match(/\/(?:var|home|opt|srv)\/[\w./-]+/g)??[],t=[...new Set(e.map(s=>s.replace(/[.,;:)\]'"`]+$/,"")))].slice(0,12);return t.length?`
624
+ [\u2026document truncated\u2026]`:n}}catch{continue}}return null}var Hl=["docker","docker-compose","pm2","systemctl","node","pnpm","npm","yarn","make","python3","pip","rsync","ssh","caddy","nginx"];function ec(r){return tc("bash",["-lc",`command -v ${JSON.stringify(r)}`]).trim().length>0}function tc(r,e){try{let t=(0,Ks.spawnSync)(r,e,{encoding:"utf8",timeout:5e3});return t.status===0?t.stdout??"":""}catch{return""}}async function Sm(r,e){let t;try{t=new URL(r)}catch{e.push({name:"public-url",ok:!1,detail:`not a valid URL: ${r}`});return}try{let{lookup:n}=await import("node:dns/promises"),s=await n(t.hostname);e.push({name:"public-url-dns",ok:!0,detail:`${t.hostname} \u2192 ${s.address}`})}catch{e.push({name:"public-url-dns",ok:!1,detail:`${t.hostname} does not resolve \u2014 add an A/CNAME record for it at your DNS provider (changes can take a few minutes to propagate)`});return}if(t.protocol==="https:"){let n=await import("node:tls");await new Promise(s=>{let i=n.connect({host:t.hostname,port:Number(t.port||443),servername:t.hostname,timeout:8e3},()=>{let o=i.getPeerCertificate(),a=o?.valid_to?Math.round((new Date(o.valid_to).getTime()-Date.now())/864e5):NaN;e.push(Number.isFinite(a)&&a>0?{name:"public-url-tls",ok:a>14,detail:`certificate valid, expires in ${a} day(s)${a<=14?" \u2014 renew soon":""}`}:{name:"public-url-tls",ok:!1,detail:"certificate expired or unreadable"}),i.end(),s()});i.on("error",o=>{e.push({name:"public-url-tls",ok:!1,detail:`TLS handshake failed: ${o.message} \u2014 is a certificate installed for this hostname?`}),s()}),i.on("timeout",()=>{e.push({name:"public-url-tls",ok:!1,detail:"TLS handshake timed out"}),i.destroy(),s()})})}try{let n=await fetch(t.toString(),{method:"GET",redirect:"manual",signal:AbortSignal.timeout(1e4)});e.push({name:"public-url-reachable",ok:n.status<500,detail:`HTTP ${n.status}${n.status>=300&&n.status<400?` \u2192 ${n.headers.get("location")??""}`:""}`})}catch(n){e.push({name:"public-url-reachable",ok:!1,detail:`not reachable from the runner: ${n instanceof Error?n.message:String(n)}`})}}function Tm(r){let e=r.match(/\/(?:var|home|opt|srv)\/[\w./-]+/g)??[],t=[...new Set(e.map(s=>s.replace(/[.,;:)\]'"`]+$/,"")))].slice(0,12);return t.length?`
625
625
  - absolute paths the document mentions, checked on THIS machine:
626
- ${t.map(s=>` - ${s}: ${ln.default.existsSync(s)?"EXISTS on this machine":"not found on this machine"}`).join(`
627
- `)}`:""}function ym(r,e,t,n=""){let s=Ul.filter(a=>Vl(a)),i=Ul.filter(a=>!s.includes(a)),o=Object.keys(Xt(r,e,t));return`About the machine these steps will run on (gathered by the runner, trust it):
626
+ ${t.map(s=>` - ${s}: ${hn.default.existsSync(s)?"EXISTS on this machine":"not found on this machine"}`).join(`
627
+ `)}`:""}function xm(r,e,t,n=""){let s=Hl.filter(a=>ec(a)),i=Hl.filter(a=>!s.includes(a)),o=Object.keys(Qt(r,e,t));return`About the machine these steps will run on (gathered by the runner, trust it):
628
628
  - available tools: ${s.join(", ")||"(none of the common ones)"}
629
629
  - NOT installed: ${i.join(", ")||"(none missing)"}
630
- - secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+gm(n)}async function Hl(r){let e=[];if(r.publicUrl?.trim()&&await mm(r.publicUrl.trim(),e),e.push(ln.default.existsSync(r.repoPath)?{name:"repo-path",ok:!0,detail:r.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${r.repoPath}`}),e.push({name:"deploys-enabled",ok:r.cfg.deploy.enabled,detail:r.cfg.deploy.enabled?"enabled on this runner":"disabled \u2014 run: allwright deploy enable (then restart the runner)"}),r.workdir){let a=kr.default.isAbsolute(r.workdir)?r.workdir:kr.default.join(r.repoPath,r.workdir);e.push(ln.default.existsSync(a)?{name:"workdir",ok:!0,detail:a}:{name:"workdir",ok:!1,detail:`does not exist: ${a}`})}if(r.branch){let a=Gl("git",["-C",r.repoPath,"ls-remote","--heads","origin",r.branch]);e.push(a.trim()?{name:"branch",ok:!0,detail:`origin/${r.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${r.branch}" (or the remote is unreachable)`})}let t=Xt(r.cfg,r.repoName,r.environmentName),n=new Set(r.requiredSecrets);for(let a of r.steps)for(let l of a.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))n.add(l[1]);let s=[...n].filter(a=>!t[a]&&!process.env[a]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} \u2014 set with: allwright env set "${r.repoName}" "${r.environmentName}" ${s[0]}=...`:`${n.size} present`});let i=new Set;for(let a of r.steps)for(let l of a.run.split(/&&|\|\||;|\|/)){let c=l.trim().split(/\s+/),d=c.shift();for(;d&&(/^[A-Za-z_][A-Za-z0-9_]*=/.test(d)||d==="sudo"||d==="env"||d==="nohup");)d=c.shift();!d||d.startsWith("$")||d.startsWith("#")||d.startsWith("(")||i.add(d)}let o=[...i].filter(a=>!Vl(a));return e.push({name:"binaries",ok:o.length===0,detail:o.length?`not found on this machine: ${o.join(", ")}`:`${i.size} found: ${[...i].slice(0,12).join(", ")}`}),{ok:e.every(a=>a.ok),checks:e}}async function Wl(r){let e=Co(r.repoPath);if(!e)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:'this repo has no deploy document. Create DEPLOY.md at the repo root (or .ticketpilot/deploy.md) describing how this project actually deploys \u2014 the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let t=ym(r.cfg,r.repoName,r.environmentName,e.content),n=$t(Sr.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:r.environmentName,docPath:e.path,docContent:e.content,notes:r.notes.trim()||"(nothing specified)",machineContext:t}),s=await Oe.run({repoPath:r.repoPath,prompt:n,timeoutSeconds:r.timeoutSeconds,bin:r.cfg.claudeBin,mode:"read_only",maxTurns:30,sessionId:(0,Bl.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=vm(s.resultText);return i?{ok:!0,...i}:(g.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
631
- `+s.resultText.slice(0,4e3)),{ok:!1,steps:[],requiredSecrets:[],notes:"",error:`Claude answered, but not in the JSON shape we expected, so there is nothing safe to fill in. Try again, or write the steps by hand. Its answer started: "${s.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`})}function vm(r){for(let e of _m(r)){let t;try{t=JSON.parse(e)}catch{continue}let n=fm.safeParse(bm(t));if(n.success&&n.data.steps.length||n.success&&n.data.notes.trim())return n.data}return null}function _m(r){let e=[];for(let s of r.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let t=r.indexOf("{"),n=r.lastIndexOf("}");return t>=0&&n>t&&e.push(r.slice(t,n+1)),e}function bm(r){if(!r||typeof r!="object")return r;let e=r,n=(Array.isArray(r)?r:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,a)=>{if(typeof o=="string")return o.trim()?{name:ql(o,a),run:o.trim()}:null;if(!o||typeof o!="object")return null;let l=o,c=ko(l.run,l.command,l.cmd,l.script,l.shell);return c?{name:(ko(l.name,l.title,l.description)??ql(c,a)).slice(0,120),run:c,continueOnError:l.continueOnError===!0||l.continue_on_error===!0}:null}).filter(Boolean),s=e.requiredSecrets??e.required_secrets??e.secrets,i=Array.isArray(s)?s.filter(o=>typeof o=="string"):s&&typeof s=="object"?Object.keys(s):[];return{steps:n.slice(0,50),requiredSecrets:i.slice(0,50),notes:ko(e.notes,e.note,e.explanation)??""}}function ko(...r){for(let e of r)if(typeof e=="string"&&e.trim())return e.trim()}function ql(r,e){return(r.split(`
632
- `)[0].trim()||`Step ${e+1}`).slice(0,120)}vr();lt();function Eo(r,e){if(!r.componentRoutes.length)return{project:r};let t=e.filter(Boolean);if(!t.length)return{error:`no Jira component set \u2014 project "${r.name}" routes by component (${r.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let n=r.componentRoutes.filter(i=>t.includes(i.component));if(!n.length)return{error:`component(s) [${t.join(", ")}] not mapped \u2014 known: `+r.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(n.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) \u2014 ambiguous, refusing`}:{project:{...r,repoName:n[0].repoName}}}var Jl=24*3600*1e3,Bs=14,wm=Bs*24*3600*1e3,km=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),Fs=class{constructor(e,t,n){this.cfg=e;this.jiraFor=t;this.transport=n}cfg;jiraFor;transport;projects=[];rules=[];environments=[];inFlight=new Set;get busyCount(){return this.inFlight.size}repoQueues=new Map;envQueues=new Map;timer=null;ticking=!1;paused=!1;jiraOf(e){return this.jiraFor(e.repoName)}routingWarned=new Set;warnRoutingOnce(e,t){this.routingWarned.has(e)||(this.routingWarned.add(e),g.warn(`Component routing refused \u2014 ${t}`))}resolveClaudeProfile(e,t){if(!t)return;let n=this.cfg.claudeProfiles[t]?.configDir;return!n&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${t}" is not set up on this runner (allwright claude login "${t}") \u2014 using the runner's own login instead.`}),g.warn(`run ${e}: claude profile "${t}" missing locally \u2014 using default login`)),n}setConfig(e,t,n=!1,s=[]){this.projects=e,this.rules=t,this.environments=s;let i=t.filter(o=>o.enabled).length;g.info(`config synced: ${e.length} project(s), ${t.length} rule(s) (${i} enabled), ${s.length} environment(s)`),n!==this.paused&&(g.info(n?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=n)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),g.info(`polling Jira every ${this.cfg.pollIntervalSeconds}s`)}stop(){this.timer&&clearInterval(this.timer)}lastScheduleCheck=0;auditInFlight=!1;async runScheduledAudits(){if(!(!this.cfg.auditSchedules.length||this.auditInFlight)&&!(Date.now()-this.lastScheduleCheck<15*6e4)){this.lastScheduleCheck=Date.now();for(let e of this.cfg.auditSchedules){let t=this.projects.find(s=>s.repoName===e.repoName);if(!t)continue;let n=Gu(t.id,e.role);if(!(n&&Date.now()-new Date(n).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{g.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=await tn({projectId:t.id,repoPath:this.cfg.repos[e.repoName]?.path??"",role:e.role,scope:{kind:"repo",ref:""},model:"",claudeBin:this.cfg.claudeBin,jira:this.jiraFor(e.repoName)});if(s.ok){let i=s.audit.findings.length;g.info(`Scheduled audit done: ${i} finding(s) \u2014 drift visible on the Audits page`)}else g.warn(`Scheduled audit failed: ${s.error}`)}catch(s){g.warn(`Scheduled audit crashed: ${s instanceof Error?s.message:String(s)}`)}finally{this.auditInFlight=!1}break}}}}async tick(){if(!(this.ticking||this.paused||!this.transport.connected)){this.ticking=!0;try{await this.runScheduledAudits(),await this.sweepMergedPRs(),await this.sweepGitHubApprovals();let e=new Set;for(let t of this.rules){if(!t.enabled)continue;let n=this.projects.find(i=>i.id===t.projectId);if(!n)continue;let s=this.cfg.repos[n.repoName];if(!s){g.warn(`rule "${t.name}": no local path for repo "${n.repoName}" \u2014 run: allwright repo add "${n.repoName}" /path/to/checkout`);continue}t.action.type==="deploy"?await this.pollDeployRule(t,n,s.path):t.action.type==="respond"?await this.pollRespondRule(t,n,s.path):(e.has(n.id)||(e.add(n.id),await this.sweepNeedsInput(n)),t.trigger.type==="comment_keyword"&&await this.sweepRevisions(t,n),await this.pollRule(t,n,s.path))}}catch(e){g.warn(`poll tick failed: ${e instanceof Error?e.message:e}`)}finally{this.ticking=!1}}}async sweepGitHubApprovals(){let e=Object.values(Dn());if(!e.length)return;let t=le()??this.cfg,n=new Map,s=i=>{let o=Rt(t,i);if(!o)return null;let a=n.get(o);return a||n.set(o,a=new Ne(o)),a};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let a=`gh-approve:${i.runId}`;if(this.inFlight.has(a))continue;let l,c;try{[l,c]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(S){g.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${S instanceof Error?S.message:S}`);continue}if(!c)continue;let d={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(c.merged){g.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub \u2014 completing the run`),this.inFlight.add(a);try{await qn(d,i.runId,c.headSha)}finally{this.inFlight.delete(a)}continue}if(c.state==="closed"){g.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub \u2014 failing the run`);let S=this.jiraFor(i.repoName),x=`PR #${i.prNumber} was closed on GitHub without merging`;await S.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
630
+ - secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+Tm(n)}async function rc(r){let e=[];if(r.publicUrl?.trim()&&await Sm(r.publicUrl.trim(),e),e.push(hn.default.existsSync(r.repoPath)?{name:"repo-path",ok:!0,detail:r.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${r.repoPath}`}),e.push({name:"deploys-enabled",ok:r.cfg.deploy.enabled,detail:r.cfg.deploy.enabled?"enabled on this runner":"disabled \u2014 run: allwright deploy enable (then restart the runner)"}),r.workdir){let a=Tr.default.isAbsolute(r.workdir)?r.workdir:Tr.default.join(r.repoPath,r.workdir);e.push(hn.default.existsSync(a)?{name:"workdir",ok:!0,detail:a}:{name:"workdir",ok:!1,detail:`does not exist: ${a}`})}if(r.branch){let a=tc("git",["-C",r.repoPath,"ls-remote","--heads","origin",r.branch]);e.push(a.trim()?{name:"branch",ok:!0,detail:`origin/${r.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${r.branch}" (or the remote is unreachable)`})}let t=Qt(r.cfg,r.repoName,r.environmentName),n=new Set(r.requiredSecrets);for(let a of r.steps)for(let l of a.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))n.add(l[1]);let s=[...n].filter(a=>!t[a]&&!process.env[a]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} \u2014 set with: allwright env set "${r.repoName}" "${r.environmentName}" ${s[0]}=...`:`${n.size} present`});let i=new Set;for(let a of r.steps)for(let l of a.run.split(/&&|\|\||;|\|/)){let c=l.trim().split(/\s+/),d=c.shift();for(;d&&(/^[A-Za-z_][A-Za-z0-9_]*=/.test(d)||d==="sudo"||d==="env"||d==="nohup");)d=c.shift();!d||d.startsWith("$")||d.startsWith("#")||d.startsWith("(")||i.add(d)}let o=[...i].filter(a=>!ec(a));return e.push({name:"binaries",ok:o.length===0,detail:o.length?`not found on this machine: ${o.join(", ")}`:`${i.size} found: ${[...i].slice(0,12).join(", ")}`}),{ok:e.every(a=>a.ok),checks:e}}async function nc(r){let e=jo(r.repoPath);if(!e)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:'this repo has no deploy document. Create DEPLOY.md at the repo root (or .ticketpilot/deploy.md) describing how this project actually deploys \u2014 the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let t=xm(r.cfg,r.repoName,r.environmentName,e.content),n=Pt(xr.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:r.environmentName,docPath:e.path,docContent:e.content,notes:r.notes.trim()||"(nothing specified)",machineContext:t}),s=await Ne.run({repoPath:r.repoPath,prompt:n,timeoutSeconds:r.timeoutSeconds,bin:r.cfg.claudeBin,mode:"read_only",maxTurns:30,sessionId:(0,Jl.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=Cm(s.resultText);return i?{ok:!0,...i}:(g.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
631
+ `+s.resultText.slice(0,4e3)),{ok:!1,steps:[],requiredSecrets:[],notes:"",error:`Claude answered, but not in the JSON shape we expected, so there is nothing safe to fill in. Try again, or write the steps by hand. Its answer started: "${s.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`})}function Cm(r){for(let e of Em(r)){let t;try{t=JSON.parse(e)}catch{continue}let n=wm.safeParse(Im(t));if(n.success&&n.data.steps.length||n.success&&n.data.notes.trim())return n.data}return null}function Em(r){let e=[];for(let s of r.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let t=r.indexOf("{"),n=r.lastIndexOf("}");return t>=0&&n>t&&e.push(r.slice(t,n+1)),e}function Im(r){if(!r||typeof r!="object")return r;let e=r,n=(Array.isArray(r)?r:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,a)=>{if(typeof o=="string")return o.trim()?{name:Wl(o,a),run:o.trim()}:null;if(!o||typeof o!="object")return null;let l=o,c=Ao(l.run,l.command,l.cmd,l.script,l.shell);return c?{name:(Ao(l.name,l.title,l.description)??Wl(c,a)).slice(0,120),run:c,continueOnError:l.continueOnError===!0||l.continue_on_error===!0}:null}).filter(Boolean),s=e.requiredSecrets??e.required_secrets??e.secrets,i=Array.isArray(s)?s.filter(o=>typeof o=="string"):s&&typeof s=="object"?Object.keys(s):[];return{steps:n.slice(0,50),requiredSecrets:i.slice(0,50),notes:Ao(e.notes,e.note,e.explanation)??""}}function Ao(...r){for(let e of r)if(typeof e=="string"&&e.trim())return e.trim()}function Wl(r,e){return(r.split(`
632
+ `)[0].trim()||`Step ${e+1}`).slice(0,120)}_r();ct();function Oo(r,e){if(!r.componentRoutes.length)return{project:r};let t=e.filter(Boolean);if(!t.length)return{error:`no Jira component set \u2014 project "${r.name}" routes by component (${r.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let n=r.componentRoutes.filter(i=>t.includes(i.component));if(!n.length)return{error:`component(s) [${t.join(", ")}] not mapped \u2014 known: `+r.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(n.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) \u2014 ambiguous, refusing`}:{project:{...r,repoName:n[0].repoName}}}var sc=24*3600*1e3,Gs=14,Am=Gs*24*3600*1e3,Rm=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),Hs=class{constructor(e,t,n){this.cfg=e;this.jiraFor=t;this.transport=n}cfg;jiraFor;transport;projects=[];rules=[];environments=[];inFlight=new Set;get busyCount(){return this.inFlight.size}repoQueues=new Map;envQueues=new Map;timer=null;ticking=!1;paused=!1;jiraOf(e){return this.jiraFor(e.repoName)}routingWarned=new Set;warnRoutingOnce(e,t){this.routingWarned.has(e)||(this.routingWarned.add(e),g.warn(`Component routing refused \u2014 ${t}`))}resolveClaudeProfile(e,t){if(!t)return;let n=this.cfg.claudeProfiles[t]?.configDir;return!n&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${t}" is not set up on this runner (allwright claude login "${t}") \u2014 using the runner's own login instead.`}),g.warn(`run ${e}: claude profile "${t}" missing locally \u2014 using default login`)),n}setConfig(e,t,n=!1,s=[]){this.projects=e,this.rules=t,this.environments=s;let i=t.filter(o=>o.enabled).length;g.info(`config synced: ${e.length} project(s), ${t.length} rule(s) (${i} enabled), ${s.length} environment(s)`),n!==this.paused&&(g.info(n?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=n)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),g.info(`polling Jira every ${this.cfg.pollIntervalSeconds}s`)}stop(){this.timer&&clearInterval(this.timer)}lastScheduleCheck=0;auditInFlight=!1;async runScheduledAudits(){if(!(!this.cfg.auditSchedules.length||this.auditInFlight)&&!(Date.now()-this.lastScheduleCheck<15*6e4)){this.lastScheduleCheck=Date.now();for(let e of this.cfg.auditSchedules){let t=this.projects.find(s=>s.repoName===e.repoName);if(!t)continue;let n=tl(t.id,e.role);if(!(n&&Date.now()-new Date(n).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{g.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=await sn({projectId:t.id,repoPath:this.cfg.repos[e.repoName]?.path??"",role:e.role,scope:{kind:"repo",ref:""},model:"",claudeBin:this.cfg.claudeBin,jira:this.jiraFor(e.repoName)});if(s.ok){let i=s.audit.findings.length;g.info(`Scheduled audit done: ${i} finding(s) \u2014 drift visible on the Audits page`)}else g.warn(`Scheduled audit failed: ${s.error}`)}catch(s){g.warn(`Scheduled audit crashed: ${s instanceof Error?s.message:String(s)}`)}finally{this.auditInFlight=!1}break}}}}async tick(){if(!(this.ticking||this.paused||!this.transport.connected)){this.ticking=!0;try{await this.runScheduledAudits(),await this.sweepMergedPRs(),await this.sweepGitHubApprovals();let e=new Set;for(let t of this.rules){if(!t.enabled)continue;let n=this.projects.find(i=>i.id===t.projectId);if(!n)continue;let s=this.cfg.repos[n.repoName];if(!s){g.warn(`rule "${t.name}": no local path for repo "${n.repoName}" \u2014 run: allwright repo add "${n.repoName}" /path/to/checkout`);continue}t.action.type==="deploy"?await this.pollDeployRule(t,n,s.path):t.action.type==="respond"?await this.pollRespondRule(t,n,s.path):(e.has(n.id)||(e.add(n.id),await this.sweepNeedsInput(n)),t.trigger.type==="comment_keyword"&&await this.sweepRevisions(t,n),await this.pollRule(t,n,s.path))}}catch(e){g.warn(`poll tick failed: ${e instanceof Error?e.message:e}`)}finally{this.ticking=!1}}}async sweepGitHubApprovals(){let e=Object.values(Bn());if(!e.length)return;let t=ce()??this.cfg,n=new Map,s=i=>{let o=$t(t,i);if(!o)return null;let a=n.get(o);return a||n.set(o,a=new Me(o)),a};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let a=`gh-approve:${i.runId}`;if(this.inFlight.has(a))continue;let l,c;try{[l,c]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(S){g.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${S instanceof Error?S.message:S}`);continue}if(!c)continue;let d={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(c.merged){g.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub \u2014 completing the run`),this.inFlight.add(a);try{await Kn(d,i.runId,c.headSha)}finally{this.inFlight.delete(a)}continue}if(c.state==="closed"){g.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub \u2014 failing the run`);let S=this.jiraFor(i.repoName),T=`PR #${i.prNumber} was closed on GitHub without merging`;await S.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
633
633
 
634
634
  PR: ${i.prUrl}
635
635
 
636
- The run is marked failed. Remove the \`${i.failedLabel}\` label (or hit Retry on the Allwright board) to implement again. (run \`${i.runId}\`)`).catch(()=>{}),await S.editLabels(i.issueKey,{add:[i.failedLabel]}).catch(()=>{}),this.transport.send({type:"run.status",runId:i.runId,status:"failed",error:x}),br(i.runId);continue}c.mergeableState==="dirty"?i.conflictNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: the pull request for this ticket has merge conflicts.** The base branch moved after this change was built, so GitHub cannot merge it as-is.
636
+ The run is marked failed. Remove the \`${i.failedLabel}\` label (or hit Retry on the Allwright board) to implement again. (run \`${i.runId}\`)`).catch(()=>{}),await S.editLabels(i.issueKey,{add:[i.failedLabel]}).catch(()=>{}),this.transport.send({type:"run.status",runId:i.runId,status:"failed",error:T}),kr(i.runId);continue}c.mergeableState==="dirty"?i.conflictNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: the pull request for this ticket has merge conflicts.** The base branch moved after this change was built, so GitHub cannot merge it as-is.
637
637
 
638
638
  PR: ${i.prUrl}
639
639
 
640
- To fix: Reject this run on the Allwright dashboard (that closes the conflicted PR), then post the implement trigger comment again \u2014 a fresh run rebuilds the change on the current base. Or resolve the conflicts manually on branch \`${i.branch}\`; approval works normally once the PR is conflict-free. (run \`${i.runId}\`)`).catch(()=>{}),i.conflictNotified=!0,on(i),g.info(`merge conflicts on PR #${i.prNumber} for ${i.issueKey} \u2014 ticket notified`)):i.conflictNotified&&c.mergeableState!==null&&c.mergeableState!=="unknown"&&(i.conflictNotified=!1,on(i));let p=l.filter(S=>S.state==="APPROVED"||S.state==="CHANGES_REQUESTED").sort((S,x)=>S.submittedAt.localeCompare(x.submittedAt)),w=p[p.length-1];if(w){if(w.state==="CHANGES_REQUESTED"){i.changesRequestedNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: changes were requested on the pull request** (by ${w.user}).
640
+ To fix: Reject this run on the Allwright dashboard (that closes the conflicted PR), then post the implement trigger comment again \u2014 a fresh run rebuilds the change on the current base. Or resolve the conflicts manually on branch \`${i.branch}\`; approval works normally once the PR is conflict-free. (run \`${i.runId}\`)`).catch(()=>{}),i.conflictNotified=!0,ln(i),g.info(`merge conflicts on PR #${i.prNumber} for ${i.issueKey} \u2014 ticket notified`)):i.conflictNotified&&c.mergeableState!==null&&c.mergeableState!=="unknown"&&(i.conflictNotified=!1,ln(i));let p=l.filter(S=>S.state==="APPROVED"||S.state==="CHANGES_REQUESTED").sort((S,T)=>S.submittedAt.localeCompare(T.submittedAt)),_=p[p.length-1];if(_){if(_.state==="CHANGES_REQUESTED"){i.changesRequestedNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: changes were requested on the pull request** (by ${_.user}).
641
641
 
642
642
  PR: ${i.prUrl}
643
643
 
644
- Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),on({...i,changesRequestedNotified:!0}),g.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} \u2014 ticket notified`));continue}if(w.commitId===c.headSha){g.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${w.user} \u2014 completing the run`),this.inFlight.add(a);try{await qn(d,i.runId,w.commitId)}catch(S){g.warn(`github-approval completion failed for ${i.runId}: ${S instanceof Error?S.message:S}`)}finally{this.inFlight.delete(a)}}}}}async sweepMergedPRs(){let e=Object.values(Os());if(!e.length)return;let t=le()??this.cfg,n=new Map,s=a=>{let l=Rt(t,a);if(!l)return null;let c=n.get(l);return c||n.set(l,c=new Ne(l)),c},i=20,o=720*3600*1e3;for(let a of e.slice(0,i)){let l=s(a.repoName);if(!l)continue;if(Date.now()-new Date(a.createdAt).getTime()>o){g.warn(`merge watch for ${a.issueKey} PR #${a.prNumber} is over 30 days old \u2014 dropping`),Ln(a.runId);continue}let c;try{c=await l.getPullRequest(a.owner,a.repo,a.prNumber)}catch(w){g.warn(`merge check failed for ${a.owner}/${a.repo}#${a.prNumber}: ${w instanceof Error?w.message:w}`);continue}if(!c){Ln(a.runId);continue}if(c.state==="open")continue;if(!c.merged){Ln(a.runId);continue}let d=this.jiraFor(a.repoName),p="";if(a.jiraTransitionOnMerge)try{p=await d.transitionByName(a.issueKey,a.jiraTransitionOnMerge)?`
644
+ Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),ln({...i,changesRequestedNotified:!0}),g.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} \u2014 ticket notified`));continue}if(_.commitId===c.headSha){g.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${_.user} \u2014 completing the run`),this.inFlight.add(a);try{await Kn(d,i.runId,_.commitId)}catch(S){g.warn(`github-approval completion failed for ${i.runId}: ${S instanceof Error?S.message:S}`)}finally{this.inFlight.delete(a)}}}}}async sweepMergedPRs(){let e=Object.values(zs());if(!e.length)return;let t=ce()??this.cfg,n=new Map,s=a=>{let l=$t(t,a);if(!l)return null;let c=n.get(l);return c||n.set(l,c=new Me(l)),c},i=20,o=720*3600*1e3;for(let a of e.slice(0,i)){let l=s(a.repoName);if(!l)continue;if(Date.now()-new Date(a.createdAt).getTime()>o){g.warn(`merge watch for ${a.issueKey} PR #${a.prNumber} is over 30 days old \u2014 dropping`),qn(a.runId);continue}let c;try{c=await l.getPullRequest(a.owner,a.repo,a.prNumber)}catch(_){g.warn(`merge check failed for ${a.owner}/${a.repo}#${a.prNumber}: ${_ instanceof Error?_.message:_}`);continue}if(!c){qn(a.runId);continue}if(c.state==="open")continue;if(!c.merged){qn(a.runId);continue}let d=this.jiraFor(a.repoName),p="";if(a.jiraTransitionOnMerge)try{p=await d.transitionByName(a.issueKey,a.jiraTransitionOnMerge)?`
645
645
 
646
646
  Ticket moved to **${a.jiraTransitionOnMerge}**.`:`
647
647
 
648
- Note: no transition named "${a.jiraTransitionOnMerge}" is available from this ticket's current status \u2014 move it manually.`}catch(w){p=`
648
+ Note: no transition named "${a.jiraTransitionOnMerge}" is available from this ticket's current status \u2014 move it manually.`}catch(_){p=`
649
649
 
650
- Note: the "${a.jiraTransitionOnMerge}" transition failed: ${w instanceof Error?w.message:w}`}try{await d.addComment(a.issueKey,`**Allwright: the pull request for this ticket was merged.**
650
+ Note: the "${a.jiraTransitionOnMerge}" transition failed: ${_ instanceof Error?_.message:_}`}try{await d.addComment(a.issueKey,`**Allwright: the pull request for this ticket was merged.**
651
651
 
652
652
  PR: ${a.prUrl} (merged at \`${c.headSha.slice(0,10)}\`)${p}
653
653
 
654
- (run \`${a.runId}\`)`)}catch(w){g.warn(`could not post merge comment to ${a.issueKey}: ${w instanceof Error?w.message:w}`);continue}g.info(`PR #${a.prNumber} for ${a.issueKey} merged \u2014 ticket updated`),Ln(a.runId)}}async sweepNeedsInput(e){let t;try{t=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${Tr.NEEDS_INPUT_LABEL}"`,10)}catch(s){g.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!t.length)return;let n=an();for(let s of t){let i=Object.values(n).filter(a=>a.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[Tr.NEEDS_INPUT_LABEL]}).catch(()=>{}),g.warn(`${s.key}: needs-input label with no local pending record \u2014 removed`);continue}let o=null;for(let a of i){let l=`resume:${a.runId}`;if(this.inFlight.has(l))continue;if(Date.now()-new Date(a.createdAt).getTime()>wm){this.inFlight.add(l),this.abandonStaleInput(a,e).finally(()=>this.inFlight.delete(l));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(x){g.warn(`needs-input check failed for ${s.key}: ${x instanceof Error?x.message:x}`);continue}let c=new Date(a.questionsPostedAt).getTime(),d=o.comments.filter(x=>!He(x.body)&&new Date(x.created).getTime()>c);if(!d.length)continue;let p=Bn(d),w=o.attachments;this.inFlight.add(l),g.info(`reply received on ${s.key} \u2014 resuming run ${a.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[Tr.NEEDS_INPUT_LABEL]}).catch(x=>{g.warn(`could not remove needs-input label on ${s.key}: ${x}`)});let S={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};a.kind==="implement"?this.enqueueForRepo(a.baseRepoPath??a.repoPath,async()=>{try{await El(a,p,w,S)}finally{this.inFlight.delete(l)}}):this.enqueueForRepo(a.repoPath,async()=>{try{await Sl(a,p,w,S)}finally{this.inFlight.delete(l)}})}}}async abandonStaleInput(e,t){g.warn(`${e.issueKey}: needs-input unanswered for over ${Bs}d \u2014 abandoning run ${e.runId}`);try{await this.jiraOf(t).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
654
+ (run \`${a.runId}\`)`)}catch(_){g.warn(`could not post merge comment to ${a.issueKey}: ${_ instanceof Error?_.message:_}`);continue}g.info(`PR #${a.prNumber} for ${a.issueKey} merged \u2014 ticket updated`),qn(a.runId)}}async sweepNeedsInput(e){let t;try{t=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${Cr.NEEDS_INPUT_LABEL}"`,10)}catch(s){g.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!t.length)return;let n=cn();for(let s of t){let i=Object.values(n).filter(a=>a.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[Cr.NEEDS_INPUT_LABEL]}).catch(()=>{}),g.warn(`${s.key}: needs-input label with no local pending record \u2014 removed`);continue}let o=null;for(let a of i){let l=`resume:${a.runId}`;if(this.inFlight.has(l))continue;if(Date.now()-new Date(a.createdAt).getTime()>Am){this.inFlight.add(l),this.abandonStaleInput(a,e).finally(()=>this.inFlight.delete(l));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(T){g.warn(`needs-input check failed for ${s.key}: ${T instanceof Error?T.message:T}`);continue}let c=new Date(a.questionsPostedAt).getTime(),d=o.comments.filter(T=>!Je(T.body)&&new Date(T.created).getTime()>c);if(!d.length)continue;let p=Vn(d),_=o.attachments;this.inFlight.add(l),g.info(`reply received on ${s.key} \u2014 resuming run ${a.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[Cr.NEEDS_INPUT_LABEL]}).catch(T=>{g.warn(`could not remove needs-input label on ${s.key}: ${T}`)});let S={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};a.kind==="implement"?this.enqueueForRepo(a.baseRepoPath??a.repoPath,async()=>{try{await Nl(a,p,_,S)}finally{this.inFlight.delete(l)}}):this.enqueueForRepo(a.repoPath,async()=>{try{await $l(a,p,_,S)}finally{this.inFlight.delete(l)}})}}}async abandonStaleInput(e,t){g.warn(`${e.issueKey}: needs-input unanswered for over ${Gs}d \u2014 abandoning run ${e.runId}`);try{await this.jiraOf(t).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
655
655
 
656
- No reply arrived within ${Bs} days of the question above. This ticket has been labeled \`${e.failedLabel}\`; remove it and re-trigger to try again. (run \`${e.runId}\`)`),await this.jiraOf(t).editLabels(e.issueKey,{add:[e.failedLabel],remove:[Tr.NEEDS_INPUT_LABEL]})}catch(n){g.warn(`could not post staleness notice for ${e.issueKey}: ${n}`)}e.kind==="implement"&&await Qr(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),Je(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${Bs} days`})}async pollRule(e,t,n){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,t):await this.matchCommentTrigger(e,t);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let a=Eo(t,i.components??[]);if("error"in a){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${a.error}`);continue}let l=a.project,c=l.repoName===t.repoName?n:this.cfg.repos[l.repoName]?.path;if(!c){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${l.repoName}" but it has no local checkout \u2014 run: allwright repo add "${l.repoName}" /path/to/checkout`);continue}let d=await this.transport.claimRun({ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,triggerFingerprint:i.fingerprint,triggeredByAccountId:i.triggeredByAccountId});if(!d.accepted||!d.runId){d.reason!=="duplicate"&&g.warn(`claim rejected for ${i.issueKey}: ${d.reason??"unknown"}`);continue}this.inFlight.add(o),g.info(`claimed run ${d.runId} for ${i.issueKey}`+(l.repoName!==t.repoName?` (routed \u2192 ${l.repoName})`:"")+(d.claudeProfile?` (claude profile "${d.claudeProfile}")`:""));let p=this.resolveClaudeProfile(d.runId,d.claudeProfile);this.enqueueForRepo(c,async()=>{try{await wo({runId:d.runId,rule:e,project:l,issueKey:i.issueKey,repoPath:c,cfg:this.cfg,jira:this.jiraOf(l),transport:this.transport,claudeConfigDir:p,actorEmail:d.actorEmail})}finally{this.inFlight.delete(o)}})}}async pollRespondRule(e,t,n){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),a=Date.now()-Jl;for(let l of i){let c=await this.jiraOf(t).getIssue(l.key);for(let d of c.comments){if(!d.body.toLowerCase().includes(o)||He(d.body)||new Date(d.created).getTime()<a||!d.id)continue;let p=`respond:${d.id}`;if(this.inFlight.has(p))continue;let w=Eo(t,l.components??[]);if("error"in w){this.warnRoutingOnce(`${e.id}:${l.key}`,`${l.key}: ${w.error}`);continue}let S=w.project,x=S.repoName===t.repoName?n:this.cfg.repos[S.repoName]?.path;if(!x){this.warnRoutingOnce(`${e.id}:${l.key}:path`,`${l.key}: routed to repo "${S.repoName}" but it has no local checkout \u2014 run: allwright repo add "${S.repoName}" /path/to/checkout`);continue}let _=await this.transport.claimRun({ruleId:e.id,issueKey:l.key,issueSummary:l.summary,triggerFingerprint:`question by ${d.author} at ${d.created}`,dedupKey:`respond:comment:${d.id}`,triggeredByAccountId:d.authorAccountId??void 0});if(!_.accepted||!_.runId){_.reason!=="duplicate"&&g.warn(`respond claim rejected for ${l.key}: ${_.reason??"unknown"}`);continue}this.inFlight.add(p),g.info(`claimed respond run ${_.runId}: ${l.key} (comment ${d.id})`+(S.repoName!==t.repoName?` (routed \u2192 ${S.repoName})`:"")+(_.claudeProfile?` (claude profile "${_.claudeProfile}")`:""));let O={author:d.author,body:d.body},q=this.resolveClaudeProfile(_.runId,_.claudeProfile);this.enqueueForRepo(x,async()=>{try{await wo({runId:_.runId,rule:e,project:S,issueKey:l.key,repoPath:x,cfg:this.cfg,jira:this.jiraOf(S),transport:this.transport,question:O,claudeConfigDir:q,actorEmail:_.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.doneLabel}" AND updated >= "-2d"`,10)}catch(o){g.warn(`revision sweep failed for ${t.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=n.keyword.toLowerCase();for(let o of s)try{let a=await this.jiraOf(t).getIssue(o.key),l=null;for(let d of a.comments)He(d.body)&&(l=Math.max(l??0,new Date(d.created).getTime()));if(l===null||!a.comments.some(d=>!He(d.body)&&d.body.toLowerCase().includes(i)&&new Date(d.created).getTime()>l))continue;await this.jiraOf(t).editLabels(o.key,{remove:[n.doneLabel]}),g.info(`revision requested on ${o.key} (new "${n.keyword}" after completion) \u2014 done label removed, rule will re-fire`)}catch(a){g.warn(`revision check failed for ${o.key}: ${a instanceof Error?a.message:a}`)}}async pollDeployRule(e,t,n){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let a=await this.transport.claimDeploy({projectId:t.id,ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,environmentName:i.environmentName,requestedByAccountId:i.requestedByAccountId,requestedByDisplayName:i.requestedByDisplayName,dedupKey:i.dedupKey,triggerFingerprint:i.fingerprint});if(!a.accepted||!a.runId||!a.environment){if(a.code==="duplicate")continue;a.reason&&a.runId?(await this.jiraOf(t).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
656
+ No reply arrived within ${Gs} days of the question above. This ticket has been labeled \`${e.failedLabel}\`; remove it and re-trigger to try again. (run \`${e.runId}\`)`),await this.jiraOf(t).editLabels(e.issueKey,{add:[e.failedLabel],remove:[Cr.NEEDS_INPUT_LABEL]})}catch(n){g.warn(`could not post staleness notice for ${e.issueKey}: ${n}`)}e.kind==="implement"&&await rn(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),Xe(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${Gs} days`})}async pollRule(e,t,n){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,t):await this.matchCommentTrigger(e,t);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let a=Oo(t,i.components??[]);if("error"in a){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${a.error}`);continue}let l=a.project,c=l.repoName===t.repoName?n:this.cfg.repos[l.repoName]?.path;if(!c){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${l.repoName}" but it has no local checkout \u2014 run: allwright repo add "${l.repoName}" /path/to/checkout`);continue}let d=await this.transport.claimRun({ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,triggerFingerprint:i.fingerprint,triggeredByAccountId:i.triggeredByAccountId});if(!d.accepted||!d.runId){d.reason!=="duplicate"&&g.warn(`claim rejected for ${i.issueKey}: ${d.reason??"unknown"}`);continue}this.inFlight.add(o),g.info(`claimed run ${d.runId} for ${i.issueKey}`+(l.repoName!==t.repoName?` (routed \u2192 ${l.repoName})`:"")+(d.claudeProfile?` (claude profile "${d.claudeProfile}")`:""));let p=this.resolveClaudeProfile(d.runId,d.claudeProfile);this.enqueueForRepo(c,async()=>{try{await Io({runId:d.runId,rule:e,project:l,issueKey:i.issueKey,repoPath:c,cfg:this.cfg,jira:this.jiraOf(l),transport:this.transport,claudeConfigDir:p,actorEmail:d.actorEmail})}finally{this.inFlight.delete(o)}})}}async pollRespondRule(e,t,n){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),a=Date.now()-sc;for(let l of i){let c=await this.jiraOf(t).getIssue(l.key);for(let d of c.comments){if(!d.body.toLowerCase().includes(o)||Je(d.body)||new Date(d.created).getTime()<a||!d.id)continue;let p=`respond:${d.id}`;if(this.inFlight.has(p))continue;let _=Oo(t,l.components??[]);if("error"in _){this.warnRoutingOnce(`${e.id}:${l.key}`,`${l.key}: ${_.error}`);continue}let S=_.project,T=S.repoName===t.repoName?n:this.cfg.repos[S.repoName]?.path;if(!T){this.warnRoutingOnce(`${e.id}:${l.key}:path`,`${l.key}: routed to repo "${S.repoName}" but it has no local checkout \u2014 run: allwright repo add "${S.repoName}" /path/to/checkout`);continue}let C=await this.transport.claimRun({ruleId:e.id,issueKey:l.key,issueSummary:l.summary,triggerFingerprint:`question by ${d.author} at ${d.created}`,dedupKey:`respond:comment:${d.id}`,triggeredByAccountId:d.authorAccountId??void 0});if(!C.accepted||!C.runId){C.reason!=="duplicate"&&g.warn(`respond claim rejected for ${l.key}: ${C.reason??"unknown"}`);continue}this.inFlight.add(p),g.info(`claimed respond run ${C.runId}: ${l.key} (comment ${d.id})`+(S.repoName!==t.repoName?` (routed \u2192 ${S.repoName})`:"")+(C.claudeProfile?` (claude profile "${C.claudeProfile}")`:""));let k={author:d.author,body:d.body},B=this.resolveClaudeProfile(C.runId,C.claudeProfile);this.enqueueForRepo(T,async()=>{try{await Io({runId:C.runId,rule:e,project:S,issueKey:l.key,repoPath:T,cfg:this.cfg,jira:this.jiraOf(S),transport:this.transport,question:k,claudeConfigDir:B,actorEmail:C.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.doneLabel}" AND updated >= "-2d"`,10)}catch(o){g.warn(`revision sweep failed for ${t.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=n.keyword.toLowerCase();for(let o of s)try{let a=await this.jiraOf(t).getIssue(o.key),l=null;for(let d of a.comments)Je(d.body)&&(l=Math.max(l??0,new Date(d.created).getTime()));if(l===null||!a.comments.some(d=>!Je(d.body)&&d.body.toLowerCase().includes(i)&&new Date(d.created).getTime()>l))continue;await this.jiraOf(t).editLabels(o.key,{remove:[n.doneLabel]}),g.info(`revision requested on ${o.key} (new "${n.keyword}" after completion) \u2014 done label removed, rule will re-fire`)}catch(a){g.warn(`revision check failed for ${o.key}: ${a instanceof Error?a.message:a}`)}}async pollDeployRule(e,t,n){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let a=await this.transport.claimDeploy({projectId:t.id,ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,environmentName:i.environmentName,requestedByAccountId:i.requestedByAccountId,requestedByDisplayName:i.requestedByDisplayName,dedupKey:i.dedupKey,triggerFingerprint:i.fingerprint});if(!a.accepted||!a.runId||!a.environment){if(a.code==="duplicate")continue;a.reason&&a.runId?(await this.jiraOf(t).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
657
657
 
658
658
  ${a.reason}`+(i.requestedByAccountId?`
659
659
 
660
660
  Jira account id: \`${i.requestedByAccountId}\``:"")+`
661
661
 
662
- (run \`${a.runId}\`)`).catch(c=>g.warn(`could not post refusal to ${i.issueKey}: ${c}`)),g.warn(`deploy refused for ${i.issueKey}: ${a.reason}`)):a.reason&&g.warn(`deploy claim rejected for ${i.issueKey}: ${a.reason}`);continue}let l=a.environment;this.inFlight.add(o),g.info(`claimed deploy ${a.runId}: ${i.issueKey} \u2192 ${l.name}`),this.enqueue(this.envQueues,l.id,async()=>{try{await qs({runId:a.runId,project:t,environment:l,issueKey:i.issueKey,issueSummary:i.summary,repoPath:n,cfg:this.cfg,jira:this.jiraOf(t),transport:this.transport,requestedBy:i.requestedByDisplayName})}finally{this.inFlight.delete(o)}})}}async matchCommentDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="comment_keyword"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=n.keyword.toLowerCase(),a=Date.now()-Jl,l=this.environments.filter(p=>p.projectId===t.id).map(p=>p.name),c=this.fixedEnvironmentName(s.environmentId),d=[];for(let p of i){let w=await this.jiraOf(t).getIssue(p.key);if(!(s.requireStatus&&w.status.toLowerCase()!==s.requireStatus.toLowerCase()))for(let S of w.comments){if(!S.body.toLowerCase().includes(o)||He(S.body)||new Date(S.created).getTime()<a||!S.id)continue;let x=s.envSelection==="fixed"?c:Sm(S.body,n.keyword,l);d.push({issueKey:p.key,summary:p.summary,environmentName:x,requestedByAccountId:S.authorAccountId??void 0,requestedByDisplayName:S.author,dedupKey:`deploy:comment:${S.id}`,fingerprint:`comment "${n.keyword}" by ${S.author} at ${S.created}`+(x?` \u2192 ${x}`:"")})}}return d}async matchStatusDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="status_changed"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=this.fixedEnvironmentName(s.environmentId),a=[];for(let l of i){let c=await this.jiraOf(t).lastEnteredStatus(l.key,n.status);c&&a.push({issueKey:l.key,summary:l.summary,environmentName:o,requestedByAccountId:c.authorAccountId??void 0,requestedByDisplayName:c.author,dedupKey:`deploy:status:${e.id}:${l.key}:${c.at}`,fingerprint:`moved to "${n.status}" by ${c.author} at ${c.at}`})}return a}fixedEnvironmentName(e){return e?this.environments.find(t=>t.id===e)?.name??"":""}async matchLabelTrigger(e,t){let n=e.trigger;if(n.type!=="label_added")return[];let s=`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Tr.NEEDS_INPUT_LABEL}") ORDER BY updated ASC`;return(await this.jiraOf(t).search(s,10)).map(o=>({issueKey:o.key,summary:o.summary,components:o.components,fingerprint:`label "${n.label}" matched at ${new Date().toISOString()}`}))}async matchCommentTrigger(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return[];let s=`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND (labels IS EMPTY OR labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Tr.NEEDS_INPUT_LABEL}")) ORDER BY updated DESC`,i=await this.jiraOf(t).search(s,10),o=n.keyword.toLowerCase(),a=[];for(let l of i){let d=(await this.jiraOf(t).getIssue(l.key)).comments.find(p=>p.body.toLowerCase().includes(o)&&!He(p.body));d&&a.push({issueKey:l.key,components:l.components,summary:l.summary,fingerprint:`comment keyword "${n.keyword}" by ${d.author} at ${d.created}`,triggeredByAccountId:d.authorAccountId??void 0})}return a}async diagnoseRule(e,t){let n=e.trigger;if(e.action.type==="deploy"){let l=n.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t),c=l.filter(d=>d.environmentName);return{matchedCount:c.length,excludedCount:l.length-c.length,excludedSample:l.filter(d=>!d.environmentName).slice(0,5).map(d=>d.issueKey)}}if(n.type==="status_changed")return{matchedCount:(await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}"`,50)).length,excludedCount:0,excludedSample:[]};if(n.type==="label_added"){let[l,c]=await Promise.all([this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}")`,50),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]);return{matchedCount:l.length,excludedCount:c.length,excludedSample:c.slice(0,5).map(d=>d.key)}}let s=n.keyword.toLowerCase(),[i,o]=await Promise.all([this.matchCommentTrigger(e,t),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]),a=[];for(let l of o)(await this.jiraOf(t).getIssue(l.key)).comments.some(d=>d.body.toLowerCase().includes(s))&&a.push(l.key);return{matchedCount:i.length,excludedCount:a.length,excludedSample:a.slice(0,5)}}enqueueForRepo(e,t){this.enqueue(this.repoQueues,e,t)}runOnRepoQueue(e,t){this.enqueue(this.repoQueues,e,t)}runOnEnvironmentQueue(e,t){this.enqueue(this.envQueues,e,t)}enqueue(e,t,n){let i=(e.get(t)??Promise.resolve()).then(n).catch(o=>{g.error(`run crashed: ${o instanceof Error?o.stack:o}`)});e.set(t,i)}};function Sm(r,e,t){let n=r.toLowerCase().indexOf(e.toLowerCase());if(n<0)return"";let i=r.slice(n+e.length).split(/[^\w.-]+/).filter(Boolean);for(let o of i){let a=t.find(l=>l.toLowerCase()===o.toLowerCase());if(a)return a}for(let o of i)if(!km.has(o.toLowerCase()))return o;return""}var xr=$(require("node:fs"),1),Xl=$(require("node:path"),1);var Tm=k.object({role:k.enum(["user","agent"]),text:k.string()}),xm=k.object({sessionId:k.string(),projectId:k.string(),title:k.string().default(""),updatedAt:k.string(),messages:k.array(Tm).default([])}),Cm=k.record(xm),Em=10,Im=200,Yl=2e4;function Ql(){return Xl.default.join(ee(),"chat-sessions.json")}function Io(){let r=Ql();if(!xr.default.existsSync(r))return{};try{return Cm.parse(JSON.parse(xr.default.readFileSync(r,"utf8")))}catch{return{}}}function Am(r){xr.default.mkdirSync(ee(),{recursive:!0,mode:448});let e=Ql(),t=e+".tmp";xr.default.writeFileSync(t,JSON.stringify(r,null,2)+`
663
- `,{mode:384}),xr.default.renameSync(t,e),xr.default.chmodSync(e,384)}function ec(r,e,t,n){let s=Io(),o=s[e]??{sessionId:e,projectId:r,title:t.slice(0,80),updatedAt:new Date().toISOString(),messages:[]};o.messages.push({role:"user",text:t.slice(0,Yl)},{role:"agent",text:n.slice(0,Yl)}),o.messages=o.messages.slice(-Im),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(l=>l.projectId===o.projectId).sort((l,c)=>c.updatedAt.localeCompare(l.updatedAt));for(let l of a.slice(Em))delete s[l.sessionId];Am(s)}function tc(r){return Object.values(Io()).filter(e=>e.projectId===r).sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)).map(e=>({sessionId:e.sessionId,title:e.title,updatedAt:e.updatedAt,messageCount:e.messages.length}))}function Ao(r){return Io()[r]??null}var Jg=$(Jc(),1),Yg=$(Xs(),1),Xg=$(hn(),1),Qg=$(Uo(),1),ey=$(Fo(),1),ty=$(Wo(),1),id=$(ri(),1),ry=$(sd(),1);var Yo=id.default;var Qo=$(require("node:crypto"),1),Xe=$(Te(),1);function ny(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function Xo(r,e,t,n){r.push(`dropped ${e} ${t} \u2014 this runner is out of date and does not understand it yet (${n}). Update the runner (npm install -g @ticketpilot/runner) to pick it up.`)}function sy(r){if(!r||typeof r!="object"||r.type!=="config")return null;let e=r,t=[],n=[];for(let a of Array.isArray(e.projects)?e.projects:[]){let l=Xe.ProjectConfig.safeParse(a);l.success?n.push(l.data):Xo(t,"project","",l.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let l=Xe.RuleConfig.safeParse(a);l.success?s.push(l.data):Xo(t,"rule",ny(a),l.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let l=Xe.EnvironmentConfig.safeParse(a);l.success?i.push(l.data):Xo(t,"environment","",l.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:n,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:t}}var iy=2e4,oy=6e4,ay=5e3,si=class{constructor(e,t,n,s){this.wsUrl=e;this.runnerToken=t;this.meta=n;this.events=s}wsUrl;runnerToken;meta;events;ws=null;queue=[];pending=new Map;backoffMs=1e3;heartbeat=null;closed=!1;bootAnnounced=!1;start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.heartbeat&&clearInterval(this.heartbeat),this.ws?.close()}get connected(){return this.ws?.readyState===Yo.OPEN}connect(){if(this.closed)return;g.info(`connecting to control plane at ${this.wsUrl}`);let e=new Yo(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:Xe.PROTOCOL_VERSION,runnerVersion:this.meta.runnerVersion,platform:`${process.platform}/${process.arch} node${process.versions.node}`,justBooted:!this.bootAnnounced});let t=this.queue.splice(0,this.queue.length);for(let n of t)this.sendNow(n);this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=setInterval(()=>{this.send({type:"heartbeat",ts:new Date().toISOString()})},iy)}),e.on("message",t=>{let n;try{n=JSON.parse(t.toString())}catch(i){g.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,Xe.parseServerMsg)(n)}catch(i){let o=sy(n);if(!o){g.warn(`ignoring malformed server message: ${i}`);return}for(let a of o.warnings)g.warn(a);g.warn(`config push had ${o.warnings.length} ${o.warnings.length===1?"entry":"entries"} this runner doesn't understand \u2014 applied everything else instead of dropping the whole config`),s=o.msg}this.handle(s)}),e.on("close",t=>{if(this.heartbeat&&clearInterval(this.heartbeat),t===4001)g.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(t===4003){g.error("this runner has been revoked from the control plane UI. Re-enroll with a fresh token if this was not intended."),this.closed=!0;return}if(this.closed)return;let n=Math.random()*.3+.85,s=Math.round(this.backoffMs*n);g.warn(`disconnected (code ${t}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,oy)}),e.on("error",t=>{g.warn(`websocket error: ${t.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,g.info(`connected as runner "${e.runnerName}" (${e.runnerId})`);return}if(e.type==="run.claim.result"||e.type==="deploy.claim.result"){let t=this.pending.get(e.requestId);t&&(clearTimeout(t.timer),this.pending.delete(e.requestId),t.resolve(e));return}if(e.type==="config")return this.events.onConfig(e);if(e.type==="project.test")return this.events.onProjectTest(e);if(e.type==="rule.diagnose")return this.events.onRuleDiagnose(e);if(e.type==="run.cancel")return this.events.onCancel(e.runId);if(e.type==="run.approved")return this.events.onApproved(e.runId,e.headSha);if(e.type==="run.rejected")return this.events.onRejected(e.runId);if(e.type==="run.retryPush")return this.events.onRetryPush(e.runId);if(e.type==="deploy.start")return this.events.onDeployStart(e);if(e.type==="deploy.suggest")return this.events.onDeploySuggest(e);if(e.type==="env.preflight")return this.events.onEnvPreflight(e);if(e.type==="chat.turn")return this.events.onChatTurn(e);if(e.type==="chat.create.ticket")return this.events.onChatCreateTicket(e);if(e.type==="chat.list")return this.events.onChatList(e);if(e.type==="chat.load")return this.events.onChatLoad(e);if(e.type==="board.fetch")return this.events.onBoardFetch(e);if(e.type==="board.trigger")return this.events.onBoardTrigger(e);if(e.type==="audit.start")return this.events.onAuditStart(e);if(e.type==="audit.list")return this.events.onAuditList(e);if(e.type==="audit.get")return this.events.onAuditGet(e);if(e.type==="audit.review")return this.events.onAuditReview(e);if(e.type==="knowledge.list")return this.events.onKnowledgeList(e);if(e.type==="knowledge.save")return this.events.onKnowledgeSave(e);if(e.type==="epic.list")return this.events.onEpicList(e);if(e.type==="epic.suggest")return this.events.onEpicSuggest(e);if(e.type==="team.creds")return this.events.onTeamCreds(e);if(e.type==="jira.users")return this.events.onJiraUsers(e);if(e.type==="setup.status")return this.events.onSetupStatus(e);if(e.type==="setup.claudemd.generate")return this.events.onSetupClaudeMdGenerate(e);if(e.type==="setup.claudemd.save")return this.events.onSetupClaudeMdSave(e);if(e.type==="runner.update")return this.events.onRunnerUpdate(e)}sendNow(e){this.ws?.send(JSON.stringify(e))}send(e){if(this.connected){this.sendNow(e);return}if(this.queue.length>=ay){let t=this.queue.findIndex(n=>n.type==="run.log");t>=0?this.queue.splice(t,1):this.queue.shift()}this.queue.push(e)}async claimRun(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=Qo.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"run.claim",requestId:t,...e})});return!n||n.type!=="run.claim.result"?{accepted:!1,reason:"claim timed out"}:{accepted:n.accepted,runId:n.runId,reason:n.reason,claudeProfile:n.claudeProfile,actorEmail:n.actorEmail}}async claimDeploy(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=Qo.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:t,...e})});return!n||n.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:n.accepted,runId:n.runId,environment:n.environment,reason:n.reason,code:n.code}}sendDeploySuggestResult(e,t){this.send({type:"deploy.suggest.result",requestId:e,...t})}sendChatTurnResult(e,t){this.send({type:"chat.turn.result",requestId:e,...t})}sendChatCreateTicketResult(e,t){this.send({type:"chat.create.ticket.result",requestId:e,...t,childKeys:t.childKeys??[]})}sendChatListResult(e,t){this.send({type:"chat.list.result",requestId:e,sessions:t})}sendChatLoadResult(e,t){this.send({type:"chat.load.result",requestId:e,...t})}sendBoardFetchResult(e,t){this.send({type:"board.fetch.result",requestId:e,...t,browseBaseUrl:t.browseBaseUrl??""})}sendAuditStartResult(e,t){this.send({type:"audit.start.result",requestId:e,...t})}sendAuditListResult(e,t){this.send({type:"audit.list.result",requestId:e,ok:t.ok,error:t.error,audits:t.audits??[]})}sendAuditGetResult(e,t){this.send({type:"audit.get.result",requestId:e,...t})}sendAuditReviewResult(e,t){this.send({type:"audit.review.result",requestId:e,...t})}sendKnowledgeListResult(e,t){this.send({type:"knowledge.list.result",requestId:e,ok:t.ok,error:t.error,files:t.files??[]})}sendKnowledgeSaveResult(e,t){this.send({type:"knowledge.save.result",requestId:e,...t})}sendEpicListResult(e,t){this.send({type:"epic.list.result",requestId:e,ok:t.ok,error:t.error,epics:t.epics??[],children:t.children??[]})}sendEpicSuggestResult(e,t){this.send({type:"epic.suggest.result",requestId:e,ok:t.ok,error:t.error,issueKey:t.issueKey??"",reason:t.reason??"",considered:t.considered??0})}sendTeamCredsResult(e,t){this.send({type:"team.creds.result",requestId:e,ok:t.ok,error:t.error,githubShared:t.githubShared??!1,sharedGithubLogin:t.sharedGithubLogin??"",entries:t.entries??[]})}sendBoardTriggerResult(e,t){this.send({type:"board.trigger.result",requestId:e,...t})}sendRunnerUpdateResult(e,t){this.send({type:"runner.update.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupClaudeMdGenerateResult(e,t){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:t.ok,error:t.error,content:t.content??""})}sendSetupClaudeMdSaveResult(e,t){this.send({type:"setup.claudemd.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupStatusResult(e,t){this.send({type:"setup.status.result",requestId:e,ok:t.ok,error:t.error,jiraConfigured:t.jiraConfigured??!1,jiraEmail:t.jiraEmail??"",claude:t.claude,githubTokenSet:t.githubTokenSet??!1,githubLogin:t.githubLogin??"",deploysEnabled:t.deploysEnabled??!1,jiraUserCount:t.jiraUserCount??0,repos:t.repos??[]})}sendEnvPreflightResult(e,t){this.send({type:"env.preflight.result",requestId:e,...t})}sendJiraUsersResult(e,t){this.send({type:"jira.users.result",requestId:e,...t})}sendProjectTestResult(e,t,n){this.send({type:"project.test.result",requestId:e,ok:t,checks:n})}sendRuleDiagnoseResult(e,t){this.send({type:"rule.diagnose.result",requestId:e,...t})}};var vn=$(require("node:fs"),1),ea=$(require("node:path"),1),ad=require("node:child_process"),ud=require("node:util");var od=(0,ud.promisify)(ad.execFile);async function ii(r,e,t=[]){let n=[],s=r.repos[e.repoName]?.jira??r.jira;if(!s)n.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else{let o=new Ue(s);try{let a=await o.myself();n.push({name:"jira-auth",ok:!0,detail:`authenticated as ${a.displayName}`});try{await o.search(`project = "${e.jiraProjectKey}" ORDER BY created DESC`,1),n.push({name:"jira-project",ok:!0,detail:`project ${e.jiraProjectKey} is readable`})}catch(l){n.push({name:"jira-project",ok:!1,detail:`cannot read project ${e.jiraProjectKey}: ${Jn(l)}`})}}catch(a){n.push({name:"jira-auth",ok:!1,detail:`Jira auth failed: ${Jn(a)}`})}}let i=r.repos[e.repoName];if(i&&vn.default.existsSync(i.path)){let o=ea.default.join(i.path,"CLAUDE.md"),a=vn.default.existsSync(o)&&vn.default.readFileSync(o,"utf8").trim().length>0;n.push({name:"memory-file",ok:a,detail:a?"CLAUDE.md present \u2014 the agent has project memory":"MISSING: CLAUDE.md at the repo root. Rules can't be enabled until the project has a memory file \u2014 it is what makes every run smarter than the last."});let l=Co(i.path);n.push({name:"deploy-doc",ok:l!==null,detail:l?`${l.path} present \u2014 deploy suggestions will follow it`:"MISSING: DEPLOY.md (or .ticketpilot/deploy.md). Environments can't be created until the repo documents how it deploys."})}if(!i)n.push({name:"repo-path",ok:!1,detail:`no local path mapped for repo "${e.repoName}" \u2014 run: allwright repo add "${e.repoName}" /path/to/checkout`});else if(!vn.default.existsSync(i.path))n.push({name:"repo-path",ok:!1,detail:`path does not exist: ${i.path}`});else{let o=vn.default.existsSync(ea.default.join(i.path,".git"));n.push({name:"repo-path",ok:!0,detail:`${i.path}${o?" (git checkout)":" (warning: not a git checkout)"}`})}try{let{stdout:o}=await od(r.claudeBin,["--version"],{timeout:15e3});n.push({name:"claude-code",ok:!0,detail:o.trim().slice(0,100)})}catch(o){n.push({name:"claude-code",ok:!1,detail:`cannot run "${r.claudeBin}": ${Jn(o)}`})}try{let{stdout:o}=await od("git",["--version"],{timeout:15e3});n.push({name:"git",ok:!0,detail:o.trim().slice(0,100)})}catch(o){n.push({name:"git",ok:!1,detail:`cannot run git: ${Jn(o)}`})}if(r.github?.token)try{let{GitHubClient:o}=await Promise.resolve().then(()=>(lt(),nn)),a=await new o(r.github.token).whoami();n.push({name:"github-token",ok:!0,detail:`authenticated as ${a}`})}catch(o){n.push({name:"github-token",ok:!1,detail:Jn(o)})}else n.push({name:"github-token",ok:!0,detail:"not set \u2014 needed only for implement rules (allwright github set-token)"});if(t.length){r.deploy.enabled?n.push({name:"deploy",ok:!0,detail:"deployments enabled on this runner"}):n.push({name:"deploy",ok:!1,detail:"deployments are disabled on this runner \u2014 run `allwright deploy enable` to allow it to execute your saved deploy steps"});for(let o of t){let a=Xt(r,e.repoName,o.name),l=o.requiredSecrets.filter(c=>!a[c]&&!process.env[c]);n.push({name:`env:${o.name}`,ok:l.length===0,detail:l.length?`missing secret(s): ${l.join(", ")} \u2014 allwright env set "${e.repoName}" "${o.name}" ${l[0]}=...`:`${o.steps.length} step(s), ${o.requiredSecrets.length} secret(s) present`+(o.branch?`, deploys origin/${o.branch}`:"")})}}return n}function Jn(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var ae=new ba;ae.name("allwright").description("Allwright runner \u2014 runs on YOUR machine, holds YOUR credentials locally, connects outbound-only to the control plane. Your Jira token, Anthropic key and source code never leave this host.").version(ws);ae.command("init").description("Interactive setup: enroll this runner and store credentials locally").option("--cp-url <url>","control plane URL").option("--enroll-token <token>","enrolment token from the Allwright UI").option("--name <name>","runner name",md.default.hostname()).option("--jira-url <url>","Jira base URL, e.g. https://yourorg.atlassian.net").option("--jira-email <email>","Jira account email").option("--jira-token <token>","Jira API token (stored locally only)").action(async r=>{let e=Pr.default.createInterface({input:process.stdin,output:process.stdout}),t=async(n,s,i=!1)=>{if(s)return s;let o=await e.question(`${n}: `);if(!o.trim())throw new Error(`${n} is required`);return o.trim()};try{let n=await t("Control plane URL",r.cpUrl),s=await t("Enrolment token (from the web UI)",r.enrollToken),i=await t("Jira base URL (https://yourorg.atlassian.net)",r.jiraUrl),o=await t("Jira account email",r.jiraEmail),a=await t("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",r.jiraToken,!0),l=Ei.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),c=await new Ue(l.jira).myself();g.info(`Jira credential OK \u2014 authenticated as ${c.displayName}`),l=await hu(l,s),g.info(`Enrolled as runner "${l.runnerName}" (${l.runnerId})`),g.info(`Credentials saved to ${kt()} (mode 600, this machine only)`),g.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var ta=ae.command("repo").description("Map control-plane repo names to local checkouts");ta.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(r,e)=>{let t=Q();t.repos[r]={path:e},ie(t),g.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(vr(),ku));g.info(` origin remote: ${await n(e)} \u2014 make sure this is the repo you meant`)}catch{g.warn(` could not read an origin remote at ${e} \u2014 is it a git checkout?`)}});ta.command("list").description("Show configured repo mappings").action(()=>{let r=Q(),e=Object.entries(r.repos);if(!e.length)return g.info("no repos mapped yet");for(let[t,n]of e)g.info(`${t} -> ${n.path}`)});var gd=ae.command("claude").description("Per-user Claude login profiles \u2014 each teammate's runs bill their OWN Claude account");gd.command("login <profileName>").description("Create (or re-login) a named Claude profile. Opens Claude Code interactively with its own config directory \u2014 have the PERSON WHOSE ACCOUNT IT IS complete the /login flow with their credentials, then exit. Assign the profile to their user on the dashboard's Team page.").action(async r=>{if(!/^[a-zA-Z0-9._-]+$/.test(r))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=Q(),t=e.claudeProfiles[r]?.configDir??`${kt().replace(/runner\.json$/,"")}claude-profiles/${r}`;gt.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},ie(e),g.info(`profile "${r}" -> ${t}`),g.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),g.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let n=(0,Nt.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),g.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});gd.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=Q(),e=Object.entries(r.claudeProfiles);if(g.info("default: this OS user's own Claude login (no profile)"),!e.length)return g.info("no named profiles yet \u2014 allwright claude login <name>");for(let[t,n]of e){let s=gt.default.existsSync(n.configDir)&&gt.default.readdirSync(n.configDir).length>0;g.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});ta.command("remove <repoName>").description("Unmap a repo from this runner: removes the mapping plus its per-repo Jira/GitHub overrides and env secrets from the config. Does NOT touch the checkout on disk or anything in the control plane \u2014 delete the project on the dashboard separately.").action(r=>{let e=Q();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${i}`)}let t=e.repos[r].path;delete e.repos[r];let n=Object.keys(e.environments).filter(i=>i.startsWith(`${r}:`));for(let i of n)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==r),ie(e),g.info(`Removed "${r}" (was ${t})`),n.length&&g.info(`Also removed ${n.length} environment secret set(s): ${n.join(", ")}`),e.auditSchedules.length!==s&&g.info("Also removed its audit schedule(s)"),g.info("The checkout on disk was NOT touched \u2014 remove it yourself if you want it gone."),g.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var ra=ae.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");ra.command("install").description("Install + start the systemd service \u2014 detects node, this script, your user and home; no hand-written unit files. Run with sudo. (--print shows the unit without installing.)").option("--print","print the generated unit file and exit").action(r=>{if(r.print){g.info(`
664
- `+to(eo()));return}Au(g)});ra.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>Ru(g));ra.command("status").description("systemctl status for the runner service").action(()=>{(0,Nt.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});ae.command("update").description("Update the runner to the latest published version (npm install -g allwright@latest). Restart the runner afterwards \u2014 and only when no runs are active.").action(async()=>{g.info("Updating: npm install -g allwright@latest");let r=(0,Nt.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,t)=>{r.on("exit",n=>n===0?e():t(new Error(`npm exited with code ${n}`))),r.on("error",t)}),g.info("Updated. Restart the runner service to load the new version (check active runs first).")});var Xn=ae.command("jira").description("Per-repo Jira site overrides \u2014 for projects living on a different Atlassian site");Xn.command("set <repoName>").description("Store Jira credentials for ONE repo's project (e.g. a project on a different *.atlassian.net site than the runner's main credential). Prompts on stdin; stored locally only, like every other credential.").action(async r=>{let e=Q();if(!e.repos[r]){let n=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${n}. Run \`allwright repo add\` first.`)}let t=Pr.default.createInterface({input:process.stdin,output:process.stdout});try{let n=(await t.question("Jira base URL for this repo (https://yourorg.atlassian.net): ")).trim(),s=(await t.question("Jira account email: ")).trim(),i=(await t.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!n||!s||!i)throw new Error("all three values are required");let o={baseUrl:n,email:s,apiToken:i},a=await new Ue(o).myself();g.info(`Jira credential OK \u2014 authenticated as ${a.displayName} on ${n}`),e.repos[r].jira=o,ie(e),g.info(`Saved: repo "${r}" now polls ${n} (other repos keep the runner-wide credential)`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")}finally{t.close()}});Xn.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=Q();g.info(`runner-wide: ${r.jira?`${r.jira.baseUrl} (${r.jira.email})`:"(not configured)"}`);for(let[e,t]of Object.entries(r.repos))g.info(`${e} -> ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(runner-wide credential)"}`)});Xn.command("user-add <ticketpilotEmail>").description("Store a PERSON's own Jira credential, so board buttons and Compose tickets they click post to Jira under THEIR Atlassian identity instead of the runner's account. Keyed by their Allwright login email. Prompts on stdin; stored locally only. Picked up on the next click \u2014 no restart needed.").action(async r=>{let e=Q(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Pr.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`Their ATLASSIAN account email [${t}]: `)).trim()||t,i=(await n.question("Their Jira API token (they create it at id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!i)throw new Error("API token is required");let o=[e.jira,...Object.values(e.repos).map(c=>c.jira)].filter(c=>!!c),a=new Set,l=!1;for(let c of o)if(!a.has(c.baseUrl)){a.add(c.baseUrl);try{let d=await new Ue({baseUrl:c.baseUrl,email:s,apiToken:i}).myself();g.info(`${c.baseUrl}: OK \u2014 authenticated as ${d.displayName}`),l=!0}catch{g.warn(`${c.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!l)throw new Error("credential failed on every configured Jira site \u2014 nothing saved");e.jiraUsers[t]={email:s,apiToken:i},ie(e),g.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});Xn.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=Q(),e=Object.entries(r.jiraUsers);if(!e.length)return g.info("none yet \u2014 everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[t,n]of e)g.info(`${t} -> posts to Jira as ${n.email}`)});Xn.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=Q(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],ie(e),g.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var bn=ae.command("github").description("GitHub credential for implement-mode rules");bn.command("set-token").description("Store a GitHub token for opening pull requests (implement rules). Stored locally only, like your Jira token. Recommended: a fine-grained PAT scoped to the repo with contents:write + pull_requests:write.").option("--token <token>","GitHub token (omit to be prompted)").action(async r=>{let e=Pr.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??(await e.question("GitHub token (fine-grained PAT recommended): ")).trim();if(!t)throw new Error("token is required");let{GitHubClient:n}=await Promise.resolve().then(()=>(lt(),nn)),s=await new n(t).whoami(),i=Q();i.github={token:t,login:s},ie(i),g.info(`GitHub token OK \u2014 authenticated as ${s}`),g.info(`Saved to ${kt()} (mode 600, this machine only)`)}finally{e.close()}});bn.command("set <repoName>").description("Store a GitHub token for ONE repo only \u2014 overrides the runner-wide token for that repo's PRs and PR-watching. Useful when projects need separately revocable access. Prompts on stdin; stored locally only.").action(async r=>{let e=Q();if(!e.repos[r]){let n=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${n}. Run \`allwright repo add\` first.`)}let t=Pr.default.createInterface({input:process.stdin,output:process.stdout});try{let n=(await t.question(`GitHub token for "${r}" (fine-grained PAT scoped to just this repo): `)).trim();if(!n)throw new Error("token is required");let{GitHubClient:s}=await Promise.resolve().then(()=>(lt(),nn)),i=await new s(n).whoami();e.repos[r].github={token:n,login:i},ie(e),g.info(`GitHub token OK \u2014 authenticated as ${i}`),g.info(`Saved: repo "${r}" now uses its own token (other repos keep the runner-wide one)`)}finally{t.close()}});bn.command("user-add <ticketpilotEmail>").description("Store a PERSON's own GitHub token, so PRs from implement runs THEY trigger are authored by their GitHub account. Keyed by their Allwright login email. Optional \u2014 without it their runs fall back to the repo/runner-wide token. Needs contents:write + pull_requests:write on the repos they'll touch.").action(async r=>{let e=Q(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Pr.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`GitHub token for ${t}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(lt(),nn)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},ie(e),g.info(`GitHub token OK \u2014 authenticated as ${o}`),g.info(`Saved. Implement runs triggered by ${t} now open PRs as ${o}. No restart needed.`)}finally{n.close()}});bn.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=Q(),e=Object.entries(r.githubUsers);if(!e.length)return g.info("no per-user GitHub tokens \u2014 everyone's PRs use the repo/runner-wide token");for(let[t]of e)g.info(`${t} -> own GitHub token stored`)});bn.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=Q(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],ie(e),g.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});bn.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=Q();g.info(`runner-wide: ${r.github?.token?"token set":"(not configured)"}`);for(let[t,n]of Object.entries(r.repos))g.info(`${t} -> ${n.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(r.githubUsers);g.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var na=ae.command("audit").description("Recurring specialist audits on this runner");na.command("schedule <repoName> <role> <intervalHours>").description("Audit this repo's project on a cadence (role: security|testing; interval in hours, min 6). Runs on the runner's own clock; reports land in the Audits page history, where the diff-vs-previous view shows drift. Advisory only \u2014 nothing blocks.").action((r,e,t)=>{let n=Q();if(!n.repos[r]){let i=Object.keys(n.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(t,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");n.auditSchedules=[...n.auditSchedules.filter(i=>!(i.repoName===r&&i.role===e)),{repoName:r,role:e,intervalHours:s}],ie(n),g.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});na.command("schedules").description("List scheduled audits").action(()=>{let r=Q();if(!r.auditSchedules.length)return g.info("no scheduled audits \u2014 allwright audit schedule <repo> <role> <hours>");for(let e of r.auditSchedules)g.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});na.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=Q(),n=t.auditSchedules.length;if(t.auditSchedules=t.auditSchedules.filter(s=>!(s.repoName===r&&s.role===e)),t.auditSchedules.length===n)throw new Error("no such schedule");ie(t),g.info("Removed. Restart the runner to apply.")});var sa=ae.command("deploy").description("Deployment settings for this machine");sa.command("enable").description("Allow this runner to execute the deploy steps saved in the dashboard. Those steps are shell commands that run here, as this user \u2014 so this switch lives on the machine, not in the web UI, and only someone with shell access can flip it.").action(()=>{let r=Q();r.deploy={enabled:!0},ie(r),g.info("deployments ENABLED on this runner"),g.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});sa.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=Q();r.deploy={enabled:!1},ie(r),g.info("deployments DISABLED on this runner"),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});sa.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=Q();g.info(`deployments: ${r.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e){let s=Object.keys(n.secrets);g.info(`${t}: ${s.length?s.join(", "):"(no secrets)"}`)}});var ia=ae.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");ia.command("set <repoName> <envName> <assignments...>").description('Store secrets for one environment, e.g. env set acme/api production "SSH_HOST=1.2.3.4" "SSH_USER=deploy". Your deploy steps reference these as $SSH_HOST. The control plane only ever learns the NAMES.').action((r,e,t)=>{let n=Q(),s=ls(r,e),i=n.environments[s]??{secrets:{}},o=[];for(let a of t){let l=a.indexOf("=");if(l<=0)throw new Error(`expected KEY=VALUE, got "${a}"`);let c=a.slice(0,l).trim();i.secrets[c]=a.slice(l+1),o.push(c)}n.environments[s]=i,ie(n),g.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),g.info(`Saved to ${kt()} (mode 600, this machine only)`),g.info("Restart the background runner to pick these up: allwright stop && allwright start")});ia.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=Q(),s=ls(r,e),i=n.environments[s];if(!i)return g.info(`nothing stored for ${s}`);for(let o of t)delete i.secrets[o];n.environments[s]=i,ie(n),g.info(`removed ${t.join(", ")} from ${s}`)});ia.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=Q(),e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e)g.info(`${t}: ${Object.keys(n.secrets).join(", ")||"(none)"}`)});ae.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=ja(r);g.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),g.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private \u2014 anyone holding it can act as this runner."),g.info(`Restore on any machine with: allwright import ${_n.default.basename(e.file)}`)}catch(e){g.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});ae.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=Fr();if(e&&Cn(e)){g.error("the runner is running \u2014 stop it first (systemctl stop allwright, or `allwright stop` for a pid-file daemon), then import."),process.exitCode=1;return}try{let t=Oa(r);g.info(`Restored ${t.restored.length} entries into ${ee()}`),t.previousDir&&g.info(`Previous config kept at ${t.previousDir}`),g.info("Start the runner and it will reconnect with the restored identity.")}catch(t){g.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});ae.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=Q(),e=Object.keys(r.repos);if(!r.jira){g.error("no Jira credentials configured \u2014 run `allwright init`"),process.exitCode=1;return}let t=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],n=!0;for(let s of t){let i=await ii(r,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let a=o.ok?"PASS":"FAIL";(o.ok?g.info:g.error)(`[${a}] ${o.name}: ${o.detail}`),n&&=o.ok}}n||(process.exitCode=1)});function cy(r){if(!r.runnerToken)throw new Error("runner not enrolled \u2014 run `allwright init`");if(!r.jira)throw new Error("no Jira credentials \u2014 run `allwright init`");let e=new Ue(r.jira),t=new Map,n=f=>{let m=r.repos[f]?.jira;if(!m)return e;let b=t.get(f);return b||(b=new Ue(m),t.set(f,b)),b},s=new Map,i=(f,m)=>{let b=xu(le()??r,f,m);switch(b.kind){case"legacy":return{jira:n(f),authored:!1};case"self":return{jira:n(f),authored:!0};case"missing":return{error:b.error};case"user":{let C=`${b.creds.baseUrl}:${b.creds.email}:${b.creds.apiToken.slice(-6)}`,P=s.get(C);return P||(P=new Ue(b.creds),s.set(C,P)),{jira:P,authored:!0}}}},o=new URL("/api/runner/ws",r.controlPlaneUrl);o.protocol=o.protocol==="https:"?"wss:":"ws:";let a=[],l=[],c=[],d,p={cfg:r,jiraFor:n,transport:null},w=new Set,S=f=>{let m=a.find(C=>C.id===f),b=m&&r.repos[m.repoName];return m&&b?{project:m,repoPath:b.path}:null},x={cfg:r,jiraFor:n,get transport(){return p.transport},lookup:(f,m)=>{let b=S(f),C=c.find(P=>P.projectId===f&&P.name===m);return b&&C?{...b,environment:C}:null}},_=new si(o.toString(),r.runnerToken,{runnerVersion:ws},{onConfig:f=>{a=f.projects,l=f.rules,c=f.environments,d.setConfig(f.projects,f.rules,f.pollingPaused,f.environments)},onProjectTest:async f=>{let m=a.find(C=>C.id===f.projectId);if(!m){_.sendProjectTestResult(f.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}g.info(`running connection test for project "${m.name}"`);let b=await ii(r,m,c.filter(C=>C.projectId===m.id));_.sendProjectTestResult(f.requestId,b.every(C=>C.ok),b)},onRuleDiagnose:async f=>{let m=l.find(z=>z.id===f.ruleId),b=m&&a.find(z=>z.id===m.projectId);if(!m||!b){_.sendRuleDiagnoseResult(f.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}g.info(`diagnosing rule "${m.name}"`);let C=await ii(r,b,m.action.type==="deploy"?c.filter(z=>z.projectId===b.id):[]),P=m.action.type==="implement"?C:C.filter(z=>z.name!=="github-token"),{matchedCount:U,excludedCount:B,excludedSample:J}=await d.diagnoseRule(m,b);_.sendRuleDiagnoseResult(f.requestId,{checks:P,matchedCount:U,excludedCount:B,excludedSample:J})},onCancel:f=>{g.warn(`cancel requested for run ${f} \u2014 not supported in this version, run will finish or time out`)},onApproved:(f,m)=>{if(xo(f)){Zl(x,f).catch(b=>g.error(`deploy approval crashed for ${f}: ${b instanceof Error?b.stack:b}`));return}qn(p,f,m).catch(b=>g.error(`approval handling crashed for ${f}: ${b instanceof Error?b.stack:b}`))},onRetryPush:f=>{let m=js(f),b=()=>Pl(p,f).catch(C=>g.error(`retry push crashed for ${f}: ${C instanceof Error?C.stack:C}`));m?d.runOnRepoQueue(m.baseRepoPath,b):b()},onRejected:f=>{if(xo(f)){Kl(x,f).catch(m=>g.error(`deploy rejection crashed for ${f}: ${m instanceof Error?m.stack:m}`));return}$l(p,f).catch(m=>g.error(`rejection handling crashed for ${f}: ${m instanceof Error?m.stack:m}`))},onDeployStart:f=>{let m=`${f.runId}#${f.attempt}`;if(w.has(m))return;w.add(m);let b=S(f.projectId);if(!b){let C="this runner has no local checkout mapped for that project \u2014 run: allwright repo add <repoName> /path/to/checkout";g.error(`deploy ${f.runId}: ${C}`),_.send({type:"run.status",runId:f.runId,status:"failed",error:C});return}g.info(`deploy ${f.runId} requested from the dashboard: ${f.issueKey} \u2192 ${f.environment.name}`),d.runOnEnvironmentQueue(f.environment.id,()=>qs({runId:f.runId,project:b.project,environment:f.environment,issueKey:f.issueKey,issueSummary:f.issueSummary,repoPath:b.repoPath,cfg:r,jira:n(b.project.repoName),transport:_,requestedBy:f.requestedBy}).catch(C=>g.error(`deploy crashed for ${f.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async f=>{let m=S(f.projectId);if(!m){_.sendDeploySuggestResult(f.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}g.info(`asking Claude Code for "${f.environmentName}" deploy steps in ${m.repoPath}`);let b=await Wl({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:f.environmentName,notes:f.notes,timeoutSeconds:f.timeoutSeconds,cfg:r});_.sendDeploySuggestResult(f.requestId,b)},onEnvPreflight:async f=>{let m=S(f.projectId);if(!m){_.sendEnvPreflightResult(f.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let b=await Hl({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:f.environmentName,steps:f.steps,requiredSecrets:f.requiredSecrets,workdir:f.workdir,branch:f.branch,publicUrl:f.publicUrl,cfg:r});_.sendEnvPreflightResult(f.requestId,b)},onChatTurn:async f=>{let m=S(f.projectId);if(!m){_.sendChatTurnResult(f.requestId,{ok:!1,sessionId:f.sessionId??"",reply:"",error:"this runner has no local checkout mapped for that project"});return}let b=f.sessionId||(0,oi.randomUUID)(),C=!f.sessionId;if((C?0:Ao(b)?.messages.length??0)>=44){_.sendChatTurnResult(f.requestId,{ok:!1,sessionId:b,reply:"",error:"this chat has hit its length limit \u2014 every turn re-reads the whole conversation, so long chats get slow and expensive. Start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}let U=f.files.length?La(m.repoPath,f.requestId,f.files):null,B="```",J=C?`You are the project assistant for "${m.project.name}" \u2014 this working directory is its repository, and you have read-only access.
662
+ (run \`${a.runId}\`)`).catch(c=>g.warn(`could not post refusal to ${i.issueKey}: ${c}`)),g.warn(`deploy refused for ${i.issueKey}: ${a.reason}`)):a.reason&&g.warn(`deploy claim rejected for ${i.issueKey}: ${a.reason}`);continue}let l=a.environment;this.inFlight.add(o),g.info(`claimed deploy ${a.runId}: ${i.issueKey} \u2192 ${l.name}`),this.enqueue(this.envQueues,l.id,async()=>{try{await Vs({runId:a.runId,project:t,environment:l,issueKey:i.issueKey,issueSummary:i.summary,repoPath:n,cfg:this.cfg,jira:this.jiraOf(t),transport:this.transport,requestedBy:i.requestedByDisplayName})}finally{this.inFlight.delete(o)}})}}async matchCommentDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="comment_keyword"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=n.keyword.toLowerCase(),a=Date.now()-sc,l=this.environments.filter(p=>p.projectId===t.id).map(p=>p.name),c=this.fixedEnvironmentName(s.environmentId),d=[];for(let p of i){let _=await this.jiraOf(t).getIssue(p.key);if(!(s.requireStatus&&_.status.toLowerCase()!==s.requireStatus.toLowerCase()))for(let S of _.comments){if(!S.body.toLowerCase().includes(o)||Je(S.body)||new Date(S.created).getTime()<a||!S.id)continue;let T=s.envSelection==="fixed"?c:$m(S.body,n.keyword,l);d.push({issueKey:p.key,summary:p.summary,environmentName:T,requestedByAccountId:S.authorAccountId??void 0,requestedByDisplayName:S.author,dedupKey:`deploy:comment:${S.id}`,fingerprint:`comment "${n.keyword}" by ${S.author} at ${S.created}`+(T?` \u2192 ${T}`:"")})}}return d}async matchStatusDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="status_changed"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=this.fixedEnvironmentName(s.environmentId),a=[];for(let l of i){let c=await this.jiraOf(t).lastEnteredStatus(l.key,n.status);c&&a.push({issueKey:l.key,summary:l.summary,environmentName:o,requestedByAccountId:c.authorAccountId??void 0,requestedByDisplayName:c.author,dedupKey:`deploy:status:${e.id}:${l.key}:${c.at}`,fingerprint:`moved to "${n.status}" by ${c.author} at ${c.at}`})}return a}fixedEnvironmentName(e){return e?this.environments.find(t=>t.id===e)?.name??"":""}async matchLabelTrigger(e,t){let n=e.trigger;if(n.type!=="label_added")return[];let s=`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Cr.NEEDS_INPUT_LABEL}") ORDER BY updated ASC`;return(await this.jiraOf(t).search(s,10)).map(o=>({issueKey:o.key,summary:o.summary,components:o.components,fingerprint:`label "${n.label}" matched at ${new Date().toISOString()}`}))}async matchCommentTrigger(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return[];let s=`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND (labels IS EMPTY OR labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Cr.NEEDS_INPUT_LABEL}")) ORDER BY updated DESC`,i=await this.jiraOf(t).search(s,10),o=n.keyword.toLowerCase(),a=[];for(let l of i){let d=(await this.jiraOf(t).getIssue(l.key)).comments.find(p=>p.body.toLowerCase().includes(o)&&!Je(p.body));d&&a.push({issueKey:l.key,components:l.components,summary:l.summary,fingerprint:`comment keyword "${n.keyword}" by ${d.author} at ${d.created}`,triggeredByAccountId:d.authorAccountId??void 0})}return a}async diagnoseRule(e,t){let n=e.trigger;if(e.action.type==="deploy"){let l=n.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t),c=l.filter(d=>d.environmentName);return{matchedCount:c.length,excludedCount:l.length-c.length,excludedSample:l.filter(d=>!d.environmentName).slice(0,5).map(d=>d.issueKey)}}if(n.type==="status_changed")return{matchedCount:(await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}"`,50)).length,excludedCount:0,excludedSample:[]};if(n.type==="label_added"){let[l,c]=await Promise.all([this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}")`,50),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]);return{matchedCount:l.length,excludedCount:c.length,excludedSample:c.slice(0,5).map(d=>d.key)}}let s=n.keyword.toLowerCase(),[i,o]=await Promise.all([this.matchCommentTrigger(e,t),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]),a=[];for(let l of o)(await this.jiraOf(t).getIssue(l.key)).comments.some(d=>d.body.toLowerCase().includes(s))&&a.push(l.key);return{matchedCount:i.length,excludedCount:a.length,excludedSample:a.slice(0,5)}}enqueueForRepo(e,t){this.enqueue(this.repoQueues,e,t)}runOnRepoQueue(e,t){this.enqueue(this.repoQueues,e,t)}runOnEnvironmentQueue(e,t){this.enqueue(this.envQueues,e,t)}enqueue(e,t,n){let i=(e.get(t)??Promise.resolve()).then(n).catch(o=>{g.error(`run crashed: ${o instanceof Error?o.stack:o}`)});e.set(t,i)}};function $m(r,e,t){let n=r.toLowerCase().indexOf(e.toLowerCase());if(n<0)return"";let i=r.slice(n+e.length).split(/[^\w.-]+/).filter(Boolean);for(let o of i){let a=t.find(l=>l.toLowerCase()===o.toLowerCase());if(a)return a}for(let o of i)if(!Rm.has(o.toLowerCase()))return o;return""}var Er=P(require("node:fs"),1),oc=P(require("node:path"),1);var Pm=w.object({role:w.enum(["user","agent"]),text:w.string()}),jm=w.object({sessionId:w.string(),projectId:w.string(),title:w.string().default(""),updatedAt:w.string(),messages:w.array(Pm).default([])}),Om=w.record(jm),Nm=10,Mm=200,ic=2e4;function ac(){return oc.default.join(Q(),"chat-sessions.json")}function No(){let r=ac();if(!Er.default.existsSync(r))return{};try{return Om.parse(JSON.parse(Er.default.readFileSync(r,"utf8")))}catch{return{}}}function Lm(r){Er.default.mkdirSync(Q(),{recursive:!0,mode:448});let e=ac(),t=e+".tmp";Er.default.writeFileSync(t,JSON.stringify(r,null,2)+`
663
+ `,{mode:384}),Er.default.renameSync(t,e),Er.default.chmodSync(e,384)}function uc(r,e,t,n){let s=No(),o=s[e]??{sessionId:e,projectId:r,title:t.slice(0,80),updatedAt:new Date().toISOString(),messages:[]};o.messages.push({role:"user",text:t.slice(0,ic)},{role:"agent",text:n.slice(0,ic)}),o.messages=o.messages.slice(-Mm),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(l=>l.projectId===o.projectId).sort((l,c)=>c.updatedAt.localeCompare(l.updatedAt));for(let l of a.slice(Nm))delete s[l.sessionId];Lm(s)}function lc(r){return Object.values(No()).filter(e=>e.projectId===r).sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)).map(e=>({sessionId:e.sessionId,title:e.title,updatedAt:e.updatedAt,messageCount:e.messages.length}))}function Mo(r){return No()[r]??null}var sy=P(sd(),1),iy=P(ni(),1),oy=P(mn(),1),ay=P(Go(),1),uy=P(Jo(),1),ly=P(ra(),1),fd=P(ai(),1),cy=P(hd(),1);var sa=fd.default;var oa=P(require("node:crypto"),1),et=P(xe(),1);function dy(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function ia(r,e,t,n){r.push(`dropped ${e} ${t} \u2014 this runner is out of date and does not understand it yet (${n}). Update the runner (npm install -g @ticketpilot/runner) to pick it up.`)}function hy(r){if(!r||typeof r!="object"||r.type!=="config")return null;let e=r,t=[],n=[];for(let a of Array.isArray(e.projects)?e.projects:[]){let l=et.ProjectConfig.safeParse(a);l.success?n.push(l.data):ia(t,"project","",l.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let l=et.RuleConfig.safeParse(a);l.success?s.push(l.data):ia(t,"rule",dy(a),l.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let l=et.EnvironmentConfig.safeParse(a);l.success?i.push(l.data):ia(t,"environment","",l.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:n,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:t}}var fy=2e4,py=6e4,my=5e3,li=class{constructor(e,t,n,s){this.wsUrl=e;this.runnerToken=t;this.meta=n;this.events=s}wsUrl;runnerToken;meta;events;ws=null;queue=[];pending=new Map;backoffMs=1e3;heartbeat=null;closed=!1;bootAnnounced=!1;start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.heartbeat&&clearInterval(this.heartbeat),this.ws?.close()}get connected(){return this.ws?.readyState===sa.OPEN}connect(){if(this.closed)return;g.info(`connecting to control plane at ${this.wsUrl}`);let e=new sa(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:et.PROTOCOL_VERSION,runnerVersion:this.meta.runnerVersion,platform:`${process.platform}/${process.arch} node${process.versions.node}`,justBooted:!this.bootAnnounced});let t=this.queue.splice(0,this.queue.length);for(let n of t)this.sendNow(n);this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=setInterval(()=>{this.send({type:"heartbeat",ts:new Date().toISOString()})},fy)}),e.on("message",t=>{let n;try{n=JSON.parse(t.toString())}catch(i){g.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,et.parseServerMsg)(n)}catch(i){let o=hy(n);if(!o){g.warn(`ignoring malformed server message: ${i}`);return}for(let a of o.warnings)g.warn(a);g.warn(`config push had ${o.warnings.length} ${o.warnings.length===1?"entry":"entries"} this runner doesn't understand \u2014 applied everything else instead of dropping the whole config`),s=o.msg}this.handle(s)}),e.on("close",t=>{if(this.heartbeat&&clearInterval(this.heartbeat),t===4001)g.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(t===4003){g.error("this runner has been revoked from the control plane UI. Re-enroll with a fresh token if this was not intended."),this.closed=!0;return}if(this.closed)return;let n=Math.random()*.3+.85,s=Math.round(this.backoffMs*n);g.warn(`disconnected (code ${t}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,py)}),e.on("error",t=>{g.warn(`websocket error: ${t.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,g.info(`connected as runner "${e.runnerName}" (${e.runnerId})`);return}if(e.type==="run.claim.result"||e.type==="deploy.claim.result"){let t=this.pending.get(e.requestId);t&&(clearTimeout(t.timer),this.pending.delete(e.requestId),t.resolve(e));return}if(e.type==="config")return this.events.onConfig(e);if(e.type==="project.test")return this.events.onProjectTest(e);if(e.type==="rule.diagnose")return this.events.onRuleDiagnose(e);if(e.type==="run.cancel")return this.events.onCancel(e.runId);if(e.type==="run.approved")return this.events.onApproved(e.runId,e.headSha);if(e.type==="run.rejected")return this.events.onRejected(e.runId);if(e.type==="run.retryPush")return this.events.onRetryPush(e.runId);if(e.type==="deploy.start")return this.events.onDeployStart(e);if(e.type==="deploy.suggest")return this.events.onDeploySuggest(e);if(e.type==="env.preflight")return this.events.onEnvPreflight(e);if(e.type==="chat.turn")return this.events.onChatTurn(e);if(e.type==="chat.create.ticket")return this.events.onChatCreateTicket(e);if(e.type==="chat.list")return this.events.onChatList(e);if(e.type==="chat.load")return this.events.onChatLoad(e);if(e.type==="board.fetch")return this.events.onBoardFetch(e);if(e.type==="board.trigger")return this.events.onBoardTrigger(e);if(e.type==="audit.start")return this.events.onAuditStart(e);if(e.type==="audit.list")return this.events.onAuditList(e);if(e.type==="audit.get")return this.events.onAuditGet(e);if(e.type==="audit.review")return this.events.onAuditReview(e);if(e.type==="knowledge.list")return this.events.onKnowledgeList(e);if(e.type==="knowledge.save")return this.events.onKnowledgeSave(e);if(e.type==="epic.list")return this.events.onEpicList(e);if(e.type==="epic.suggest")return this.events.onEpicSuggest(e);if(e.type==="team.creds")return this.events.onTeamCreds(e);if(e.type==="jira.users")return this.events.onJiraUsers(e);if(e.type==="setup.status")return this.events.onSetupStatus(e);if(e.type==="setup.claudemd.generate")return this.events.onSetupClaudeMdGenerate(e);if(e.type==="setup.claudemd.save")return this.events.onSetupClaudeMdSave(e);if(e.type==="runner.update")return this.events.onRunnerUpdate(e)}sendNow(e){this.ws?.send(JSON.stringify(e))}send(e){if(this.connected){this.sendNow(e);return}if(this.queue.length>=my){let t=this.queue.findIndex(n=>n.type==="run.log");t>=0?this.queue.splice(t,1):this.queue.shift()}this.queue.push(e)}async claimRun(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=oa.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"run.claim",requestId:t,...e})});return!n||n.type!=="run.claim.result"?{accepted:!1,reason:"claim timed out"}:{accepted:n.accepted,runId:n.runId,reason:n.reason,claudeProfile:n.claudeProfile,actorEmail:n.actorEmail}}async claimDeploy(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=oa.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:t,...e})});return!n||n.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:n.accepted,runId:n.runId,environment:n.environment,reason:n.reason,code:n.code}}sendDeploySuggestResult(e,t){this.send({type:"deploy.suggest.result",requestId:e,...t})}sendChatTurnResult(e,t){this.send({type:"chat.turn.result",requestId:e,...t})}sendChatCreateTicketResult(e,t){this.send({type:"chat.create.ticket.result",requestId:e,...t,childKeys:t.childKeys??[]})}sendChatListResult(e,t){this.send({type:"chat.list.result",requestId:e,sessions:t})}sendChatLoadResult(e,t){this.send({type:"chat.load.result",requestId:e,...t})}sendBoardFetchResult(e,t){this.send({type:"board.fetch.result",requestId:e,...t,browseBaseUrl:t.browseBaseUrl??""})}sendAuditStartResult(e,t){this.send({type:"audit.start.result",requestId:e,...t})}sendAuditListResult(e,t){this.send({type:"audit.list.result",requestId:e,ok:t.ok,error:t.error,audits:t.audits??[]})}sendAuditGetResult(e,t){this.send({type:"audit.get.result",requestId:e,...t})}sendAuditReviewResult(e,t){this.send({type:"audit.review.result",requestId:e,...t})}sendKnowledgeListResult(e,t){this.send({type:"knowledge.list.result",requestId:e,ok:t.ok,error:t.error,files:t.files??[]})}sendKnowledgeSaveResult(e,t){this.send({type:"knowledge.save.result",requestId:e,...t})}sendEpicListResult(e,t){this.send({type:"epic.list.result",requestId:e,ok:t.ok,error:t.error,epics:t.epics??[],children:t.children??[]})}sendEpicSuggestResult(e,t){this.send({type:"epic.suggest.result",requestId:e,ok:t.ok,error:t.error,issueKey:t.issueKey??"",reason:t.reason??"",considered:t.considered??0})}sendTeamCredsResult(e,t){this.send({type:"team.creds.result",requestId:e,ok:t.ok,error:t.error,githubShared:t.githubShared??!1,sharedGithubLogin:t.sharedGithubLogin??"",entries:t.entries??[]})}sendBoardTriggerResult(e,t){this.send({type:"board.trigger.result",requestId:e,...t})}sendRunnerUpdateResult(e,t){this.send({type:"runner.update.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupClaudeMdGenerateResult(e,t){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:t.ok,error:t.error,content:t.content??""})}sendSetupClaudeMdSaveResult(e,t){this.send({type:"setup.claudemd.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupStatusResult(e,t){this.send({type:"setup.status.result",requestId:e,ok:t.ok,error:t.error,jiraConfigured:t.jiraConfigured??!1,jiraEmail:t.jiraEmail??"",claude:t.claude,githubTokenSet:t.githubTokenSet??!1,githubLogin:t.githubLogin??"",deploysEnabled:t.deploysEnabled??!1,jiraUserCount:t.jiraUserCount??0,repos:t.repos??[]})}sendEnvPreflightResult(e,t){this.send({type:"env.preflight.result",requestId:e,...t})}sendJiraUsersResult(e,t){this.send({type:"jira.users.result",requestId:e,...t})}sendProjectTestResult(e,t,n){this.send({type:"project.test.result",requestId:e,ok:t,checks:n})}sendRuleDiagnoseResult(e,t){this.send({type:"rule.diagnose.result",requestId:e,...t})}};var wn=P(require("node:fs"),1),aa=P(require("node:path"),1),md=require("node:child_process"),gd=require("node:util");var pd=(0,gd.promisify)(md.execFile);async function ci(r,e,t=[]){let n=[],s=r.repos[e.repoName]?.jira??r.jira;if(!s)n.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else{let o=new qe(s);try{let a=await o.myself();n.push({name:"jira-auth",ok:!0,detail:`authenticated as ${a.displayName}`});try{await o.search(`project = "${e.jiraProjectKey}" ORDER BY created DESC`,1),n.push({name:"jira-project",ok:!0,detail:`project ${e.jiraProjectKey} is readable`})}catch(l){n.push({name:"jira-project",ok:!1,detail:`cannot read project ${e.jiraProjectKey}: ${es(l)}`})}}catch(a){n.push({name:"jira-auth",ok:!1,detail:`Jira auth failed: ${es(a)}`})}}let i=r.repos[e.repoName];if(i&&wn.default.existsSync(i.path)){let o=aa.default.join(i.path,"CLAUDE.md"),a=wn.default.existsSync(o)&&wn.default.readFileSync(o,"utf8").trim().length>0;n.push({name:"memory-file",ok:a,detail:a?"CLAUDE.md present \u2014 the agent has project memory":"MISSING: CLAUDE.md at the repo root. Rules can't be enabled until the project has a memory file \u2014 it is what makes every run smarter than the last."});let l=jo(i.path);n.push({name:"deploy-doc",ok:l!==null,detail:l?`${l.path} present \u2014 deploy suggestions will follow it`:"MISSING: DEPLOY.md (or .ticketpilot/deploy.md). Environments can't be created until the repo documents how it deploys."})}if(!i)n.push({name:"repo-path",ok:!1,detail:`no local path mapped for repo "${e.repoName}" \u2014 run: allwright repo add "${e.repoName}" /path/to/checkout`});else if(!wn.default.existsSync(i.path))n.push({name:"repo-path",ok:!1,detail:`path does not exist: ${i.path}`});else{let o=wn.default.existsSync(aa.default.join(i.path,".git"));n.push({name:"repo-path",ok:!0,detail:`${i.path}${o?" (git checkout)":" (warning: not a git checkout)"}`})}try{let{stdout:o}=await pd(r.claudeBin,["--version"],{timeout:15e3});n.push({name:"claude-code",ok:!0,detail:o.trim().slice(0,100)})}catch(o){n.push({name:"claude-code",ok:!1,detail:`cannot run "${r.claudeBin}": ${es(o)}`})}try{let{stdout:o}=await pd("git",["--version"],{timeout:15e3});n.push({name:"git",ok:!0,detail:o.trim().slice(0,100)})}catch(o){n.push({name:"git",ok:!1,detail:`cannot run git: ${es(o)}`})}if(r.github?.token)try{let{GitHubClient:o}=await Promise.resolve().then(()=>(ct(),an)),a=await new o(r.github.token).whoami();n.push({name:"github-token",ok:!0,detail:`authenticated as ${a}`})}catch(o){n.push({name:"github-token",ok:!1,detail:es(o)})}else n.push({name:"github-token",ok:!0,detail:"not set \u2014 needed only for implement rules (allwright github set-token)"});if(t.length){r.deploy.enabled?n.push({name:"deploy",ok:!0,detail:"deployments enabled on this runner"}):n.push({name:"deploy",ok:!1,detail:"deployments are disabled on this runner \u2014 run `allwright deploy enable` to allow it to execute your saved deploy steps"});for(let o of t){let a=Qt(r,e.repoName,o.name),l=o.requiredSecrets.filter(c=>!a[c]&&!process.env[c]);n.push({name:`env:${o.name}`,ok:l.length===0,detail:l.length?`missing secret(s): ${l.join(", ")} \u2014 allwright env set "${e.repoName}" "${o.name}" ${l[0]}=...`:`${o.steps.length} step(s), ${o.requiredSecrets.length} secret(s) present`+(o.branch?`, deploys origin/${o.branch}`:"")})}}return n}function es(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var ue=new Ea;ue.name("allwright").description("Allwright runner \u2014 runs on YOUR machine, holds YOUR credentials locally, connects outbound-only to the control plane. Your Jira token, Anthropic key and source code never leave this host.").version(Es);ue.command("init").description("Interactive setup: enroll this runner and store credentials locally").option("--cp-url <url>","control plane URL").option("--enroll-token <token>","enrolment token from the Allwright UI").option("--name <name>","runner name",Sd.default.hostname()).option("--jira-url <url>","Jira base URL, e.g. https://yourorg.atlassian.net").option("--jira-email <email>","Jira account email").option("--jira-token <token>","Jira API token (stored locally only)").action(async r=>{let e=Or.default.createInterface({input:process.stdin,output:process.stdout}),t=async(n,s,i=!1)=>{if(s)return s;let o=await e.question(`${n}: `);if(!o.trim())throw new Error(`${n} is required`);return o.trim()};try{let n=await t("Control plane URL",r.cpUrl),s=await t("Enrolment token (from the web UI)",r.enrollToken),i=await t("Jira base URL (https://yourorg.atlassian.net)",r.jiraUrl),o=await t("Jira account email",r.jiraEmail),a=await t("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",r.jiraToken,!0),l=Pi.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),c=await new qe(l.jira).myself();g.info(`Jira credential OK \u2014 authenticated as ${c.displayName}`),l=await bu(l,s),g.info(`Enrolled as runner "${l.runnerName}" (${l.runnerId})`),g.info(`Credentials saved to ${St()} (mode 600, this machine only)`),g.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var ua=ue.command("repo").description("Map control-plane repo names to local checkouts");ua.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(r,e)=>{let t=ee();t.repos[r]={path:e},oe(t),g.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(_r(),Ru));g.info(` origin remote: ${await n(e)} \u2014 make sure this is the repo you meant`)}catch{g.warn(` could not read an origin remote at ${e} \u2014 is it a git checkout?`)}});ua.command("list").description("Show configured repo mappings").action(()=>{let r=ee(),e=Object.entries(r.repos);if(!e.length)return g.info("no repos mapped yet");for(let[t,n]of e)g.info(`${t} -> ${n.path}`)});var Td=ue.command("claude").description("Per-user Claude login profiles \u2014 each teammate's runs bill their OWN Claude account");Td.command("login <profileName>").description("Create (or re-login) a named Claude profile. Opens Claude Code interactively with its own config directory \u2014 have the PERSON WHOSE ACCOUNT IT IS complete the /login flow with their credentials, then exit. Assign the profile to their user on the dashboard's Team page.").action(async r=>{if(!/^[a-zA-Z0-9._-]+$/.test(r))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=ee(),t=e.claudeProfiles[r]?.configDir??`${St().replace(/runner\.json$/,"")}claude-profiles/${r}`;yt.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},oe(e),g.info(`profile "${r}" -> ${t}`),g.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),g.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let n=(0,Mt.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),g.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});Td.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=ee(),e=Object.entries(r.claudeProfiles);if(g.info("default: this OS user's own Claude login (no profile)"),!e.length)return g.info("no named profiles yet \u2014 allwright claude login <name>");for(let[t,n]of e){let s=yt.default.existsSync(n.configDir)&&yt.default.readdirSync(n.configDir).length>0;g.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});ua.command("remove <repoName>").description("Unmap a repo from this runner: removes the mapping plus its per-repo Jira/GitHub overrides and env secrets from the config. Does NOT touch the checkout on disk or anything in the control plane \u2014 delete the project on the dashboard separately.").action(r=>{let e=ee();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${i}`)}let t=e.repos[r].path;delete e.repos[r];let n=Object.keys(e.environments).filter(i=>i.startsWith(`${r}:`));for(let i of n)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==r),oe(e),g.info(`Removed "${r}" (was ${t})`),n.length&&g.info(`Also removed ${n.length} environment secret set(s): ${n.join(", ")}`),e.auditSchedules.length!==s&&g.info("Also removed its audit schedule(s)"),g.info("The checkout on disk was NOT touched \u2014 remove it yourself if you want it gone."),g.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var la=ue.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");la.command("install").description("Install + start the systemd service \u2014 detects node, this script, your user and home; no hand-written unit files. Run with sudo. (--print shows the unit without installing.)").option("--print","print the generated unit file and exit").action(r=>{if(r.print){g.info(`
664
+ `+uo(ao()));return}Lu(g)});la.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>Du(g));la.command("status").description("systemctl status for the runner service").action(()=>{(0,Mt.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});ue.command("update").description("Update the runner to the latest published version (npm install -g allwright@latest). Restart the runner afterwards \u2014 and only when no runs are active.").action(async()=>{g.info("Updating: npm install -g allwright@latest");let r=(0,Mt.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,t)=>{r.on("exit",n=>n===0?e():t(new Error(`npm exited with code ${n}`))),r.on("error",t)}),g.info("Updated. Restart the runner service to load the new version (check active runs first).")});var rs=ue.command("jira").description("Per-repo Jira site overrides \u2014 for projects living on a different Atlassian site");rs.command("set <repoName>").description("Store Jira credentials for ONE repo's project (e.g. a project on a different *.atlassian.net site than the runner's main credential). Prompts on stdin; stored locally only, like every other credential.").action(async r=>{let e=ee();if(!e.repos[r]){let n=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${n}. Run \`allwright repo add\` first.`)}let t=Or.default.createInterface({input:process.stdin,output:process.stdout});try{let n=(await t.question("Jira base URL for this repo (https://yourorg.atlassian.net): ")).trim(),s=(await t.question("Jira account email: ")).trim(),i=(await t.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!n||!s||!i)throw new Error("all three values are required");let o={baseUrl:n,email:s,apiToken:i},a=await new qe(o).myself();g.info(`Jira credential OK \u2014 authenticated as ${a.displayName} on ${n}`),e.repos[r].jira=o,oe(e),g.info(`Saved: repo "${r}" now polls ${n} (other repos keep the runner-wide credential)`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")}finally{t.close()}});rs.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=ee();g.info(`runner-wide: ${r.jira?`${r.jira.baseUrl} (${r.jira.email})`:"(not configured)"}`);for(let[e,t]of Object.entries(r.repos))g.info(`${e} -> ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(runner-wide credential)"}`)});rs.command("user-add <ticketpilotEmail>").description("Store a PERSON's own Jira credential, so board buttons and Compose tickets they click post to Jira under THEIR Atlassian identity instead of the runner's account. Keyed by their Allwright login email. Prompts on stdin; stored locally only. Picked up on the next click \u2014 no restart needed.").action(async r=>{let e=ee(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Or.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`Their ATLASSIAN account email [${t}]: `)).trim()||t,i=(await n.question("Their Jira API token (they create it at id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!i)throw new Error("API token is required");let o=[e.jira,...Object.values(e.repos).map(c=>c.jira)].filter(c=>!!c),a=new Set,l=!1;for(let c of o)if(!a.has(c.baseUrl)){a.add(c.baseUrl);try{let d=await new qe({baseUrl:c.baseUrl,email:s,apiToken:i}).myself();g.info(`${c.baseUrl}: OK \u2014 authenticated as ${d.displayName}`),l=!0}catch{g.warn(`${c.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!l)throw new Error("credential failed on every configured Jira site \u2014 nothing saved");e.jiraUsers[t]={email:s,apiToken:i},oe(e),g.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});rs.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=ee(),e=Object.entries(r.jiraUsers);if(!e.length)return g.info("none yet \u2014 everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[t,n]of e)g.info(`${t} -> posts to Jira as ${n.email}`)});rs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=ee(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],oe(e),g.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var Sn=ue.command("github").description("GitHub credential for implement-mode rules");Sn.command("set-token").description("Store a GitHub token for opening pull requests (implement rules). Stored locally only, like your Jira token. Recommended: a fine-grained PAT scoped to the repo with contents:write + pull_requests:write.").option("--token <token>","GitHub token (omit to be prompted)").action(async r=>{let e=Or.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??(await e.question("GitHub token (fine-grained PAT recommended): ")).trim();if(!t)throw new Error("token is required");let{GitHubClient:n}=await Promise.resolve().then(()=>(ct(),an)),s=await new n(t).whoami(),i=ee();i.github={token:t,login:s},oe(i),g.info(`GitHub token OK \u2014 authenticated as ${s}`),g.info(`Saved to ${St()} (mode 600, this machine only)`)}finally{e.close()}});Sn.command("set <repoName>").description("Store a GitHub token for ONE repo only \u2014 overrides the runner-wide token for that repo's PRs and PR-watching. Useful when projects need separately revocable access. Prompts on stdin; stored locally only.").action(async r=>{let e=ee();if(!e.repos[r]){let n=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${n}. Run \`allwright repo add\` first.`)}let t=Or.default.createInterface({input:process.stdin,output:process.stdout});try{let n=(await t.question(`GitHub token for "${r}" (fine-grained PAT scoped to just this repo): `)).trim();if(!n)throw new Error("token is required");let{GitHubClient:s}=await Promise.resolve().then(()=>(ct(),an)),i=await new s(n).whoami();e.repos[r].github={token:n,login:i},oe(e),g.info(`GitHub token OK \u2014 authenticated as ${i}`),g.info(`Saved: repo "${r}" now uses its own token (other repos keep the runner-wide one)`)}finally{t.close()}});Sn.command("user-add <ticketpilotEmail>").description("Store a PERSON's own GitHub token, so PRs from implement runs THEY trigger are authored by their GitHub account. Keyed by their Allwright login email. Optional \u2014 without it their runs fall back to the repo/runner-wide token. Needs contents:write + pull_requests:write on the repos they'll touch.").action(async r=>{let e=ee(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Or.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`GitHub token for ${t}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(ct(),an)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},oe(e),g.info(`GitHub token OK \u2014 authenticated as ${o}`),g.info(`Saved. Implement runs triggered by ${t} now open PRs as ${o}. No restart needed.`)}finally{n.close()}});Sn.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=ee(),e=Object.entries(r.githubUsers);if(!e.length)return g.info("no per-user GitHub tokens \u2014 everyone's PRs use the repo/runner-wide token");for(let[t]of e)g.info(`${t} -> own GitHub token stored`)});Sn.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=ee(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],oe(e),g.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});Sn.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=ee();g.info(`runner-wide: ${r.github?.token?"token set":"(not configured)"}`);for(let[t,n]of Object.entries(r.repos))g.info(`${t} -> ${n.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(r.githubUsers);g.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var ca=ue.command("audit").description("Recurring specialist audits on this runner");ca.command("schedule <repoName> <role> <intervalHours>").description("Audit this repo's project on a cadence (role: security|testing; interval in hours, min 6). Runs on the runner's own clock; reports land in the Audits page history, where the diff-vs-previous view shows drift. Advisory only \u2014 nothing blocks.").action((r,e,t)=>{let n=ee();if(!n.repos[r]){let i=Object.keys(n.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" \u2014 mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(t,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");n.auditSchedules=[...n.auditSchedules.filter(i=>!(i.repoName===r&&i.role===e)),{repoName:r,role:e,intervalHours:s}],oe(n),g.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});ca.command("schedules").description("List scheduled audits").action(()=>{let r=ee();if(!r.auditSchedules.length)return g.info("no scheduled audits \u2014 allwright audit schedule <repo> <role> <hours>");for(let e of r.auditSchedules)g.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});ca.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=ee(),n=t.auditSchedules.length;if(t.auditSchedules=t.auditSchedules.filter(s=>!(s.repoName===r&&s.role===e)),t.auditSchedules.length===n)throw new Error("no such schedule");oe(t),g.info("Removed. Restart the runner to apply.")});var da=ue.command("deploy").description("Deployment settings for this machine");da.command("enable").description("Allow this runner to execute the deploy steps saved in the dashboard. Those steps are shell commands that run here, as this user \u2014 so this switch lives on the machine, not in the web UI, and only someone with shell access can flip it.").action(()=>{let r=ee();r.deploy={enabled:!0},oe(r),g.info("deployments ENABLED on this runner"),g.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});da.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=ee();r.deploy={enabled:!1},oe(r),g.info("deployments DISABLED on this runner"),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});da.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=ee();g.info(`deployments: ${r.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e){let s=Object.keys(n.secrets);g.info(`${t}: ${s.length?s.join(", "):"(no secrets)"}`)}});var ha=ue.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");ha.command("set <repoName> <envName> <assignments...>").description('Store secrets for one environment, e.g. env set acme/api production "SSH_HOST=1.2.3.4" "SSH_USER=deploy". Your deploy steps reference these as $SSH_HOST. The control plane only ever learns the NAMES.').action((r,e,t)=>{let n=ee(),s=fs(r,e),i=n.environments[s]??{secrets:{}},o=[];for(let a of t){let l=a.indexOf("=");if(l<=0)throw new Error(`expected KEY=VALUE, got "${a}"`);let c=a.slice(0,l).trim();i.secrets[c]=a.slice(l+1),o.push(c)}n.environments[s]=i,oe(n),g.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),g.info(`Saved to ${St()} (mode 600, this machine only)`),g.info("Restart the background runner to pick these up: allwright stop && allwright start")});ha.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=ee(),s=fs(r,e),i=n.environments[s];if(!i)return g.info(`nothing stored for ${s}`);for(let o of t)delete i.secrets[o];n.environments[s]=i,oe(n),g.info(`removed ${t.join(", ")} from ${s}`)});ha.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=ee(),e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e)g.info(`${t}: ${Object.keys(n.secrets).join(", ")||"(none)"}`)});ue.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=Ua(r);g.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),g.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private \u2014 anyone holding it can act as this runner."),g.info(`Restore on any machine with: allwright import ${kn.default.basename(e.file)}`)}catch(e){g.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});ue.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=Kr();if(e&&Vr(e)){g.error("the runner is running \u2014 stop it first (systemctl stop allwright, or `allwright stop` for a pid-file daemon), then import."),process.exitCode=1;return}try{let t=qa(r);g.info(`Restored ${t.restored.length} entries into ${Q()}`),t.previousDir&&g.info(`Previous config kept at ${t.previousDir}`),g.info("Start the runner and it will reconnect with the restored identity.")}catch(t){g.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});ue.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=ee(),e=Object.keys(r.repos);if(!r.jira){g.error("no Jira credentials configured \u2014 run `allwright init`"),process.exitCode=1;return}let t=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],n=!0;for(let s of t){let i=await ci(r,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let a=o.ok?"PASS":"FAIL";(o.ok?g.info:g.error)(`[${a}] ${o.name}: ${o.detail}`),n&&=o.ok}}n||(process.exitCode=1)});function vy(r){if(!r.runnerToken)throw new Error("runner not enrolled \u2014 run `allwright init`");if(!r.jira)throw new Error("no Jira credentials \u2014 run `allwright init`");let e=Ha();e.ok||(g.warn(`another runner is already running on this machine (pid ${e.pid}). Two runner processes with one identity kick each other off the control plane every second. Stop the other one first: \`allwright stop\` (background runner) or \`sudo systemctl stop allwright\` (service).`),process.exit(1)),process.on("exit",Ni);let t=new qe(r.jira),n=new Map,s=f=>{let m=r.repos[f]?.jira;if(!m)return t;let b=n.get(f);return b||(b=new qe(m),n.set(f,b)),b},i=new Map,o=(f,m)=>{let b=ju(ce()??r,f,m);switch(b.kind){case"legacy":return{jira:s(f),authored:!1};case"self":return{jira:s(f),authored:!0};case"missing":return{error:b.error};case"user":{let A=`${b.creds.baseUrl}:${b.creds.email}:${b.creds.apiToken.slice(-6)}`,N=i.get(A);return N||(N=new qe(b.creds),i.set(A,N)),{jira:N,authored:!0}}}},a=new URL("/api/runner/ws",r.controlPlaneUrl);a.protocol=a.protocol==="https:"?"wss:":"ws:";let l=[],c=[],d=[],p,_={cfg:r,jiraFor:s,transport:null},S=new Set,T=f=>{let m=l.find(A=>A.id===f),b=m&&r.repos[m.repoName];return m&&b?{project:m,repoPath:b.path}:null},C={cfg:r,jiraFor:s,get transport(){return _.transport},lookup:(f,m)=>{let b=T(f),A=d.find(N=>N.projectId===f&&N.name===m);return b&&A?{...b,environment:A}:null}},k=new li(a.toString(),r.runnerToken,{runnerVersion:Es},{onConfig:f=>{l=f.projects,c=f.rules,d=f.environments,p.setConfig(f.projects,f.rules,f.pollingPaused,f.environments)},onProjectTest:async f=>{let m=l.find(A=>A.id===f.projectId);if(!m){k.sendProjectTestResult(f.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}g.info(`running connection test for project "${m.name}"`);let b=await ci(r,m,d.filter(A=>A.projectId===m.id));k.sendProjectTestResult(f.requestId,b.every(A=>A.ok),b)},onRuleDiagnose:async f=>{let m=c.find(M=>M.id===f.ruleId),b=m&&l.find(M=>M.id===m.projectId);if(!m||!b){k.sendRuleDiagnoseResult(f.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}g.info(`diagnosing rule "${m.name}"`);let A=await ci(r,b,m.action.type==="deploy"?d.filter(M=>M.projectId===b.id):[]),N=m.action.type==="implement"?A:A.filter(M=>M.name!=="github-token"),{matchedCount:F,excludedCount:L,excludedSample:re}=await p.diagnoseRule(m,b);k.sendRuleDiagnoseResult(f.requestId,{checks:N,matchedCount:F,excludedCount:L,excludedSample:re})},onCancel:f=>{g.warn(`cancel requested for run ${f} \u2014 not supported in this version, run will finish or time out`)},onApproved:(f,m)=>{if(Po(f)){Xl(C,f).catch(b=>g.error(`deploy approval crashed for ${f}: ${b instanceof Error?b.stack:b}`));return}Kn(_,f,m).catch(b=>g.error(`approval handling crashed for ${f}: ${b instanceof Error?b.stack:b}`))},onRetryPush:f=>{let m=Ds(f),b=()=>Ul(_,f).catch(A=>g.error(`retry push crashed for ${f}: ${A instanceof Error?A.stack:A}`));m?p.runOnRepoQueue(m.baseRepoPath,b):b()},onRejected:f=>{if(Po(f)){Ql(C,f).catch(m=>g.error(`deploy rejection crashed for ${f}: ${m instanceof Error?m.stack:m}`));return}zl(_,f).catch(m=>g.error(`rejection handling crashed for ${f}: ${m instanceof Error?m.stack:m}`))},onDeployStart:f=>{let m=`${f.runId}#${f.attempt}`;if(S.has(m))return;S.add(m);let b=T(f.projectId);if(!b){let A="this runner has no local checkout mapped for that project \u2014 run: allwright repo add <repoName> /path/to/checkout";g.error(`deploy ${f.runId}: ${A}`),k.send({type:"run.status",runId:f.runId,status:"failed",error:A});return}g.info(`deploy ${f.runId} requested from the dashboard: ${f.issueKey} \u2192 ${f.environment.name}`),p.runOnEnvironmentQueue(f.environment.id,()=>Vs({runId:f.runId,project:b.project,environment:f.environment,issueKey:f.issueKey,issueSummary:f.issueSummary,repoPath:b.repoPath,cfg:r,jira:s(b.project.repoName),transport:k,requestedBy:f.requestedBy}).catch(A=>g.error(`deploy crashed for ${f.runId}: ${A instanceof Error?A.stack:A}`)))},onDeploySuggest:async f=>{let m=T(f.projectId);if(!m){k.sendDeploySuggestResult(f.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}g.info(`asking Claude Code for "${f.environmentName}" deploy steps in ${m.repoPath}`);let b=await nc({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:f.environmentName,notes:f.notes,timeoutSeconds:f.timeoutSeconds,cfg:r});k.sendDeploySuggestResult(f.requestId,b)},onEnvPreflight:async f=>{let m=T(f.projectId);if(!m){k.sendEnvPreflightResult(f.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let b=await rc({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:f.environmentName,steps:f.steps,requiredSecrets:f.requiredSecrets,workdir:f.workdir,branch:f.branch,publicUrl:f.publicUrl,cfg:r});k.sendEnvPreflightResult(f.requestId,b)},onChatTurn:async f=>{let m=T(f.projectId);if(!m){k.sendChatTurnResult(f.requestId,{ok:!1,sessionId:f.sessionId??"",reply:"",error:"this runner has no local checkout mapped for that project"});return}let b=f.sessionId||(0,di.randomUUID)(),A=!f.sessionId;if((A?0:Mo(b)?.messages.length??0)>=44){k.sendChatTurnResult(f.requestId,{ok:!1,sessionId:b,reply:"",error:"this chat has hit its length limit \u2014 every turn re-reads the whole conversation, so long chats get slow and expensive. Start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}let F=f.files.length?Za(m.repoPath,f.requestId,f.files):null,L="```",re=A?`You are the project assistant for "${m.project.name}" \u2014 this working directory is its repository, and you have read-only access.
665
665
 
666
666
  DEFAULT MODE IS DISCUSSION. Answer questions, explain code, weigh approaches, review ideas \u2014 like a teammate who knows this repo. Most conversations never produce a ticket, and that is fine. Do NOT propose a Jira ticket unless the user explicitly asks for one in this conversation ("create a ticket", "make this a ticket", "draft the ticket" or similar). Never end a normal answer with a ticket proposal.
667
667
  Be fast: answer from CLAUDE.md and what you already know first; open files only when the question genuinely needs code-level detail. Keep replies short.
668
668
 
669
669
  ONLY when the user explicitly asks for a ticket, propose it by ending your reply with EXACTLY one fenced block in this shape:
670
- ${B}ticket
670
+ ${L}ticket
671
671
  {"summary": "\u2026", "description": "\u2026"}
672
- ${B}
672
+ ${L}
673
673
  Before drafting, re-read this ENTIRE conversation from its first message and fold in every decision, constraint, and correction agreed along the way \u2014 the ticket reflects the final state of the whole discussion, not just the last message.
674
674
  Write the description in plain human language, structured with these Markdown section headings in this order:
675
675
  Story: \u2014 one or two sentences: who needs this and why.
@@ -678,18 +678,18 @@ Expected Flow: \u2014 the flow once this ticket is done, as numbered steps.
678
678
  Current Flow: \u2014 how it behaves today; include ONLY when current behavior exists.
679
679
  Acceptance Criteria: \u2014 testable bullet points a reviewer can check off one by one.
680
680
  Include a section only when it carries real content, and add extra sections (Out of Scope, Notes, \u2026) when the work genuinely needs them. Use as many bullets as the work needs \u2014 no artificial length cap, but no padding either. It must stay concrete enough that a developer (or an agent) can implement it without asking questions. NEVER paste the conversation into the description; distill it. Refine the draft over further turns if the user asks.
681
- EXCEPTION \u2014 verbatim payloads: when the user supplies literal content that must land in the ticket exactly (file contents, error logs, specs, commands), include it in the description IN FULL inside a fenced code block \u2014 the word budget applies to your own prose around it, never to the user's payload. Never summarize such content and never replace it with a placeholder like "[insert content here]": a placeholder makes the ticket unimplementable, because the implementing agent only ever sees the ticket. Inside the ${B}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks \u2014 a nested ${B} would end the outer block early and corrupt the draft.
681
+ EXCEPTION \u2014 verbatim payloads: when the user supplies literal content that must land in the ticket exactly (file contents, error logs, specs, commands), include it in the description IN FULL inside a fenced code block \u2014 the word budget applies to your own prose around it, never to the user's payload. Never summarize such content and never replace it with a placeholder like "[insert content here]": a placeholder makes the ticket unimplementable, because the implementing agent only ever sees the ticket. Inside the ${L}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks \u2014 a nested ${L} would end the outer block early and corrupt the draft.
682
682
  EXCEPTION \u2014 big requirements: when the user asks for an epic with sub-tickets, or asks to ticket something clearly too large for one ticket, break it down instead and emit this shape in the \`\`\`ticket block:
683
683
  {"epic": {"summary": "\u2026", "description": "\u2026"}, "tickets": [{"summary": "\u2026", "description": "\u2026"}, \u2026]}
684
684
  3-8 tickets, each independently implementable and structured with the same section headings as above, ordered so foundations come first; the epic description is the overall goal in under 100 words.
685
685
 
686
- ${f.userName||"The user"} says: ${f.message}`+(U?.section??""):`${f.userName||"The user"} says: ${f.message}`+(U?.section??""),z=0,V;try{V=await Oe.run({repoPath:m.repoPath,prompt:J,timeoutSeconds:180,bin:r.claudeBin,mode:"read_only",maxTurns:25,model:f.model||"claude-sonnet-5",sessionId:b,resume:!C,onLog:(ge,ye)=>{ge==="agent"&&_.send({type:"chat.stream",requestId:f.requestId,seq:z++,text:ye.slice(0,8e3)})}})}finally{U&&gt.default.rmSync(U.dir,{recursive:!0,force:!0})}V.ok&&ec(f.projectId,b,f.message,V.resultText),_.sendChatTurnResult(f.requestId,{ok:V.ok,sessionId:b,reply:V.resultText,error:V.ok?void 0:V.error??"the agent produced no reply"})},onChatList:f=>{_.sendChatListResult(f.requestId,tc(f.projectId))},onChatLoad:f=>{let m=Ao(f.sessionId);_.sendChatLoadResult(f.requestId,{ok:m!==null,projectId:m?.projectId??"",messages:m?.messages??[],error:m?void 0:"chat not found on this runner (pruned or never existed)"})},onBoardFetch:async f=>{let m=S(f.projectId);if(!m){_.sendBoardFetchResult(f.requestId,{ok:!1,columns:[],error:"this runner has no local checkout mapped for that project"});return}try{let b=n(m.project.repoName),C;try{C=await b.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await b.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let P=await b.boardColumns(m.project.jiraProjectKey),U;if(P){U=P.map(z=>({name:z.name,issues:[]}));let J=new Map;for(let z of C){let V=P.findIndex(ye=>ye.statusIds.includes(z.statusId)),ge={key:z.key,summary:z.summary,labels:z.labels};if(V>=0)U[V].issues.push(ge);else{let ye=J.get(z.status)??[];ye.push(ge),J.set(z.status,ye)}}for(let[z,V]of J)U.push({name:z,issues:V})}else{let J=de=>de.trim().toLowerCase(),z=new Map,V=new Map;for(let de of C){let yt=J(de.status);z.has(yt)||z.set(yt,de.status.trim());let oa=V.get(yt)??[];oa.push({key:de.key,summary:de.summary,labels:de.labels}),V.set(yt,oa)}let ge=[];try{ge=await b.projectStatuses(m.project.jiraProjectKey)}catch{}let ye=[];for(let de of ge){let yt=J(de);!ye.includes(yt)&&V.has(yt)&&ye.push(yt)}for(let de of V.keys())ye.includes(de)||ye.push(de);U=ye.map(de=>({name:z.get(de)??de,issues:V.get(de)??[]}))}let B=r.repos[m.project.repoName]?.jira??r.jira;_.sendBoardFetchResult(f.requestId,{ok:!0,browseBaseUrl:(B?.baseUrl??"").replace(/\/+$/,""),columns:U})}catch(b){_.sendBoardFetchResult(f.requestId,{ok:!1,columns:[],error:b instanceof Error?b.message:String(b)})}},onBoardTrigger:async f=>{let m=S(f.projectId);if(!m){_.sendBoardTriggerResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=n(m.project.repoName),C=f.comment.trim()?i(m.project.repoName,f.requestedByEmail):{jira:b,authored:!1};if(C.error!==void 0){_.sendBoardTriggerResult(f.requestId,{ok:!1,error:C.error});return}if(f.reimplement){let P=await b.getIssue(f.issueKey),U=P.comments.filter(z=>He(z.body)),B=U.length?Math.max(...U.map(z=>new Date(z.created).getTime())):0;if(!P.comments.some(z=>!He(z.body)&&new Date(z.created).getTime()>B)){_.sendBoardTriggerResult(f.requestId,{ok:!1,error:`${f.issueKey} has nothing new since the last implementation \u2014 add a comment describing what should change, then hit Implement again. Re-running with the same ticket would just rebuild the same thing.`});return}await b.editLabels(f.issueKey,{remove:["agent-implemented"]})}f.removeLabel.trim()&&await b.editLabels(f.issueKey,{remove:[f.removeLabel.trim()]}),f.comment.trim()&&await C.jira.addTriggerComment(f.issueKey,`${f.comment.trim()}`+(!C.authored&&f.requestedBy?`
686
+ ${f.userName||"The user"} says: ${f.message}`+(F?.section??""):`${f.userName||"The user"} says: ${f.message}`+(F?.section??""),M=0,J;try{J=await Ne.run({repoPath:m.repoPath,prompt:re,timeoutSeconds:180,bin:r.claudeBin,mode:"read_only",maxTurns:25,model:f.model||"claude-sonnet-5",sessionId:b,resume:!A,onLog:(Ze,ve)=>{Ze==="agent"&&k.send({type:"chat.stream",requestId:f.requestId,seq:M++,text:ve.slice(0,8e3)})}})}finally{F&&yt.default.rmSync(F.dir,{recursive:!0,force:!0})}J.ok&&uc(f.projectId,b,f.message,J.resultText),k.sendChatTurnResult(f.requestId,{ok:J.ok,sessionId:b,reply:J.resultText,error:J.ok?void 0:J.error??"the agent produced no reply"})},onChatList:f=>{k.sendChatListResult(f.requestId,lc(f.projectId))},onChatLoad:f=>{let m=Mo(f.sessionId);k.sendChatLoadResult(f.requestId,{ok:m!==null,projectId:m?.projectId??"",messages:m?.messages??[],error:m?void 0:"chat not found on this runner (pruned or never existed)"})},onBoardFetch:async f=>{let m=T(f.projectId);if(!m){k.sendBoardFetchResult(f.requestId,{ok:!1,columns:[],error:"this runner has no local checkout mapped for that project"});return}try{let b=s(m.project.repoName),A;try{A=await b.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{A=await b.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let N=await b.boardColumns(m.project.jiraProjectKey),F;if(N){F=N.map(M=>({name:M.name,issues:[]}));let re=new Map;for(let M of A){let J=N.findIndex(ve=>ve.statusIds.includes(M.statusId)),Ze={key:M.key,summary:M.summary,labels:M.labels};if(J>=0)F[J].issues.push(Ze);else{let ve=re.get(M.status)??[];ve.push(Ze),re.set(M.status,ve)}}for(let[M,J]of re)F.push({name:M,issues:J})}else{let re=he=>he.trim().toLowerCase(),M=new Map,J=new Map;for(let he of A){let vt=re(he.status);M.has(vt)||M.set(vt,he.status.trim());let fa=J.get(vt)??[];fa.push({key:he.key,summary:he.summary,labels:he.labels}),J.set(vt,fa)}let Ze=[];try{Ze=await b.projectStatuses(m.project.jiraProjectKey)}catch{}let ve=[];for(let he of Ze){let vt=re(he);!ve.includes(vt)&&J.has(vt)&&ve.push(vt)}for(let he of J.keys())ve.includes(he)||ve.push(he);F=ve.map(he=>({name:M.get(he)??he,issues:J.get(he)??[]}))}let L=r.repos[m.project.repoName]?.jira??r.jira;k.sendBoardFetchResult(f.requestId,{ok:!0,browseBaseUrl:(L?.baseUrl??"").replace(/\/+$/,""),columns:F})}catch(b){k.sendBoardFetchResult(f.requestId,{ok:!1,columns:[],error:b instanceof Error?b.message:String(b)})}},onBoardTrigger:async f=>{let m=T(f.projectId);if(!m){k.sendBoardTriggerResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=s(m.project.repoName),A=f.comment.trim()?o(m.project.repoName,f.requestedByEmail):{jira:b,authored:!1};if(A.error!==void 0){k.sendBoardTriggerResult(f.requestId,{ok:!1,error:A.error});return}if(f.reimplement){let N=await b.getIssue(f.issueKey),F=N.comments.filter(M=>Je(M.body)),L=F.length?Math.max(...F.map(M=>new Date(M.created).getTime())):0;if(!N.comments.some(M=>!Je(M.body)&&new Date(M.created).getTime()>L)){k.sendBoardTriggerResult(f.requestId,{ok:!1,error:`${f.issueKey} has nothing new since the last implementation \u2014 add a comment describing what should change, then hit Implement again. Re-running with the same ticket would just rebuild the same thing.`});return}await b.editLabels(f.issueKey,{remove:["agent-implemented"]})}f.removeLabel.trim()&&await b.editLabels(f.issueKey,{remove:[f.removeLabel.trim()]}),f.comment.trim()&&await A.jira.addTriggerComment(f.issueKey,`${f.comment.trim()}`+(!A.authored&&f.requestedBy?`
687
687
 
688
- _(requested by ${f.requestedBy} via Allwright)_`:"")),g.info(`Board action on ${f.issueKey}`+(f.comment?` comment "${f.comment.trim()}"`:"")+(f.removeLabel?` -label ${f.removeLabel}`:"")+(f.requestedBy?` by ${f.requestedBy}`:"")),_.sendBoardTriggerResult(f.requestId,{ok:!0})}catch(b){_.sendBoardTriggerResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onChatCreateTicket:async f=>{let m=S(f.projectId);if(!m){_.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:"this runner has no local checkout mapped for that project"});return}try{let b=i(m.project.repoName,f.requestedByEmail);if(b.error!==void 0){_.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:b.error});return}let C=`
688
+ _(requested by ${f.requestedBy} via Allwright)_`:"")),g.info(`Board action on ${f.issueKey}`+(f.comment?` comment "${f.comment.trim()}"`:"")+(f.removeLabel?` -label ${f.removeLabel}`:"")+(f.requestedBy?` by ${f.requestedBy}`:"")),k.sendBoardTriggerResult(f.requestId,{ok:!0})}catch(b){k.sendBoardTriggerResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onChatCreateTicket:async f=>{let m=T(f.projectId);if(!m){k.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:"this runner has no local checkout mapped for that project"});return}try{let b=o(m.project.repoName,f.requestedByEmail);if(b.error!==void 0){k.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:b.error});return}let A=`
689
689
 
690
690
  ---
691
- _Created via Allwright Compose`+(!b.authored&&f.requestedBy?` by ${f.requestedBy}`:"")+", drafted with the project agent._",{key:P}=await b.jira.createIssue(m.project.jiraProjectKey,f.summary,(f.description||"(no description)")+C,f.asEpic?"Epic":"Task");f.files.length&&await b.jira.addAttachments(P,f.files.map(B=>({name:B.name,content:Buffer.from(B.contentBase64,"base64")}))).then(()=>g.info(`Compose attached ${f.files.length} file(s) to ${P}`)).catch(B=>g.warn(`Compose could not attach files to ${P}: ${B instanceof Error?B.message:B}`));let U=[];if(f.asEpic){for(let B of f.children){let J=await b.jira.createIssue(m.project.jiraProjectKey,B.summary,B.description||"(no description)","Task",P);U.push(J.key)}g.info(`Compose created epic ${P} with ${U.length} child ticket(s)`),_.sendChatCreateTicketResult(f.requestId,{ok:!0,issueKey:P,childKeys:U});return}f.triggerComment.trim()&&await b.jira.addTriggerComment(P,`${f.triggerComment.trim()}`+(!b.authored&&f.requestedBy?`
691
+ _Created via Allwright Compose`+(!b.authored&&f.requestedBy?` by ${f.requestedBy}`:"")+", drafted with the project agent._",{key:N}=await b.jira.createIssue(m.project.jiraProjectKey,f.summary,(f.description||"(no description)")+A,f.asEpic?"Epic":"Task");f.files.length&&await b.jira.addAttachments(N,f.files.map(L=>({name:L.name,content:Buffer.from(L.contentBase64,"base64")}))).then(()=>g.info(`Compose attached ${f.files.length} file(s) to ${N}`)).catch(L=>g.warn(`Compose could not attach files to ${N}: ${L instanceof Error?L.message:L}`));let F=[];if(f.asEpic){for(let L of f.children){let re=await b.jira.createIssue(m.project.jiraProjectKey,L.summary,L.description||"(no description)","Task",N);F.push(re.key)}g.info(`Compose created epic ${N} with ${F.length} child ticket(s)`),k.sendChatCreateTicketResult(f.requestId,{ok:!0,issueKey:N,childKeys:F});return}f.triggerComment.trim()&&await b.jira.addTriggerComment(N,`${f.triggerComment.trim()}`+(!b.authored&&f.requestedBy?`
692
692
 
693
- _(requested by ${f.requestedBy} via Allwright)_`:"")),g.info(`Compose created ${P}`+(f.requestedBy?` for ${f.requestedBy}`:"")+(f.triggerComment?` with trigger "${f.triggerComment.trim()}"`:"")),_.sendChatCreateTicketResult(f.requestId,{ok:!0,issueKey:P})}catch(b){_.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:b instanceof Error?b.message:String(b)})}},onAuditStart:async f=>{let m=S(f.projectId);if(!m){_.sendAuditStartResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{g.info(`Audit (${f.role}) starting on ${m.project.repoName}`+(f.scope.kind!=="repo"?` scoped to ${f.scope.kind}:${f.scope.ref}`:""));let b=await tn({projectId:f.projectId,repoPath:m.repoPath,role:f.role,scope:f.scope,model:f.model,claudeBin:r.claudeBin,jira:n(m.project.repoName)});if(!b.ok){_.sendAuditStartResult(f.requestId,{ok:!1,error:b.error});return}_.sendAuditStartResult(f.requestId,{ok:!0,audit:b.audit})}catch(b){_.sendAuditStartResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onAuditList:async f=>{try{_.sendAuditListResult(f.requestId,{ok:!0,audits:Vu(f.projectId)})}catch(m){_.sendAuditListResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async f=>{try{let m=Hu(f.projectId,f.auditId);if(!m){_.sendAuditGetResult(f.requestId,{ok:!1,error:"audit not found on this runner"});return}_.sendAuditGetResult(f.requestId,{ok:!0,audit:m})}catch(m){_.sendAuditGetResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async f=>{try{let m=so(f.projectId,f.auditId,{selected:f.selected,ticketed:f.ticketed,verdicts:f.verdicts,verdictBy:f.verdictBy});if(!m){_.sendAuditReviewResult(f.requestId,{ok:!1,error:"audit not found on this runner"});return}let b=S(f.projectId);if(b&&f.verdicts.length){let C=[];for(let P of f.verdicts){if(P.verdict==="valid"||m.lessonsWritten.includes(P.findingId))continue;let U=m.findings.find(B=>B.id===P.findingId);U&&(ao(b.repoPath,m.role,el(U,P.verdict,P.note,f.verdictBy)),C.push(P.findingId),g.info(`Lesson written (${m.role}): ${P.verdict} \u2014 ${U.title.slice(0,60)}`))}C.length&&(m=so(f.projectId,f.auditId,{markLessonsWritten:C})??m)}_.sendAuditReviewResult(f.requestId,{ok:!0,audit:m})}catch(m){_.sendAuditReviewResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async f=>{let m=S(f.projectId);if(!m){_.sendKnowledgeListResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{_.sendKnowledgeListResult(f.requestId,{ok:!0,files:rl(m.repoPath)})}catch(b){_.sendKnowledgeListResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onKnowledgeSave:async f=>{let m=S(f.projectId);if(!m){_.sendKnowledgeSaveResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{f.append?ao(m.repoPath,f.role,tl(f.content,f.by),f.level):nl(m.repoPath,f.role,f.level,f.source,f.name,f.content),g.info(`Knowledge ${f.append?"taught":"saved"}: ${f.role}/${f.level}/${f.name}`),_.sendKnowledgeSaveResult(f.requestId,{ok:!0})}catch(b){_.sendKnowledgeSaveResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onEpicList:async f=>{let m=S(f.projectId);if(!m){_.sendEpicListResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=n(m.project.repoName);if(f.epicKey){let C=await b.epicChildren(f.epicKey);_.sendEpicListResult(f.requestId,{ok:!0,children:C})}else{let C=await b.searchEpics(m.project.jiraProjectKey);_.sendEpicListResult(f.requestId,{ok:!0,epics:C})}}catch(b){_.sendEpicListResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onEpicSuggest:async f=>{let m=S(f.projectId);if(!m){_.sendEpicSuggestResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=n(m.project.repoName),C=await b.epicChildren(f.epicKey),P=Pu(C);if(!P.length){_.sendEpicSuggestResult(f.requestId,{ok:!1,error:`every child of ${f.epicKey} is already done or in an agent's hands \u2014 nothing to sequence`});return}if(P.length===1){_.sendEpicSuggestResult(f.requestId,{ok:!0,issueKey:P[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let U=await Promise.all(P.slice(0,12).map(async V=>{try{let ge=await b.getIssue(V.key);return{...V,description:ge.description}}catch{return{...V,description:""}}})),B=(await b.getIssue(f.epicKey).catch(()=>null))?.summary??"";g.info(`Epic suggest: weighing ${U.length} pending children of ${f.epicKey}`);let J=await Oe.run({repoPath:m.repoPath,prompt:ju(f.epicKey,B,U),timeoutSeconds:150,bin:r.claudeBin,mode:"read_only",maxTurns:20,sessionId:(0,oi.randomUUID)(),model:f.model||"claude-sonnet-5",onLog:()=>{}}),z=Ou(J.resultText,U.map(V=>V.key));if("error"in z){_.sendEpicSuggestResult(f.requestId,{ok:!1,error:z.error});return}g.info(`Epic suggest: ${f.epicKey} -> do ${z.issueKey} first`),_.sendEpicSuggestResult(f.requestId,{ok:!0,issueKey:z.issueKey,reason:z.reason,considered:U.length})}catch(b){_.sendEpicSuggestResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onTeamCreds:async f=>{try{let m=le()??r;if(m.github?.token&&!m.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(lt(),nn));m.github.login=await new C(m.github.token).whoami(),ie(m)}catch{}let b=Cu(m,f.emails);_.sendTeamCredsResult(f.requestId,{ok:!0,...b})}catch(m){_.sendTeamCredsResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async f=>{try{let m=le()??r,{buildSetupReport:b}=await Promise.resolve().then(()=>(pd(),fd)),C=await b(m,f.repoNames);_.sendSetupStatusResult(f.requestId,{ok:!0,...C})}catch(m){_.sendSetupStatusResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async f=>{try{let m=S(f.projectId);if(!m){_.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let b=f.kind==="deploy"?"DEPLOY.md":"CLAUDE.md";g.info(`Setup: drafting ${b} for ${m.project.repoName}`);let B=(await Oe.run({repoPath:m.repoPath,prompt:f.kind==="deploy"?'Inspect this repository (deploy scripts, CI files, server configs, package scripts) and draft the content of a DEPLOY.md deploy contract for its repo root. An automation tool will follow it LITERALLY, so only write what you can verify from the repo. IMPORTANT: you are running ON the machine where deploys will execute \u2014 commands are plain local commands, no ssh wrapper, unless the repo clearly documents a different target machine. For each environment that VERIFIABLY exists: name, branch, exact deploy commands, secrets as $NAMES only (never values), pre/post checks (post-restart checks must wait and retry \u2014 services report active before their port binds). Where you cannot verify something (hosts, service names, ports), write it with a clear "VERIFY:" marker so the human fills it in during review, instead of guessing. State explicitly which environments do NOT exist. Reply with ONLY the file content \u2014 no preamble, no fences around the whole thing.':"Explore this repository and draft the content of a CLAUDE.md file for its repo root \u2014 the memory file AI agents read before working on tickets here. Cover: what the product does (one paragraph), the tech stack, how the code is organized (key directories and what lives in them), exact commands to install dependencies / build / run tests, code conventions worth following, and gotchas a newcomer would trip over. Under 150 lines, factual, no marketing language, nothing you cannot verify from the code. Reply with ONLY the file content \u2014 no preamble, no fences around the whole thing.",timeoutSeconds:240,bin:r.claudeBin,mode:"read_only",maxTurns:40,sessionId:(0,oi.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!B){_.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:"the agent returned no content \u2014 try again"});return}_.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!0,content:B})}catch(m){_.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async f=>{try{let m=S(f.projectId);if(!m){_.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let b=f.kind==="deploy"?"DEPLOY.md":"CLAUDE.md",C=_n.default.join(m.repoPath,b);if(gt.default.existsSync(C)&&!f.overwrite){_.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:`${b} already exists in this checkout`});return}gt.default.writeFileSync(C,f.content.endsWith(`
693
+ _(requested by ${f.requestedBy} via Allwright)_`:"")),g.info(`Compose created ${N}`+(f.requestedBy?` for ${f.requestedBy}`:"")+(f.triggerComment?` with trigger "${f.triggerComment.trim()}"`:"")),k.sendChatCreateTicketResult(f.requestId,{ok:!0,issueKey:N})}catch(b){k.sendChatCreateTicketResult(f.requestId,{ok:!1,issueKey:"",error:b instanceof Error?b.message:String(b)})}},onAuditStart:async f=>{let m=T(f.projectId);if(!m){k.sendAuditStartResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{g.info(`Audit (${f.role}) starting on ${m.project.repoName}`+(f.scope.kind!=="repo"?` scoped to ${f.scope.kind}:${f.scope.ref}`:""));let b=await sn({projectId:f.projectId,repoPath:m.repoPath,role:f.role,scope:f.scope,model:f.model,claudeBin:r.claudeBin,jira:s(m.project.repoName)});if(!b.ok){k.sendAuditStartResult(f.requestId,{ok:!1,error:b.error});return}k.sendAuditStartResult(f.requestId,{ok:!0,audit:b.audit})}catch(b){k.sendAuditStartResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onAuditList:async f=>{try{k.sendAuditListResult(f.requestId,{ok:!0,audits:el(f.projectId)})}catch(m){k.sendAuditListResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async f=>{try{let m=rl(f.projectId,f.auditId);if(!m){k.sendAuditGetResult(f.requestId,{ok:!1,error:"audit not found on this runner"});return}k.sendAuditGetResult(f.requestId,{ok:!0,audit:m})}catch(m){k.sendAuditGetResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async f=>{try{let m=ho(f.projectId,f.auditId,{selected:f.selected,ticketed:f.ticketed,verdicts:f.verdicts,verdictBy:f.verdictBy});if(!m){k.sendAuditReviewResult(f.requestId,{ok:!1,error:"audit not found on this runner"});return}let b=T(f.projectId);if(b&&f.verdicts.length){let A=[];for(let N of f.verdicts){if(N.verdict==="valid"||m.lessonsWritten.includes(N.findingId))continue;let F=m.findings.find(L=>L.id===N.findingId);F&&(mo(b.repoPath,m.role,ul(F,N.verdict,N.note,f.verdictBy)),A.push(N.findingId),g.info(`Lesson written (${m.role}): ${N.verdict} \u2014 ${F.title.slice(0,60)}`))}A.length&&(m=ho(f.projectId,f.auditId,{markLessonsWritten:A})??m)}k.sendAuditReviewResult(f.requestId,{ok:!0,audit:m})}catch(m){k.sendAuditReviewResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async f=>{let m=T(f.projectId);if(!m){k.sendKnowledgeListResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{k.sendKnowledgeListResult(f.requestId,{ok:!0,files:cl(m.repoPath)})}catch(b){k.sendKnowledgeListResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onKnowledgeSave:async f=>{let m=T(f.projectId);if(!m){k.sendKnowledgeSaveResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{f.append?mo(m.repoPath,f.role,ll(f.content,f.by),f.level):dl(m.repoPath,f.role,f.level,f.source,f.name,f.content),g.info(`Knowledge ${f.append?"taught":"saved"}: ${f.role}/${f.level}/${f.name}`),k.sendKnowledgeSaveResult(f.requestId,{ok:!0})}catch(b){k.sendKnowledgeSaveResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onEpicList:async f=>{let m=T(f.projectId);if(!m){k.sendEpicListResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=s(m.project.repoName);if(f.epicKey){let A=await b.epicChildren(f.epicKey);k.sendEpicListResult(f.requestId,{ok:!0,children:A})}else{let A=await b.searchEpics(m.project.jiraProjectKey);k.sendEpicListResult(f.requestId,{ok:!0,epics:A})}}catch(b){k.sendEpicListResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onEpicSuggest:async f=>{let m=T(f.projectId);if(!m){k.sendEpicSuggestResult(f.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let b=s(m.project.repoName),A=await b.epicChildren(f.epicKey),N=Uu(A);if(!N.length){k.sendEpicSuggestResult(f.requestId,{ok:!1,error:`every child of ${f.epicKey} is already done or in an agent's hands \u2014 nothing to sequence`});return}if(N.length===1){k.sendEpicSuggestResult(f.requestId,{ok:!0,issueKey:N[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let F=await Promise.all(N.slice(0,12).map(async J=>{try{let Ze=await b.getIssue(J.key);return{...J,description:Ze.description}}catch{return{...J,description:""}}})),L=(await b.getIssue(f.epicKey).catch(()=>null))?.summary??"";g.info(`Epic suggest: weighing ${F.length} pending children of ${f.epicKey}`);let re=await Ne.run({repoPath:m.repoPath,prompt:qu(f.epicKey,L,F),timeoutSeconds:150,bin:r.claudeBin,mode:"read_only",maxTurns:20,sessionId:(0,di.randomUUID)(),model:f.model||"claude-sonnet-5",onLog:()=>{}}),M=Bu(re.resultText,F.map(J=>J.key));if("error"in M){k.sendEpicSuggestResult(f.requestId,{ok:!1,error:M.error});return}g.info(`Epic suggest: ${f.epicKey} -> do ${M.issueKey} first`),k.sendEpicSuggestResult(f.requestId,{ok:!0,issueKey:M.issueKey,reason:M.reason,considered:F.length})}catch(b){k.sendEpicSuggestResult(f.requestId,{ok:!1,error:b instanceof Error?b.message:String(b)})}},onTeamCreds:async f=>{try{let m=ce()??r;if(m.github?.token&&!m.github.login)try{let{GitHubClient:A}=await Promise.resolve().then(()=>(ct(),an));m.github.login=await new A(m.github.token).whoami(),oe(m)}catch{}let b=Ou(m,f.emails);k.sendTeamCredsResult(f.requestId,{ok:!0,...b})}catch(m){k.sendTeamCredsResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async f=>{try{let m=ce()??r,{buildSetupReport:b}=await Promise.resolve().then(()=>(kd(),wd)),A=await b(m,f.repoNames);k.sendSetupStatusResult(f.requestId,{ok:!0,...A})}catch(m){k.sendSetupStatusResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async f=>{try{let m=T(f.projectId);if(!m){k.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let b=f.kind==="deploy"?"DEPLOY.md":"CLAUDE.md";g.info(`Setup: drafting ${b} for ${m.project.repoName}`);let L=(await Ne.run({repoPath:m.repoPath,prompt:f.kind==="deploy"?'Inspect this repository (deploy scripts, CI files, server configs, package scripts) and draft the content of a DEPLOY.md deploy contract for its repo root. An automation tool will follow it LITERALLY, so only write what you can verify from the repo. IMPORTANT: you are running ON the machine where deploys will execute \u2014 commands are plain local commands, no ssh wrapper, unless the repo clearly documents a different target machine. For each environment that VERIFIABLY exists: name, branch, exact deploy commands, secrets as $NAMES only (never values), pre/post checks (post-restart checks must wait and retry \u2014 services report active before their port binds). Where you cannot verify something (hosts, service names, ports), write it with a clear "VERIFY:" marker so the human fills it in during review, instead of guessing. State explicitly which environments do NOT exist. Reply with ONLY the file content \u2014 no preamble, no fences around the whole thing.':"Explore this repository and draft the content of a CLAUDE.md file for its repo root \u2014 the memory file AI agents read before working on tickets here. Cover: what the product does (one paragraph), the tech stack, how the code is organized (key directories and what lives in them), exact commands to install dependencies / build / run tests, code conventions worth following, and gotchas a newcomer would trip over. Under 150 lines, factual, no marketing language, nothing you cannot verify from the code. Reply with ONLY the file content \u2014 no preamble, no fences around the whole thing.",timeoutSeconds:240,bin:r.claudeBin,mode:"read_only",maxTurns:40,sessionId:(0,di.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!L){k.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:"the agent returned no content \u2014 try again"});return}k.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!0,content:L})}catch(m){k.sendSetupClaudeMdGenerateResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async f=>{try{let m=T(f.projectId);if(!m){k.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let b=f.kind==="deploy"?"DEPLOY.md":"CLAUDE.md",A=kn.default.join(m.repoPath,b);if(yt.default.existsSync(A)&&!f.overwrite){k.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:`${b} already exists in this checkout`});return}yt.default.writeFileSync(A,f.content.endsWith(`
694
694
  `)?f.content:f.content+`
695
- `),g.info(`Setup: wrote human-approved CLAUDE.md to ${C}`);let P="",U=B=>new Promise((J,z)=>{(0,Nt.execFile)("git",["-C",m.repoPath,...B],{timeout:12e4},(V,ge,ye)=>V?z(new Error(ye||V.message)):J())});try{await U(["add",b]),await U(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",`Add ${b} (agent-drafted, human-approved via Allwright)`]);try{await U(["push"]),P="committed and pushed to the repo"}catch(B){P="committed locally, but push failed: "+(B instanceof Error?B.message.slice(0,200):"unknown")+" \u2014 push it from the server when convenient"}}catch(B){P="file written, but commit failed: "+(B instanceof Error?B.message.slice(0,200):"unknown")+" \u2014 commit it from the server when convenient"}_.sendSetupClaudeMdSaveResult(f.requestId,{ok:!0,note:P})}catch(m){_.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async f=>{if(!process.env.INVOCATION_ID){_.sendRunnerUpdateResult(f.requestId,{ok:!1,error:"this runner is not running as a systemd service, so it cannot restart itself after updating. On the machine run: allwright update && allwright stop && allwright start"});return}if(d&&d.busyCount>0){_.sendRunnerUpdateResult(f.requestId,{ok:!1,error:`a run is executing on this machine right now (${d.busyCount} active) \u2014 try again when it finishes`});return}g.info("Update requested from the dashboard \u2014 installing allwright@latest");let m=_n.default.dirname(process.execPath),b=gt.default.existsSync(_n.default.join(m,"npm"))?_n.default.join(m,"npm"):"npm";(0,Nt.execFile)(b,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${m}:${process.env.PATH??""}`}},(C,P,U)=>{if(C){_.sendRunnerUpdateResult(f.requestId,{ok:!1,error:`npm install failed: ${(U||C.message).slice(0,300)} \u2014 on the machine run: allwright update && sudo systemctl restart allwright`});return}_.sendRunnerUpdateResult(f.requestId,{ok:!0,note:"updated \u2014 restarting now, back in a few seconds"}),g.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})},onJiraUsers:async f=>{try{let m=await e.searchUsers(f.query);_.sendJiraUsersResult(f.requestId,{ok:!0,users:m})}catch(m){_.sendJiraUsersResult(f.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});p.transport=_,d=new Fs(r,n,_);let O=Object.values(an()).filter(f=>f.kind==="implement").map(f=>f.repoPath);Ki(Object.values(r.repos).map(f=>f.path),O).catch(()=>{}),_.start(),d.start();let q=()=>{g.info("shutting down"),d.stop(),_.stop(),Ua(process.pid),process.exit(0)};process.on("SIGINT",q),process.on("SIGTERM",q)}ae.command("start").description("Start watching Jira. Runs in the background by default \u2014 close this terminal and it keeps going until you run `allwright stop`. Use --foreground to keep it attached (e.g. under systemd).").option("--foreground","run in this terminal instead of detaching to the background").action(async r=>{let e=Q();if(r.foreground){cy(e);return}let t=Fr();if(t&&Cn(t)){g.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=Da(),s=(0,Nt.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",n,n]});s.unref(),za(s.pid),g.info(`Runner started in the background (pid ${s.pid}).`),g.info(`Logs: ${fs()}`),g.info("It will keep polling Jira until you run `allwright stop` \u2014 closing this terminal is fine.")});ae.command("stop").description("Stop the background runner started by `start`").action(()=>{let r=Fr();if(!r||!Cn(r)){g.info("no background runner is running"),r&&gt.default.rmSync(xn(),{force:!0});return}process.kill(r,"SIGTERM"),g.info(`stop signal sent (pid ${r})`)});ae.command("status").description("Check whether the background runner is running").action(()=>{let r=Fr();r&&Cn(r)?g.info(`running in the background (pid ${r})`):g.info("not running")});ae.parseAsync().catch(r=>{g.error(r instanceof Error?r.message:String(r)),process.exit(1)});
695
+ `),g.info(`Setup: wrote human-approved CLAUDE.md to ${A}`);let N="",F=L=>new Promise((re,M)=>{(0,Mt.execFile)("git",["-C",m.repoPath,...L],{timeout:12e4},(J,Ze,ve)=>J?M(new Error(ve||J.message)):re())});try{await F(["add",b]),await F(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",`Add ${b} (agent-drafted, human-approved via Allwright)`]);try{await F(["push"]),N="committed and pushed to the repo"}catch(L){N="committed locally, but push failed: "+(L instanceof Error?L.message.slice(0,200):"unknown")+" \u2014 push it from the server when convenient"}}catch(L){N="file written, but commit failed: "+(L instanceof Error?L.message.slice(0,200):"unknown")+" \u2014 commit it from the server when convenient"}k.sendSetupClaudeMdSaveResult(f.requestId,{ok:!0,note:N})}catch(m){k.sendSetupClaudeMdSaveResult(f.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async f=>{if(!process.env.INVOCATION_ID){k.sendRunnerUpdateResult(f.requestId,{ok:!1,error:"this runner is not running as a systemd service, so it cannot restart itself after updating. On the machine run: allwright update && allwright stop && allwright start"});return}if(p&&p.busyCount>0){k.sendRunnerUpdateResult(f.requestId,{ok:!1,error:`a run is executing on this machine right now (${p.busyCount} active) \u2014 try again when it finishes`});return}g.info("Update requested from the dashboard \u2014 installing allwright@latest");let m=kn.default.dirname(process.execPath),b=yt.default.existsSync(kn.default.join(m,"npm"))?kn.default.join(m,"npm"):"npm";(0,Mt.execFile)(b,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${m}:${process.env.PATH??""}`}},(A,N,F)=>{if(A){k.sendRunnerUpdateResult(f.requestId,{ok:!1,error:`npm install failed: ${(F||A.message).slice(0,300)} \u2014 on the machine run: allwright update && sudo systemctl restart allwright`});return}k.sendRunnerUpdateResult(f.requestId,{ok:!0,note:"updated \u2014 restarting now, back in a few seconds"}),g.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})},onJiraUsers:async f=>{try{let m=await t.searchUsers(f.query);k.sendJiraUsersResult(f.requestId,{ok:!0,users:m})}catch(m){k.sendJiraUsersResult(f.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});_.transport=k,p=new Hs(r,s,k);let B=Object.values(cn()).filter(f=>f.kind==="implement").map(f=>f.repoPath);Yi(Object.values(r.repos).map(f=>f.path),B).catch(()=>{}),k.start(),p.start();let q=()=>{g.info("shutting down"),p.stop(),k.stop(),Ga(process.pid),Ni(),process.exit(0)};process.on("SIGINT",q),process.on("SIGTERM",q)}ue.command("start").description("Start watching Jira. Runs in the background by default \u2014 close this terminal and it keeps going until you run `allwright stop`. Use --foreground to keep it attached (e.g. under systemd).").option("--foreground","run in this terminal instead of detaching to the background").action(async r=>{let e=ee();if(r.foreground){vy(e);return}let t=Kr();if(t&&Vr(t)){g.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=An();if(n){g.info(`a runner is already running on this machine (pid ${n}) \u2014 most likely the systemd service. One machine runs ONE runner; nothing to do. (Service controls: sudo systemctl status|stop|restart allwright)`);return}let s=Ka(),i=(0,Mt.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),Va(i.pid),g.info(`Runner started in the background (pid ${i.pid}).`),g.info(`Logs: ${ys()}`),g.info("It will keep polling Jira until you run `allwright stop` \u2014 closing this terminal is fine.")});ue.command("stop").description("Stop the background runner started by `start`").action(()=>{let r=Kr();if(!r||!Vr(r)){g.info("no background runner is running"),r&&yt.default.rmSync(In(),{force:!0});return}process.kill(r,"SIGTERM"),g.info(`stop signal sent (pid ${r})`)});ue.command("status").description("Check whether the background runner is running").action(()=>{let r=Kr();r&&Vr(r)?g.info(`running in the background (pid ${r})`):g.info("not running")});ue.parseAsync().catch(r=>{g.error(r instanceof Error?r.message:String(r)),process.exit(1)});