allwright 1.35.0 → 1.36.0

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 +97 -89
  2. package/package.json +1 -1
package/bin/allwright.js CHANGED
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var _f=Object.create;var go=Object.defineProperty;var kf=Object.getOwnPropertyDescriptor;var Sf=Object.getOwnPropertyNames;var Tf=Object.getPrototypeOf,xf=Object.prototype.hasOwnProperty;var Vs=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var re=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},Ws=(t,e)=>{for(var n in e)go(t,n,{get:e[n],enumerable:!0})},Cf=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Sf(e))!xf.call(t,s)&&s!==n&&go(t,s,{get:()=>e[s],enumerable:!(r=kf(e,s))||r.enumerable});return t};var I=(t,e,n)=>(n=t!=null?_f(Tf(t)):{},Cf(e||!t||!t.__esModule?go(n,"default",{value:t,enumerable:!0}):n,t));var ps=re(bo=>{var Js=class extends Error{constructor(e,n,r){super(r),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=n,this.exitCode=e,this.nestedError=void 0}},yo=class extends Js{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};bo.CommanderError=Js;bo.InvalidArgumentError=yo});var Ys=re(wo=>{var{InvalidArgumentError:If}=ps(),vo=class{constructor(e,n){switch(this.description=n||"",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,n){return n===this.defaultValue||!Array.isArray(n)?[e]:n.concat(e)}default(e,n){return this.defaultValue=e,this.defaultValueDescription=n,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(n,r)=>{if(!this.argChoices.includes(n))throw new If(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(n,r):n},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Rf(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}wo.Argument=vo;wo.humanReadableArgName=Rf});var ko=re(Al=>{var{humanReadableArgName:Ef}=Ys(),_o=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let n=e.commands.filter(s=>!s._hidden),r=e._getHelpCommand();return r&&!r._hidden&&n.push(r),this.sortSubcommands&&n.sort((s,i)=>s.name().localeCompare(i.name())),n}compareOptions(e,n){let r=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return r(e).localeCompare(r(n))}visibleOptions(e){let n=e.options.filter(s=>!s.hidden),r=e._getHelpOption();if(r&&!r.hidden){let s=r.short&&e._findOption(r.short),i=r.long&&e._findOption(r.long);!s&&!i?n.push(r):r.long&&!i?n.push(e.createOption(r.long,r.description)):r.short&&!s&&n.push(e.createOption(r.short,r.description))}return this.sortOptions&&n.sort(this.compareOptions),n}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let n=[];for(let r=e.parent;r;r=r.parent){let s=r.options.filter(i=>!i.hidden);n.push(...s)}return this.sortOptions&&n.sort(this.compareOptions),n}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(n=>{n.description=n.description||e._argsDescription[n.name()]||""}),e.registeredArguments.find(n=>n.description)?e.registeredArguments:[]}subcommandTerm(e){let n=e.registeredArguments.map(r=>Ef(r)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(n?" "+n:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,n){return n.visibleCommands(e).reduce((r,s)=>Math.max(r,n.subcommandTerm(s).length),0)}longestOptionTermLength(e,n){return n.visibleOptions(e).reduce((r,s)=>Math.max(r,n.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,n){return n.visibleGlobalOptions(e).reduce((r,s)=>Math.max(r,n.optionTerm(s).length),0)}longestArgumentTermLength(e,n){return n.visibleArguments(e).reduce((r,s)=>Math.max(r,n.argumentTerm(s).length),0)}commandUsage(e){let n=e._name;e._aliases[0]&&(n=n+"|"+e._aliases[0]);let r="";for(let s=e.parent;s;s=s.parent)r=s.name()+" "+r;return r+n+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let n=[];return e.argChoices&&n.push(`choices: ${e.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&n.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&n.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&n.push(`env: ${e.envVar}`),n.length>0?`${e.description} (${n.join(", ")})`:e.description}argumentDescription(e){let n=[];if(e.argChoices&&n.push(`choices: ${e.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),e.defaultValue!==void 0&&n.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),n.length>0){let r=`(${n.join(", ")})`;return e.description?`${e.description} ${r}`:r}return e.description}formatHelp(e,n){let r=n.padWidth(e,n),s=n.helpWidth||80,i=2,o=2;function l(S,x){if(x){let A=`${S.padEnd(r+o)}${x}`;return n.wrap(A,s-i,r+o)}return S}function c(S){return S.join(`
2
+ "use strict";var _f=Object.create;var go=Object.defineProperty;var kf=Object.getOwnPropertyDescriptor;var Sf=Object.getOwnPropertyNames;var Tf=Object.getPrototypeOf,xf=Object.prototype.hasOwnProperty;var Vs=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var re=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},Ws=(t,e)=>{for(var n in e)go(t,n,{get:e[n],enumerable:!0})},Cf=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Sf(e))!xf.call(t,s)&&s!==n&&go(t,s,{get:()=>e[s],enumerable:!(r=kf(e,s))||r.enumerable});return t};var I=(t,e,n)=>(n=t!=null?_f(Tf(t)):{},Cf(e||!t||!t.__esModule?go(n,"default",{value:t,enumerable:!0}):n,t));var ps=re(bo=>{var Js=class extends Error{constructor(e,n,r){super(r),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=n,this.exitCode=e,this.nestedError=void 0}},yo=class extends Js{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};bo.CommanderError=Js;bo.InvalidArgumentError=yo});var Ys=re(wo=>{var{InvalidArgumentError:If}=ps(),vo=class{constructor(e,n){switch(this.description=n||"",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,n){return n===this.defaultValue||!Array.isArray(n)?[e]:n.concat(e)}default(e,n){return this.defaultValue=e,this.defaultValueDescription=n,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(n,r)=>{if(!this.argChoices.includes(n))throw new If(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(n,r):n},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Ef(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}wo.Argument=vo;wo.humanReadableArgName=Ef});var ko=re(Rl=>{var{humanReadableArgName:Af}=Ys(),_o=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let n=e.commands.filter(s=>!s._hidden),r=e._getHelpCommand();return r&&!r._hidden&&n.push(r),this.sortSubcommands&&n.sort((s,i)=>s.name().localeCompare(i.name())),n}compareOptions(e,n){let r=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return r(e).localeCompare(r(n))}visibleOptions(e){let n=e.options.filter(s=>!s.hidden),r=e._getHelpOption();if(r&&!r.hidden){let s=r.short&&e._findOption(r.short),i=r.long&&e._findOption(r.long);!s&&!i?n.push(r):r.long&&!i?n.push(e.createOption(r.long,r.description)):r.short&&!s&&n.push(e.createOption(r.short,r.description))}return this.sortOptions&&n.sort(this.compareOptions),n}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let n=[];for(let r=e.parent;r;r=r.parent){let s=r.options.filter(i=>!i.hidden);n.push(...s)}return this.sortOptions&&n.sort(this.compareOptions),n}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(n=>{n.description=n.description||e._argsDescription[n.name()]||""}),e.registeredArguments.find(n=>n.description)?e.registeredArguments:[]}subcommandTerm(e){let n=e.registeredArguments.map(r=>Af(r)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(n?" "+n:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,n){return n.visibleCommands(e).reduce((r,s)=>Math.max(r,n.subcommandTerm(s).length),0)}longestOptionTermLength(e,n){return n.visibleOptions(e).reduce((r,s)=>Math.max(r,n.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,n){return n.visibleGlobalOptions(e).reduce((r,s)=>Math.max(r,n.optionTerm(s).length),0)}longestArgumentTermLength(e,n){return n.visibleArguments(e).reduce((r,s)=>Math.max(r,n.argumentTerm(s).length),0)}commandUsage(e){let n=e._name;e._aliases[0]&&(n=n+"|"+e._aliases[0]);let r="";for(let s=e.parent;s;s=s.parent)r=s.name()+" "+r;return r+n+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let n=[];return e.argChoices&&n.push(`choices: ${e.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&n.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&n.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&n.push(`env: ${e.envVar}`),n.length>0?`${e.description} (${n.join(", ")})`:e.description}argumentDescription(e){let n=[];if(e.argChoices&&n.push(`choices: ${e.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),e.defaultValue!==void 0&&n.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),n.length>0){let r=`(${n.join(", ")})`;return e.description?`${e.description} ${r}`:r}return e.description}formatHelp(e,n){let r=n.padWidth(e,n),s=n.helpWidth||80,i=2,o=2;function l(S,x){if(x){let R=`${S.padEnd(r+o)}${x}`;return n.wrap(R,s-i,r+o)}return S}function c(S){return S.join(`
3
3
  `).replace(/^/gm," ".repeat(i))}let u=[`Usage: ${n.commandUsage(e)}`,""],f=n.commandDescription(e);f.length>0&&(u=u.concat([n.wrap(f,s,0),""]));let p=n.visibleArguments(e).map(S=>l(n.argumentTerm(S),n.argumentDescription(S)));p.length>0&&(u=u.concat(["Arguments:",c(p),""]));let b=n.visibleOptions(e).map(S=>l(n.optionTerm(S),n.optionDescription(S)));if(b.length>0&&(u=u.concat(["Options:",c(b),""])),this.showGlobalOptions){let S=n.visibleGlobalOptions(e).map(x=>l(n.optionTerm(x),n.optionDescription(x)));S.length>0&&(u=u.concat(["Global Options:",c(S),""]))}let w=n.visibleCommands(e).map(S=>l(n.subcommandTerm(S),n.subcommandDescription(S)));return w.length>0&&(u=u.concat(["Commands:",c(w),""])),u.join(`
4
4
  `)}padWidth(e,n){return Math.max(n.longestOptionTermLength(e,n),n.longestGlobalOptionTermLength(e,n),n.longestSubcommandTermLength(e,n),n.longestArgumentTermLength(e,n))}wrap(e,n,r,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 l=n-r;if(l<s)return e;let c=e.slice(0,r),u=e.slice(r).replace(`\r
5
5
  `,`
6
6
  `),f=" ".repeat(r),b="\\s\u200B",w=new RegExp(`
7
- |.{1,${l-1}}([${b}]|$)|[^${b}]+?([${b}]|$)`,"g"),S=u.match(w)||[];return c+S.map((x,A)=>x===`
8
- `?"":(A>0?f:"")+x.trimEnd()).join(`
9
- `)}};Al.Help=_o});var Co=re(xo=>{var{InvalidArgumentError:Af}=ps(),So=class{constructor(e,n){this.flags=e,this.description=n||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let r=Pf(e);this.short=r.shortFlag,this.long=r.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,n){return this.defaultValue=e,this.defaultValueDescription=n,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let n=e;return typeof e=="string"&&(n={[e]:!0}),this.implied=Object.assign(this.implied||{},n),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,n){return n===this.defaultValue||!Array.isArray(n)?[e]:n.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(n,r)=>{if(!this.argChoices.includes(n))throw new Af(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(n,r):n},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return $f(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},To=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(n=>{n.negate?this.negativeOptions.set(n.attributeName(),n):this.positiveOptions.set(n.attributeName(),n)}),this.negativeOptions.forEach((n,r)=>{this.positiveOptions.has(r)&&this.dualOptions.add(r)})}valueFromOption(e,n){let r=n.attributeName();if(!this.dualOptions.has(r))return!0;let s=this.negativeOptions.get(r).presetArg,i=s!==void 0?s:!1;return n.negate===(i===e)}};function $f(t){return t.split("-").reduce((e,n)=>e+n[0].toUpperCase()+n.slice(1))}function Pf(t){let e,n,r=t.split(/[ |,]+/);return r.length>1&&!/^[[<]/.test(r[1])&&(e=r.shift()),n=r.shift(),!e&&/^-[^-]$/.test(n)&&(e=n,n=void 0),{shortFlag:e,longFlag:n}}xo.Option=So;xo.DualOptions=To});var Pl=re($l=>{function jf(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);let n=[];for(let r=0;r<=t.length;r++)n[r]=[r];for(let r=0;r<=e.length;r++)n[0][r]=r;for(let r=1;r<=e.length;r++)for(let s=1;s<=t.length;s++){let i=1;t[s-1]===e[r-1]?i=0:i=1,n[s][r]=Math.min(n[s-1][r]+1,n[s][r-1]+1,n[s-1][r-1]+i),s>1&&r>1&&t[s-1]===e[r-2]&&t[s-2]===e[r-1]&&(n[s][r]=Math.min(n[s][r],n[s-2][r-2]+1))}return n[t.length][e.length]}function Of(t,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let n=t.startsWith("--");n&&(t=t.slice(2),e=e.map(o=>o.slice(2)));let r=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let l=jf(t,o),c=Math.max(t.length,o.length);(c-l)/c>i&&(l<s?(s=l,r=[o]):l===s&&r.push(o))}),r.sort((o,l)=>o.localeCompare(l)),n&&(r=r.map(o=>`--${o}`)),r.length>1?`
7
+ |.{1,${l-1}}([${b}]|$)|[^${b}]+?([${b}]|$)`,"g"),S=u.match(w)||[];return c+S.map((x,R)=>x===`
8
+ `?"":(R>0?f:"")+x.trimEnd()).join(`
9
+ `)}};Rl.Help=_o});var Co=re(xo=>{var{InvalidArgumentError:Rf}=ps(),So=class{constructor(e,n){this.flags=e,this.description=n||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let r=Pf(e);this.short=r.shortFlag,this.long=r.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,n){return this.defaultValue=e,this.defaultValueDescription=n,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let n=e;return typeof e=="string"&&(n={[e]:!0}),this.implied=Object.assign(this.implied||{},n),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,n){return n===this.defaultValue||!Array.isArray(n)?[e]:n.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(n,r)=>{if(!this.argChoices.includes(n))throw new Rf(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(n,r):n},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return $f(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},To=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(n=>{n.negate?this.negativeOptions.set(n.attributeName(),n):this.positiveOptions.set(n.attributeName(),n)}),this.negativeOptions.forEach((n,r)=>{this.positiveOptions.has(r)&&this.dualOptions.add(r)})}valueFromOption(e,n){let r=n.attributeName();if(!this.dualOptions.has(r))return!0;let s=this.negativeOptions.get(r).presetArg,i=s!==void 0?s:!1;return n.negate===(i===e)}};function $f(t){return t.split("-").reduce((e,n)=>e+n[0].toUpperCase()+n.slice(1))}function Pf(t){let e,n,r=t.split(/[ |,]+/);return r.length>1&&!/^[[<]/.test(r[1])&&(e=r.shift()),n=r.shift(),!e&&/^-[^-]$/.test(n)&&(e=n,n=void 0),{shortFlag:e,longFlag:n}}xo.Option=So;xo.DualOptions=To});var Pl=re($l=>{function jf(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);let n=[];for(let r=0;r<=t.length;r++)n[r]=[r];for(let r=0;r<=e.length;r++)n[0][r]=r;for(let r=1;r<=e.length;r++)for(let s=1;s<=t.length;s++){let i=1;t[s-1]===e[r-1]?i=0:i=1,n[s][r]=Math.min(n[s-1][r]+1,n[s][r-1]+1,n[s-1][r-1]+i),s>1&&r>1&&t[s-1]===e[r-2]&&t[s-2]===e[r-1]&&(n[s][r]=Math.min(n[s][r],n[s-2][r-2]+1))}return n[t.length][e.length]}function Of(t,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let n=t.startsWith("--");n&&(t=t.slice(2),e=e.map(o=>o.slice(2)));let r=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let l=jf(t,o),c=Math.max(t.length,o.length);(c-l)/c>i&&(l<s?(s=l,r=[o]):l===s&&r.push(o))}),r.sort((o,l)=>o.localeCompare(l)),n&&(r=r.map(o=>`--${o}`)),r.length>1?`
10
10
  (Did you mean one of ${r.join(", ")}?)`:r.length===1?`
11
- (Did you mean ${r[0]}?)`:""}$l.suggestSimilar=Of});var zl=re(Ml=>{var Nf=require("node:events").EventEmitter,Io=require("node:child_process"),It=require("node:path"),Ro=require("node:fs"),me=require("node:process"),{Argument:Mf,humanReadableArgName:zf}=Ys(),{CommanderError:Eo}=ps(),{Help:Df}=ko(),{Option:jl,DualOptions:Lf}=Co(),{suggestSimilar:Ol}=Pl(),Ao=class t extends Nf{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:n=>me.stdout.write(n),writeErr:n=>me.stderr.write(n),getOutHelpWidth:()=>me.stdout.isTTY?me.stdout.columns:void 0,getErrHelpWidth:()=>me.stderr.isTTY?me.stderr.columns:void 0,outputError:(n,r)=>r(n)},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 n=this;n;n=n.parent)e.push(n);return e}command(e,n,r){let s=n,i=r;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,l]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return s&&(c.description(s),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,l&&c.arguments(l),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),s?this:c}createCommand(e){return new t(e)}createHelp(){return Object.assign(new Df,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,n){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
11
+ (Did you mean ${r[0]}?)`:""}$l.suggestSimilar=Of});var zl=re(Ml=>{var Nf=require("node:events").EventEmitter,Io=require("node:child_process"),It=require("node:path"),Eo=require("node:fs"),me=require("node:process"),{Argument:Mf,humanReadableArgName:zf}=Ys(),{CommanderError:Ao}=ps(),{Help:Df}=ko(),{Option:jl,DualOptions:Lf}=Co(),{suggestSimilar:Ol}=Pl(),Ro=class t extends Nf{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:n=>me.stdout.write(n),writeErr:n=>me.stderr.write(n),getOutHelpWidth:()=>me.stdout.isTTY?me.stdout.columns:void 0,getErrHelpWidth:()=>me.stderr.isTTY?me.stderr.columns:void 0,outputError:(n,r)=>r(n)},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 n=this;n;n=n.parent)e.push(n);return e}command(e,n,r){let s=n,i=r;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,l]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return s&&(c.description(s),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,l&&c.arguments(l),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),s?this:c}createCommand(e){return new t(e)}createHelp(){return Object.assign(new Df,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,n){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
12
  - specify the name in Command constructor or using .name()`);return n=n||{},n.isDefault&&(this._defaultCommandName=e._name),(n.noHelp||n.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,n){return new Mf(e,n)}argument(e,n,r,s){let i=this.createArgument(e,n);return typeof r=="function"?i.default(s).argParser(r):i.default(r),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(n=>{this.argument(n)}),this}addArgument(e){let n=this.registeredArguments.slice(-1)[0];if(n&&n.variadic)throw new Error(`only the last argument can be variadic '${n.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,n){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,r,s]=e.match(/([^ ]+) *(.*)/),i=n??"display help for command",o=this.createCommand(r);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,n){return typeof e!="object"?(this.helpCommand(e,n),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,n){let r=["preSubcommand","preAction","postAction"];if(!r.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
- Expecting one of '${r.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(n):this._lifeCycleHooks[e]=[n],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=n=>{if(n.code!=="commander.executeSubCommandAsync")throw n},this}_exit(e,n,r){this._exitCallback&&this._exitCallback(new Eo(e,n,r)),me.exit(e)}action(e){let n=r=>{let s=this.registeredArguments.length,i=r.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=n,this}createOption(e,n){return new jl(e,n)}_callParseArg(e,n,r,s){try{return e.parseArg(n,r)}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 n=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(n){let r=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 '${r}'
14
- - already used by option '${n.flags}'`)}this.options.push(e)}_registerCommand(e){let n=s=>[s.name()].concat(s.aliases()),r=n(e).find(s=>this._findCommand(s));if(r){let s=n(this._findCommand(r)).join("|"),i=n(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let n=e.name(),r=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(r,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(r,e.defaultValue,"default");let s=(i,o,l)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(r);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,o):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(r,i,l)};return this.on("option:"+n,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+n,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,n,r,s,i){if(typeof n=="object"&&n instanceof jl)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(n,r);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let l=s;s=(c,u)=>{let f=l.exec(c);return f?f[0]:u},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,n,r,s){return this._optionEx({},e,n,r,s)}requiredOption(e,n,r,s){return this._optionEx({mandatory:!0},e,n,r,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,n){return this.setOptionValueWithSource(e,n,void 0)}setOptionValueWithSource(e,n,r){return this._storeOptionsAsProperties?this[e]=n:this._optionValues[e]=n,this._optionValueSources[e]=r,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let n;return this._getCommandAndAncestors().forEach(r=>{r.getOptionValueSource(e)!==void 0&&(n=r.getOptionValueSource(e))}),n}_prepareUserArgs(e,n){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(n=n||{},e===void 0&&n.from===void 0){me.versions?.electron&&(n.from="electron");let s=me.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(n.from="eval")}e===void 0&&(e=me.argv),this.rawArgs=e.slice();let r;switch(n.from){case void 0:case"node":this._scriptPath=e[1],r=e.slice(2);break;case"electron":me.defaultApp?(this._scriptPath=e[1],r=e.slice(2)):r=e.slice(1);break;case"user":r=e.slice(0);break;case"eval":r=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${n.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",r}parse(e,n){let r=this._prepareUserArgs(e,n);return this._parseCommand([],r),this}async parseAsync(e,n){let r=this._prepareUserArgs(e,n);return await this._parseCommand([],r),this}_executeSubCommand(e,n){n=n.slice();let r=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(f,p){let b=It.resolve(f,p);if(Ro.existsSync(b))return b;if(s.includes(It.extname(p)))return;let w=s.find(S=>Ro.existsSync(`${b}${S}`));if(w)return`${b}${w}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,l=this._executableDir||"";if(this._scriptPath){let f;try{f=Ro.realpathSync(this._scriptPath)}catch{f=this._scriptPath}l=It.resolve(It.dirname(f),l)}if(l){let f=i(l,o);if(!f&&!e._executableFile&&this._scriptPath){let p=It.basename(this._scriptPath,It.extname(this._scriptPath));p!==this._name&&(f=i(l,`${p}-${e._name}`))}o=f||o}r=s.includes(It.extname(o));let c;me.platform!=="win32"?r?(n.unshift(o),n=Nl(me.execArgv).concat(n),c=Io.spawn(me.argv[0],n,{stdio:"inherit"})):c=Io.spawn(o,n,{stdio:"inherit"}):(n.unshift(o),n=Nl(me.execArgv).concat(n),c=Io.spawn(me.execPath,n,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{me.on(p,()=>{c.killed===!1&&c.exitCode===null&&c.kill(p)})});let u=this._exitCallback;c.on("close",f=>{f=f??1,u?u(new Eo(f,"commander.executeSubCommandAsync","(close)")):me.exit(f)}),c.on("error",f=>{if(f.code==="ENOENT"){let p=l?`searched for local subcommand relative to directory '${l}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",b=`'${o}' does not exist
13
+ Expecting one of '${r.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(n):this._lifeCycleHooks[e]=[n],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=n=>{if(n.code!=="commander.executeSubCommandAsync")throw n},this}_exit(e,n,r){this._exitCallback&&this._exitCallback(new Ao(e,n,r)),me.exit(e)}action(e){let n=r=>{let s=this.registeredArguments.length,i=r.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=n,this}createOption(e,n){return new jl(e,n)}_callParseArg(e,n,r,s){try{return e.parseArg(n,r)}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 n=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(n){let r=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 '${r}'
14
+ - already used by option '${n.flags}'`)}this.options.push(e)}_registerCommand(e){let n=s=>[s.name()].concat(s.aliases()),r=n(e).find(s=>this._findCommand(s));if(r){let s=n(this._findCommand(r)).join("|"),i=n(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let n=e.name(),r=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(r,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(r,e.defaultValue,"default");let s=(i,o,l)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(r);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,o):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(r,i,l)};return this.on("option:"+n,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+n,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,n,r,s,i){if(typeof n=="object"&&n instanceof jl)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(n,r);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let l=s;s=(c,u)=>{let f=l.exec(c);return f?f[0]:u},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,n,r,s){return this._optionEx({},e,n,r,s)}requiredOption(e,n,r,s){return this._optionEx({mandatory:!0},e,n,r,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,n){return this.setOptionValueWithSource(e,n,void 0)}setOptionValueWithSource(e,n,r){return this._storeOptionsAsProperties?this[e]=n:this._optionValues[e]=n,this._optionValueSources[e]=r,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let n;return this._getCommandAndAncestors().forEach(r=>{r.getOptionValueSource(e)!==void 0&&(n=r.getOptionValueSource(e))}),n}_prepareUserArgs(e,n){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(n=n||{},e===void 0&&n.from===void 0){me.versions?.electron&&(n.from="electron");let s=me.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(n.from="eval")}e===void 0&&(e=me.argv),this.rawArgs=e.slice();let r;switch(n.from){case void 0:case"node":this._scriptPath=e[1],r=e.slice(2);break;case"electron":me.defaultApp?(this._scriptPath=e[1],r=e.slice(2)):r=e.slice(1);break;case"user":r=e.slice(0);break;case"eval":r=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${n.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",r}parse(e,n){let r=this._prepareUserArgs(e,n);return this._parseCommand([],r),this}async parseAsync(e,n){let r=this._prepareUserArgs(e,n);return await this._parseCommand([],r),this}_executeSubCommand(e,n){n=n.slice();let r=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(f,p){let b=It.resolve(f,p);if(Eo.existsSync(b))return b;if(s.includes(It.extname(p)))return;let w=s.find(S=>Eo.existsSync(`${b}${S}`));if(w)return`${b}${w}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,l=this._executableDir||"";if(this._scriptPath){let f;try{f=Eo.realpathSync(this._scriptPath)}catch{f=this._scriptPath}l=It.resolve(It.dirname(f),l)}if(l){let f=i(l,o);if(!f&&!e._executableFile&&this._scriptPath){let p=It.basename(this._scriptPath,It.extname(this._scriptPath));p!==this._name&&(f=i(l,`${p}-${e._name}`))}o=f||o}r=s.includes(It.extname(o));let c;me.platform!=="win32"?r?(n.unshift(o),n=Nl(me.execArgv).concat(n),c=Io.spawn(me.argv[0],n,{stdio:"inherit"})):c=Io.spawn(o,n,{stdio:"inherit"}):(n.unshift(o),n=Nl(me.execArgv).concat(n),c=Io.spawn(me.execPath,n,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{me.on(p,()=>{c.killed===!1&&c.exitCode===null&&c.kill(p)})});let u=this._exitCallback;c.on("close",f=>{f=f??1,u?u(new Ao(f,"commander.executeSubCommandAsync","(close)")):me.exit(f)}),c.on("error",f=>{if(f.code==="ENOENT"){let p=l?`searched for local subcommand relative to directory '${l}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",b=`'${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(b)}else if(f.code==="EACCES")throw new Error(`'${o}' not executable`);if(!u)me.exit(1);else{let p=new Eo(1,"commander.executeSubCommandAsync","(error)");p.nestedError=f,u(p)}}),this.runningCommand=c}_dispatchSubcommand(e,n,r){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,n.concat(r));else return s._parseCommand(n,r)}),i}_dispatchHelpCommand(e){e||this.help();let n=this._findCommand(e);return n&&!n._executableHandler&&n.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,n)=>{e.required&&this.args[n]==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=(r,s,i)=>{let o=s;if(s!==null&&r.parseArg){let l=`error: command-argument value '${s}' is invalid for argument '${r.name()}'.`;o=this._callParseArg(r,s,i,l)}return o};this._checkNumberOfArguments();let n=[];this.registeredArguments.forEach((r,s)=>{let i=r.defaultValue;r.variadic?s<this.args.length?(i=this.args.slice(s),r.parseArg&&(i=i.reduce((o,l)=>e(r,l,o),r.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],r.parseArg&&(i=e(r,i,r.defaultValue))),n[s]=i}),this.processedArgs=n}_chainOrCall(e,n){return e&&e.then&&typeof e.then=="function"?e.then(()=>n()):n()}_chainOrCallHooks(e,n){let r=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[n]!==void 0).forEach(i=>{i._lifeCycleHooks[n].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),n==="postAction"&&s.reverse(),s.forEach(i=>{r=this._chainOrCall(r,()=>i.callback(i.hookedCommand,this))}),r}_chainOrCallSubCommandHook(e,n,r){let s=e;return this._lifeCycleHooks[r]!==void 0&&this._lifeCycleHooks[r].forEach(i=>{s=this._chainOrCall(s,()=>i(this,n))}),s}_parseCommand(e,n){let r=this.parseOptions(n);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(r.operands),n=r.unknown,this.args=e.concat(n),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),n);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(n),this._dispatchSubcommand(this._defaultCommandName,e,n);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(r.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{r.unknown.length>0&&this.unknownOption(r.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,n)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,n);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,n);this.listenerCount("command:*")?this.emit("command:*",e,n):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(n=>n._name===e||n._aliases.includes(e))}_findOption(e){return this.options.find(n=>n.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(n=>{n.mandatory&&e.getOptionValue(n.attributeName())===void 0&&e.missingMandatoryOptionValue(n)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(r=>{let s=r.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(r=>r.conflictsWith.length>0).forEach(r=>{let s=e.find(i=>r.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(r,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let n=[],r=[],s=n,i=e.slice();function o(c){return c.length>1&&c[0]==="-"}let l=null;for(;i.length;){let c=i.shift();if(c==="--"){s===r&&s.push(c),s.push(...i);break}if(l&&!o(c)){this.emit(`option:${l.name()}`,c);continue}if(l=null,o(c)){let u=this._findOption(c);if(u){if(u.required){let f=i.shift();f===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,f)}else if(u.optional){let f=null;i.length>0&&!o(i[0])&&(f=i.shift()),this.emit(`option:${u.name()}`,f)}else this.emit(`option:${u.name()}`);l=u.variadic?u:null;continue}}if(c.length>2&&c[0]==="-"&&c[1]!=="-"){let u=this._findOption(`-${c[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,c.slice(2)):(this.emit(`option:${u.name()}`),i.unshift(`-${c.slice(2)}`));continue}}if(/^--[^=]+=/.test(c)){let u=c.indexOf("="),f=this._findOption(c.slice(0,u));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,c.slice(u+1));continue}}if(o(c)&&(s=r),(this._enablePositionalOptions||this._passThroughOptions)&&n.length===0&&r.length===0){if(this._findCommand(c)){n.push(c),i.length>0&&r.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){n.push(c),i.length>0&&n.push(...i);break}else if(this._defaultCommandName){r.push(c),i.length>0&&r.push(...i);break}}if(this._passThroughOptions){s.push(c),i.length>0&&s.push(...i);break}s.push(c)}return{operands:n,unknown:r}}opts(){if(this._storeOptionsAsProperties){let e={},n=this.options.length;for(let r=0;r<n;r++){let s=this.options[r].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,n)=>Object.assign(e,n.opts()),{})}error(e,n){this._outputConfiguration.outputError(`${e}
17
+ - ${p}`;throw new Error(b)}else if(f.code==="EACCES")throw new Error(`'${o}' not executable`);if(!u)me.exit(1);else{let p=new Ao(1,"commander.executeSubCommandAsync","(error)");p.nestedError=f,u(p)}}),this.runningCommand=c}_dispatchSubcommand(e,n,r){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,n.concat(r));else return s._parseCommand(n,r)}),i}_dispatchHelpCommand(e){e||this.help();let n=this._findCommand(e);return n&&!n._executableHandler&&n.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,n)=>{e.required&&this.args[n]==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=(r,s,i)=>{let o=s;if(s!==null&&r.parseArg){let l=`error: command-argument value '${s}' is invalid for argument '${r.name()}'.`;o=this._callParseArg(r,s,i,l)}return o};this._checkNumberOfArguments();let n=[];this.registeredArguments.forEach((r,s)=>{let i=r.defaultValue;r.variadic?s<this.args.length?(i=this.args.slice(s),r.parseArg&&(i=i.reduce((o,l)=>e(r,l,o),r.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],r.parseArg&&(i=e(r,i,r.defaultValue))),n[s]=i}),this.processedArgs=n}_chainOrCall(e,n){return e&&e.then&&typeof e.then=="function"?e.then(()=>n()):n()}_chainOrCallHooks(e,n){let r=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[n]!==void 0).forEach(i=>{i._lifeCycleHooks[n].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),n==="postAction"&&s.reverse(),s.forEach(i=>{r=this._chainOrCall(r,()=>i.callback(i.hookedCommand,this))}),r}_chainOrCallSubCommandHook(e,n,r){let s=e;return this._lifeCycleHooks[r]!==void 0&&this._lifeCycleHooks[r].forEach(i=>{s=this._chainOrCall(s,()=>i(this,n))}),s}_parseCommand(e,n){let r=this.parseOptions(n);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(r.operands),n=r.unknown,this.args=e.concat(n),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),n);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(n),this._dispatchSubcommand(this._defaultCommandName,e,n);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(r.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{r.unknown.length>0&&this.unknownOption(r.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,n)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,n);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,n);this.listenerCount("command:*")?this.emit("command:*",e,n):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(n=>n._name===e||n._aliases.includes(e))}_findOption(e){return this.options.find(n=>n.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(n=>{n.mandatory&&e.getOptionValue(n.attributeName())===void 0&&e.missingMandatoryOptionValue(n)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(r=>{let s=r.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(r=>r.conflictsWith.length>0).forEach(r=>{let s=e.find(i=>r.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(r,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let n=[],r=[],s=n,i=e.slice();function o(c){return c.length>1&&c[0]==="-"}let l=null;for(;i.length;){let c=i.shift();if(c==="--"){s===r&&s.push(c),s.push(...i);break}if(l&&!o(c)){this.emit(`option:${l.name()}`,c);continue}if(l=null,o(c)){let u=this._findOption(c);if(u){if(u.required){let f=i.shift();f===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,f)}else if(u.optional){let f=null;i.length>0&&!o(i[0])&&(f=i.shift()),this.emit(`option:${u.name()}`,f)}else this.emit(`option:${u.name()}`);l=u.variadic?u:null;continue}}if(c.length>2&&c[0]==="-"&&c[1]!=="-"){let u=this._findOption(`-${c[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,c.slice(2)):(this.emit(`option:${u.name()}`),i.unshift(`-${c.slice(2)}`));continue}}if(/^--[^=]+=/.test(c)){let u=c.indexOf("="),f=this._findOption(c.slice(0,u));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,c.slice(u+1));continue}}if(o(c)&&(s=r),(this._enablePositionalOptions||this._passThroughOptions)&&n.length===0&&r.length===0){if(this._findCommand(c)){n.push(c),i.length>0&&r.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){n.push(c),i.length>0&&n.push(...i);break}else if(this._defaultCommandName){r.push(c),i.length>0&&r.push(...i);break}}if(this._passThroughOptions){s.push(c),i.length>0&&s.push(...i);break}s.push(c)}return{operands:n,unknown:r}}opts(){if(this._storeOptionsAsProperties){let e={},n=this.options.length;for(let r=0;r<n;r++){let s=this.options[r].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,n)=>Object.assign(e,n.opts()),{})}error(e,n){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
20
  `),this.outputHelp({error:!0}));let r=n||{},s=r.exitCode||1,i=r.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in me.env){let n=e.attributeName();(this.getOptionValue(n)===void 0||["default","config","env"].includes(this.getOptionValueSource(n)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,me.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Lf(this.options),n=r=>this.getOptionValue(r)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(r));this.options.filter(r=>r.implied!==void 0&&n(r.attributeName())&&e.valueFromOption(this.getOptionValue(r.attributeName()),r)).forEach(r=>{Object.keys(r.implied).filter(s=>!n(s)).forEach(s=>{this.setOptionValueWithSource(s,r.implied[s],"implied")})})}missingArgument(e){let n=`error: missing required argument '${e}'`;this.error(n,{code:"commander.missingArgument"})}optionMissingArgument(e){let n=`error: option '${e.flags}' argument missing`;this.error(n,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let n=`error: required option '${e.flags}' not specified`;this.error(n,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,n){let r=o=>{let l=o.attributeName(),c=this.getOptionValue(l),u=this.options.find(p=>p.negate&&l===p.attributeName()),f=this.options.find(p=>!p.negate&&l===p.attributeName());return u&&(u.presetArg===void 0&&c===!1||u.presetArg!==void 0&&c===u.presetArg)?u:f||o},s=o=>{let l=r(o),c=l.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${l.envVar}'`:`option '${l.flags}'`},i=`error: ${s(e)} cannot be used with ${s(n)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let n="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(l=>l.long).map(l=>l.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);n=Ol(e,s)}let r=`error: unknown option '${e}'${n}`;this.error(r,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let n=this.registeredArguments.length,r=n===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${n} argument${r} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],n="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),n=Ol(e,s)}let r=`error: unknown command '${e}'${n}`;this.error(r,{code:"commander.unknownCommand"})}version(e,n,r){if(e===void 0)return this._version;this._version=e,n=n||"-V, --version",r=r||"output the version number";let s=this.createOption(n,r);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
21
  `),this._exit(0,"commander.version",e)}),this}description(e,n){return e===void 0&&n===void 0?this._description:(this._description=e,n&&(this._argsDescription=n),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let n=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(n=this.commands[this.commands.length-1]),e===n._name)throw new Error("Command alias can't be the same as its name");let r=this.parent?._findCommand(e);if(r){let s=[r.name()].concat(r.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return n._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(n=>this.alias(n)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let n=this.registeredArguments.map(r=>zf(r));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?n:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=It.basename(e,It.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let n=this.createHelp();return n.helpWidth===void 0&&(n.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),n.formatHelp(this,n)}_getHelpContext(e){e=e||{};let n={error:!!e.error},r;return n.error?r=s=>this._outputConfiguration.writeErr(s):r=s=>this._outputConfiguration.writeOut(s),n.write=e.write||r,n.command=this,n}outputHelp(e){let n;typeof e=="function"&&(n=e,e=void 0);let r=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",r)),this.emit("beforeHelp",r);let s=this.helpInformation(r);if(n&&(s=n(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");r.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",r),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",r))}helpOption(e,n){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",n=n??"display help for command",this._helpOption=this.createOption(e,n),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 n=me.exitCode||0;n===0&&e&&typeof e!="function"&&e.error&&(n=1),this._exit(n,"commander.help","(outputHelp)")}addHelpText(e,n){let r=["beforeAll","before","after","afterAll"];if(!r.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
22
  Expecting one of '${r.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof n=="function"?o=n({error:i.error,command:i.command}):o=n,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let n=this._getHelpOption();n&&e.find(s=>n.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Nl(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let n,r="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?n=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(n=i[1],/^\d+$/.test(i[3])?s=i[3]:r=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(n=i[1],r=i[3],s=i[4]),n&&s!=="0"?`${n}=${r}:${parseInt(s)+1}`:e})}Ml.Command=Ao});var ql=re(Ve=>{var{Argument:Dl}=Ys(),{Command:$o}=zl(),{CommanderError:Uf,InvalidArgumentError:Ll}=ps(),{Help:qf}=ko(),{Option:Ul}=Co();Ve.program=new $o;Ve.createCommand=t=>new $o(t);Ve.createOption=(t,e)=>new Ul(t,e);Ve.createArgument=(t,e)=>new Dl(t,e);Ve.Command=$o;Ve.Option=Ul;Ve.Argument=Dl;Ve.Help=qf;Ve.CommanderError=Uf;Ve.InvalidArgumentError=Ll;Ve.InvalidOptionArgumentError=Ll});var vs=re(ce=>{"use strict";Object.defineProperty(ce,"__esModule",{value:!0});ce.getParsedType=ce.ZodParsedType=ce.objectUtil=ce.util=void 0;var Lo;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},t.getValidEnumValues=s=>{let i=t.objectKeys(s).filter(l=>typeof s[s[l]]!="number"),o={};for(let l of i)o[l]=s[l];return t.objectValues(o)},t.objectValues=s=>t.objectKeys(s).map(function(i){return s[i]}),t.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},t.find=(s,i)=>{for(let o of s)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Lo||(ce.util=Lo={}));var hc;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(hc||(ce.objectUtil=hc={}));ce.ZodParsedType=Lo.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var im=t=>{switch(typeof t){case"undefined":return ce.ZodParsedType.undefined;case"string":return ce.ZodParsedType.string;case"number":return Number.isNaN(t)?ce.ZodParsedType.nan:ce.ZodParsedType.number;case"boolean":return ce.ZodParsedType.boolean;case"function":return ce.ZodParsedType.function;case"bigint":return ce.ZodParsedType.bigint;case"symbol":return ce.ZodParsedType.symbol;case"object":return Array.isArray(t)?ce.ZodParsedType.array:t===null?ce.ZodParsedType.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?ce.ZodParsedType.promise:typeof Map<"u"&&t instanceof Map?ce.ZodParsedType.map:typeof Set<"u"&&t instanceof Set?ce.ZodParsedType.set:typeof Date<"u"&&t instanceof Date?ce.ZodParsedType.date:ce.ZodParsedType.object;default:return ce.ZodParsedType.unknown}};ce.getParsedType=im});var di=re(en=>{"use strict";Object.defineProperty(en,"__esModule",{value:!0});en.ZodError=en.quotelessJson=en.ZodIssueCode=void 0;var fc=vs();en.ZodIssueCode=fc.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 om=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:");en.quotelessJson=om;var ws=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_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)r._errors.push(n(o));else{let l=r,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(l[u]=l[u]||{_errors:[]},l[u]._errors.push(n(o))):l[u]=l[u]||{_errors:[]},l=l[u],c++}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,fc.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];n[i]=n[i]||[],n[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};en.ZodError=ws;ws.create=t=>new ws(t)});var qo=re(Uo=>{"use strict";Object.defineProperty(Uo,"__esModule",{value:!0});var Ee=di(),Mn=vs(),am=(t,e)=>{let n;switch(t.code){case Ee.ZodIssueCode.invalid_type:t.received===Mn.ZodParsedType.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case Ee.ZodIssueCode.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,Mn.util.jsonStringifyReplacer)}`;break;case Ee.ZodIssueCode.unrecognized_keys:n=`Unrecognized key(s) in object: ${Mn.util.joinValues(t.keys,", ")}`;break;case Ee.ZodIssueCode.invalid_union:n="Invalid input";break;case Ee.ZodIssueCode.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${Mn.util.joinValues(t.options)}`;break;case Ee.ZodIssueCode.invalid_enum_value:n=`Invalid enum value. Expected ${Mn.util.joinValues(t.options)}, received '${t.received}'`;break;case Ee.ZodIssueCode.invalid_arguments:n="Invalid function arguments";break;case Ee.ZodIssueCode.invalid_return_type:n="Invalid function return type";break;case Ee.ZodIssueCode.invalid_date:n="Invalid date";break;case Ee.ZodIssueCode.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:Mn.util.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case Ee.ZodIssueCode.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case Ee.ZodIssueCode.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case Ee.ZodIssueCode.custom:n="Invalid input";break;case Ee.ZodIssueCode.invalid_intersection_types:n="Intersection results could not be merged";break;case Ee.ZodIssueCode.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case Ee.ZodIssueCode.not_finite:n="Number must be finite";break;default:n=e.defaultError,Mn.util.assertNever(t)}return{message:n}};Uo.default=am});var hi=re(tn=>{"use strict";var lm=tn&&tn.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(tn,"__esModule",{value:!0});tn.defaultErrorMap=void 0;tn.setErrorMap=cm;tn.getErrorMap=um;var pc=lm(qo());tn.defaultErrorMap=pc.default;var mc=pc.default;function cm(t){mc=t}function um(){return mc}});var Bo=re(oe=>{"use strict";var dm=oe&&oe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(oe,"__esModule",{value:!0});oe.isAsync=oe.isValid=oe.isDirty=oe.isAborted=oe.OK=oe.DIRTY=oe.INVALID=oe.ParseStatus=oe.EMPTY_PATH=oe.makeIssue=void 0;oe.addIssueToContext=pm;var hm=hi(),gc=dm(qo()),fm=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,i=[...n,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let l="",c=r.filter(u=>!!u).slice().reverse();for(let u of c)l=u(o,{data:e,defaultError:l}).message;return{...s,path:i,message:l}};oe.makeIssue=fm;oe.EMPTY_PATH=[];function pm(t,e){let n=(0,hm.getErrorMap)(),r=(0,oe.makeIssue)({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===gc.default?void 0:gc.default].filter(s=>!!s)});t.common.issues.push(r)}var Fo=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return oe.INVALID;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return oe.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}};oe.ParseStatus=Fo;oe.INVALID=Object.freeze({status:"aborted"});var mm=t=>({status:"dirty",value:t});oe.DIRTY=mm;var gm=t=>({status:"valid",value:t});oe.OK=gm;var ym=t=>t.status==="aborted";oe.isAborted=ym;var bm=t=>t.status==="dirty";oe.isDirty=bm;var vm=t=>t.status==="valid";oe.isValid=vm;var wm=t=>typeof Promise<"u"&&t instanceof Promise;oe.isAsync=wm});var bc=re(yc=>{"use strict";Object.defineProperty(yc,"__esModule",{value:!0})});var wc=re(fi=>{"use strict";Object.defineProperty(fi,"__esModule",{value:!0});fi.errorUtil=void 0;var vc;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(vc||(fi.errorUtil=vc={}))});var Pc=re(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.discriminatedUnion=k.date=k.boolean=k.bigint=k.array=k.any=k.coerce=k.ZodFirstPartyTypeKind=k.late=k.ZodSchema=k.Schema=k.ZodReadonly=k.ZodPipeline=k.ZodBranded=k.BRAND=k.ZodNaN=k.ZodCatch=k.ZodDefault=k.ZodNullable=k.ZodOptional=k.ZodTransformer=k.ZodEffects=k.ZodPromise=k.ZodNativeEnum=k.ZodEnum=k.ZodLiteral=k.ZodLazy=k.ZodFunction=k.ZodSet=k.ZodMap=k.ZodRecord=k.ZodTuple=k.ZodIntersection=k.ZodDiscriminatedUnion=k.ZodUnion=k.ZodObject=k.ZodArray=k.ZodVoid=k.ZodNever=k.ZodUnknown=k.ZodAny=k.ZodNull=k.ZodUndefined=k.ZodSymbol=k.ZodDate=k.ZodBoolean=k.ZodBigInt=k.ZodNumber=k.ZodString=k.ZodType=void 0;k.NEVER=k.void=k.unknown=k.union=k.undefined=k.tuple=k.transformer=k.symbol=k.string=k.strictObject=k.set=k.record=k.promise=k.preprocess=k.pipeline=k.ostring=k.optional=k.onumber=k.oboolean=k.object=k.number=k.nullable=k.null=k.never=k.nativeEnum=k.nan=k.map=k.literal=k.lazy=k.intersection=k.instanceof=k.function=k.enum=k.effect=void 0;k.datetimeRegex=xc;k.custom=Ic;var E=di(),pi=hi(),q=wc(),T=Bo(),$=vs(),Qe=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},_c=(t,e)=>{if((0,T.isValid)(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new E.ZodError(t.common.issues);return this._error=n,this._error}}};function Y(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))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,l)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??l.defaultError}:typeof l.data>"u"?{message:c??r??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:c??n??l.defaultError}},description:s}}var X=class{get description(){return this._def.description}_getType(e){return(0,$.getParsedType)(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:(0,$.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new T.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,$.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if((0,T.isAsync)(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)},s=this._parseSync({data:e,path:r.path,parent:r});return _c(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return(0,T.isValid)(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>(0,T.isValid)(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await((0,T.isAsync)(s)?s:Promise.resolve(s));return _c(r,i)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,i)=>{let o=e(s),l=()=>i.addIssue({code:E.ZodIssueCode.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(e,n){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof n=="function"?n(r,s):n),!1))}_refinement(e){return new Fe({schema:this,typeName:G.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:n=>this["~validate"](n)}}optional(){return Xe.create(this,this._def)}nullable(){return bt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return zt.create(this)}promise(){return sn.create(this,this._def)}or(e){return Bn.create([this,e],this._def)}and(e){return Kn.create(this,e,this._def)}transform(e){return new Fe({...Y(this._def),schema:this,typeName:G.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new Wn({...Y(this._def),innerType:this,defaultValue:n,typeName:G.ZodDefault})}brand(){return new _s({typeName:G.ZodBranded,type:this,...Y(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Jn({...Y(this._def),innerType:this,catchValue:n,typeName:G.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return ks.create(this,e)}readonly(){return Yn.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};k.ZodType=X;k.Schema=X;k.ZodSchema=X;var _m=/^c[^\s-]{8,}$/i,km=/^[0-9a-z]+$/,Sm=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Tm=/^[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,xm=/^[a-z0-9_-]{21}$/i,Cm=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Im=/^[-+]?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)?)??$/,Rm=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Em="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Ko,Am=/^(?:(?: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])$/,$m=/^(?:(?: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])$/,Pm=/^(([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]))$/,jm=/^(([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])$/,Om=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Nm=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Sc="((\\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])))",Mm=new RegExp(`^${Sc}$`);function Tc(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function zm(t){return new RegExp(`^${Tc(t)}$`)}function xc(t){let e=`${Sc}T${Tc(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Dm(t,e){return!!((e==="v4"||!e)&&Am.test(t)||(e==="v6"||!e)&&Pm.test(t))}function Lm(t,e){if(!Cm.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function Um(t,e){return!!((e==="v4"||!e)&&$m.test(t)||(e==="v6"||!e)&&jm.test(t))}var nn=class t extends X{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==$.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.string,received:i.parsedType}),T.INVALID}let r=new T.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,l=e.data.length<i.value;(o||l)&&(s=this._getOrReturnCtx(e,s),o?(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):l&&(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Rm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"email",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")Ko||(Ko=new RegExp(Em,"u")),Ko.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"emoji",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Tm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"uuid",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")xm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"nanoid",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")_m.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cuid",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")km.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cuid2",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Sm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"ulid",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"url",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"regex",code:E.ZodIssueCode.invalid_string,message:i.message}),r.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,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.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,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?xc(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?Mm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?zm(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Im.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"duration",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?Dm(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"ip",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?Lm(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"jwt",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?Um(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cidr",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?Om.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"base64",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?Nm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"base64url",code:E.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):$.util.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:E.ZodIssueCode.invalid_string,...q.errorUtil.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...q.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...q.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...q.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...q.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...q.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...q.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...q.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...q.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...q.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...q.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...q.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...q.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...q.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,...q.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,...q.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...q.errorUtil.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...q.errorUtil.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...q.errorUtil.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...q.errorUtil.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...q.errorUtil.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...q.errorUtil.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...q.errorUtil.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...q.errorUtil.errToObj(n)})}nonempty(e){return this.min(1,q.errorUtil.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...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 n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};k.ZodString=nn;nn.create=t=>new nn({checks:[],typeName:G.ZodString,coerce:t?.coerce??!1,...Y(t)});function qm(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,i=Number.parseInt(t.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var zn=class t extends X{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)!==$.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.number,received:i.parsedType}),T.INVALID}let r,s=new T.ParseStatus;for(let i of this._def.checks)i.kind==="int"?$.util.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?qm(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.not_finite,message:i.message}),s.dirty()):$.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,q.errorUtil.toString(n))}gt(e,n){return this.setLimit("min",e,!1,q.errorUtil.toString(n))}lte(e,n){return this.setLimit("max",e,!0,q.errorUtil.toString(n))}lt(e,n){return this.setLimit("max",e,!1,q.errorUtil.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:q.errorUtil.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:q.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:q.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:q.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:q.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:q.errorUtil.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:q.errorUtil.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:q.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:q.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:q.errorUtil.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&$.util.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};k.ZodNumber=zn;zn.create=t=>new zn({checks:[],typeName:G.ZodNumber,coerce:t?.coerce||!1,...Y(t)});var Dn=class t extends X{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)!==$.ZodParsedType.bigint)return this._getInvalidInput(e);let r,s=new T.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):$.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.bigint,received:n.parsedType}),T.INVALID}gte(e,n){return this.setLimit("min",e,!0,q.errorUtil.toString(n))}gt(e,n){return this.setLimit("min",e,!1,q.errorUtil.toString(n))}lte(e,n){return this.setLimit("max",e,!0,q.errorUtil.toString(n))}lt(e,n){return this.setLimit("max",e,!1,q.errorUtil.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:q.errorUtil.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:q.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:q.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:q.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:q.errorUtil.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:q.errorUtil.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};k.ZodBigInt=Dn;Dn.create=t=>new Dn({checks:[],typeName:G.ZodBigInt,coerce:t?.coerce??!1,...Y(t)});var Ln=class extends X{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==$.ZodParsedType.boolean){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.boolean,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodBoolean=Ln;Ln.create=t=>new Ln({typeName:G.ZodBoolean,coerce:t?.coerce||!1,...Y(t)});var Un=class t extends X{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==$.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.date,received:i.parsedType}),T.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:E.ZodIssueCode.invalid_date}),T.INVALID}let r=new T.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:E.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):$.util.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:q.errorUtil.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:q.errorUtil.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};k.ZodDate=Un;Un.create=t=>new Un({checks:[],coerce:t?.coerce||!1,typeName:G.ZodDate,...Y(t)});var Lr=class extends X{_parse(e){if(this._getType(e)!==$.ZodParsedType.symbol){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.symbol,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodSymbol=Lr;Lr.create=t=>new Lr({typeName:G.ZodSymbol,...Y(t)});var qn=class extends X{_parse(e){if(this._getType(e)!==$.ZodParsedType.undefined){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.undefined,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodUndefined=qn;qn.create=t=>new qn({typeName:G.ZodUndefined,...Y(t)});var Fn=class extends X{_parse(e){if(this._getType(e)!==$.ZodParsedType.null){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.null,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodNull=Fn;Fn.create=t=>new Fn({typeName:G.ZodNull,...Y(t)});var rn=class extends X{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,T.OK)(e.data)}};k.ZodAny=rn;rn.create=t=>new rn({typeName:G.ZodAny,...Y(t)});var Mt=class extends X{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,T.OK)(e.data)}};k.ZodUnknown=Mt;Mt.create=t=>new Mt({typeName:G.ZodUnknown,...Y(t)});var ot=class extends X{_parse(e){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.never,received:n.parsedType}),T.INVALID}};k.ZodNever=ot;ot.create=t=>new ot({typeName:G.ZodNever,...Y(t)});var Ur=class extends X{_parse(e){if(this._getType(e)!==$.ZodParsedType.undefined){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.void,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodVoid=Ur;Ur.create=t=>new Ur({typeName:G.ZodVoid,...Y(t)});var zt=class t extends X{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==$.ZodParsedType.array)return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.array,received:n.parsedType}),T.INVALID;if(s.exactLength!==null){let o=n.data.length>s.exactLength.value,l=n.data.length<s.exactLength.value;(o||l)&&((0,T.addIssueToContext)(n,{code:o?E.ZodIssueCode.too_big:E.ZodIssueCode.too_small,minimum:l?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&n.data.length<s.minLength.value&&((0,T.addIssueToContext)(n,{code:E.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&((0,T.addIssueToContext)(n,{code:E.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,l)=>s.type._parseAsync(new Qe(n,o,n.path,l)))).then(o=>T.ParseStatus.mergeArray(r,o));let i=[...n.data].map((o,l)=>s.type._parseSync(new Qe(n,o,n.path,l)));return T.ParseStatus.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:q.errorUtil.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:q.errorUtil.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:q.errorUtil.toString(n)}})}nonempty(e){return this.min(1,e)}};k.ZodArray=zt;zt.create=(t,e)=>new zt({type:t,minLength:null,maxLength:null,exactLength:null,typeName:G.ZodArray,...Y(e)});function Dr(t){if(t instanceof De){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=Xe.create(Dr(r))}return new De({...t._def,shape:()=>e})}else return t instanceof zt?new zt({...t._def,type:Dr(t.element)}):t instanceof Xe?Xe.create(Dr(t.unwrap())):t instanceof bt?bt.create(Dr(t.unwrap())):t instanceof yt?yt.create(t.items.map(e=>Dr(e))):t}var De=class t extends X{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(),n=$.util.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==$.ZodParsedType.object){let u=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(u,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:u.parsedType}),T.INVALID}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof ot&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||l.push(u);let c=[];for(let u of o){let f=i[u],p=s.data[u];c.push({key:{status:"valid",value:u},value:f._parse(new Qe(s,p,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof ot){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of l)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")l.length>0&&((0,T.addIssueToContext)(s,{code:E.ZodIssueCode.unrecognized_keys,keys:l}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of l){let p=s.data[f];c.push({key:{status:"valid",value:f},value:u._parse(new Qe(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let u=[];for(let f of c){let p=await f.key,b=await f.value;u.push({key:p,value:b,alwaysSet:f.alwaysSet})}return u}).then(u=>T.ParseStatus.mergeObjectSync(r,u)):T.ParseStatus.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return q.errorUtil.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:q.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:G.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of $.util.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of $.util.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Dr(this)}partial(e){let n={};for(let r of $.util.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of $.util.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof Xe;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return Cc($.util.objectKeys(this.shape))}};k.ZodObject=De;De.create=(t,e)=>new De({shape:()=>t,unknownKeys:"strip",catchall:ot.create(),typeName:G.ZodObject,...Y(e)});De.strictCreate=(t,e)=>new De({shape:()=>t,unknownKeys:"strict",catchall:ot.create(),typeName:G.ZodObject,...Y(e)});De.lazycreate=(t,e)=>new De({shape:t,unknownKeys:"strip",catchall:ot.create(),typeName:G.ZodObject,...Y(e)});var Bn=class extends X{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(i){for(let l of i)if(l.result.status==="valid")return l.result;for(let l of i)if(l.result.status==="dirty")return n.common.issues.push(...l.ctx.common.issues),l.result;let o=i.map(l=>new E.ZodError(l.ctx.common.issues));return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_union,unionErrors:o}),T.INVALID}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let u={...n,common:{...n.common,issues:[]},parent:null},f=c._parseSync({data:n.data,path:n.path,parent:u});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let l=o.map(c=>new E.ZodError(c));return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_union,unionErrors:l}),T.INVALID}}get options(){return this._def.options}};k.ZodUnion=Bn;Bn.create=(t,e)=>new Bn({options:t,typeName:G.ZodUnion,...Y(e)});var Nt=t=>t instanceof Hn?Nt(t.schema):t instanceof Fe?Nt(t.innerType()):t instanceof Zn?[t.value]:t instanceof Gn?t.options:t instanceof Vn?$.util.objectValues(t.enum):t instanceof Wn?Nt(t._def.innerType):t instanceof qn?[void 0]:t instanceof Fn?[null]:t instanceof Xe?[void 0,...Nt(t.unwrap())]:t instanceof bt?[null,...Nt(t.unwrap())]:t instanceof _s||t instanceof Yn?Nt(t.unwrap()):t instanceof Jn?Nt(t._def.innerType):[],mi=class t extends X{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.object)return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:n.parsedType}),T.INVALID;let r=this.discriminator,s=n.data[r],i=this.optionsMap.get(s);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):((0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),T.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let i of n){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 l of o){if(s.has(l))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(l)}`);s.set(l,i)}}return new t({typeName:G.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...Y(r)})}};k.ZodDiscriminatedUnion=mi;function Ho(t,e){let n=(0,$.getParsedType)(t),r=(0,$.getParsedType)(e);if(t===e)return{valid:!0,data:t};if(n===$.ZodParsedType.object&&r===$.ZodParsedType.object){let s=$.util.objectKeys(e),i=$.util.objectKeys(t).filter(l=>s.indexOf(l)!==-1),o={...t,...e};for(let l of i){let c=Ho(t[l],e[l]);if(!c.valid)return{valid:!1};o[l]=c.data}return{valid:!0,data:o}}else if(n===$.ZodParsedType.array&&r===$.ZodParsedType.array){if(t.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let o=t[i],l=e[i],c=Ho(o,l);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return n===$.ZodParsedType.date&&r===$.ZodParsedType.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Kn=class extends X{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(i,o)=>{if((0,T.isAborted)(i)||(0,T.isAborted)(o))return T.INVALID;let l=Ho(i.value,o.value);return l.valid?(((0,T.isDirty)(i)||(0,T.isDirty)(o))&&n.dirty(),{status:n.value,value:l.data}):((0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_intersection_types}),T.INVALID)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};k.ZodIntersection=Kn;Kn.create=(t,e,n)=>new Kn({left:t,right:e,typeName:G.ZodIntersection,...Y(n)});var yt=class t extends X{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.array)return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.array,received:r.parsedType}),T.INVALID;if(r.data.length<this._def.items.length)return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),T.INVALID;!this._def.rest&&r.data.length>this._def.items.length&&((0,T.addIssueToContext)(r,{code:E.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,l)=>{let c=this._def.items[l]||this._def.rest;return c?c._parse(new Qe(r,o,r.path,l)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>T.ParseStatus.mergeArray(n,o)):T.ParseStatus.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};k.ZodTuple=yt;yt.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new yt({items:t,typeName:G.ZodTuple,rest:null,...Y(e)})};var gi=class t extends X{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.object)return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:r.parsedType}),T.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let l in r.data)s.push({key:i._parse(new Qe(r,l,r.path,l)),value:o._parse(new Qe(r,r.data[l],r.path,l)),alwaysSet:l in r.data});return r.common.async?T.ParseStatus.mergeObjectAsync(n,s):T.ParseStatus.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof X?new t({keyType:e,valueType:n,typeName:G.ZodRecord,...Y(r)}):new t({keyType:nn.create(),valueType:e,typeName:G.ZodRecord,...Y(n)})}};k.ZodRecord=gi;var qr=class extends X{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.map)return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.map,received:r.parsedType}),T.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([l,c],u)=>({key:s._parse(new Qe(r,l,r.path,[u,"key"])),value:i._parse(new Qe(r,c,r.path,[u,"value"]))}));if(r.common.async){let l=new Map;return Promise.resolve().then(async()=>{for(let c of o){let u=await c.key,f=await c.value;if(u.status==="aborted"||f.status==="aborted")return T.INVALID;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}})}else{let l=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return T.INVALID;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}}}};k.ZodMap=qr;qr.create=(t,e,n)=>new qr({valueType:e,keyType:t,typeName:G.ZodMap,...Y(n)});var Fr=class t extends X{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.set)return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.set,received:r.parsedType}),T.INVALID;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&((0,T.addIssueToContext)(r,{code:E.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&((0,T.addIssueToContext)(r,{code:E.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return T.INVALID;f.status==="dirty"&&n.dirty(),u.add(f.value)}return{status:n.value,value:u}}let l=[...r.data.values()].map((c,u)=>i._parse(new Qe(r,c,r.path,u)));return r.common.async?Promise.all(l).then(c=>o(c)):o(l)}min(e,n){return new t({...this._def,minSize:{value:e,message:q.errorUtil.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:q.errorUtil.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};k.ZodSet=Fr;Fr.create=(t,e)=>new Fr({valueType:t,minSize:null,maxSize:null,typeName:G.ZodSet,...Y(e)});var yi=class t extends X{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.function)return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.function,received:n.parsedType}),T.INVALID;function r(l,c){return(0,T.makeIssue)({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,pi.getErrorMap)(),pi.defaultErrorMap].filter(u=>!!u),issueData:{code:E.ZodIssueCode.invalid_arguments,argumentsError:c}})}function s(l,c){return(0,T.makeIssue)({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,pi.getErrorMap)(),pi.defaultErrorMap].filter(u=>!!u),issueData:{code:E.ZodIssueCode.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof sn){let l=this;return(0,T.OK)(async function(...c){let u=new E.ZodError([]),f=await l._def.args.parseAsync(c,i).catch(w=>{throw u.addIssue(r(c,w)),u}),p=await Reflect.apply(o,this,f);return await l._def.returns._def.type.parseAsync(p,i).catch(w=>{throw u.addIssue(s(p,w)),u})})}else{let l=this;return(0,T.OK)(function(...c){let u=l._def.args.safeParse(c,i);if(!u.success)throw new E.ZodError([r(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=l._def.returns.safeParse(f,i);if(!p.success)throw new E.ZodError([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:yt.create(e).rest(Mt.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||yt.create([]).rest(Mt.create()),returns:n||Mt.create(),typeName:G.ZodFunction,...Y(r)})}};k.ZodFunction=yi;var Hn=class extends X{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};k.ZodLazy=Hn;Hn.create=(t,e)=>new Hn({getter:t,typeName:G.ZodLazy,...Y(e)});var Zn=class extends X{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{received:n.data,code:E.ZodIssueCode.invalid_literal,expected:this._def.value}),T.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};k.ZodLiteral=Zn;Zn.create=(t,e)=>new Zn({value:t,typeName:G.ZodLiteral,...Y(e)});function Cc(t,e){return new Gn({values:t,typeName:G.ZodEnum,...Y(e)})}var Gn=class t extends X{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return(0,T.addIssueToContext)(n,{expected:$.util.joinValues(r),received:n.parsedType,code:E.ZodIssueCode.invalid_type}),T.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return(0,T.addIssueToContext)(n,{received:n.data,code:E.ZodIssueCode.invalid_enum_value,options:r}),T.INVALID}return(0,T.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};k.ZodEnum=Gn;Gn.create=Cc;var Vn=class extends X{_parse(e){let n=$.util.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==$.ZodParsedType.string&&r.parsedType!==$.ZodParsedType.number){let s=$.util.objectValues(n);return(0,T.addIssueToContext)(r,{expected:$.util.joinValues(s),received:r.parsedType,code:E.ZodIssueCode.invalid_type}),T.INVALID}if(this._cache||(this._cache=new Set($.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=$.util.objectValues(n);return(0,T.addIssueToContext)(r,{received:r.data,code:E.ZodIssueCode.invalid_enum_value,options:s}),T.INVALID}return(0,T.OK)(e.data)}get enum(){return this._def.values}};k.ZodNativeEnum=Vn;Vn.create=(t,e)=>new Vn({values:t,typeName:G.ZodNativeEnum,...Y(e)});var sn=class extends X{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.promise&&n.common.async===!1)return(0,T.addIssueToContext)(n,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.promise,received:n.parsedType}),T.INVALID;let r=n.parsedType===$.ZodParsedType.promise?n.data:Promise.resolve(n.data);return(0,T.OK)(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};k.ZodPromise=sn;sn.create=(t,e)=>new sn({type:t,typeName:G.ZodPromise,...Y(e)});var Fe=class extends X{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===G.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,T.addIssueToContext)(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async l=>{if(n.value==="aborted")return T.INVALID;let c=await this._def.schema._parseAsync({data:l,path:r.path,parent:r});return c.status==="aborted"?T.INVALID:c.status==="dirty"||n.value==="dirty"?(0,T.DIRTY)(c.value):c});{if(n.value==="aborted")return T.INVALID;let l=this._def.schema._parseSync({data:o,path:r.path,parent:r});return l.status==="aborted"?T.INVALID:l.status==="dirty"||n.value==="dirty"?(0,T.DIRTY)(l.value):l}}if(s.type==="refinement"){let o=l=>{let c=s.refinement(l,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(r.common.async===!1){let l=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return l.status==="aborted"?T.INVALID:(l.status==="dirty"&&n.dirty(),o(l.value),{status:n.value,value:l.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(l=>l.status==="aborted"?T.INVALID:(l.status==="dirty"&&n.dirty(),o(l.value).then(()=>({status:n.value,value:l.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!(0,T.isValid)(o))return T.INVALID;let l=s.transform(o.value,i);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:l}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>(0,T.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(l=>({status:n.value,value:l})):T.INVALID);$.util.assertNever(s)}};k.ZodEffects=Fe;k.ZodTransformer=Fe;Fe.create=(t,e,n)=>new Fe({schema:t,typeName:G.ZodEffects,effect:e,...Y(n)});Fe.createWithPreprocess=(t,e,n)=>new Fe({schema:e,effect:{type:"preprocess",transform:t},typeName:G.ZodEffects,...Y(n)});var Xe=class extends X{_parse(e){return this._getType(e)===$.ZodParsedType.undefined?(0,T.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};k.ZodOptional=Xe;Xe.create=(t,e)=>new Xe({innerType:t,typeName:G.ZodOptional,...Y(e)});var bt=class extends X{_parse(e){return this._getType(e)===$.ZodParsedType.null?(0,T.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};k.ZodNullable=bt;bt.create=(t,e)=>new bt({innerType:t,typeName:G.ZodNullable,...Y(e)});var Wn=class extends X{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===$.ZodParsedType.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};k.ZodDefault=Wn;Wn.create=(t,e)=>new Wn({innerType:t,typeName:G.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Y(e)});var Jn=class extends X{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return(0,T.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new E.ZodError(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new E.ZodError(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};k.ZodCatch=Jn;Jn.create=(t,e)=>new Jn({innerType:t,typeName:G.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Y(e)});var Br=class extends X{_parse(e){if(this._getType(e)!==$.ZodParsedType.nan){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:E.ZodIssueCode.invalid_type,expected:$.ZodParsedType.nan,received:r.parsedType}),T.INVALID}return{status:"valid",value:e.data}}};k.ZodNaN=Br;Br.create=t=>new Br({typeName:G.ZodNaN,...Y(t)});k.BRAND=Symbol("zod_brand");var _s=class extends X{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}};k.ZodBranded=_s;var ks=class t extends X{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?T.INVALID:i.status==="dirty"?(n.dirty(),(0,T.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?T.INVALID:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:G.ZodPipeline})}};k.ZodPipeline=ks;var Yn=class extends X{_parse(e){let n=this._def.innerType._parse(e),r=s=>((0,T.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,T.isAsync)(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};k.ZodReadonly=Yn;Yn.create=(t,e)=>new Yn({innerType:t,typeName:G.ZodReadonly,...Y(e)});function kc(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Ic(t,e={},n){return t?rn.create().superRefine((r,s)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let l=kc(e,r),c=l.fatal??n??!0;s.addIssue({code:"custom",...l,fatal:c})}});if(!i){let o=kc(e,r),l=o.fatal??n??!0;s.addIssue({code:"custom",...o,fatal:l})}}):rn.create()}k.late={object:De.lazycreate};var G;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(G||(k.ZodFirstPartyTypeKind=G={}));var Fm=(t,e={message:`Input not instance of ${t.name}`})=>Ic(n=>n instanceof t,e);k.instanceof=Fm;var Rc=nn.create;k.string=Rc;var Ec=zn.create;k.number=Ec;var Bm=Br.create;k.nan=Bm;var Km=Dn.create;k.bigint=Km;var Ac=Ln.create;k.boolean=Ac;var Hm=Un.create;k.date=Hm;var Zm=Lr.create;k.symbol=Zm;var Gm=qn.create;k.undefined=Gm;var Vm=Fn.create;k.null=Vm;var Wm=rn.create;k.any=Wm;var Jm=Mt.create;k.unknown=Jm;var Ym=ot.create;k.never=Ym;var Xm=Ur.create;k.void=Xm;var Qm=zt.create;k.array=Qm;var eg=De.create;k.object=eg;var tg=De.strictCreate;k.strictObject=tg;var ng=Bn.create;k.union=ng;var rg=mi.create;k.discriminatedUnion=rg;var sg=Kn.create;k.intersection=sg;var ig=yt.create;k.tuple=ig;var og=gi.create;k.record=og;var ag=qr.create;k.map=ag;var lg=Fr.create;k.set=lg;var cg=yi.create;k.function=cg;var ug=Hn.create;k.lazy=ug;var dg=Zn.create;k.literal=dg;var hg=Gn.create;k.enum=hg;var fg=Vn.create;k.nativeEnum=fg;var pg=sn.create;k.promise=pg;var $c=Fe.create;k.effect=$c;k.transformer=$c;var mg=Xe.create;k.optional=mg;var gg=bt.create;k.nullable=gg;var yg=Fe.createWithPreprocess;k.preprocess=yg;var bg=ks.create;k.pipeline=bg;var vg=()=>Rc().optional();k.ostring=vg;var wg=()=>Ec().optional();k.onumber=wg;var _g=()=>Ac().optional();k.oboolean=_g;k.coerce={string:(t=>nn.create({...t,coerce:!0})),number:(t=>zn.create({...t,coerce:!0})),boolean:(t=>Ln.create({...t,coerce:!0})),bigint:(t=>Dn.create({...t,coerce:!0})),date:(t=>Un.create({...t,coerce:!0}))};k.NEVER=T.INVALID});var Zo=re(et=>{"use strict";var kg=et&&et.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(e,n);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,s)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),Kr=et&&et.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&kg(e,t,n)};Object.defineProperty(et,"__esModule",{value:!0});Kr(hi(),et);Kr(Bo(),et);Kr(bc(),et);Kr(vs(),et);Kr(Pc(),et);Kr(di(),et)});var Nc=re(Le=>{"use strict";var jc=Le&&Le.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(e,n);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,s)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),Sg=Le&&Le.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),Tg=Le&&Le.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&jc(e,t,n);return Sg(e,t),e},xg=Le&&Le.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&jc(e,t,n)};Object.defineProperty(Le,"__esModule",{value:!0});Le.z=void 0;var Oc=Tg(Zo());Le.z=Oc;xg(Zo(),Le);Le.default=Oc});var _e=re(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.ChatLoadResultMsg=h.REPLY_STYLES=h.BUILTIN_REPLY_LANGUAGES=h.ChatLoadMsg=h.ChatListResultMsg=h.ChatListMsg=h.ChatUsageMsg=h.ChatStreamMsg=h.JiraUsersResultMsg=h.DeployClaimResultMsg=h.DeployClaimMsg=h.RuleDiagnoseResultMsg=h.ProjectTestResultMsg=h.RunStatusMsg=h.FailedTest=h.RunUsageMsg=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_ASK_FENCE=h.NEEDS_INPUT_MARKER=h.BRANCH_DEPLOY_ISSUE_KEY=h.REQUIRED_AGENT_CAPABILITIES=h.DEFAULT_AGENT_ID=h.REGISTERED_AGENTS=h.PROTOCOL_VERSION=h.GITHUB_TOKEN_PERMISSIONS=void 0;h.SetupStatusResultMsg=h.SetupStatusMsg=h.DeploySuggestResultMsg=h.SelfMigrationApplyResultMsg=h.SelfMigrationApplyMsg=h.SELF_MIGRATION_DIR=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.AuditStatsResultMsg=h.AuditStatsMsg=h.AuditListMsg=h.AuditStartResultMsg=h.AuditStartMsg=h.AuditRecord=h.AuditFinding=h.AuditDetailLevel=h.AuditScope=h.AuditSeverity=h.KnowledgeRole=h.AuditRole=h.EpicSuggestResultMsg=h.EpicSuggestMsg=h.EpicListResultMsg=h.EpicChild=h.EpicListMsg=h.BoardTriggerResultMsg=h.BoardTriggerMsg=h.BoardFetchResultMsg=h.BoardFetchMsg=h.RepoDocReadResultMsg=h.RepoDocReadMsg=h.RepoDocsResultMsg=h.RepoDocsMsg=void 0;h.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_FIX_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.WRITE_TESTS_PROMPT=h.NEEDS_INPUT_OPTIONS_PROMPT=h.DEFAULT_PLAN_PROMPT_TEMPLATE=h.EnrollResponse=h.EnrollRequest=h.ServerToRunnerMsg=h.JiraUsersMsg=h.DeploySuggestMsg=h.DeployFixMsg=h.DeployStartMsg=h.RunRetryPushMsg=h.RunRejectedMsg=h.RunApprovedMsg=h.RunCancelMsg=h.RuleDiagnoseMsg=h.ProjectTestMsg=h.RunClaimResultMsg=h.ConfigMsg=h.HelloAckMsg=h.RunnerToServerMsg=h.AutopilotReportMsg=h.AutopilotNextResultMsg=h.AutopilotNextMsg=h.RunnerUpdateResultMsg=h.AgentProfilesResultMsg=h.AgentProfilesMsg=h.RunPrConflictMsg=h.RunResolveConflictResultMsg=h.RunAnswerResultMsg=h.RunAnswerMsg=h.RunTestFixResultMsg=h.RunTestFixMsg=h.RunResolveConflictMsg=h.RunnerUpdateMsg=h.RepoDocSaveResultMsg=h.RepoDocSaveMsg=h.SetupClaudeMdSaveResultMsg=h.SetupClaudeMdSaveMsg=h.SetupClaudeMdGenerateResultMsg=h.SetupClaudeMdGenerateMsg=void 0;h.missingAgentCapabilities=Cg;h.replyPreferenceAppendix=Rg;h.pendingMigrationsAppendix=Eg;h.isSelfMigrationFilename=Ag;h.parseRunnerMsg=$g;h.parseServerMsg=Pg;var a=Nc();h.GITHUB_TOKEN_PERMISSIONS={where:"github.com/settings/personal-access-tokens/new (fine-grained token)",steps:["Resource owner: the org or user that OWNS the repo - not your personal account, unless the repo is under it","Repository access: Only select repositories -> pick this repo","Contents: Read and write - pushing the agent's branch","Pull requests: Read and write - opening the PR, and merging it when you approve","Metadata: Read-only - GitHub adds this itself and will not let you remove it","Workflows: Read and write - ONLY if changes may touch .github/workflows; without it GitHub rejects those pushes"],note:"A fine-grained token covers exactly ONE resource owner, so a repo in a different org always needs its own token. A classic token with the `repo` scope also works and is simpler, but it reaches every repository you can see - prefer fine-grained."};h.PROTOCOL_VERSION="1.54";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:[],chat:["readOnlyJail","sessionResume"],assist:["readOnlyJail"]};function Cg(t,e){let n=h.REGISTERED_AGENTS.find(r=>r.id===t);return n?(h.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(r=>!n.capabilities[r]):null}h.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";h.NEEDS_INPUT_MARKER="NEEDS-INPUT";h.NEEDS_INPUT_ASK_FENCE="ask";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 Ig=t=>t.includes(h.NEEDS_INPUT_COMMENT_MARKER)||h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>t.includes(e));h.needsInputMarkerIn=Ig;h.RunStatus=a.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);h.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];h.TriggerType=a.z.enum(["label_added","comment_keyword","status_changed"]);h.ActionType=a.z.enum(["plan_only","implement","respond","deploy"]);h.LabelAddedTrigger=a.z.object({type:a.z.literal("label_added"),label:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-planned"),failedLabel:a.z.string().min(1).default("agent-failed")});h.CommentKeywordTrigger=a.z.object({type:a.z.literal("comment_keyword"),keyword:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-implemented"),failedLabel:a.z.string().min(1).default("agent-failed")});h.StatusChangedTrigger=a.z.object({type:a.z.literal("status_changed"),status:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-deployed"),failedLabel:a.z.string().min(1).default("agent-failed")});h.TriggerConfig=a.z.discriminatedUnion("type",[h.LabelAddedTrigger,h.CommentKeywordTrigger,h.StatusChangedTrigger]);h.PlanOnlyAction=a.z.object({type:a.z.literal("plan_only"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(3600).default(900),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default("")});h.ImplementAction=a.z.object({type:a.z.literal("implement"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(7200).default(1800),maxTurns:a.z.number().int().positive().max(500).default(120),requireApproval:a.z.boolean().default(!0),branchTemplate:a.z.string().min(1).default("agent/{{issueKey}}").refine(t=>t.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:a.z.string().min(1).default("main"),jiraTransition:a.z.string().optional(),jiraTransitionOnStart:a.z.string().optional(),jiraTransitionOnMerge:a.z.string().optional(),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default(""),updateMemory:a.z.boolean().default(!1),writeTests:a.z.boolean().default(!0),runTests:a.z.boolean().default(!0),mergeOnApprove:a.z.boolean().default(!0),mergeMethod:a.z.enum(["squash","merge","rebase"]).default("squash"),autoMerge:a.z.boolean().default(!0)});h.RespondAction=a.z.object({type:a.z.literal("respond"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(3600).default(600),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default("")});h.DeployStep=a.z.object({name:a.z.string().min(1).max(120),run:a.z.string().min(1).max(4e3),continueOnError:a.z.boolean().default(!1)});h.PromotionMode=a.z.enum(["deploy_only","merge_and_deploy"]);h.EnvironmentConfig=a.z.object({id:a.z.string(),projectId:a.z.string(),name:a.z.string(),rank:a.z.number().int().nonnegative(),auditBeforeDeploy:a.z.enum(["","security","testing"]).default(""),branch:a.z.string().default(""),publicUrl:a.z.string().default(""),useDedicatedCheckout:a.z.boolean().default(!1),promotionMode:h.PromotionMode.default("deploy_only"),ticketBranchTemplate:a.z.string().default("agent/{{issueKey}}"),steps:a.z.array(h.DeployStep).default([]),workdir:a.z.string().default(""),timeoutSeconds:a.z.number().int().positive().max(21600).default(1800),requiredSecrets:a.z.array(a.z.string()).default([]),requireApproval:a.z.boolean().default(!1),requireSyncCheck:a.z.boolean().default(!1),previousEnvBranch:a.z.string().optional(),deployFromColumn:a.z.string().default(""),deployToColumn:a.z.string().default("")});h.DeployAction=a.z.object({type:a.z.literal("deploy"),envSelection:a.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:a.z.string().optional(),requireStatus:a.z.string().optional()});h.ActionConfig=a.z.discriminatedUnion("type",[h.PlanOnlyAction,h.ImplementAction,h.RespondAction,h.DeployAction]);h.ProjectConfig=a.z.object({id:a.z.string(),name:a.z.string(),jiraProjectKey:a.z.string(),goLiveIssueKey:a.z.string().default(""),repoName:a.z.string(),jiraSiteUrl:a.z.string().default(""),defaultAgent:a.z.string().default("claude-code"),componentRoutes:a.z.array(a.z.object({component:a.z.string().min(1),repoName:a.z.string().min(1)})).default([])});h.RuleConfig=a.z.object({id:a.z.string(),projectId:a.z.string(),name:a.z.string(),enabled:a.z.boolean(),trigger:h.TriggerConfig,action:h.ActionConfig});h.HelloMsg=a.z.object({type:a.z.literal("hello"),protocolVersion:a.z.string(),runnerVersion:a.z.string(),platform:a.z.string(),justBooted:a.z.boolean().optional()});h.HeartbeatMsg=a.z.object({type:a.z.literal("heartbeat"),ts:a.z.string()});h.RunClaimMsg=a.z.object({type:a.z.literal("run.claim"),requestId:a.z.string(),ruleId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),triggerFingerprint:a.z.string(),dedupKey:a.z.string().optional(),triggeredByAccountId:a.z.string().optional()});h.RunLogMsg=a.z.object({type:a.z.literal("run.log"),runId:a.z.string(),seq:a.z.number().int().nonnegative(),ts:a.z.string(),level:a.z.enum(["info","warn","error","agent"]),message:a.z.string().max(16384)});h.RunUsageMsg=a.z.object({type:a.z.literal("run.usage"),runId:a.z.string(),inputTokens:a.z.number().int().nonnegative(),outputTokens:a.z.number().int().nonnegative(),cacheReadTokens:a.z.number().int().nonnegative().optional(),costUsd:a.z.number().nonnegative().optional(),turns:a.z.number().int().nonnegative().optional()});h.FailedTest=a.z.object({command:a.z.string().max(500),exitCode:a.z.number().int(),tail:a.z.string().max(4e3)});h.RunStatusMsg=a.z.object({type:a.z.literal("run.status"),runId:a.z.string(),status:h.RunStatus,error:a.z.string().optional(),errorKind:a.z.enum(["guard"]).optional(),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional(),resultSummary:a.z.string().max(2e3).optional(),billingMode:a.z.enum(["subscription","api","unknown"]).optional(),model:a.z.string().max(200).optional(),prUrl:a.z.string().optional(),headSha:a.z.string().optional(),deployedRef:a.z.string().optional(),retryAvailable:a.z.boolean().optional(),failedTests:a.z.array(h.FailedTest).max(20).optional(),testsPassed:a.z.number().int().nonnegative().optional(),testsTotal:a.z.number().int().nonnegative().optional(),manualSteps:a.z.array(a.z.object({command:a.z.string().max(500),why:a.z.string().max(300).default("")})).max(20).optional(),goLiveDraft:a.z.string().max(4e3).optional(),inputQuestions:a.z.string().max(4e3).optional(),inputOptions:a.z.array(a.z.string().max(200)).max(5).optional()});h.ProjectTestResultMsg=a.z.object({type:a.z.literal("project.test.result"),requestId:a.z.string(),ok:a.z.boolean(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string(),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")}))});h.RuleDiagnoseResultMsg=a.z.object({type:a.z.literal("rule.diagnose.result"),requestId:a.z.string(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string(),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")})),matchedCount:a.z.number().int().nonnegative(),excludedCount:a.z.number().int().nonnegative(),excludedSample:a.z.array(a.z.string()).max(5)});h.DeployClaimMsg=a.z.object({type:a.z.literal("deploy.claim"),requestId:a.z.string(),projectId:a.z.string(),ruleId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),environmentName:a.z.string(),requestedByAccountId:a.z.string().optional(),requestedByDisplayName:a.z.string().default(""),dedupKey:a.z.string(),triggerFingerprint:a.z.string()});h.DeployClaimResultMsg=a.z.object({type:a.z.literal("deploy.claim.result"),requestId:a.z.string(),accepted:a.z.boolean(),runId:a.z.string().optional(),environment:h.EnvironmentConfig.optional(),reason:a.z.string().optional(),code:a.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});h.JiraUsersResultMsg=a.z.object({type:a.z.literal("jira.users.result"),requestId:a.z.string(),ok:a.z.boolean(),users:a.z.array(a.z.object({accountId:a.z.string(),displayName:a.z.string(),email:a.z.string().default(""),active:a.z.boolean().default(!0)})).default([]),error:a.z.string().optional()});h.ChatStreamMsg=a.z.object({type:a.z.literal("chat.stream"),requestId:a.z.string(),seq:a.z.number().int().nonnegative(),text:a.z.string().max(8e3)});h.ChatUsageMsg=a.z.object({type:a.z.literal("chat.usage"),requestId:a.z.string(),inputTokens:a.z.number().int().nonnegative(),outputTokens:a.z.number().int().nonnegative(),cacheReadTokens:a.z.number().int().nonnegative().optional(),turns:a.z.number().int().nonnegative().optional()});h.ChatListMsg=a.z.object({type:a.z.literal("chat.list"),requestId:a.z.string(),projectId:a.z.string()});h.ChatListResultMsg=a.z.object({type:a.z.literal("chat.list.result"),requestId:a.z.string(),sessions:a.z.array(a.z.object({sessionId:a.z.string(),title:a.z.string().default(""),updatedAt:a.z.string().default(""),messageCount:a.z.number().int().nonnegative().default(0)})).default([])});h.ChatLoadMsg=a.z.object({type:a.z.literal("chat.load"),requestId:a.z.string(),sessionId:a.z.string()});h.BUILTIN_REPLY_LANGUAGES=[{name:"English",instruction:"Write your prose in English."},{name:"Hindi",instruction:"Write your prose in Hindi, in the Devanagari script. Keep technical terms that have no everyday Hindi equivalent in English rather than inventing a translation."},{name:"Hinglish",instruction:"Write your prose in Hinglish: conversational Hindi written in the Latin alphabet, with English technical words left in English - the way an Indian developer talks at work."}];h.REPLY_STYLES=[{id:"technical",label:"Technical",hint:"Full detail - names files, functions and trade-offs",instruction:"Answer at full technical depth: name the files, functions and data structures involved, and state trade-offs precisely. Assume the reader reads code every day."},{id:"balanced",label:"Balanced",hint:"Plain explanation, with the technical detail that matters",instruction:"Explain in plain language first, then add the technical detail that actually matters for the decision. Assume the reader is technical but does not know this codebase."},{id:"simple",label:"Simple",hint:"Everyday words - no jargon unless it is unavoidable",instruction:"Answer in everyday words, as if to someone who does not write code. Avoid jargon; when a technical term is unavoidable, explain it in half a sentence. Prefer short paragraphs and concrete examples over precision about internals."}];function Rg(t){let e=[],n=(t.language??"").trim();if(n){let s=h.BUILTIN_REPLY_LANGUAGES.find(i=>i.name.toLowerCase()===n.toLowerCase());e.push((t.languageInstruction??"").trim()||s?.instruction||`Write your prose in ${n}.`),e.push("Code, file paths, identifiers, commands, error text and log output stay exactly as they are - only your own prose changes language."),e.push("The ```ticket block is the exception: its summary and description are ALWAYS written in English, because the ticket is read by other people and by the implementing agent.")}let r=h.REPLY_STYLES.find(s=>s.id===(t.style??"").trim());return r&&e.push(r.instruction),e.length?`
23
+ `)}),this}_outputHelpIfRequested(e){let n=this._getHelpOption();n&&e.find(s=>n.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Nl(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let n,r="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?n=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(n=i[1],/^\d+$/.test(i[3])?s=i[3]:r=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(n=i[1],r=i[3],s=i[4]),n&&s!=="0"?`${n}=${r}:${parseInt(s)+1}`:e})}Ml.Command=Ro});var ql=re(Ve=>{var{Argument:Dl}=Ys(),{Command:$o}=zl(),{CommanderError:Uf,InvalidArgumentError:Ll}=ps(),{Help:qf}=ko(),{Option:Ul}=Co();Ve.program=new $o;Ve.createCommand=t=>new $o(t);Ve.createOption=(t,e)=>new Ul(t,e);Ve.createArgument=(t,e)=>new Dl(t,e);Ve.Command=$o;Ve.Option=Ul;Ve.Argument=Dl;Ve.Help=qf;Ve.CommanderError=Uf;Ve.InvalidArgumentError=Ll;Ve.InvalidOptionArgumentError=Ll});var vs=re(ce=>{"use strict";Object.defineProperty(ce,"__esModule",{value:!0});ce.getParsedType=ce.ZodParsedType=ce.objectUtil=ce.util=void 0;var Lo;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},t.getValidEnumValues=s=>{let i=t.objectKeys(s).filter(l=>typeof s[s[l]]!="number"),o={};for(let l of i)o[l]=s[l];return t.objectValues(o)},t.objectValues=s=>t.objectKeys(s).map(function(i){return s[i]}),t.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},t.find=(s,i)=>{for(let o of s)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Lo||(ce.util=Lo={}));var hc;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(hc||(ce.objectUtil=hc={}));ce.ZodParsedType=Lo.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var im=t=>{switch(typeof t){case"undefined":return ce.ZodParsedType.undefined;case"string":return ce.ZodParsedType.string;case"number":return Number.isNaN(t)?ce.ZodParsedType.nan:ce.ZodParsedType.number;case"boolean":return ce.ZodParsedType.boolean;case"function":return ce.ZodParsedType.function;case"bigint":return ce.ZodParsedType.bigint;case"symbol":return ce.ZodParsedType.symbol;case"object":return Array.isArray(t)?ce.ZodParsedType.array:t===null?ce.ZodParsedType.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?ce.ZodParsedType.promise:typeof Map<"u"&&t instanceof Map?ce.ZodParsedType.map:typeof Set<"u"&&t instanceof Set?ce.ZodParsedType.set:typeof Date<"u"&&t instanceof Date?ce.ZodParsedType.date:ce.ZodParsedType.object;default:return ce.ZodParsedType.unknown}};ce.getParsedType=im});var di=re(en=>{"use strict";Object.defineProperty(en,"__esModule",{value:!0});en.ZodError=en.quotelessJson=en.ZodIssueCode=void 0;var fc=vs();en.ZodIssueCode=fc.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 om=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:");en.quotelessJson=om;var ws=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_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)r._errors.push(n(o));else{let l=r,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(l[u]=l[u]||{_errors:[]},l[u]._errors.push(n(o))):l[u]=l[u]||{_errors:[]},l=l[u],c++}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,fc.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];n[i]=n[i]||[],n[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};en.ZodError=ws;ws.create=t=>new ws(t)});var qo=re(Uo=>{"use strict";Object.defineProperty(Uo,"__esModule",{value:!0});var Ae=di(),Mn=vs(),am=(t,e)=>{let n;switch(t.code){case Ae.ZodIssueCode.invalid_type:t.received===Mn.ZodParsedType.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case Ae.ZodIssueCode.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,Mn.util.jsonStringifyReplacer)}`;break;case Ae.ZodIssueCode.unrecognized_keys:n=`Unrecognized key(s) in object: ${Mn.util.joinValues(t.keys,", ")}`;break;case Ae.ZodIssueCode.invalid_union:n="Invalid input";break;case Ae.ZodIssueCode.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${Mn.util.joinValues(t.options)}`;break;case Ae.ZodIssueCode.invalid_enum_value:n=`Invalid enum value. Expected ${Mn.util.joinValues(t.options)}, received '${t.received}'`;break;case Ae.ZodIssueCode.invalid_arguments:n="Invalid function arguments";break;case Ae.ZodIssueCode.invalid_return_type:n="Invalid function return type";break;case Ae.ZodIssueCode.invalid_date:n="Invalid date";break;case Ae.ZodIssueCode.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:Mn.util.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case Ae.ZodIssueCode.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case Ae.ZodIssueCode.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case Ae.ZodIssueCode.custom:n="Invalid input";break;case Ae.ZodIssueCode.invalid_intersection_types:n="Intersection results could not be merged";break;case Ae.ZodIssueCode.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case Ae.ZodIssueCode.not_finite:n="Number must be finite";break;default:n=e.defaultError,Mn.util.assertNever(t)}return{message:n}};Uo.default=am});var hi=re(tn=>{"use strict";var lm=tn&&tn.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(tn,"__esModule",{value:!0});tn.defaultErrorMap=void 0;tn.setErrorMap=cm;tn.getErrorMap=um;var pc=lm(qo());tn.defaultErrorMap=pc.default;var mc=pc.default;function cm(t){mc=t}function um(){return mc}});var Bo=re(oe=>{"use strict";var dm=oe&&oe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(oe,"__esModule",{value:!0});oe.isAsync=oe.isValid=oe.isDirty=oe.isAborted=oe.OK=oe.DIRTY=oe.INVALID=oe.ParseStatus=oe.EMPTY_PATH=oe.makeIssue=void 0;oe.addIssueToContext=pm;var hm=hi(),gc=dm(qo()),fm=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,i=[...n,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let l="",c=r.filter(u=>!!u).slice().reverse();for(let u of c)l=u(o,{data:e,defaultError:l}).message;return{...s,path:i,message:l}};oe.makeIssue=fm;oe.EMPTY_PATH=[];function pm(t,e){let n=(0,hm.getErrorMap)(),r=(0,oe.makeIssue)({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===gc.default?void 0:gc.default].filter(s=>!!s)});t.common.issues.push(r)}var Fo=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return oe.INVALID;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return oe.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}};oe.ParseStatus=Fo;oe.INVALID=Object.freeze({status:"aborted"});var mm=t=>({status:"dirty",value:t});oe.DIRTY=mm;var gm=t=>({status:"valid",value:t});oe.OK=gm;var ym=t=>t.status==="aborted";oe.isAborted=ym;var bm=t=>t.status==="dirty";oe.isDirty=bm;var vm=t=>t.status==="valid";oe.isValid=vm;var wm=t=>typeof Promise<"u"&&t instanceof Promise;oe.isAsync=wm});var bc=re(yc=>{"use strict";Object.defineProperty(yc,"__esModule",{value:!0})});var wc=re(fi=>{"use strict";Object.defineProperty(fi,"__esModule",{value:!0});fi.errorUtil=void 0;var vc;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(vc||(fi.errorUtil=vc={}))});var Pc=re(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.discriminatedUnion=k.date=k.boolean=k.bigint=k.array=k.any=k.coerce=k.ZodFirstPartyTypeKind=k.late=k.ZodSchema=k.Schema=k.ZodReadonly=k.ZodPipeline=k.ZodBranded=k.BRAND=k.ZodNaN=k.ZodCatch=k.ZodDefault=k.ZodNullable=k.ZodOptional=k.ZodTransformer=k.ZodEffects=k.ZodPromise=k.ZodNativeEnum=k.ZodEnum=k.ZodLiteral=k.ZodLazy=k.ZodFunction=k.ZodSet=k.ZodMap=k.ZodRecord=k.ZodTuple=k.ZodIntersection=k.ZodDiscriminatedUnion=k.ZodUnion=k.ZodObject=k.ZodArray=k.ZodVoid=k.ZodNever=k.ZodUnknown=k.ZodAny=k.ZodNull=k.ZodUndefined=k.ZodSymbol=k.ZodDate=k.ZodBoolean=k.ZodBigInt=k.ZodNumber=k.ZodString=k.ZodType=void 0;k.NEVER=k.void=k.unknown=k.union=k.undefined=k.tuple=k.transformer=k.symbol=k.string=k.strictObject=k.set=k.record=k.promise=k.preprocess=k.pipeline=k.ostring=k.optional=k.onumber=k.oboolean=k.object=k.number=k.nullable=k.null=k.never=k.nativeEnum=k.nan=k.map=k.literal=k.lazy=k.intersection=k.instanceof=k.function=k.enum=k.effect=void 0;k.datetimeRegex=xc;k.custom=Ic;var A=di(),pi=hi(),q=wc(),T=Bo(),$=vs(),Qe=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},_c=(t,e)=>{if((0,T.isValid)(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new A.ZodError(t.common.issues);return this._error=n,this._error}}};function X(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))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,l)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??l.defaultError}:typeof l.data>"u"?{message:c??r??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:c??n??l.defaultError}},description:s}}var Q=class{get description(){return this._def.description}_getType(e){return(0,$.getParsedType)(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:(0,$.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new T.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,$.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if((0,T.isAsync)(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)},s=this._parseSync({data:e,path:r.path,parent:r});return _c(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return(0,T.isValid)(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>(0,T.isValid)(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,$.getParsedType)(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await((0,T.isAsync)(s)?s:Promise.resolve(s));return _c(r,i)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,i)=>{let o=e(s),l=()=>i.addIssue({code:A.ZodIssueCode.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(e,n){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof n=="function"?n(r,s):n),!1))}_refinement(e){return new Fe({schema:this,typeName:V.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:n=>this["~validate"](n)}}optional(){return Xe.create(this,this._def)}nullable(){return bt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return zt.create(this)}promise(){return sn.create(this,this._def)}or(e){return Bn.create([this,e],this._def)}and(e){return Kn.create(this,e,this._def)}transform(e){return new Fe({...X(this._def),schema:this,typeName:V.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new Wn({...X(this._def),innerType:this,defaultValue:n,typeName:V.ZodDefault})}brand(){return new _s({typeName:V.ZodBranded,type:this,...X(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Jn({...X(this._def),innerType:this,catchValue:n,typeName:V.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return ks.create(this,e)}readonly(){return Yn.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};k.ZodType=Q;k.Schema=Q;k.ZodSchema=Q;var _m=/^c[^\s-]{8,}$/i,km=/^[0-9a-z]+$/,Sm=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Tm=/^[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,xm=/^[a-z0-9_-]{21}$/i,Cm=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Im=/^[-+]?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)?)??$/,Em=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Am="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Ko,Rm=/^(?:(?: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])$/,$m=/^(?:(?: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])$/,Pm=/^(([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]))$/,jm=/^(([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])$/,Om=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Nm=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Sc="((\\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])))",Mm=new RegExp(`^${Sc}$`);function Tc(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function zm(t){return new RegExp(`^${Tc(t)}$`)}function xc(t){let e=`${Sc}T${Tc(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Dm(t,e){return!!((e==="v4"||!e)&&Rm.test(t)||(e==="v6"||!e)&&Pm.test(t))}function Lm(t,e){if(!Cm.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function Um(t,e){return!!((e==="v4"||!e)&&$m.test(t)||(e==="v6"||!e)&&jm.test(t))}var nn=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==$.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.string,received:i.parsedType}),T.INVALID}let r=new T.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,l=e.data.length<i.value;(o||l)&&(s=this._getOrReturnCtx(e,s),o?(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):l&&(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Em.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"email",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")Ko||(Ko=new RegExp(Am,"u")),Ko.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"emoji",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Tm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"uuid",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")xm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"nanoid",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")_m.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cuid",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")km.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cuid2",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Sm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"ulid",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"url",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"regex",code:A.ZodIssueCode.invalid_string,message:i.message}),r.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,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.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,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?xc(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?Mm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?zm(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Im.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"duration",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?Dm(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"ip",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?Lm(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"jwt",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?Um(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"cidr",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?Om.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"base64",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?Nm.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{validation:"base64url",code:A.ZodIssueCode.invalid_string,message:i.message}),r.dirty()):$.util.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:A.ZodIssueCode.invalid_string,...q.errorUtil.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...q.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...q.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...q.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...q.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...q.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...q.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...q.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...q.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...q.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...q.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...q.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...q.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...q.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,...q.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,...q.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...q.errorUtil.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...q.errorUtil.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...q.errorUtil.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...q.errorUtil.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...q.errorUtil.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...q.errorUtil.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...q.errorUtil.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...q.errorUtil.errToObj(n)})}nonempty(e){return this.min(1,q.errorUtil.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...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 n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};k.ZodString=nn;nn.create=t=>new nn({checks:[],typeName:V.ZodString,coerce:t?.coerce??!1,...X(t)});function qm(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,i=Number.parseInt(t.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var zn=class t extends Q{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)!==$.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.number,received:i.parsedType}),T.INVALID}let r,s=new T.ParseStatus;for(let i of this._def.checks)i.kind==="int"?$.util.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?qm(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.not_finite,message:i.message}),s.dirty()):$.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,q.errorUtil.toString(n))}gt(e,n){return this.setLimit("min",e,!1,q.errorUtil.toString(n))}lte(e,n){return this.setLimit("max",e,!0,q.errorUtil.toString(n))}lt(e,n){return this.setLimit("max",e,!1,q.errorUtil.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:q.errorUtil.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:q.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:q.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:q.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:q.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:q.errorUtil.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:q.errorUtil.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:q.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:q.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:q.errorUtil.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&$.util.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};k.ZodNumber=zn;zn.create=t=>new zn({checks:[],typeName:V.ZodNumber,coerce:t?.coerce||!1,...X(t)});var Dn=class t extends Q{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)!==$.ZodParsedType.bigint)return this._getInvalidInput(e);let r,s=new T.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.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)&&(r=this._getOrReturnCtx(e,r),(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):$.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.bigint,received:n.parsedType}),T.INVALID}gte(e,n){return this.setLimit("min",e,!0,q.errorUtil.toString(n))}gt(e,n){return this.setLimit("min",e,!1,q.errorUtil.toString(n))}lte(e,n){return this.setLimit("max",e,!0,q.errorUtil.toString(n))}lt(e,n){return this.setLimit("max",e,!1,q.errorUtil.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:q.errorUtil.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:q.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:q.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:q.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:q.errorUtil.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:q.errorUtil.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};k.ZodBigInt=Dn;Dn.create=t=>new Dn({checks:[],typeName:V.ZodBigInt,coerce:t?.coerce??!1,...X(t)});var Ln=class extends Q{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==$.ZodParsedType.boolean){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.boolean,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodBoolean=Ln;Ln.create=t=>new Ln({typeName:V.ZodBoolean,coerce:t?.coerce||!1,...X(t)});var Un=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==$.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.date,received:i.parsedType}),T.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(i,{code:A.ZodIssueCode.invalid_date}),T.INVALID}let r=new T.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,T.addIssueToContext)(s,{code:A.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):$.util.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:q.errorUtil.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:q.errorUtil.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};k.ZodDate=Un;Un.create=t=>new Un({checks:[],coerce:t?.coerce||!1,typeName:V.ZodDate,...X(t)});var Lr=class extends Q{_parse(e){if(this._getType(e)!==$.ZodParsedType.symbol){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.symbol,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodSymbol=Lr;Lr.create=t=>new Lr({typeName:V.ZodSymbol,...X(t)});var qn=class extends Q{_parse(e){if(this._getType(e)!==$.ZodParsedType.undefined){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.undefined,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodUndefined=qn;qn.create=t=>new qn({typeName:V.ZodUndefined,...X(t)});var Fn=class extends Q{_parse(e){if(this._getType(e)!==$.ZodParsedType.null){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.null,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodNull=Fn;Fn.create=t=>new Fn({typeName:V.ZodNull,...X(t)});var rn=class extends Q{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,T.OK)(e.data)}};k.ZodAny=rn;rn.create=t=>new rn({typeName:V.ZodAny,...X(t)});var Mt=class extends Q{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,T.OK)(e.data)}};k.ZodUnknown=Mt;Mt.create=t=>new Mt({typeName:V.ZodUnknown,...X(t)});var ot=class extends Q{_parse(e){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.never,received:n.parsedType}),T.INVALID}};k.ZodNever=ot;ot.create=t=>new ot({typeName:V.ZodNever,...X(t)});var Ur=class extends Q{_parse(e){if(this._getType(e)!==$.ZodParsedType.undefined){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.void,received:r.parsedType}),T.INVALID}return(0,T.OK)(e.data)}};k.ZodVoid=Ur;Ur.create=t=>new Ur({typeName:V.ZodVoid,...X(t)});var zt=class t extends Q{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==$.ZodParsedType.array)return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.array,received:n.parsedType}),T.INVALID;if(s.exactLength!==null){let o=n.data.length>s.exactLength.value,l=n.data.length<s.exactLength.value;(o||l)&&((0,T.addIssueToContext)(n,{code:o?A.ZodIssueCode.too_big:A.ZodIssueCode.too_small,minimum:l?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&n.data.length<s.minLength.value&&((0,T.addIssueToContext)(n,{code:A.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&((0,T.addIssueToContext)(n,{code:A.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,l)=>s.type._parseAsync(new Qe(n,o,n.path,l)))).then(o=>T.ParseStatus.mergeArray(r,o));let i=[...n.data].map((o,l)=>s.type._parseSync(new Qe(n,o,n.path,l)));return T.ParseStatus.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:q.errorUtil.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:q.errorUtil.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:q.errorUtil.toString(n)}})}nonempty(e){return this.min(1,e)}};k.ZodArray=zt;zt.create=(t,e)=>new zt({type:t,minLength:null,maxLength:null,exactLength:null,typeName:V.ZodArray,...X(e)});function Dr(t){if(t instanceof De){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=Xe.create(Dr(r))}return new De({...t._def,shape:()=>e})}else return t instanceof zt?new zt({...t._def,type:Dr(t.element)}):t instanceof Xe?Xe.create(Dr(t.unwrap())):t instanceof bt?bt.create(Dr(t.unwrap())):t instanceof yt?yt.create(t.items.map(e=>Dr(e))):t}var De=class t extends Q{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(),n=$.util.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==$.ZodParsedType.object){let u=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(u,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:u.parsedType}),T.INVALID}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof ot&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||l.push(u);let c=[];for(let u of o){let f=i[u],p=s.data[u];c.push({key:{status:"valid",value:u},value:f._parse(new Qe(s,p,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof ot){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of l)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")l.length>0&&((0,T.addIssueToContext)(s,{code:A.ZodIssueCode.unrecognized_keys,keys:l}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of l){let p=s.data[f];c.push({key:{status:"valid",value:f},value:u._parse(new Qe(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let u=[];for(let f of c){let p=await f.key,b=await f.value;u.push({key:p,value:b,alwaysSet:f.alwaysSet})}return u}).then(u=>T.ParseStatus.mergeObjectSync(r,u)):T.ParseStatus.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return q.errorUtil.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:q.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:V.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of $.util.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of $.util.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Dr(this)}partial(e){let n={};for(let r of $.util.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of $.util.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof Xe;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return Cc($.util.objectKeys(this.shape))}};k.ZodObject=De;De.create=(t,e)=>new De({shape:()=>t,unknownKeys:"strip",catchall:ot.create(),typeName:V.ZodObject,...X(e)});De.strictCreate=(t,e)=>new De({shape:()=>t,unknownKeys:"strict",catchall:ot.create(),typeName:V.ZodObject,...X(e)});De.lazycreate=(t,e)=>new De({shape:t,unknownKeys:"strip",catchall:ot.create(),typeName:V.ZodObject,...X(e)});var Bn=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(i){for(let l of i)if(l.result.status==="valid")return l.result;for(let l of i)if(l.result.status==="dirty")return n.common.issues.push(...l.ctx.common.issues),l.result;let o=i.map(l=>new A.ZodError(l.ctx.common.issues));return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_union,unionErrors:o}),T.INVALID}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let u={...n,common:{...n.common,issues:[]},parent:null},f=c._parseSync({data:n.data,path:n.path,parent:u});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let l=o.map(c=>new A.ZodError(c));return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_union,unionErrors:l}),T.INVALID}}get options(){return this._def.options}};k.ZodUnion=Bn;Bn.create=(t,e)=>new Bn({options:t,typeName:V.ZodUnion,...X(e)});var Nt=t=>t instanceof Hn?Nt(t.schema):t instanceof Fe?Nt(t.innerType()):t instanceof Zn?[t.value]:t instanceof Gn?t.options:t instanceof Vn?$.util.objectValues(t.enum):t instanceof Wn?Nt(t._def.innerType):t instanceof qn?[void 0]:t instanceof Fn?[null]:t instanceof Xe?[void 0,...Nt(t.unwrap())]:t instanceof bt?[null,...Nt(t.unwrap())]:t instanceof _s||t instanceof Yn?Nt(t.unwrap()):t instanceof Jn?Nt(t._def.innerType):[],mi=class t extends Q{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.object)return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:n.parsedType}),T.INVALID;let r=this.discriminator,s=n.data[r],i=this.optionsMap.get(s);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):((0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),T.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let i of n){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 l of o){if(s.has(l))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(l)}`);s.set(l,i)}}return new t({typeName:V.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...X(r)})}};k.ZodDiscriminatedUnion=mi;function Ho(t,e){let n=(0,$.getParsedType)(t),r=(0,$.getParsedType)(e);if(t===e)return{valid:!0,data:t};if(n===$.ZodParsedType.object&&r===$.ZodParsedType.object){let s=$.util.objectKeys(e),i=$.util.objectKeys(t).filter(l=>s.indexOf(l)!==-1),o={...t,...e};for(let l of i){let c=Ho(t[l],e[l]);if(!c.valid)return{valid:!1};o[l]=c.data}return{valid:!0,data:o}}else if(n===$.ZodParsedType.array&&r===$.ZodParsedType.array){if(t.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let o=t[i],l=e[i],c=Ho(o,l);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return n===$.ZodParsedType.date&&r===$.ZodParsedType.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Kn=class extends Q{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(i,o)=>{if((0,T.isAborted)(i)||(0,T.isAborted)(o))return T.INVALID;let l=Ho(i.value,o.value);return l.valid?(((0,T.isDirty)(i)||(0,T.isDirty)(o))&&n.dirty(),{status:n.value,value:l.data}):((0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_intersection_types}),T.INVALID)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};k.ZodIntersection=Kn;Kn.create=(t,e,n)=>new Kn({left:t,right:e,typeName:V.ZodIntersection,...X(n)});var yt=class t extends Q{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.array)return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.array,received:r.parsedType}),T.INVALID;if(r.data.length<this._def.items.length)return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),T.INVALID;!this._def.rest&&r.data.length>this._def.items.length&&((0,T.addIssueToContext)(r,{code:A.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,l)=>{let c=this._def.items[l]||this._def.rest;return c?c._parse(new Qe(r,o,r.path,l)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>T.ParseStatus.mergeArray(n,o)):T.ParseStatus.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};k.ZodTuple=yt;yt.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new yt({items:t,typeName:V.ZodTuple,rest:null,...X(e)})};var gi=class t extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.object)return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.object,received:r.parsedType}),T.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let l in r.data)s.push({key:i._parse(new Qe(r,l,r.path,l)),value:o._parse(new Qe(r,r.data[l],r.path,l)),alwaysSet:l in r.data});return r.common.async?T.ParseStatus.mergeObjectAsync(n,s):T.ParseStatus.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof Q?new t({keyType:e,valueType:n,typeName:V.ZodRecord,...X(r)}):new t({keyType:nn.create(),valueType:e,typeName:V.ZodRecord,...X(n)})}};k.ZodRecord=gi;var qr=class extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.map)return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.map,received:r.parsedType}),T.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([l,c],u)=>({key:s._parse(new Qe(r,l,r.path,[u,"key"])),value:i._parse(new Qe(r,c,r.path,[u,"value"]))}));if(r.common.async){let l=new Map;return Promise.resolve().then(async()=>{for(let c of o){let u=await c.key,f=await c.value;if(u.status==="aborted"||f.status==="aborted")return T.INVALID;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}})}else{let l=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return T.INVALID;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}}}};k.ZodMap=qr;qr.create=(t,e,n)=>new qr({valueType:e,keyType:t,typeName:V.ZodMap,...X(n)});var Fr=class t extends Q{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==$.ZodParsedType.set)return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.set,received:r.parsedType}),T.INVALID;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&((0,T.addIssueToContext)(r,{code:A.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&((0,T.addIssueToContext)(r,{code:A.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return T.INVALID;f.status==="dirty"&&n.dirty(),u.add(f.value)}return{status:n.value,value:u}}let l=[...r.data.values()].map((c,u)=>i._parse(new Qe(r,c,r.path,u)));return r.common.async?Promise.all(l).then(c=>o(c)):o(l)}min(e,n){return new t({...this._def,minSize:{value:e,message:q.errorUtil.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:q.errorUtil.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};k.ZodSet=Fr;Fr.create=(t,e)=>new Fr({valueType:t,minSize:null,maxSize:null,typeName:V.ZodSet,...X(e)});var yi=class t extends Q{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.function)return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.function,received:n.parsedType}),T.INVALID;function r(l,c){return(0,T.makeIssue)({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,pi.getErrorMap)(),pi.defaultErrorMap].filter(u=>!!u),issueData:{code:A.ZodIssueCode.invalid_arguments,argumentsError:c}})}function s(l,c){return(0,T.makeIssue)({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,pi.getErrorMap)(),pi.defaultErrorMap].filter(u=>!!u),issueData:{code:A.ZodIssueCode.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof sn){let l=this;return(0,T.OK)(async function(...c){let u=new A.ZodError([]),f=await l._def.args.parseAsync(c,i).catch(w=>{throw u.addIssue(r(c,w)),u}),p=await Reflect.apply(o,this,f);return await l._def.returns._def.type.parseAsync(p,i).catch(w=>{throw u.addIssue(s(p,w)),u})})}else{let l=this;return(0,T.OK)(function(...c){let u=l._def.args.safeParse(c,i);if(!u.success)throw new A.ZodError([r(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=l._def.returns.safeParse(f,i);if(!p.success)throw new A.ZodError([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:yt.create(e).rest(Mt.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||yt.create([]).rest(Mt.create()),returns:n||Mt.create(),typeName:V.ZodFunction,...X(r)})}};k.ZodFunction=yi;var Hn=class extends Q{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};k.ZodLazy=Hn;Hn.create=(t,e)=>new Hn({getter:t,typeName:V.ZodLazy,...X(e)});var Zn=class extends Q{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(n,{received:n.data,code:A.ZodIssueCode.invalid_literal,expected:this._def.value}),T.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};k.ZodLiteral=Zn;Zn.create=(t,e)=>new Zn({value:t,typeName:V.ZodLiteral,...X(e)});function Cc(t,e){return new Gn({values:t,typeName:V.ZodEnum,...X(e)})}var Gn=class t extends Q{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return(0,T.addIssueToContext)(n,{expected:$.util.joinValues(r),received:n.parsedType,code:A.ZodIssueCode.invalid_type}),T.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return(0,T.addIssueToContext)(n,{received:n.data,code:A.ZodIssueCode.invalid_enum_value,options:r}),T.INVALID}return(0,T.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};k.ZodEnum=Gn;Gn.create=Cc;var Vn=class extends Q{_parse(e){let n=$.util.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==$.ZodParsedType.string&&r.parsedType!==$.ZodParsedType.number){let s=$.util.objectValues(n);return(0,T.addIssueToContext)(r,{expected:$.util.joinValues(s),received:r.parsedType,code:A.ZodIssueCode.invalid_type}),T.INVALID}if(this._cache||(this._cache=new Set($.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=$.util.objectValues(n);return(0,T.addIssueToContext)(r,{received:r.data,code:A.ZodIssueCode.invalid_enum_value,options:s}),T.INVALID}return(0,T.OK)(e.data)}get enum(){return this._def.values}};k.ZodNativeEnum=Vn;Vn.create=(t,e)=>new Vn({values:t,typeName:V.ZodNativeEnum,...X(e)});var sn=class extends Q{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==$.ZodParsedType.promise&&n.common.async===!1)return(0,T.addIssueToContext)(n,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.promise,received:n.parsedType}),T.INVALID;let r=n.parsedType===$.ZodParsedType.promise?n.data:Promise.resolve(n.data);return(0,T.OK)(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};k.ZodPromise=sn;sn.create=(t,e)=>new sn({type:t,typeName:V.ZodPromise,...X(e)});var Fe=class extends Q{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===V.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,T.addIssueToContext)(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async l=>{if(n.value==="aborted")return T.INVALID;let c=await this._def.schema._parseAsync({data:l,path:r.path,parent:r});return c.status==="aborted"?T.INVALID:c.status==="dirty"||n.value==="dirty"?(0,T.DIRTY)(c.value):c});{if(n.value==="aborted")return T.INVALID;let l=this._def.schema._parseSync({data:o,path:r.path,parent:r});return l.status==="aborted"?T.INVALID:l.status==="dirty"||n.value==="dirty"?(0,T.DIRTY)(l.value):l}}if(s.type==="refinement"){let o=l=>{let c=s.refinement(l,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(r.common.async===!1){let l=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return l.status==="aborted"?T.INVALID:(l.status==="dirty"&&n.dirty(),o(l.value),{status:n.value,value:l.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(l=>l.status==="aborted"?T.INVALID:(l.status==="dirty"&&n.dirty(),o(l.value).then(()=>({status:n.value,value:l.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!(0,T.isValid)(o))return T.INVALID;let l=s.transform(o.value,i);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:l}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>(0,T.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(l=>({status:n.value,value:l})):T.INVALID);$.util.assertNever(s)}};k.ZodEffects=Fe;k.ZodTransformer=Fe;Fe.create=(t,e,n)=>new Fe({schema:t,typeName:V.ZodEffects,effect:e,...X(n)});Fe.createWithPreprocess=(t,e,n)=>new Fe({schema:e,effect:{type:"preprocess",transform:t},typeName:V.ZodEffects,...X(n)});var Xe=class extends Q{_parse(e){return this._getType(e)===$.ZodParsedType.undefined?(0,T.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};k.ZodOptional=Xe;Xe.create=(t,e)=>new Xe({innerType:t,typeName:V.ZodOptional,...X(e)});var bt=class extends Q{_parse(e){return this._getType(e)===$.ZodParsedType.null?(0,T.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};k.ZodNullable=bt;bt.create=(t,e)=>new bt({innerType:t,typeName:V.ZodNullable,...X(e)});var Wn=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===$.ZodParsedType.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};k.ZodDefault=Wn;Wn.create=(t,e)=>new Wn({innerType:t,typeName:V.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...X(e)});var Jn=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return(0,T.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new A.ZodError(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new A.ZodError(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};k.ZodCatch=Jn;Jn.create=(t,e)=>new Jn({innerType:t,typeName:V.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...X(e)});var Br=class extends Q{_parse(e){if(this._getType(e)!==$.ZodParsedType.nan){let r=this._getOrReturnCtx(e);return(0,T.addIssueToContext)(r,{code:A.ZodIssueCode.invalid_type,expected:$.ZodParsedType.nan,received:r.parsedType}),T.INVALID}return{status:"valid",value:e.data}}};k.ZodNaN=Br;Br.create=t=>new Br({typeName:V.ZodNaN,...X(t)});k.BRAND=Symbol("zod_brand");var _s=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}};k.ZodBranded=_s;var ks=class t extends Q{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?T.INVALID:i.status==="dirty"?(n.dirty(),(0,T.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?T.INVALID:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:V.ZodPipeline})}};k.ZodPipeline=ks;var Yn=class extends Q{_parse(e){let n=this._def.innerType._parse(e),r=s=>((0,T.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,T.isAsync)(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};k.ZodReadonly=Yn;Yn.create=(t,e)=>new Yn({innerType:t,typeName:V.ZodReadonly,...X(e)});function kc(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Ic(t,e={},n){return t?rn.create().superRefine((r,s)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let l=kc(e,r),c=l.fatal??n??!0;s.addIssue({code:"custom",...l,fatal:c})}});if(!i){let o=kc(e,r),l=o.fatal??n??!0;s.addIssue({code:"custom",...o,fatal:l})}}):rn.create()}k.late={object:De.lazycreate};var V;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(V||(k.ZodFirstPartyTypeKind=V={}));var Fm=(t,e={message:`Input not instance of ${t.name}`})=>Ic(n=>n instanceof t,e);k.instanceof=Fm;var Ec=nn.create;k.string=Ec;var Ac=zn.create;k.number=Ac;var Bm=Br.create;k.nan=Bm;var Km=Dn.create;k.bigint=Km;var Rc=Ln.create;k.boolean=Rc;var Hm=Un.create;k.date=Hm;var Zm=Lr.create;k.symbol=Zm;var Gm=qn.create;k.undefined=Gm;var Vm=Fn.create;k.null=Vm;var Wm=rn.create;k.any=Wm;var Jm=Mt.create;k.unknown=Jm;var Ym=ot.create;k.never=Ym;var Xm=Ur.create;k.void=Xm;var Qm=zt.create;k.array=Qm;var eg=De.create;k.object=eg;var tg=De.strictCreate;k.strictObject=tg;var ng=Bn.create;k.union=ng;var rg=mi.create;k.discriminatedUnion=rg;var sg=Kn.create;k.intersection=sg;var ig=yt.create;k.tuple=ig;var og=gi.create;k.record=og;var ag=qr.create;k.map=ag;var lg=Fr.create;k.set=lg;var cg=yi.create;k.function=cg;var ug=Hn.create;k.lazy=ug;var dg=Zn.create;k.literal=dg;var hg=Gn.create;k.enum=hg;var fg=Vn.create;k.nativeEnum=fg;var pg=sn.create;k.promise=pg;var $c=Fe.create;k.effect=$c;k.transformer=$c;var mg=Xe.create;k.optional=mg;var gg=bt.create;k.nullable=gg;var yg=Fe.createWithPreprocess;k.preprocess=yg;var bg=ks.create;k.pipeline=bg;var vg=()=>Ec().optional();k.ostring=vg;var wg=()=>Ac().optional();k.onumber=wg;var _g=()=>Rc().optional();k.oboolean=_g;k.coerce={string:(t=>nn.create({...t,coerce:!0})),number:(t=>zn.create({...t,coerce:!0})),boolean:(t=>Ln.create({...t,coerce:!0})),bigint:(t=>Dn.create({...t,coerce:!0})),date:(t=>Un.create({...t,coerce:!0}))};k.NEVER=T.INVALID});var Zo=re(et=>{"use strict";var kg=et&&et.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(e,n);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,s)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),Kr=et&&et.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&kg(e,t,n)};Object.defineProperty(et,"__esModule",{value:!0});Kr(hi(),et);Kr(Bo(),et);Kr(bc(),et);Kr(vs(),et);Kr(Pc(),et);Kr(di(),et)});var Nc=re(Le=>{"use strict";var jc=Le&&Le.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(e,n);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,s)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),Sg=Le&&Le.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),Tg=Le&&Le.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&jc(e,t,n);return Sg(e,t),e},xg=Le&&Le.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&jc(e,t,n)};Object.defineProperty(Le,"__esModule",{value:!0});Le.z=void 0;var Oc=Tg(Zo());Le.z=Oc;xg(Zo(),Le);Le.default=Oc});var _e=re(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.ChatLoadResultMsg=h.REPLY_STYLES=h.BUILTIN_REPLY_LANGUAGES=h.ChatLoadMsg=h.ChatListResultMsg=h.ChatListMsg=h.ChatUsageMsg=h.ChatStreamMsg=h.JiraUsersResultMsg=h.DeployClaimResultMsg=h.DeployClaimMsg=h.RuleDiagnoseResultMsg=h.ProjectTestResultMsg=h.RunStatusMsg=h.FailedTest=h.RunUsageMsg=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_ASK_FENCE=h.NEEDS_INPUT_MARKER=h.BRANCH_DEPLOY_ISSUE_KEY=h.REQUIRED_AGENT_CAPABILITIES=h.DEFAULT_AGENT_ID=h.REGISTERED_AGENTS=h.PROTOCOL_VERSION=h.GITHUB_TOKEN_PERMISSIONS=void 0;h.SetupStatusResultMsg=h.SetupStatusMsg=h.DeploySuggestResultMsg=h.SelfMigrationApplyResultMsg=h.SelfMigrationApplyMsg=h.SELF_MIGRATION_DIR=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.AuditStatsResultMsg=h.AuditStatsMsg=h.AuditListMsg=h.AuditStartResultMsg=h.AuditStartMsg=h.AuditRecord=h.AuditFinding=h.AuditDetailLevel=h.AuditScope=h.AuditSeverity=h.KnowledgeRole=h.AuditRole=h.EpicSuggestResultMsg=h.EpicSuggestMsg=h.EpicListResultMsg=h.EpicChild=h.EpicListMsg=h.BoardTriggerResultMsg=h.BoardTriggerMsg=h.BoardFetchResultMsg=h.BoardFetchMsg=h.RepoDocReadResultMsg=h.RepoDocReadMsg=h.RepoDocsResultMsg=h.RepoDocsMsg=void 0;h.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=h.DEPLOY_FIX_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.WRITE_TESTS_PROMPT=h.NEEDS_INPUT_OPTIONS_PROMPT=h.DEFAULT_PLAN_PROMPT_TEMPLATE=h.EnrollResponse=h.EnrollRequest=h.ServerToRunnerMsg=h.JiraUsersMsg=h.DeploySuggestMsg=h.DeployFixMsg=h.DeployStartMsg=h.RunRetryPushMsg=h.RunRejectedMsg=h.RunApprovedMsg=h.RunCancelMsg=h.RuleDiagnoseMsg=h.ProjectTestMsg=h.RunClaimResultMsg=h.ConfigMsg=h.HelloAckMsg=h.RunnerToServerMsg=h.AutopilotReportMsg=h.AutopilotNextResultMsg=h.AutopilotNextMsg=h.RunnerUpdateResultMsg=h.AgentProfilesResultMsg=h.AgentProfilesMsg=h.RunPrConflictMsg=h.RunResolveConflictResultMsg=h.RunAnswerResultMsg=h.RunAnswerMsg=h.RunTestFixResultMsg=h.RunTestFixMsg=h.RunResolveConflictMsg=h.RunnerUpdateMsg=h.RepoDocSaveResultMsg=h.RepoDocSaveMsg=h.SetupClaudeMdSaveResultMsg=h.SetupClaudeMdSaveMsg=h.SetupClaudeMdGenerateResultMsg=h.SetupClaudeMdGenerateMsg=void 0;h.missingAgentCapabilities=Cg;h.replyPreferenceAppendix=Eg;h.pendingMigrationsAppendix=Ag;h.isSelfMigrationFilename=Rg;h.parseRunnerMsg=$g;h.parseServerMsg=Pg;var a=Nc();h.GITHUB_TOKEN_PERMISSIONS={where:"github.com/settings/personal-access-tokens/new (fine-grained token)",steps:["Resource owner: the org or user that OWNS the repo - not your personal account, unless the repo is under it","Repository access: Only select repositories -> pick this repo","Contents: Read and write - pushing the agent's branch","Pull requests: Read and write - opening the PR, and merging it when you approve","Metadata: Read-only - GitHub adds this itself and will not let you remove it","Workflows: Read and write - ONLY if changes may touch .github/workflows; without it GitHub rejects those pushes"],note:"A fine-grained token covers exactly ONE resource owner, so a repo in a different org always needs its own token. A classic token with the `repo` scope also works and is simpler, but it reaches every repository you can see - prefer fine-grained."};h.PROTOCOL_VERSION="1.55";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:[],chat:["readOnlyJail","sessionResume"],assist:["readOnlyJail"]};function Cg(t,e){let n=h.REGISTERED_AGENTS.find(r=>r.id===t);return n?(h.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(r=>!n.capabilities[r]):null}h.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";h.NEEDS_INPUT_MARKER="NEEDS-INPUT";h.NEEDS_INPUT_ASK_FENCE="ask";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 Ig=t=>t.includes(h.NEEDS_INPUT_COMMENT_MARKER)||h.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>t.includes(e));h.needsInputMarkerIn=Ig;h.RunStatus=a.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);h.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];h.TriggerType=a.z.enum(["label_added","comment_keyword","status_changed"]);h.ActionType=a.z.enum(["plan_only","implement","respond","deploy"]);h.LabelAddedTrigger=a.z.object({type:a.z.literal("label_added"),label:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-planned"),failedLabel:a.z.string().min(1).default("agent-failed")});h.CommentKeywordTrigger=a.z.object({type:a.z.literal("comment_keyword"),keyword:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-implemented"),failedLabel:a.z.string().min(1).default("agent-failed")});h.StatusChangedTrigger=a.z.object({type:a.z.literal("status_changed"),status:a.z.string().min(1),doneLabel:a.z.string().min(1).default("agent-deployed"),failedLabel:a.z.string().min(1).default("agent-failed")});h.TriggerConfig=a.z.discriminatedUnion("type",[h.LabelAddedTrigger,h.CommentKeywordTrigger,h.StatusChangedTrigger]);h.PlanOnlyAction=a.z.object({type:a.z.literal("plan_only"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(3600).default(900),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default("")});h.ImplementAction=a.z.object({type:a.z.literal("implement"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(7200).default(1800),maxTurns:a.z.number().int().positive().max(500).default(120),requireApproval:a.z.boolean().default(!0),branchTemplate:a.z.string().min(1).default("agent/{{issueKey}}").refine(t=>t.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:a.z.string().min(1).default("main"),jiraTransition:a.z.string().optional(),jiraTransitionOnStart:a.z.string().optional(),jiraTransitionOnMerge:a.z.string().optional(),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default(""),updateMemory:a.z.boolean().default(!1),writeTests:a.z.boolean().default(!0),runTests:a.z.boolean().default(!0),mergeOnApprove:a.z.boolean().default(!0),mergeMethod:a.z.enum(["squash","merge","rebase"]).default("squash"),autoMerge:a.z.boolean().default(!0)});h.RespondAction=a.z.object({type:a.z.literal("respond"),promptTemplate:a.z.string().min(1),timeoutSeconds:a.z.number().int().positive().max(3600).default(600),agent:a.z.string().default(h.DEFAULT_AGENT_ID),model:a.z.string().default("")});h.DeployStep=a.z.object({name:a.z.string().min(1).max(120),run:a.z.string().min(1).max(4e3),continueOnError:a.z.boolean().default(!1)});h.PromotionMode=a.z.enum(["deploy_only","merge_and_deploy"]);h.EnvironmentConfig=a.z.object({id:a.z.string(),projectId:a.z.string(),name:a.z.string(),rank:a.z.number().int().nonnegative(),auditBeforeDeploy:a.z.enum(["","security","testing"]).default(""),branch:a.z.string().default(""),publicUrl:a.z.string().default(""),useDedicatedCheckout:a.z.boolean().default(!1),promotionMode:h.PromotionMode.default("deploy_only"),ticketBranchTemplate:a.z.string().default("agent/{{issueKey}}"),steps:a.z.array(h.DeployStep).default([]),workdir:a.z.string().default(""),timeoutSeconds:a.z.number().int().positive().max(21600).default(1800),requiredSecrets:a.z.array(a.z.string()).default([]),requireApproval:a.z.boolean().default(!1),requireSyncCheck:a.z.boolean().default(!1),previousEnvBranch:a.z.string().optional(),deployFromColumn:a.z.string().default(""),deployToColumn:a.z.string().default("")});h.DeployAction=a.z.object({type:a.z.literal("deploy"),envSelection:a.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:a.z.string().optional(),requireStatus:a.z.string().optional()});h.ActionConfig=a.z.discriminatedUnion("type",[h.PlanOnlyAction,h.ImplementAction,h.RespondAction,h.DeployAction]);h.ProjectConfig=a.z.object({id:a.z.string(),name:a.z.string(),jiraProjectKey:a.z.string(),goLiveIssueKey:a.z.string().default(""),repoName:a.z.string(),jiraSiteUrl:a.z.string().default(""),defaultAgent:a.z.string().default("claude-code"),componentRoutes:a.z.array(a.z.object({component:a.z.string().min(1),repoName:a.z.string().min(1)})).default([])});h.RuleConfig=a.z.object({id:a.z.string(),projectId:a.z.string(),name:a.z.string(),enabled:a.z.boolean(),trigger:h.TriggerConfig,action:h.ActionConfig});h.HelloMsg=a.z.object({type:a.z.literal("hello"),protocolVersion:a.z.string(),runnerVersion:a.z.string(),platform:a.z.string(),justBooted:a.z.boolean().optional()});h.HeartbeatMsg=a.z.object({type:a.z.literal("heartbeat"),ts:a.z.string()});h.RunClaimMsg=a.z.object({type:a.z.literal("run.claim"),requestId:a.z.string(),ruleId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),triggerFingerprint:a.z.string(),dedupKey:a.z.string().optional(),triggeredByAccountId:a.z.string().optional()});h.RunLogMsg=a.z.object({type:a.z.literal("run.log"),runId:a.z.string(),seq:a.z.number().int().nonnegative(),ts:a.z.string(),level:a.z.enum(["info","warn","error","agent"]),message:a.z.string().max(16384)});h.RunUsageMsg=a.z.object({type:a.z.literal("run.usage"),runId:a.z.string(),inputTokens:a.z.number().int().nonnegative(),outputTokens:a.z.number().int().nonnegative(),cacheReadTokens:a.z.number().int().nonnegative().optional(),costUsd:a.z.number().nonnegative().optional(),turns:a.z.number().int().nonnegative().optional()});h.FailedTest=a.z.object({command:a.z.string().max(500),exitCode:a.z.number().int(),tail:a.z.string().max(4e3)});h.RunStatusMsg=a.z.object({type:a.z.literal("run.status"),runId:a.z.string(),status:h.RunStatus,error:a.z.string().optional(),errorKind:a.z.enum(["guard"]).optional(),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional(),resultSummary:a.z.string().max(2e3).optional(),billingMode:a.z.enum(["subscription","api","unknown"]).optional(),model:a.z.string().max(200).optional(),prUrl:a.z.string().optional(),headSha:a.z.string().optional(),deployedRef:a.z.string().optional(),retryAvailable:a.z.boolean().optional(),failedTests:a.z.array(h.FailedTest).max(20).optional(),testsPassed:a.z.number().int().nonnegative().optional(),testsTotal:a.z.number().int().nonnegative().optional(),manualSteps:a.z.array(a.z.object({command:a.z.string().max(500),why:a.z.string().max(300).default("")})).max(20).optional(),goLiveDraft:a.z.string().max(4e3).optional(),inputQuestions:a.z.string().max(4e3).optional(),inputOptions:a.z.array(a.z.string().max(200)).max(5).optional()});h.ProjectTestResultMsg=a.z.object({type:a.z.literal("project.test.result"),requestId:a.z.string(),ok:a.z.boolean(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string(),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")}))});h.RuleDiagnoseResultMsg=a.z.object({type:a.z.literal("rule.diagnose.result"),requestId:a.z.string(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string(),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")})),matchedCount:a.z.number().int().nonnegative(),excludedCount:a.z.number().int().nonnegative(),excludedSample:a.z.array(a.z.string()).max(5)});h.DeployClaimMsg=a.z.object({type:a.z.literal("deploy.claim"),requestId:a.z.string(),projectId:a.z.string(),ruleId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),environmentName:a.z.string(),requestedByAccountId:a.z.string().optional(),requestedByDisplayName:a.z.string().default(""),dedupKey:a.z.string(),triggerFingerprint:a.z.string()});h.DeployClaimResultMsg=a.z.object({type:a.z.literal("deploy.claim.result"),requestId:a.z.string(),accepted:a.z.boolean(),runId:a.z.string().optional(),environment:h.EnvironmentConfig.optional(),reason:a.z.string().optional(),code:a.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});h.JiraUsersResultMsg=a.z.object({type:a.z.literal("jira.users.result"),requestId:a.z.string(),ok:a.z.boolean(),users:a.z.array(a.z.object({accountId:a.z.string(),displayName:a.z.string(),email:a.z.string().default(""),active:a.z.boolean().default(!0)})).default([]),error:a.z.string().optional()});h.ChatStreamMsg=a.z.object({type:a.z.literal("chat.stream"),requestId:a.z.string(),seq:a.z.number().int().nonnegative(),text:a.z.string().max(8e3)});h.ChatUsageMsg=a.z.object({type:a.z.literal("chat.usage"),requestId:a.z.string(),inputTokens:a.z.number().int().nonnegative(),outputTokens:a.z.number().int().nonnegative(),cacheReadTokens:a.z.number().int().nonnegative().optional(),turns:a.z.number().int().nonnegative().optional()});h.ChatListMsg=a.z.object({type:a.z.literal("chat.list"),requestId:a.z.string(),projectId:a.z.string()});h.ChatListResultMsg=a.z.object({type:a.z.literal("chat.list.result"),requestId:a.z.string(),sessions:a.z.array(a.z.object({sessionId:a.z.string(),title:a.z.string().default(""),updatedAt:a.z.string().default(""),messageCount:a.z.number().int().nonnegative().default(0)})).default([])});h.ChatLoadMsg=a.z.object({type:a.z.literal("chat.load"),requestId:a.z.string(),sessionId:a.z.string()});h.BUILTIN_REPLY_LANGUAGES=[{name:"English",instruction:"Write your prose in English."},{name:"Hindi",instruction:"Write your prose in Hindi, in the Devanagari script. Keep technical terms that have no everyday Hindi equivalent in English rather than inventing a translation."},{name:"Hinglish",instruction:"Write your prose in Hinglish: conversational Hindi written in the Latin alphabet, with English technical words left in English - the way an Indian developer talks at work."}];h.REPLY_STYLES=[{id:"technical",label:"Technical",hint:"Full detail - names files, functions and trade-offs",instruction:"Answer at full technical depth: name the files, functions and data structures involved, and state trade-offs precisely. Assume the reader reads code every day."},{id:"balanced",label:"Balanced",hint:"Plain explanation, with the technical detail that matters",instruction:"Explain in plain language first, then add the technical detail that actually matters for the decision. Assume the reader is technical but does not know this codebase."},{id:"simple",label:"Simple",hint:"Everyday words - no jargon unless it is unavoidable",instruction:"Answer in everyday words, as if to someone who does not write code. Avoid jargon; when a technical term is unavoidable, explain it in half a sentence. Prefer short paragraphs and concrete examples over precision about internals."}];function Eg(t){let e=[],n=(t.language??"").trim();if(n){let s=h.BUILTIN_REPLY_LANGUAGES.find(i=>i.name.toLowerCase()===n.toLowerCase());e.push((t.languageInstruction??"").trim()||s?.instruction||`Write your prose in ${n}.`),e.push("Code, file paths, identifiers, commands, error text and log output stay exactly as they are - only your own prose changes language."),e.push("The ```ticket block is the exception: its summary and description are ALWAYS written in English, because the ticket is read by other people and by the implementing agent.")}let r=h.REPLY_STYLES.find(s=>s.id===(t.style??"").trim());return r&&e.push(r.instruction),e.length?`
24
24
 
25
25
  HOW TO WRITE THE REPLY - the person you are answering chose this, so it applies to every reply in this conversation:
26
26
  - ${e.join(`
27
27
  - `)}
28
- `:""}function Eg(t){if(!t.length)return"";let e="```";return`
28
+ `:""}function Ag(t){if(!t.length)return"";let e="```";return`
29
29
 
30
30
  PENDING DATABASE MIGRATIONS (fact, read from this database's own ledger just now):
31
31
  `+t.map(n=>`- ${h.SELF_MIGRATION_DIR}/${n}`).join(`
@@ -34,7 +34,7 @@ These files are checked in but NOT applied to the database this control plane ru
34
34
  ${e}action
35
35
  {"type": "apply-migration", "file": "<one filename from the list above>"}
36
36
  ${e}
37
- That is the only action block that exists - there is no free-form command form of it. Never mention the block itself in your prose.`}h.ChatLoadResultMsg=a.z.object({type:a.z.literal("chat.load.result"),requestId:a.z.string(),ok:a.z.boolean(),projectId:a.z.string().default(""),messages:a.z.array(a.z.object({role:a.z.enum(["user","agent"]),text:a.z.string(),steps:a.z.array(a.z.string()).default([]),files:a.z.array(a.z.string()).default([])})).default([]),error:a.z.string().optional()});h.RepoDocsMsg=a.z.object({type:a.z.literal("repo.docs"),requestId:a.z.string(),projectId:a.z.string()});h.RepoDocsResultMsg=a.z.object({type:a.z.literal("repo.docs.result"),requestId:a.z.string(),ok:a.z.boolean(),docs:a.z.array(a.z.object({path:a.z.string(),sizeBytes:a.z.number().int().nonnegative().default(0),updatedAt:a.z.string().default("")})).default([]),error:a.z.string().optional()});h.RepoDocReadMsg=a.z.object({type:a.z.literal("repo.doc.read"),requestId:a.z.string(),projectId:a.z.string(),path:a.z.string().max(400)});h.RepoDocReadResultMsg=a.z.object({type:a.z.literal("repo.doc.read.result"),requestId:a.z.string(),ok:a.z.boolean(),path:a.z.string().default(""),content:a.z.string().default(""),truncated:a.z.boolean().default(!1),error:a.z.string().optional()});h.BoardFetchMsg=a.z.object({type:a.z.literal("board.fetch"),requestId:a.z.string(),projectId:a.z.string()});h.BoardFetchResultMsg=a.z.object({type:a.z.literal("board.fetch.result"),requestId:a.z.string(),ok:a.z.boolean(),browseBaseUrl:a.z.string().default(""),columns:a.z.array(a.z.object({name:a.z.string(),issues:a.z.array(a.z.object({key:a.z.string(),summary:a.z.string(),labels:a.z.array(a.z.string()).default([])})).default([])})).default([]),error:a.z.string().optional()});h.BoardTriggerMsg=a.z.object({type:a.z.literal("board.trigger"),requestId:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),comment:a.z.string().max(2e3).default(""),removeLabel:a.z.string().default(""),requestedBy:a.z.string().default(""),requestedByEmail:a.z.string().default(""),reimplement:a.z.boolean().default(!1)});h.BoardTriggerResultMsg=a.z.object({type:a.z.literal("board.trigger.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional()});h.EpicListMsg=a.z.object({type:a.z.literal("epic.list"),requestId:a.z.string(),projectId:a.z.string(),epicKey:a.z.string().default("")});h.EpicChild=a.z.object({key:a.z.string(),summary:a.z.string(),status:a.z.string(),statusCategory:a.z.string(),labels:a.z.array(a.z.string()).default([])});h.EpicListResultMsg=a.z.object({type:a.z.literal("epic.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),epics:a.z.array(a.z.object({key:a.z.string(),summary:a.z.string(),status:a.z.string()})).default([]),children:a.z.array(h.EpicChild).default([])});h.EpicSuggestMsg=a.z.object({type:a.z.literal("epic.suggest"),requestId:a.z.string(),projectId:a.z.string(),epicKey:a.z.string().min(1),model:a.z.string().default("")});h.EpicSuggestResultMsg=a.z.object({type:a.z.literal("epic.suggest.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),issueKey:a.z.string().default(""),reason:a.z.string().default(""),considered:a.z.number().int().default(0)});h.AuditRole=a.z.enum(["security","testing","architecture"]);h.KnowledgeRole=a.z.enum(["security","testing","architecture","implement"]);h.AuditSeverity=a.z.enum(["critical","high","medium","low","info"]);h.AuditScope=a.z.object({kind:a.z.enum(["repo","ticket","branch"]).default("repo"),ref:a.z.string().default("")});h.AuditDetailLevel=a.z.enum(["simple","technical"]);h.AuditFinding=a.z.object({id:a.z.string().min(1),title:a.z.string().min(1),ruleId:a.z.string().max(20).default(""),severity:h.AuditSeverity,area:a.z.string().default(""),evidence:a.z.array(a.z.object({file:a.z.string().min(1),line:a.z.number().int().positive().optional(),note:a.z.string().default("")})).min(1),fix:a.z.string().default("")});h.AuditRecord=a.z.object({id:a.z.string(),role:h.AuditRole,createdAt:a.z.string(),model:a.z.string().default(""),summary:a.z.string().default(""),packNames:a.z.array(a.z.string()).default([]),findings:a.z.array(h.AuditFinding).default([]),costUsd:a.z.number().default(0),review:a.z.object({selected:a.z.array(a.z.string()),updatedAt:a.z.string()}).optional(),verdicts:a.z.record(a.z.object({verdict:a.z.enum(["valid","false-positive","wont-fix"]),note:a.z.string().default(""),by:a.z.string().default(""),at:a.z.string().default("")})).default({}),lessonsWritten:a.z.array(a.z.string()).default([]),ticketed:a.z.record(a.z.string()).default({}),scope:h.AuditScope.default({kind:"repo",ref:""}),detailLevel:h.AuditDetailLevel.default("technical"),testRun:a.z.array(a.z.object({command:a.z.string(),exitCode:a.z.number().int(),durationMs:a.z.number().int().default(0),tail:a.z.string().default("")})).optional()});h.AuditStartMsg=a.z.object({type:a.z.literal("audit.start"),requestId:a.z.string(),projectId:a.z.string(),role:h.AuditRole,model:a.z.string().default(""),scope:h.AuditScope.default({kind:"repo",ref:""}),detailLevel:h.AuditDetailLevel.default("technical")});h.AuditStartResultMsg=a.z.object({type:a.z.literal("audit.start.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditListMsg=a.z.object({type:a.z.literal("audit.list"),requestId:a.z.string(),projectId:a.z.string()});h.AuditStatsMsg=a.z.object({type:a.z.literal("audit.stats"),requestId:a.z.string(),projectIds:a.z.array(a.z.string()).max(200).default([]),since:a.z.string().default("")});h.AuditStatsResultMsg=a.z.object({type:a.z.literal("audit.stats.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),byProject:a.z.record(a.z.object({audits:a.z.number().int().default(0),findings:a.z.number().int().default(0),valid:a.z.number().int().default(0),falsePositive:a.z.number().int().default(0),wontFix:a.z.number().int().default(0),unreviewed:a.z.number().int().default(0)})).default({})});h.AuditListResultMsg=a.z.object({type:a.z.literal("audit.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audits:a.z.array(a.z.object({id:a.z.string(),role:h.AuditRole,createdAt:a.z.string(),findingCount:a.z.number().int(),bySeverity:a.z.record(a.z.number().int()).default({}),detailLevel:h.AuditDetailLevel.default("technical")})).default([])});h.AuditGetMsg=a.z.object({type:a.z.literal("audit.get"),requestId:a.z.string(),projectId:a.z.string(),auditId:a.z.string()});h.AuditGetResultMsg=a.z.object({type:a.z.literal("audit.get.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditReviewMsg=a.z.object({type:a.z.literal("audit.review"),requestId:a.z.string(),projectId:a.z.string(),auditId:a.z.string(),selected:a.z.array(a.z.string()).optional(),ticketed:a.z.array(a.z.object({findingId:a.z.string(),issueKey:a.z.string()})).default([]),verdicts:a.z.array(a.z.object({findingId:a.z.string(),verdict:a.z.enum(["valid","false-positive","wont-fix"]),note:a.z.string().max(2e3).default("")})).default([]),verdictBy:a.z.string().default("")});h.AuditReviewResultMsg=a.z.object({type:a.z.literal("audit.review.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.KnowledgeListMsg=a.z.object({type:a.z.literal("knowledge.list"),requestId:a.z.string(),projectId:a.z.string()});h.KnowledgeFile=a.z.object({role:h.KnowledgeRole,level:a.z.enum(["global","org","project"]),source:a.z.enum(["pack","lessons","memory"]),name:a.z.string(),content:a.z.string(),editable:a.z.boolean().default(!1)});h.KnowledgeListResultMsg=a.z.object({type:a.z.literal("knowledge.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),files:a.z.array(h.KnowledgeFile).default([])});h.KnowledgeSaveMsg=a.z.object({type:a.z.literal("knowledge.save"),requestId:a.z.string(),projectId:a.z.string(),role:h.KnowledgeRole,level:a.z.enum(["org","project"]),source:a.z.enum(["pack","lessons"]),name:a.z.string().min(1).max(100),content:a.z.string().max(6e4),append:a.z.boolean().default(!1),by:a.z.string().default("")});h.KnowledgeSaveResultMsg=a.z.object({type:a.z.literal("knowledge.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional()});h.TeamCredsMsg=a.z.object({type:a.z.literal("team.creds"),requestId:a.z.string(),emails:a.z.array(a.z.string()).max(200)});h.TeamCredsResultMsg=a.z.object({type:a.z.literal("team.creds.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),githubShared:a.z.boolean().default(!1),sharedGithubLogin:a.z.string().default(""),entries:a.z.array(a.z.object({email:a.z.string(),jira:a.z.enum(["own","runner-account","missing"]),jiraAs:a.z.string().default(""),github:a.z.enum(["own","shared","missing"]),githubAs:a.z.string().default("")})).default([])});h.ChatFile=a.z.object({name:a.z.string().min(1).max(255),contentBase64:a.z.string().min(1).max(6e6)});h.ChatTurnMsg=a.z.object({type:a.z.literal("chat.turn"),requestId:a.z.string(),projectId:a.z.string(),sessionId:a.z.string().optional(),message:a.z.string().min(1).max(2e4),userName:a.z.string().default(""),model:a.z.string().default(""),files:a.z.array(h.ChatFile).max(8).default([]),replyLanguage:a.z.string().max(60).default(""),replyLanguageInstruction:a.z.string().max(600).default(""),replyStyle:a.z.string().max(30).default(""),pendingMigrations:a.z.array(a.z.string().max(200)).max(50).default([])});h.ChatTurnResultMsg=a.z.object({type:a.z.literal("chat.turn.result"),requestId:a.z.string(),ok:a.z.boolean(),sessionId:a.z.string().default(""),reply:a.z.string().default(""),error:a.z.string().optional(),inputTokens:a.z.number().int().nonnegative().default(0),outputTokens:a.z.number().int().nonnegative().default(0),cacheReadTokens:a.z.number().int().nonnegative().default(0),costUsd:a.z.number().nonnegative().default(0),model:a.z.string().max(200).default(""),contextTokens:a.z.number().int().nonnegative().default(0),contextLimit:a.z.number().int().nonnegative().default(0),compacted:a.z.boolean().default(!1),compactedMessages:a.z.number().int().nonnegative().default(0)});h.ChatCreateTicketMsg=a.z.object({type:a.z.literal("chat.create.ticket"),requestId:a.z.string(),projectId:a.z.string(),summary:a.z.string().min(1).max(250),description:a.z.string().default(""),triggerComment:a.z.string().default(""),requestedBy:a.z.string().default(""),requestedByEmail:a.z.string().default(""),asEpic:a.z.boolean().default(!1),children:a.z.array(a.z.object({summary:a.z.string().min(1),description:a.z.string().default("")})).max(20).default([]),createAs:a.z.enum(["epic_with_children","separate_epics","separate_tasks"]).default("epic_with_children"),files:a.z.array(h.ChatFile).max(8).default([])});h.ChatCreateTicketResultMsg=a.z.object({type:a.z.literal("chat.create.ticket.result"),requestId:a.z.string(),ok:a.z.boolean(),issueKey:a.z.string().default(""),error:a.z.string().optional(),childKeys:a.z.array(a.z.string()).default([])});h.EnvPreflightMsg=a.z.object({type:a.z.literal("env.preflight"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string().default(""),steps:a.z.array(h.DeployStep).default([]),requiredSecrets:a.z.array(a.z.string()).default([]),workdir:a.z.string().default(""),branch:a.z.string().default(""),publicUrl:a.z.string().default("")});h.EnvPreflightResultMsg=a.z.object({type:a.z.literal("env.preflight.result"),requestId:a.z.string(),ok:a.z.boolean(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string().default(""),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")})).default([])});h.SELF_MIGRATION_DIR="apps/api/prisma/manual";function Ag(t){return/^[A-Za-z0-9][A-Za-z0-9._-]*\.sql$/.test(t)&&!t.includes("..")}h.SelfMigrationApplyMsg=a.z.object({type:a.z.literal("selfmigration.apply"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string().default(""),file:a.z.string(),urlSecret:a.z.string().default("DATABASE_URL")});h.SelfMigrationApplyResultMsg=a.z.object({type:a.z.literal("selfmigration.apply.result"),requestId:a.z.string(),ok:a.z.boolean(),file:a.z.string().default(""),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string().default(""),fix:a.z.array(a.z.string()).default([])})).default([]),output:a.z.string().max(2e4).default(""),error:a.z.string().default("")});h.DeploySuggestResultMsg=a.z.object({type:a.z.literal("deploy.suggest.result"),requestId:a.z.string(),ok:a.z.boolean(),steps:a.z.array(h.DeployStep).default([]),requiredSecrets:a.z.array(a.z.string()).default([]),notes:a.z.string().default(""),error:a.z.string().optional(),docPath:a.z.string().default(""),docContent:a.z.string().max(1e5).default("")});h.SetupStatusMsg=a.z.object({type:a.z.literal("setup.status"),requestId:a.z.string(),repoNames:a.z.array(a.z.string()).max(100).default([])});h.SetupStatusResultMsg=a.z.object({type:a.z.literal("setup.status.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),jiraConfigured:a.z.boolean().default(!1),jiraEmail:a.z.string().default(""),claude:a.z.object({installed:a.z.boolean(),version:a.z.string().default(""),loggedIn:a.z.boolean()}).optional(),githubTokenSet:a.z.boolean().default(!1),githubLogin:a.z.string().default(""),deploysEnabled:a.z.boolean().default(!1),jiraUserCount:a.z.number().int().default(0),repos:a.z.array(a.z.object({repoName:a.z.string(),mapped:a.z.boolean(),liveMapped:a.z.boolean().default(!0),pathExists:a.z.boolean().default(!1),isGit:a.z.boolean().default(!1),claudeMd:a.z.boolean().default(!1),deployMd:a.z.boolean().default(!1),testMd:a.z.boolean().default(!1),defaultBranch:a.z.string().default(""),githubToken:a.z.boolean().default(!1),githubTokenOwn:a.z.boolean().default(!1)})).default([])});h.SetupClaudeMdGenerateMsg=a.z.object({type:a.z.literal("setup.claudemd.generate"),requestId:a.z.string(),projectId:a.z.string(),kind:a.z.enum(["claude","deploy","design","unblock"]).default("claude"),blockers:a.z.array(a.z.string().max(400)).max(20).default([]),streamId:a.z.string().default(""),environments:a.z.array(a.z.object({name:a.z.string(),branch:a.z.string().default(""),publicUrl:a.z.string().default("")})).default([])});h.SetupClaudeMdGenerateResultMsg=a.z.object({type:a.z.literal("setup.claudemd.generate.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),content:a.z.string().default("")});h.SetupClaudeMdSaveMsg=a.z.object({type:a.z.literal("setup.claudemd.save"),requestId:a.z.string(),projectId:a.z.string(),kind:a.z.enum(["claude","deploy","design"]).default("claude"),overwrite:a.z.boolean().default(!1),content:a.z.string().max(1e5)});h.SetupClaudeMdSaveResultMsg=a.z.object({type:a.z.literal("setup.claudemd.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default("")});h.RepoDocSaveMsg=a.z.object({type:a.z.literal("repo.doc.save"),requestId:a.z.string(),projectId:a.z.string(),relPath:a.z.string().min(1).max(200),overwrite:a.z.boolean().default(!1),content:a.z.string().max(2e5)});h.RepoDocSaveResultMsg=a.z.object({type:a.z.literal("repo.doc.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default("")});h.RunnerUpdateMsg=a.z.object({type:a.z.literal("runner.update"),requestId:a.z.string()});h.RunResolveConflictMsg=a.z.object({type:a.z.literal("run.resolve.conflict"),requestId:a.z.string(),runId:a.z.string()});h.RunTestFixMsg=a.z.object({type:a.z.literal("run.testfix"),requestId:a.z.string(),runId:a.z.string(),failedTests:a.z.array(h.FailedTest).min(1).max(20)});h.RunTestFixResultMsg=a.z.object({type:a.z.literal("run.testfix.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),headSha:a.z.string().default(""),remaining:a.z.array(h.FailedTest).default([]),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional()});h.RunAnswerMsg=a.z.object({type:a.z.literal("run.answer"),requestId:a.z.string(),runId:a.z.string(),text:a.z.string().min(1).max(4e3),answeredBy:a.z.string().default("")});h.RunAnswerResultMsg=a.z.object({type:a.z.literal("run.answer.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),error:a.z.string().optional()});h.RunResolveConflictResultMsg=a.z.object({type:a.z.literal("run.resolve.conflict.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),freeOfCharge:a.z.boolean().default(!1),headSha:a.z.string().default(""),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional()});h.RunPrConflictMsg=a.z.object({type:a.z.literal("run.pr.conflict"),runId:a.z.string(),conflicted:a.z.boolean()});h.AgentProfilesMsg=a.z.object({type:a.z.literal("agent.profiles"),requestId:a.z.string()});h.AgentProfilesResultMsg=a.z.object({type:a.z.literal("agent.profiles.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),profiles:a.z.array(a.z.object({agent:a.z.string(),name:a.z.string(),loggedIn:a.z.boolean()})).max(200).default([]),defaultLoggedIn:a.z.boolean().default(!1),agentsWithoutProfiles:a.z.array(a.z.string()).max(20).default([])});h.RunnerUpdateResultMsg=a.z.object({type:a.z.literal("runner.update.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default(""),scheduled:a.z.boolean().default(!1)});h.AutopilotNextMsg=a.z.object({type:a.z.literal("autopilot.next"),requestId:a.z.string()});h.AutopilotNextResultMsg=a.z.object({type:a.z.literal("autopilot.next.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),item:a.z.object({id:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),ruleId:a.z.string(),baseOverride:a.z.string().default(""),branchOverride:a.z.string().default(""),continueBranch:a.z.boolean().default(!1),autoMerge:a.z.boolean().default(!1)}).nullable().default(null),pausedUntil:a.z.string().default("")});h.AutopilotReportMsg=a.z.object({type:a.z.literal("autopilot.report"),requestId:a.z.string(),itemId:a.z.string(),outcome:a.z.enum(["claimed","failed","paused"]),runId:a.z.string().default(""),error:a.z.string().default("")});h.RunnerToServerMsg=a.z.discriminatedUnion("type",[h.HelloMsg,h.HeartbeatMsg,h.RunClaimMsg,h.RunLogMsg,h.RunUsageMsg,h.RunStatusMsg,h.ProjectTestResultMsg,h.RuleDiagnoseResultMsg,h.DeployClaimMsg,h.DeploySuggestResultMsg,h.EnvPreflightResultMsg,h.SelfMigrationApplyResultMsg,h.ChatTurnResultMsg,h.ChatStreamMsg,h.ChatUsageMsg,h.ChatCreateTicketResultMsg,h.ChatListResultMsg,h.RepoDocsResultMsg,h.RepoDocReadResultMsg,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.RepoDocSaveResultMsg,h.RunnerUpdateResultMsg,h.AgentProfilesResultMsg,h.RunPrConflictMsg,h.RunResolveConflictResultMsg,h.RunTestFixResultMsg,h.RunAnswerResultMsg,h.AuditStatsResultMsg,h.AutopilotNextMsg,h.AutopilotReportMsg]);h.HelloAckMsg=a.z.object({type:a.z.literal("hello.ack"),runnerId:a.z.string(),runnerName:a.z.string(),serverTime:a.z.string()});h.ConfigMsg=a.z.object({type:a.z.literal("config"),projects:a.z.array(h.ProjectConfig),rules:a.z.array(h.RuleConfig),environments:a.z.array(h.EnvironmentConfig).default([]),pollingPaused:a.z.boolean().default(!1)});h.RunClaimResultMsg=a.z.object({type:a.z.literal("run.claim.result"),requestId:a.z.string(),accepted:a.z.boolean(),runId:a.z.string().optional(),reason:a.z.string().optional(),claudeProfile:a.z.string().optional(),actorEmail:a.z.string().optional()});h.ProjectTestMsg=a.z.object({type:a.z.literal("project.test"),requestId:a.z.string(),projectId:a.z.string()});h.RuleDiagnoseMsg=a.z.object({type:a.z.literal("rule.diagnose"),requestId:a.z.string(),ruleId:a.z.string()});h.RunCancelMsg=a.z.object({type:a.z.literal("run.cancel"),runId:a.z.string()});h.RunApprovedMsg=a.z.object({type:a.z.literal("run.approved"),runId:a.z.string(),headSha:a.z.string().optional()});h.RunRejectedMsg=a.z.object({type:a.z.literal("run.rejected"),runId:a.z.string()});h.RunRetryPushMsg=a.z.object({type:a.z.literal("run.retryPush"),runId:a.z.string()});h.DeployStartMsg=a.z.object({type:a.z.literal("deploy.start"),runId:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),environment:h.EnvironmentConfig,requestedBy:a.z.string().default(""),attempt:a.z.number().int().positive().default(1)});h.DeployFixMsg=a.z.object({type:a.z.literal("deploy.fix"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string(),steps:a.z.array(a.z.object({name:a.z.string(),run:a.z.string(),continueOnError:a.z.boolean().default(!1)})),failedStep:a.z.string().default(""),errorText:a.z.string().max(8e3).default("")});h.DeploySuggestMsg=a.z.object({type:a.z.literal("deploy.suggest"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string(),notes:a.z.string().default(""),timeoutSeconds:a.z.number().int().positive().max(1800).default(300)});h.JiraUsersMsg=a.z.object({type:a.z.literal("jira.users"),requestId:a.z.string(),query:a.z.string().default("")});h.ServerToRunnerMsg=a.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.DeployFixMsg,h.EnvPreflightMsg,h.SelfMigrationApplyMsg,h.ChatTurnMsg,h.ChatCreateTicketMsg,h.ChatListMsg,h.RepoDocsMsg,h.RepoDocReadMsg,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.RepoDocSaveMsg,h.RunnerUpdateMsg,h.AgentProfilesMsg,h.RunResolveConflictMsg,h.RunTestFixMsg,h.RunAnswerMsg,h.AuditStatsMsg,h.AutopilotNextResultMsg]);h.EnrollRequest=a.z.object({enrollToken:a.z.string().min(10),name:a.z.string().min(1).max(100),platform:a.z.string(),runnerVersion:a.z.string()});h.EnrollResponse=a.z.object({runnerId:a.z.string(),runnerToken:a.z.string(),controlPlaneWsUrl:a.z.string()});function $g(t){return h.RunnerToServerMsg.parse(t)}function Pg(t){return h.ServerToRunnerMsg.parse(t)}h.DEFAULT_PLAN_PROMPT_TEMPLATE=`You are a senior engineer asked to assess a Jira ticket. You have read-only access to the repository - do not attempt to modify anything.
37
+ That is the only action block that exists - there is no free-form command form of it. Never mention the block itself in your prose.`}h.ChatLoadResultMsg=a.z.object({type:a.z.literal("chat.load.result"),requestId:a.z.string(),ok:a.z.boolean(),projectId:a.z.string().default(""),messages:a.z.array(a.z.object({role:a.z.enum(["user","agent"]),text:a.z.string(),steps:a.z.array(a.z.string()).default([]),files:a.z.array(a.z.string()).default([])})).default([]),error:a.z.string().optional()});h.RepoDocsMsg=a.z.object({type:a.z.literal("repo.docs"),requestId:a.z.string(),projectId:a.z.string()});h.RepoDocsResultMsg=a.z.object({type:a.z.literal("repo.docs.result"),requestId:a.z.string(),ok:a.z.boolean(),docs:a.z.array(a.z.object({path:a.z.string(),sizeBytes:a.z.number().int().nonnegative().default(0),updatedAt:a.z.string().default("")})).default([]),error:a.z.string().optional()});h.RepoDocReadMsg=a.z.object({type:a.z.literal("repo.doc.read"),requestId:a.z.string(),projectId:a.z.string(),path:a.z.string().max(400)});h.RepoDocReadResultMsg=a.z.object({type:a.z.literal("repo.doc.read.result"),requestId:a.z.string(),ok:a.z.boolean(),path:a.z.string().default(""),content:a.z.string().default(""),truncated:a.z.boolean().default(!1),error:a.z.string().optional()});h.BoardFetchMsg=a.z.object({type:a.z.literal("board.fetch"),requestId:a.z.string(),projectId:a.z.string()});h.BoardFetchResultMsg=a.z.object({type:a.z.literal("board.fetch.result"),requestId:a.z.string(),ok:a.z.boolean(),browseBaseUrl:a.z.string().default(""),columns:a.z.array(a.z.object({name:a.z.string(),issues:a.z.array(a.z.object({key:a.z.string(),summary:a.z.string(),labels:a.z.array(a.z.string()).default([])})).default([])})).default([]),error:a.z.string().optional()});h.BoardTriggerMsg=a.z.object({type:a.z.literal("board.trigger"),requestId:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),comment:a.z.string().max(2e3).default(""),removeLabel:a.z.string().default(""),requestedBy:a.z.string().default(""),requestedByEmail:a.z.string().default(""),reimplement:a.z.boolean().default(!1)});h.BoardTriggerResultMsg=a.z.object({type:a.z.literal("board.trigger.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional()});h.EpicListMsg=a.z.object({type:a.z.literal("epic.list"),requestId:a.z.string(),projectId:a.z.string(),epicKey:a.z.string().default("")});h.EpicChild=a.z.object({key:a.z.string(),summary:a.z.string(),status:a.z.string(),statusCategory:a.z.string(),labels:a.z.array(a.z.string()).default([])});h.EpicListResultMsg=a.z.object({type:a.z.literal("epic.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),epics:a.z.array(a.z.object({key:a.z.string(),summary:a.z.string(),status:a.z.string()})).default([]),children:a.z.array(h.EpicChild).default([])});h.EpicSuggestMsg=a.z.object({type:a.z.literal("epic.suggest"),requestId:a.z.string(),projectId:a.z.string(),epicKey:a.z.string().min(1),model:a.z.string().default("")});h.EpicSuggestResultMsg=a.z.object({type:a.z.literal("epic.suggest.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),issueKey:a.z.string().default(""),reason:a.z.string().default(""),considered:a.z.number().int().default(0)});h.AuditRole=a.z.enum(["security","testing","architecture"]);h.KnowledgeRole=a.z.enum(["security","testing","architecture","implement"]);h.AuditSeverity=a.z.enum(["critical","high","medium","low","info"]);h.AuditScope=a.z.object({kind:a.z.enum(["repo","ticket","branch"]).default("repo"),ref:a.z.string().default("")});h.AuditDetailLevel=a.z.enum(["simple","technical"]);h.AuditFinding=a.z.object({id:a.z.string().min(1),title:a.z.string().min(1),ruleId:a.z.string().max(20).default(""),severity:h.AuditSeverity,area:a.z.string().default(""),evidence:a.z.array(a.z.object({file:a.z.string().min(1),line:a.z.number().int().positive().optional(),note:a.z.string().default("")})).min(1),fix:a.z.string().default("")});h.AuditRecord=a.z.object({id:a.z.string(),role:h.AuditRole,createdAt:a.z.string(),model:a.z.string().default(""),summary:a.z.string().default(""),packNames:a.z.array(a.z.string()).default([]),findings:a.z.array(h.AuditFinding).default([]),costUsd:a.z.number().default(0),review:a.z.object({selected:a.z.array(a.z.string()),updatedAt:a.z.string()}).optional(),verdicts:a.z.record(a.z.object({verdict:a.z.enum(["valid","false-positive","wont-fix"]),note:a.z.string().default(""),by:a.z.string().default(""),at:a.z.string().default("")})).default({}),lessonsWritten:a.z.array(a.z.string()).default([]),ticketed:a.z.record(a.z.string()).default({}),scope:h.AuditScope.default({kind:"repo",ref:""}),detailLevel:h.AuditDetailLevel.default("technical"),testRun:a.z.array(a.z.object({command:a.z.string(),exitCode:a.z.number().int(),durationMs:a.z.number().int().default(0),tail:a.z.string().default("")})).optional()});h.AuditStartMsg=a.z.object({type:a.z.literal("audit.start"),requestId:a.z.string(),projectId:a.z.string(),role:h.AuditRole,model:a.z.string().default(""),scope:h.AuditScope.default({kind:"repo",ref:""}),detailLevel:h.AuditDetailLevel.default("technical")});h.AuditStartResultMsg=a.z.object({type:a.z.literal("audit.start.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditListMsg=a.z.object({type:a.z.literal("audit.list"),requestId:a.z.string(),projectId:a.z.string()});h.AuditStatsMsg=a.z.object({type:a.z.literal("audit.stats"),requestId:a.z.string(),projectIds:a.z.array(a.z.string()).max(200).default([]),since:a.z.string().default("")});h.AuditStatsResultMsg=a.z.object({type:a.z.literal("audit.stats.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),byProject:a.z.record(a.z.object({audits:a.z.number().int().default(0),findings:a.z.number().int().default(0),valid:a.z.number().int().default(0),falsePositive:a.z.number().int().default(0),wontFix:a.z.number().int().default(0),unreviewed:a.z.number().int().default(0)})).default({})});h.AuditListResultMsg=a.z.object({type:a.z.literal("audit.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audits:a.z.array(a.z.object({id:a.z.string(),role:h.AuditRole,createdAt:a.z.string(),findingCount:a.z.number().int(),bySeverity:a.z.record(a.z.number().int()).default({}),detailLevel:h.AuditDetailLevel.default("technical")})).default([])});h.AuditGetMsg=a.z.object({type:a.z.literal("audit.get"),requestId:a.z.string(),projectId:a.z.string(),auditId:a.z.string()});h.AuditGetResultMsg=a.z.object({type:a.z.literal("audit.get.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.AuditReviewMsg=a.z.object({type:a.z.literal("audit.review"),requestId:a.z.string(),projectId:a.z.string(),auditId:a.z.string(),selected:a.z.array(a.z.string()).optional(),ticketed:a.z.array(a.z.object({findingId:a.z.string(),issueKey:a.z.string()})).default([]),verdicts:a.z.array(a.z.object({findingId:a.z.string(),verdict:a.z.enum(["valid","false-positive","wont-fix"]),note:a.z.string().max(2e3).default("")})).default([]),verdictBy:a.z.string().default("")});h.AuditReviewResultMsg=a.z.object({type:a.z.literal("audit.review.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),audit:h.AuditRecord.optional()});h.KnowledgeListMsg=a.z.object({type:a.z.literal("knowledge.list"),requestId:a.z.string(),projectId:a.z.string()});h.KnowledgeFile=a.z.object({role:h.KnowledgeRole,level:a.z.enum(["global","org","project"]),source:a.z.enum(["pack","lessons","memory"]),name:a.z.string(),content:a.z.string(),editable:a.z.boolean().default(!1)});h.KnowledgeListResultMsg=a.z.object({type:a.z.literal("knowledge.list.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),files:a.z.array(h.KnowledgeFile).default([])});h.KnowledgeSaveMsg=a.z.object({type:a.z.literal("knowledge.save"),requestId:a.z.string(),projectId:a.z.string(),role:h.KnowledgeRole,level:a.z.enum(["org","project"]),source:a.z.enum(["pack","lessons"]),name:a.z.string().min(1).max(100),content:a.z.string().max(6e4),append:a.z.boolean().default(!1),by:a.z.string().default("")});h.KnowledgeSaveResultMsg=a.z.object({type:a.z.literal("knowledge.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional()});h.TeamCredsMsg=a.z.object({type:a.z.literal("team.creds"),requestId:a.z.string(),emails:a.z.array(a.z.string()).max(200)});h.TeamCredsResultMsg=a.z.object({type:a.z.literal("team.creds.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),githubShared:a.z.boolean().default(!1),sharedGithubLogin:a.z.string().default(""),entries:a.z.array(a.z.object({email:a.z.string(),jira:a.z.enum(["own","runner-account","missing"]),jiraAs:a.z.string().default(""),github:a.z.enum(["own","shared","missing"]),githubAs:a.z.string().default("")})).default([])});h.ChatFile=a.z.object({name:a.z.string().min(1).max(255),contentBase64:a.z.string().min(1).max(6e6)});h.ChatTurnMsg=a.z.object({type:a.z.literal("chat.turn"),requestId:a.z.string(),projectId:a.z.string(),sessionId:a.z.string().optional(),message:a.z.string().min(1).max(2e4),userName:a.z.string().default(""),model:a.z.string().default(""),files:a.z.array(h.ChatFile).max(8).default([]),replyLanguage:a.z.string().max(60).default(""),replyLanguageInstruction:a.z.string().max(600).default(""),replyStyle:a.z.string().max(30).default(""),pendingMigrations:a.z.array(a.z.string().max(200)).max(50).default([])});h.ChatTurnResultMsg=a.z.object({type:a.z.literal("chat.turn.result"),requestId:a.z.string(),ok:a.z.boolean(),sessionId:a.z.string().default(""),reply:a.z.string().default(""),error:a.z.string().optional(),inputTokens:a.z.number().int().nonnegative().default(0),outputTokens:a.z.number().int().nonnegative().default(0),cacheReadTokens:a.z.number().int().nonnegative().default(0),costUsd:a.z.number().nonnegative().default(0),model:a.z.string().max(200).default(""),contextTokens:a.z.number().int().nonnegative().default(0),contextLimit:a.z.number().int().nonnegative().default(0),compacted:a.z.boolean().default(!1),compactedMessages:a.z.number().int().nonnegative().default(0)});h.ChatCreateTicketMsg=a.z.object({type:a.z.literal("chat.create.ticket"),requestId:a.z.string(),projectId:a.z.string(),summary:a.z.string().min(1).max(250),description:a.z.string().default(""),triggerComment:a.z.string().default(""),requestedBy:a.z.string().default(""),requestedByEmail:a.z.string().default(""),asEpic:a.z.boolean().default(!1),children:a.z.array(a.z.object({summary:a.z.string().min(1),description:a.z.string().default("")})).max(20).default([]),createAs:a.z.enum(["epic_with_children","separate_epics","separate_tasks"]).default("epic_with_children"),files:a.z.array(h.ChatFile).max(8).default([])});h.ChatCreateTicketResultMsg=a.z.object({type:a.z.literal("chat.create.ticket.result"),requestId:a.z.string(),ok:a.z.boolean(),issueKey:a.z.string().default(""),error:a.z.string().optional(),childKeys:a.z.array(a.z.string()).default([])});h.EnvPreflightMsg=a.z.object({type:a.z.literal("env.preflight"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string().default(""),steps:a.z.array(h.DeployStep).default([]),requiredSecrets:a.z.array(a.z.string()).default([]),workdir:a.z.string().default(""),branch:a.z.string().default(""),publicUrl:a.z.string().default("")});h.EnvPreflightResultMsg=a.z.object({type:a.z.literal("env.preflight.result"),requestId:a.z.string(),ok:a.z.boolean(),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string().default(""),kind:a.z.enum(["connection","content"]).default("connection"),fix:a.z.array(a.z.string()).default([]),fixNote:a.z.string().default("")})).default([])});h.SELF_MIGRATION_DIR="apps/api/prisma/manual";function Rg(t){return/^[A-Za-z0-9][A-Za-z0-9._-]*\.sql$/.test(t)&&!t.includes("..")}h.SelfMigrationApplyMsg=a.z.object({type:a.z.literal("selfmigration.apply"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string().default(""),file:a.z.string(),urlSecret:a.z.string().default("DATABASE_URL")});h.SelfMigrationApplyResultMsg=a.z.object({type:a.z.literal("selfmigration.apply.result"),requestId:a.z.string(),ok:a.z.boolean(),file:a.z.string().default(""),checks:a.z.array(a.z.object({name:a.z.string(),ok:a.z.boolean(),detail:a.z.string().default(""),fix:a.z.array(a.z.string()).default([])})).default([]),output:a.z.string().max(2e4).default(""),error:a.z.string().default("")});h.DeploySuggestResultMsg=a.z.object({type:a.z.literal("deploy.suggest.result"),requestId:a.z.string(),ok:a.z.boolean(),steps:a.z.array(h.DeployStep).default([]),requiredSecrets:a.z.array(a.z.string()).default([]),notes:a.z.string().default(""),error:a.z.string().optional(),docPath:a.z.string().default(""),docContent:a.z.string().max(1e5).default("")});h.SetupStatusMsg=a.z.object({type:a.z.literal("setup.status"),requestId:a.z.string(),repoNames:a.z.array(a.z.string()).max(100).default([])});h.SetupStatusResultMsg=a.z.object({type:a.z.literal("setup.status.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),jiraConfigured:a.z.boolean().default(!1),jiraEmail:a.z.string().default(""),claude:a.z.object({installed:a.z.boolean(),version:a.z.string().default(""),loggedIn:a.z.boolean()}).optional(),githubTokenSet:a.z.boolean().default(!1),githubLogin:a.z.string().default(""),deploysEnabled:a.z.boolean().default(!1),jiraUserCount:a.z.number().int().default(0),repos:a.z.array(a.z.object({repoName:a.z.string(),mapped:a.z.boolean(),liveMapped:a.z.boolean().default(!0),pathExists:a.z.boolean().default(!1),isGit:a.z.boolean().default(!1),claudeMd:a.z.boolean().default(!1),deployMd:a.z.boolean().default(!1),testMd:a.z.boolean().default(!1),defaultBranch:a.z.string().default(""),githubToken:a.z.boolean().default(!1),githubTokenOwn:a.z.boolean().default(!1)})).default([])});h.SetupClaudeMdGenerateMsg=a.z.object({type:a.z.literal("setup.claudemd.generate"),requestId:a.z.string(),projectId:a.z.string(),kind:a.z.enum(["claude","deploy","design","unblock"]).default("claude"),blockers:a.z.array(a.z.string().max(400)).max(20).default([]),streamId:a.z.string().default(""),environments:a.z.array(a.z.object({name:a.z.string(),branch:a.z.string().default(""),publicUrl:a.z.string().default(""),workdir:a.z.string().default(""),dedicatedCheckout:a.z.boolean().default(!1)})).default([])});h.SetupClaudeMdGenerateResultMsg=a.z.object({type:a.z.literal("setup.claudemd.generate.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),content:a.z.string().default("")});h.SetupClaudeMdSaveMsg=a.z.object({type:a.z.literal("setup.claudemd.save"),requestId:a.z.string(),projectId:a.z.string(),kind:a.z.enum(["claude","deploy","design"]).default("claude"),overwrite:a.z.boolean().default(!1),content:a.z.string().max(1e5)});h.SetupClaudeMdSaveResultMsg=a.z.object({type:a.z.literal("setup.claudemd.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default("")});h.RepoDocSaveMsg=a.z.object({type:a.z.literal("repo.doc.save"),requestId:a.z.string(),projectId:a.z.string(),relPath:a.z.string().min(1).max(200),overwrite:a.z.boolean().default(!1),content:a.z.string().max(2e5)});h.RepoDocSaveResultMsg=a.z.object({type:a.z.literal("repo.doc.save.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default("")});h.RunnerUpdateMsg=a.z.object({type:a.z.literal("runner.update"),requestId:a.z.string()});h.RunResolveConflictMsg=a.z.object({type:a.z.literal("run.resolve.conflict"),requestId:a.z.string(),runId:a.z.string()});h.RunTestFixMsg=a.z.object({type:a.z.literal("run.testfix"),requestId:a.z.string(),runId:a.z.string(),failedTests:a.z.array(h.FailedTest).min(1).max(20)});h.RunTestFixResultMsg=a.z.object({type:a.z.literal("run.testfix.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),headSha:a.z.string().default(""),remaining:a.z.array(h.FailedTest).default([]),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional()});h.RunAnswerMsg=a.z.object({type:a.z.literal("run.answer"),requestId:a.z.string(),runId:a.z.string(),text:a.z.string().min(1).max(4e3),answeredBy:a.z.string().default("")});h.RunAnswerResultMsg=a.z.object({type:a.z.literal("run.answer.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),error:a.z.string().optional()});h.RunResolveConflictResultMsg=a.z.object({type:a.z.literal("run.resolve.conflict.result"),requestId:a.z.string(),ok:a.z.boolean(),note:a.z.string().default(""),freeOfCharge:a.z.boolean().default(!1),headSha:a.z.string().default(""),costUsd:a.z.number().nonnegative().optional(),inputTokens:a.z.number().int().nonnegative().optional(),outputTokens:a.z.number().int().nonnegative().optional()});h.RunPrConflictMsg=a.z.object({type:a.z.literal("run.pr.conflict"),runId:a.z.string(),conflicted:a.z.boolean()});h.AgentProfilesMsg=a.z.object({type:a.z.literal("agent.profiles"),requestId:a.z.string()});h.AgentProfilesResultMsg=a.z.object({type:a.z.literal("agent.profiles.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),profiles:a.z.array(a.z.object({agent:a.z.string(),name:a.z.string(),loggedIn:a.z.boolean()})).max(200).default([]),defaultLoggedIn:a.z.boolean().default(!1),agentsWithoutProfiles:a.z.array(a.z.string()).max(20).default([])});h.RunnerUpdateResultMsg=a.z.object({type:a.z.literal("runner.update.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),note:a.z.string().default(""),scheduled:a.z.boolean().default(!1)});h.AutopilotNextMsg=a.z.object({type:a.z.literal("autopilot.next"),requestId:a.z.string()});h.AutopilotNextResultMsg=a.z.object({type:a.z.literal("autopilot.next.result"),requestId:a.z.string(),ok:a.z.boolean(),error:a.z.string().optional(),item:a.z.object({id:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),ruleId:a.z.string(),baseOverride:a.z.string().default(""),branchOverride:a.z.string().default(""),continueBranch:a.z.boolean().default(!1),autoMerge:a.z.boolean().default(!1)}).nullable().default(null),pausedUntil:a.z.string().default("")});h.AutopilotReportMsg=a.z.object({type:a.z.literal("autopilot.report"),requestId:a.z.string(),itemId:a.z.string(),outcome:a.z.enum(["claimed","failed","paused"]),runId:a.z.string().default(""),error:a.z.string().default("")});h.RunnerToServerMsg=a.z.discriminatedUnion("type",[h.HelloMsg,h.HeartbeatMsg,h.RunClaimMsg,h.RunLogMsg,h.RunUsageMsg,h.RunStatusMsg,h.ProjectTestResultMsg,h.RuleDiagnoseResultMsg,h.DeployClaimMsg,h.DeploySuggestResultMsg,h.EnvPreflightResultMsg,h.SelfMigrationApplyResultMsg,h.ChatTurnResultMsg,h.ChatStreamMsg,h.ChatUsageMsg,h.ChatCreateTicketResultMsg,h.ChatListResultMsg,h.RepoDocsResultMsg,h.RepoDocReadResultMsg,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.RepoDocSaveResultMsg,h.RunnerUpdateResultMsg,h.AgentProfilesResultMsg,h.RunPrConflictMsg,h.RunResolveConflictResultMsg,h.RunTestFixResultMsg,h.RunAnswerResultMsg,h.AuditStatsResultMsg,h.AutopilotNextMsg,h.AutopilotReportMsg]);h.HelloAckMsg=a.z.object({type:a.z.literal("hello.ack"),runnerId:a.z.string(),runnerName:a.z.string(),serverTime:a.z.string()});h.ConfigMsg=a.z.object({type:a.z.literal("config"),projects:a.z.array(h.ProjectConfig),rules:a.z.array(h.RuleConfig),environments:a.z.array(h.EnvironmentConfig).default([]),pollingPaused:a.z.boolean().default(!1)});h.RunClaimResultMsg=a.z.object({type:a.z.literal("run.claim.result"),requestId:a.z.string(),accepted:a.z.boolean(),runId:a.z.string().optional(),reason:a.z.string().optional(),claudeProfile:a.z.string().optional(),actorEmail:a.z.string().optional()});h.ProjectTestMsg=a.z.object({type:a.z.literal("project.test"),requestId:a.z.string(),projectId:a.z.string()});h.RuleDiagnoseMsg=a.z.object({type:a.z.literal("rule.diagnose"),requestId:a.z.string(),ruleId:a.z.string()});h.RunCancelMsg=a.z.object({type:a.z.literal("run.cancel"),runId:a.z.string()});h.RunApprovedMsg=a.z.object({type:a.z.literal("run.approved"),runId:a.z.string(),headSha:a.z.string().optional()});h.RunRejectedMsg=a.z.object({type:a.z.literal("run.rejected"),runId:a.z.string()});h.RunRetryPushMsg=a.z.object({type:a.z.literal("run.retryPush"),runId:a.z.string()});h.DeployStartMsg=a.z.object({type:a.z.literal("deploy.start"),runId:a.z.string(),projectId:a.z.string(),issueKey:a.z.string(),issueSummary:a.z.string().default(""),environment:h.EnvironmentConfig,requestedBy:a.z.string().default(""),attempt:a.z.number().int().positive().default(1)});h.DeployFixMsg=a.z.object({type:a.z.literal("deploy.fix"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string(),steps:a.z.array(a.z.object({name:a.z.string(),run:a.z.string(),continueOnError:a.z.boolean().default(!1)})),failedStep:a.z.string().default(""),errorText:a.z.string().max(8e3).default("")});h.DeploySuggestMsg=a.z.object({type:a.z.literal("deploy.suggest"),requestId:a.z.string(),projectId:a.z.string(),environmentName:a.z.string(),notes:a.z.string().default(""),timeoutSeconds:a.z.number().int().positive().max(1800).default(300)});h.JiraUsersMsg=a.z.object({type:a.z.literal("jira.users"),requestId:a.z.string(),query:a.z.string().default("")});h.ServerToRunnerMsg=a.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.DeployFixMsg,h.EnvPreflightMsg,h.SelfMigrationApplyMsg,h.ChatTurnMsg,h.ChatCreateTicketMsg,h.ChatListMsg,h.RepoDocsMsg,h.RepoDocReadMsg,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.RepoDocSaveMsg,h.RunnerUpdateMsg,h.AgentProfilesMsg,h.RunResolveConflictMsg,h.RunTestFixMsg,h.RunAnswerMsg,h.AuditStatsMsg,h.AutopilotNextResultMsg]);h.EnrollRequest=a.z.object({enrollToken:a.z.string().min(10),name:a.z.string().min(1).max(100),platform:a.z.string(),runnerVersion:a.z.string()});h.EnrollResponse=a.z.object({runnerId:a.z.string(),runnerToken:a.z.string(),controlPlaneWsUrl:a.z.string()});function $g(t){return h.RunnerToServerMsg.parse(t)}function Pg(t){return h.ServerToRunnerMsg.parse(t)}h.DEFAULT_PLAN_PROMPT_TEMPLATE=`You are a senior engineer asked to assess a Jira ticket. You have read-only access to the repository - do not attempt to modify anything.
38
38
 
39
39
  Ticket {{issueKey}}: {{summary}}
40
40
 
@@ -289,13 +289,13 @@ ${i}${o}`:"clean"}`}function Lt(){let t=process.env.ALLWRIGHT_CACHE_DIR??process
289
289
  `).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Ti(t,e,n=6e4){let s=(await F(t,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await F(t,["diff","--stat",`${s}...${e}`]),o=await F(t,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,n)}}function Bc(){let t=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(ke.default.existsSync(de.default.join(Xn.default.homedir(),".cache","ticketpilot"))?de.default.join(Xn.default.homedir(),".cache","ticketpilot"):de.default.join(Xn.default.homedir(),".cache","allwright"));return de.default.join(t,"env-checkouts")}function Dc(t){return t.replace(/[^\w.-]+/g,"_")}function Kc(t,e){return de.default.join(Bc(),Dc(t),Dc(e))}async function Qo(t){let e=Kc(t.repoName,t.envName);return await F(t.repoPath,["fetch","origin",t.branch],{timeoutMs:3e5}),ke.default.existsSync(de.default.join(e,".git"))?await F(e,["fetch","origin",t.branch],{timeoutMs:3e5}):(ke.default.rmSync(e,{recursive:!0,force:!0}),ke.default.mkdirSync(de.default.dirname(e),{recursive:!0,mode:448}),await F(t.repoPath,["worktree","prune"]).catch(()=>{}),await F(t.repoPath,["worktree","add","--detach",e,`origin/${t.branch}`])),t.attached?await F(e,["checkout","-B",t.branch,`origin/${t.branch}`]):await F(e,["checkout","--force","--detach",`origin/${t.branch}`]),e}async function ea(t,e,n){try{await F(t,["fetch","origin",e],{timeoutMs:3e5})}catch{return{ok:!1,reason:`branch "${e}" does not exist on origin - nothing to promote. Check the environment's ticket branch template against the branch your implement rule creates.`}}try{return await F(t,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await F(t,["-c",`user.name=${wi}`,"-c",`user.email=${_i}`,"merge","--no-ff","-m",n,`origin/${e}`]),{ok:!0}}catch(r){return await F(t,["merge","--abort"]).catch(()=>{}),{ok:!1,reason:`could not merge "${e}" into the environment branch - ${r instanceof Error?r.message:r}. Resolve it manually and deploy again.`}}}async function ta(t,e){await F(t,["fetch","origin",e],{timeoutMs:3e5});try{return await F(t,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyUpToDate:!0}}catch{}try{return await F(t,["-c",`user.name=${wi}`,"-c",`user.email=${_i}`,"merge","--no-edit",`origin/${e}`]),{ok:!0,alreadyUpToDate:!1}}catch(n){let s=(await F(t,["diff","--name-only","--diff-filter=U"]).catch(()=>"")).split(`
290
290
  `).filter(Boolean);return s.length?{ok:!1,conflicts:s}:(await F(t,["merge","--abort"]).catch(()=>{}),{ok:!1,conflicts:null,reason:n instanceof Error?n.message.slice(0,300):String(n)})}}async function un(t){await F(t,["merge","--abort"]).catch(()=>{})}async function na(t,e){await F(t,["add","-A"]),await F(t,["-c",`user.name=${wi}`,"-c",`user.email=${_i}`,"commit","--no-edit","-m",e])}async function ra(t,e){let n=new Set(await xi(t));return e.filter(r=>n.has(r))}async function xi(t){let e=new Set;try{let r=await F(t,["grep","-l","-I","-E","^(<{7}|>{7})( |$)"]);for(let s of r.split(`
291
291
  `).filter(Boolean))e.add(s)}catch{}let n=[];try{n=(await F(t,["grep","-l","-I","-E","^={7}$"])).split(`
292
- `).filter(Boolean).filter(s=>!e.has(s))}catch{}for(let r of n)try{let s=await F(t,["show",`HEAD:${r}`]);/^={7}$/m.test(s)||e.add(r)}catch{e.add(r)}return[...e]}async function Ts(t,e,n){ke.default.mkdirSync(de.default.dirname(e),{recursive:!0,mode:448}),await F(t,["fetch","origin",n],{timeoutMs:3e5}),await F(t,["worktree","add","--detach",e,`origin/${n}`]),await F(e,["checkout","-B",n,`origin/${n}`])}async function sa(t,e){try{await F(t,["push","origin",e],{timeoutMs:3e5})}catch(n){throw new Error(`could not push "${e}" - ${n instanceof Error?n.message:n}. Someone may have pushed to it since this deploy started; retry.`)}}async function ia(t,e,n){try{return await qc("git",["-C",t,"diff","--quiet",e,n,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(r){let s=r;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${n}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function tr(t){return(await F(t,["config","--get","remote.origin.url"])).trim()}function at(t){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(t)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(t)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(t);return e?{owner:e[1],repo:e[2]}:null}var ke,Xn,de,Lc,Uc,qc,wi,_i,on,an,Fc,Dt,wt=Vs(()=>{"use strict";ke=I(require("node:fs"),1),Xn=I(require("node:os"),1),de=I(require("node:path"),1),Lc=require("node:child_process"),Uc=require("node:util"),qc=(0,Uc.promisify)(Lc.execFile),wi="Allwright Agent",_i="agent@ticketpilot.local",on=200,an=2e4,Fc=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];Dt=".ticketpilot-delete"});function Ci(t,e,n){let r=(n??"").trim().toLowerCase(),s=r?t.githubUsers[r]?.token:void 0;if(s)return{token:s,source:"user"};let i=t.repos[e]?.github?.token;return i?{token:i,source:"repo"}:t.github?.token?{token:t.github.token,source:"global"}:null}function Ae(t,e){return t.repos[e]?.github?.token??t.github?.token??null}function Wc(t,e){let n=[t.jira,...Object.values(t.repos).map(l=>l.jira)].filter(l=>!!l),r=new Set(n.map(l=>l.email.toLowerCase())),s=!!t.github?.token||Object.values(t.repos).some(l=>l.github?.token),i=t.github?.login??Object.values(t.repos).find(l=>l.github?.login)?.github?.login??"",o=e.map(l=>{let c=l.trim().toLowerCase(),u=t.jiraUsers[c]?"own":r.has(c)?"runner-account":"missing",f=u==="own"?t.jiraUsers[c].email:u==="runner-account"?c:"",p=t.githubUsers[c]?"own":s?"shared":"missing",b=p==="own"?t.githubUsers[c].login??"":p==="shared"?i:"";return{email:c,jira:u,jiraAs:f,github:p,githubAs:b}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var nr=Vs(()=>{"use strict"});var or={};Ws(or,{GitHubClient:()=>$e});var ey,$e,ct=Vs(()=>{"use strict";ey=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",$e=class{constructor(e){this.token=e}token;async request(e,n,r){let s=await fetch(`${ey}${n}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...r!==void 0?{"Content-Type":"application/json"}:{}},body:r===void 0?void 0:JSON.stringify(r)}),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) - expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let l=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${n} -> ${s.status}: ${l}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,n,r){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${n}/pulls`,r);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${n}/pulls?head=${encodeURIComponent(`${e}:${r.head}`)}&state=open`);if(o?.length){let l=o[0];return{number:l.number,url:l.html_url,state:l.state,merged:l.merged??!1,headSha:l.head.sha,mergeableState:null,baseRef:l.base?.ref??""}}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,baseRef:r.base}}async getReviews(e,n,r){let{data:s}=await this.request("GET",`/repos/${e}/${n}/pulls/${r}/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,n,r){try{let{data:s}=await this.request("GET",`/repos/${e}/${n}/pulls/${r}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null,baseRef:s.base?.ref??""}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async mergePullRequest(e,n,r,s,i={}){try{return await this.request("PUT",`/repos/${e}/${n}/pulls/${r}/merge`,{merge_method:s,...i.sha?{sha:i.sha}:{},...i.title?{commit_title:i.title}:{}}),{merged:!0}}catch(o){let l=o instanceof Error?o.message:String(o);return l.includes("-> 405")?{merged:!1,reason:`GitHub refused the merge: the branch is not in a mergeable state, or this repository does not allow "${s}" merges. Check the PR for conflicts or required checks, then merge it there.`}:l.includes("-> 409")?{merged:!1,reason:"the branch moved since it was reviewed, so GitHub refused to merge the commit that was approved. Re-review the PR and approve again."}:l.includes("-> 403")?{merged:!1,reason:`this runner's GitHub token is not allowed to merge in ${e}/${n}. It needs write access to the repository - or merge the PR yourself.`}:{merged:!1,reason:l}}}async repoAccess(e,n){try{let{data:r}=await this.request("GET",`/repos/${e}/${n}`);return{ok:!0,canPush:!!(r.permissions?.push||r.permissions?.admin)}}catch(r){let s=r instanceof Error?r.message:String(r);return{ok:!1,canPush:!1,error:s.includes("-> 404")?"not found (private repo this token cannot see, or the name is wrong)":s.slice(0,200)}}}async closePullRequest(e,n,r){await this.request("PATCH",`/repos/${e}/${n}/pulls/${r}`,{state:"closed"})}async deleteBranch(e,n,r){try{await this.request("DELETE",`/repos/${e}/${n}/git/refs/heads/${encodeURIComponent(r)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var Bt=re((pS,ih)=>{"use strict";var rh=["nodebuffer","arraybuffer","fragments"],sh=typeof Blob<"u";sh&&rh.push("blob");ih.exports={BINARY_TYPES:rh,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:sh,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var zs=re((mS,Wi)=>{"use strict";var{EMPTY_BUFFER:vb}=Bt(),Qa=Buffer[Symbol.species];function wb(t,e){if(t.length===0)return vb;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new Qa(n.buffer,n.byteOffset,r):n}function oh(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function ah(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function _b(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function el(t){if(el.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Qa(t):ArrayBuffer.isView(t)?e=new Qa(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),el.readOnly=!1),e}Wi.exports={concat:wb,mask:oh,toArrayBuffer:_b,toBuffer:el,unmask:ah};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Wi.exports.mask=function(e,n,r,s,i){i<48?oh(e,n,r,s,i):t.mask(e,n,r,s,i)},Wi.exports.unmask=function(e,n){e.length<32?ah(e,n):t.unmask(e,n)}}catch{}});var uh=re((gS,ch)=>{"use strict";var lh=Symbol("kDone"),tl=Symbol("kRun"),nl=class{constructor(e){this[lh]=()=>{this.pending--,this[tl]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[tl]()}[tl](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[lh])}}};ch.exports=nl});var ss=re((yS,ph)=>{"use strict";var Ds=require("zlib"),dh=zs(),kb=uh(),{kStatusCode:hh}=Bt(),Sb=Buffer[Symbol.species],Tb=Buffer.from([0,0,255,255]),Yi=Symbol("permessage-deflate"),Kt=Symbol("total-length"),ns=Symbol("callback"),fn=Symbol("buffers"),rs=Symbol("error"),Ji,rl=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,!Ji){let n=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ji=new kb(n)}}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[ns];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="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 "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){Ji.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){Ji.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ds.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Yi]=this,this._inflate[Kt]=0,this._inflate[fn]=[],this._inflate.on("error",Cb),this._inflate.on("data",fh)}this._inflate[ns]=r,this._inflate.write(e),n&&this._inflate.write(Tb),this._inflate.flush(()=>{let i=this._inflate[rs];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=dh.concat(this._inflate[fn],this._inflate[Kt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Kt]=0,this._inflate[fn]=[],n&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ds.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Kt]=0,this._deflate[fn]=[],this._deflate.on("data",xb)}this._deflate[ns]=r,this._deflate.write(e),this._deflate.flush(Ds.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=dh.concat(this._deflate[fn],this._deflate[Kt]);n&&(i=new Sb(i.buffer,i.byteOffset,i.length-4)),this._deflate[ns]=null,this._deflate[Kt]=0,this._deflate[fn]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};ph.exports=rl;function xb(t){this[fn].push(t),this[Kt]+=t.length}function fh(t){if(this[Kt]+=t.length,this[Yi]._maxPayload<1||this[Kt]<=this[Yi]._maxPayload){this[fn].push(t);return}this[rs]=new RangeError("Max payload size exceeded"),this[rs].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[rs][hh]=1009,this.removeListener("data",fh),this.reset()}function Cb(t){if(this[Yi]._inflate=null,this[rs]){this[ns](this[rs]);return}t[hh]=1007,this[ns](t)}});var is=re((bS,Xi)=>{"use strict";var{isUtf8:mh}=require("buffer"),{hasBlob:Ib}=Bt(),Rb=[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 Eb(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function sl(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function Ab(t){return Ib&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Xi.exports={isBlob:Ab,isValidStatusCode:Eb,isValidUTF8:sl,tokenChars:Rb};if(mh)Xi.exports.isValidUTF8=function(t){return t.length<24?sl(t):mh(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Xi.exports.isValidUTF8=function(e){return e.length<32?sl(e):t(e)}}catch{}});var cl=re((vS,kh)=>{"use strict";var{Writable:$b}=require("stream"),gh=ss(),{BINARY_TYPES:Pb,EMPTY_BUFFER:yh,kStatusCode:jb,kWebSocket:Ob}=Bt(),{concat:il,toArrayBuffer:Nb,unmask:Mb}=zs(),{isValidStatusCode:zb,isValidUTF8:bh}=is(),Qi=Buffer[Symbol.species],rt=0,vh=1,wh=2,_h=3,ol=4,al=5,eo=6,ll=class extends $b{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Pb[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[Ob]=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=rt}_write(e,n,r){if(this._opcode===8&&this._state==rt)return r();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){r(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(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Qi(r.buffer,r.byteOffset+e,r.length-e),new Qi(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Qi(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case rt:this.getInfo(e);break;case vh:this.getPayloadLength16(e);break;case wh:this.getPayloadLength64(e);break;case _h:this.getMask();break;case ol:this.getData(e);break;case al:case eo:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[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 r=(n[0]&64)===64;if(r&&!this._extensions[gh.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){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=r}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(r){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=(n[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=vh:this._payloadLength===127?this._state=wh: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 n=this.consume(8),r=n.readUInt32BE(0);if(r>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=r*Math.pow(2,32)+n.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 n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=_h:this._state=ol}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=ol}getData(e){let n=yh;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Mb(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let r=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(r);return}if(this._compressed){this._state=al,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[gh.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(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");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===rt&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=rt;return}let n=this._messageLength,r=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=il(r,n):this._binaryType==="arraybuffer"?s=Nb(il(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit("message",s,!0),this._state=rt,this.startLoop(e)}))}else{let s=il(r,n);if(!this._skipUTF8Validation&&!bh(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===al||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit("message",s,!1),this._state=rt,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,yh),this.end();else{let r=e.readUInt16BE(0);if(!zb(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Qi(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!bh(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=rt;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=rt,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[jb]=s,o}};kh.exports=ll});var hl=re((_S,xh)=>{"use strict";var{Duplex:wS}=require("stream"),{randomFillSync:Db}=require("crypto"),{types:{isUint8Array:Lb}}=require("util"),Sh=ss(),{EMPTY_BUFFER:Ub,kWebSocket:qb,NOOP:Fb}=Bt(),{isBlob:os,isValidStatusCode:Bb}=is(),{mask:Th,toBuffer:vr}=zs(),st=Symbol("kByteLength"),Kb=Buffer.alloc(4),to=8*1024,wr,as=to,ht=0,Hb=1,Zb=2,ul=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ht,this.onerror=Fb,this[qb]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Kb,n.generateMask?n.generateMask(r):(as===to&&(wr===void 0&&(wr=Buffer.alloc(to)),Db(wr,0,to),as=0),r[0]=wr[as++],r[1]=wr[as++],r[2]=wr[as++],r[3]=wr[as++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let l;typeof e=="string"?(!n.mask||o)&&n[st]!==void 0?l=n[st]:(e=Buffer.from(e),l=e.length):(l=e.length,s=n.mask&&n.readOnly&&!o);let c=l;l>=65536?(i+=8,c=127):l>125&&(i+=2,c=126);let u=Buffer.allocUnsafe(s?l+i:i);return u[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(u[0]|=64),u[1]=c,c===126?u.writeUInt16BE(l,2):c===127&&(u[2]=u[3]=0,u.writeUIntBE(l,4,6)),n.mask?(u[1]|=128,u[i-4]=r[0],u[i-3]=r[1],u[i-2]=r[2],u[i-1]=r[3],o?[u,e]:s?(Th(e,r,u,i,l),[u]):(Th(e,r,e,0,l),[u,e])):[u,e]}close(e,n,r,s){let i;if(e===void 0)i=Ub;else{if(typeof e!="number"||!Bb(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let l=Buffer.byteLength(n);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+l),i.writeUInt16BE(e,0),typeof n=="string")i.write(n,2);else if(Lb(n))i.set(n,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[st]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ht?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):os(e)?(s=e.size,i=!1):(e=vr(e),s=e.length,i=vr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[st]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ht?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):os(e)?(s=e.size,i=!1):(e=vr(e),s=e.length,i=vr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[st]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ht?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[Sh.extensionName],i=n.binary?2:1,o=n.compress,l,c;typeof e=="string"?(l=Buffer.byteLength(e),c=!1):os(e)?(l=e.size,c=!1):(e=vr(e),l=e.length,c=vr.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[st]:l,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,this._compress,u,r]):this.getBlobData(e,this._compress,u,r):this._state!==ht?this.enqueue([this.dispatch,e,this._compress,u,r]):this.dispatch(e,this._compress,u,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[st],this._state=Zb,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(dl,this,l,s);return}this._bufferedBytes-=r[st];let o=vr(i);n?this.dispatch(o,n,r,s):(this._state=ht,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(Gb,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[Sh.extensionName];this._bufferedBytes+=r[st],this._state=Hb,i.compress(e,r.fin,(o,l)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");dl(this,c,s);return}this._bufferedBytes-=r[st],this._state=ht,r.readOnly=!1,this.sendFrame(t.frame(l,r),s),this.dequeue()})}dequeue(){for(;this._state===ht&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][st],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][st],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};xh.exports=ul;function dl(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function Gb(t,e,n){dl(t,e,n),t.onerror(e)}});var Oh=re((kS,jh)=>{"use strict";var{kForOnEventAttribute:Ls,kListener:fl}=Bt(),Ch=Symbol("kCode"),Ih=Symbol("kData"),Rh=Symbol("kError"),Eh=Symbol("kMessage"),Ah=Symbol("kReason"),ls=Symbol("kTarget"),$h=Symbol("kType"),Ph=Symbol("kWasClean"),Ht=class{constructor(e){this[ls]=null,this[$h]=e}get target(){return this[ls]}get type(){return this[$h]}};Object.defineProperty(Ht.prototype,"target",{enumerable:!0});Object.defineProperty(Ht.prototype,"type",{enumerable:!0});var _r=class extends Ht{constructor(e,n={}){super(e),this[Ch]=n.code===void 0?0:n.code,this[Ah]=n.reason===void 0?"":n.reason,this[Ph]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[Ch]}get reason(){return this[Ah]}get wasClean(){return this[Ph]}};Object.defineProperty(_r.prototype,"code",{enumerable:!0});Object.defineProperty(_r.prototype,"reason",{enumerable:!0});Object.defineProperty(_r.prototype,"wasClean",{enumerable:!0});var cs=class extends Ht{constructor(e,n={}){super(e),this[Rh]=n.error===void 0?null:n.error,this[Eh]=n.message===void 0?"":n.message}get error(){return this[Rh]}get message(){return this[Eh]}};Object.defineProperty(cs.prototype,"error",{enumerable:!0});Object.defineProperty(cs.prototype,"message",{enumerable:!0});var Us=class extends Ht{constructor(e,n={}){super(e),this[Ih]=n.data===void 0?null:n.data}get data(){return this[Ih]}};Object.defineProperty(Us.prototype,"data",{enumerable:!0});var Vb={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Ls]&&s[fl]===e&&!s[Ls])return;let r;if(t==="message")r=function(i,o){let l=new Us("message",{data:o?i:i.toString()});l[ls]=this,no(e,this,l)};else if(t==="close")r=function(i,o){let l=new _r("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[ls]=this,no(e,this,l)};else if(t==="error")r=function(i){let o=new cs("error",{error:i,message:i.message});o[ls]=this,no(e,this,o)};else if(t==="open")r=function(){let i=new Ht("open");i[ls]=this,no(e,this,i)};else return;r[Ls]=!!n[Ls],r[fl]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[fl]===e&&!n[Ls]){this.removeListener(t,n);break}}};jh.exports={CloseEvent:_r,ErrorEvent:cs,Event:Ht,EventTarget:Vb,MessageEvent:Us};function no(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var ro=re((SS,Nh)=>{"use strict";var{tokenChars:qs}=is();function xt(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Wb(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!1,i=!1,o,l,c=-1,u=-1,f=-1,p=0;for(;p<t.length;p++)if(u=t.charCodeAt(p),o===void 0)if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(p!==0&&(u===32||u===9))f===-1&&c!==-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let w=t.slice(c,f);u===44?(xt(e,w,n),n=Object.create(null)):o=w,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(l===void 0)if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(u===32||u===9)f===-1&&c!==-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),xt(n,t.slice(c,f),!0),u===44&&(xt(e,o,n),n=Object.create(null),o=void 0),c=f=-1}else if(u===61&&c!==-1&&f===-1)l=t.slice(c,p),c=f=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(qs[u]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);c===-1?c=p:r||(r=!0),s=!1}else if(i)if(qs[u]===1)c===-1&&(c=p);else if(u===34&&c!==-1)i=!1,f=p;else if(u===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(u===34&&t.charCodeAt(p-1)===61)i=!0;else if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(c!==-1&&(u===32||u===9))f===-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let w=t.slice(c,f);r&&(w=w.replace(/\\/g,""),r=!1),xt(n,l,w),u===44&&(xt(e,o,n),n=Object.create(null),o=void 0),l=void 0,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(c===-1||i||u===32||u===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=p);let b=t.slice(c,f);return o===void 0?xt(e,b,n):(l===void 0?xt(n,b,!0):r?xt(n,l,b.replace(/\\/g,"")):xt(n,l,b),xt(e,o,n)),e}function Jb(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Nh.exports={format:Jb,parse:Wb}});var ao=re((CS,Gh)=>{"use strict";var Yb=require("events"),Xb=require("https"),Qb=require("http"),Dh=require("net"),ev=require("tls"),{randomBytes:tv,createHash:nv}=require("crypto"),{Duplex:TS,Readable:xS}=require("stream"),{URL:pl}=require("url"),pn=ss(),rv=cl(),sv=hl(),{isBlob:iv}=is(),{BINARY_TYPES:Mh,CLOSE_TIMEOUT:ov,EMPTY_BUFFER:so,GUID:av,kForOnEventAttribute:ml,kListener:lv,kStatusCode:cv,kWebSocket:Se,NOOP:Lh}=Bt(),{EventTarget:{addEventListener:uv,removeEventListener:dv}}=Oh(),{format:hv,parse:fv}=ro(),{toBuffer:pv}=zs(),Uh=Symbol("kAborted"),gl=[8,13],Zt=["CONNECTING","OPEN","CLOSING","CLOSED"],mv=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,fe=class t extends Yb{constructor(e,n,r){super(),this._binaryType=Mh[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=so,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),qh(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Mh.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,n,r){let s=new rv({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:r.maxBufferedChunks,maxFragments:r.maxFragments,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new sv(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[Se]=this,i[Se]=this,e[Se]=this,s.on("conclude",bv),s.on("drain",vv),s.on("error",wv),s.on("message",_v),s.on("ping",kv),s.on("pong",Sv),i.onerror=Tv,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Kh),e.on("data",oo),e.on("end",Hh),e.on("error",Zh),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[pn.extensionName]&&this._extensions[pn.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){He(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bh(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||so,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||so,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[pn.extensionName]||(s.compress=!1),this._sender.send(e||so,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){He(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(fe,"CONNECTING",{enumerable:!0,value:Zt.indexOf("CONNECTING")});Object.defineProperty(fe.prototype,"CONNECTING",{enumerable:!0,value:Zt.indexOf("CONNECTING")});Object.defineProperty(fe,"OPEN",{enumerable:!0,value:Zt.indexOf("OPEN")});Object.defineProperty(fe.prototype,"OPEN",{enumerable:!0,value:Zt.indexOf("OPEN")});Object.defineProperty(fe,"CLOSING",{enumerable:!0,value:Zt.indexOf("CLOSING")});Object.defineProperty(fe.prototype,"CLOSING",{enumerable:!0,value:Zt.indexOf("CLOSING")});Object.defineProperty(fe,"CLOSED",{enumerable:!0,value:Zt.indexOf("CLOSED")});Object.defineProperty(fe.prototype,"CLOSED",{enumerable:!0,value:Zt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(fe.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(fe.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[ml])return e[lv];return null},set(e){for(let n of this.listeners(t))if(n[ml]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[ml]:!0})}})});fe.prototype.addEventListener=uv;fe.prototype.removeEventListener=dv;Gh.exports=fe;function qh(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:ov,protocolVersion:gl[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!gl.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${gl.join(", ")})`);let i;if(e instanceof pl)i=e;else try{i=new pl(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",l=i.protocol==="ws+unix:",c;if(i.protocol!=="ws:"&&!o&&!l?c=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"),c){let x=new SyntaxError(c);if(t._redirects===0)throw x;io(t,x);return}let u=o?443:80,f=tv(16).toString("base64"),p=o?Xb.request:Qb.request,b=new Set,w;if(s.createConnection=s.createConnection||(o?yv:gv),s.defaultPort=s.defaultPort||u,s.port=i.port||u,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":f,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(w=new pn({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=hv({[pn.extensionName]:w.offer()})),n.length){for(let x of n){if(typeof x!="string"||!mv.test(x)||b.has(x))throw new SyntaxError("An invalid or duplicated subprotocol was specified");b.add(x)}s.headers["Sec-WebSocket-Protocol"]=n.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}`),l){let x=s.path.split(":");s.socketPath=x[0],s.path=x[1]}let S;if(s.followRedirects){if(t._redirects===0){t._originalIpc=l,t._originalSecure=o,t._originalHostOrSocketPath=l?s.socketPath:i.host;let x=r&&r.headers;if(r={...r,headers:{}},x)for(let[A,j]of Object.entries(x))r.headers[A.toLowerCase()]=j}else if(t.listenerCount("redirect")===0){let x=l?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!x||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,x||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),S=t._req=p(s),t._redirects&&t.emit("redirect",t.url,S)}else S=t._req=p(s);s.timeout&&S.on("timeout",()=>{He(t,S,"Opening handshake has timed out")}),S.on("error",x=>{S===null||S[Uh]||(S=t._req=null,io(t,x))}),S.on("response",x=>{let A=x.headers.location,j=x.statusCode;if(A&&s.followRedirects&&j>=300&&j<400){if(++t._redirects>s.maxRedirects){He(t,S,"Maximum redirects exceeded");return}S.abort();let v;try{v=new pl(A,e)}catch{let H=new SyntaxError(`Invalid URL: ${A}`);io(t,H);return}qh(t,v,n,r)}else t.emit("unexpected-response",S,x)||He(t,S,`Unexpected server response: ${x.statusCode}`)}),S.on("upgrade",(x,A,j)=>{if(t.emit("upgrade",x),t.readyState!==fe.CONNECTING)return;S=t._req=null;let v=x.headers.upgrade;if(v===void 0||v.toLowerCase()!=="websocket"){He(t,A,"Invalid Upgrade header");return}let O=nv("sha1").update(f+av).digest("base64");if(x.headers["sec-websocket-accept"]!==O){He(t,A,"Invalid Sec-WebSocket-Accept header");return}let H=x.headers["sec-websocket-protocol"],z;if(H!==void 0?b.size?b.has(H)||(z="Server sent an invalid subprotocol"):z="Server sent a subprotocol but none was requested":b.size&&(z="Server sent no subprotocol"),z){He(t,A,z);return}H&&(t._protocol=H);let B=x.headers["sec-websocket-extensions"];if(B!==void 0){if(!w){He(t,A,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let d;try{d=fv(B)}catch{He(t,A,"Invalid Sec-WebSocket-Extensions header");return}let m=Object.keys(d);if(m.length!==1||m[0]!==pn.extensionName){He(t,A,"Server indicated an extension that was not requested");return}try{w.accept(d[pn.extensionName])}catch{He(t,A,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[pn.extensionName]=w}t.setSocket(A,j,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(S,t):S.end()}function io(t,e){t._readyState=fe.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function gv(t){return t.path=t.socketPath,Dh.connect(t)}function yv(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=Dh.isIP(t.host)?"":t.host),ev.connect(t)}function He(t,e,n){t._readyState=fe.CLOSING;let r=new Error(n);Error.captureStackTrace(r,He),e.setHeader?(e[Uh]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(io,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function yl(t,e,n){if(e){let r=iv(e)?e.size:pv(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${Zt[t.readyState]})`);process.nextTick(n,r)}}function bv(t,e){let n=this[Se];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[Se]!==void 0&&(n._socket.removeListener("data",oo),process.nextTick(Fh,n._socket),t===1005?n.close():n.close(t,e))}function vv(){let t=this[Se];t.isPaused||t._socket.resume()}function wv(t){let e=this[Se];e._socket[Se]!==void 0&&(e._socket.removeListener("data",oo),process.nextTick(Fh,e._socket),e.close(t[cv])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function zh(){this[Se].emitClose()}function _v(t,e){this[Se].emit("message",t,e)}function kv(t){let e=this[Se];e._autoPong&&e.pong(t,!this._isServer,Lh),e.emit("ping",t)}function Sv(t){this[Se].emit("pong",t)}function Fh(t){t.resume()}function Tv(t){let e=this[Se];e.readyState!==fe.CLOSED&&(e.readyState===fe.OPEN&&(e._readyState=fe.CLOSING,Bh(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Bh(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Kh(){let t=this[Se];if(this.removeListener("close",Kh),this.removeListener("data",oo),this.removeListener("end",Hh),t._readyState=fe.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[Se]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",zh),t._receiver.on("finish",zh))}function oo(t){this[Se]._receiver.write(t)||this.pause()}function Hh(){let t=this[Se];t._readyState=fe.CLOSING,t._receiver.end(),this.end()}function Zh(){let t=this[Se];this.removeListener("error",Zh),this.on("error",Lh),t&&(t._readyState=fe.CLOSING,this.destroy())}});var Yh=re((RS,Jh)=>{"use strict";var IS=ao(),{Duplex:xv}=require("stream");function Vh(t){t.emit("close")}function Cv(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Wh(t){this.removeListener("error",Wh),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Iv(t,e){let n=!0,r=new xv({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let l=!o&&r._readableState.objectMode?i.toString():i;r.push(l)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Vh,r);return}let o=!1;t.once("error",function(c){o=!0,i(c)}),t.once("close",function(){o||i(s),process.nextTick(Vh,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",Cv),r.on("error",Wh),r}Jh.exports=Iv});var bl=re((ES,Xh)=>{"use strict";var{tokenChars:Rv}=is();function Ev(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&Rv[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let l=t.slice(n,r);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Xh.exports={parse:Ev}});var of=re(($S,sf)=>{"use strict";var Av=require("events"),lo=require("http"),{Duplex:AS}=require("stream"),{createHash:$v}=require("crypto"),Qh=ro(),kr=ss(),Pv=bl(),jv=ao(),{CLOSE_TIMEOUT:Ov,GUID:Nv,kWebSocket:Mv}=Bt(),zv=/^[+/0-9A-Za-z]{22}==$/,ef=0,tf=1,rf=2,vl=class extends Av{constructor(e,n){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:Ov,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:jv,...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=lo.createServer((r,s)=>{let i=lo.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,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Dv(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=ef}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===rf){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Fs,this);return}if(e&&this.once("close",e),this._state!==tf)if(this._state=tf,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(Fs,this):process.nextTick(Fs,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Fs(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",nf);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Sr(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Sr(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!zv.test(i)){Sr(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){Sr(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Bs(n,400);return}let c=e.headers["sec-websocket-protocol"],u=new Set;if(c!==void 0)try{u=Pv.parse(c)}catch{Sr(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let f=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&f!==void 0){let b=new kr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let w=Qh.parse(f);w[kr.extensionName]&&(b.accept(w[kr.extensionName]),p[kr.extensionName]=b)}catch{Sr(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let b={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(b,(w,S,x,A)=>{if(!w)return Bs(n,S||401,x,A);this.completeUpgrade(p,i,u,e,n,r,s)});return}if(!this.options.verifyClient(b))return Bs(n,401)}this.completeUpgrade(p,i,u,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,l){if(!i.readable||!i.writable)return i.destroy();if(i[Mv])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ef)return Bs(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${$v("sha1").update(n+Nv).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(r.size){let p=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;p&&(u.push(`Sec-WebSocket-Protocol: ${p}`),f._protocol=p)}if(e[kr.extensionName]){let p=e[kr.extensionName].params,b=Qh.format({[kr.extensionName]:[p]});u.push(`Sec-WebSocket-Extensions: ${b}`),f._extensions=e}this.emit("headers",u,s),i.write(u.concat(`\r
292
+ `).filter(Boolean).filter(s=>!e.has(s))}catch{}for(let r of n)try{let s=await F(t,["show",`HEAD:${r}`]);/^={7}$/m.test(s)||e.add(r)}catch{e.add(r)}return[...e]}async function Ts(t,e,n){ke.default.mkdirSync(de.default.dirname(e),{recursive:!0,mode:448}),await F(t,["fetch","origin",n],{timeoutMs:3e5}),await F(t,["worktree","add","--detach",e,`origin/${n}`]),await F(e,["checkout","-B",n,`origin/${n}`])}async function sa(t,e){try{await F(t,["push","origin",e],{timeoutMs:3e5})}catch(n){throw new Error(`could not push "${e}" - ${n instanceof Error?n.message:n}. Someone may have pushed to it since this deploy started; retry.`)}}async function ia(t,e,n){try{return await qc("git",["-C",t,"diff","--quiet",e,n,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(r){let s=r;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${n}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function tr(t){return(await F(t,["config","--get","remote.origin.url"])).trim()}function at(t){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(t)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(t)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(t);return e?{owner:e[1],repo:e[2]}:null}var ke,Xn,de,Lc,Uc,qc,wi,_i,on,an,Fc,Dt,wt=Vs(()=>{"use strict";ke=I(require("node:fs"),1),Xn=I(require("node:os"),1),de=I(require("node:path"),1),Lc=require("node:child_process"),Uc=require("node:util"),qc=(0,Uc.promisify)(Lc.execFile),wi="Allwright Agent",_i="agent@ticketpilot.local",on=200,an=2e4,Fc=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];Dt=".ticketpilot-delete"});function Ci(t,e,n){let r=(n??"").trim().toLowerCase(),s=r?t.githubUsers[r]?.token:void 0;if(s)return{token:s,source:"user"};let i=t.repos[e]?.github?.token;return i?{token:i,source:"repo"}:t.github?.token?{token:t.github.token,source:"global"}:null}function Re(t,e){return t.repos[e]?.github?.token??t.github?.token??null}function Wc(t,e){let n=[t.jira,...Object.values(t.repos).map(l=>l.jira)].filter(l=>!!l),r=new Set(n.map(l=>l.email.toLowerCase())),s=!!t.github?.token||Object.values(t.repos).some(l=>l.github?.token),i=t.github?.login??Object.values(t.repos).find(l=>l.github?.login)?.github?.login??"",o=e.map(l=>{let c=l.trim().toLowerCase(),u=t.jiraUsers[c]?"own":r.has(c)?"runner-account":"missing",f=u==="own"?t.jiraUsers[c].email:u==="runner-account"?c:"",p=t.githubUsers[c]?"own":s?"shared":"missing",b=p==="own"?t.githubUsers[c].login??"":p==="shared"?i:"";return{email:c,jira:u,jiraAs:f,github:p,githubAs:b}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var nr=Vs(()=>{"use strict"});var or={};Ws(or,{GitHubClient:()=>$e});var ey,$e,ct=Vs(()=>{"use strict";ey=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",$e=class{constructor(e){this.token=e}token;async request(e,n,r){let s=await fetch(`${ey}${n}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...r!==void 0?{"Content-Type":"application/json"}:{}},body:r===void 0?void 0:JSON.stringify(r)}),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) - expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let l=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${n} -> ${s.status}: ${l}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,n,r){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${n}/pulls`,r);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${n}/pulls?head=${encodeURIComponent(`${e}:${r.head}`)}&state=open`);if(o?.length){let l=o[0];return{number:l.number,url:l.html_url,state:l.state,merged:l.merged??!1,headSha:l.head.sha,mergeableState:null,baseRef:l.base?.ref??""}}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,baseRef:r.base}}async getReviews(e,n,r){let{data:s}=await this.request("GET",`/repos/${e}/${n}/pulls/${r}/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,n,r){try{let{data:s}=await this.request("GET",`/repos/${e}/${n}/pulls/${r}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null,baseRef:s.base?.ref??""}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async mergePullRequest(e,n,r,s,i={}){try{return await this.request("PUT",`/repos/${e}/${n}/pulls/${r}/merge`,{merge_method:s,...i.sha?{sha:i.sha}:{},...i.title?{commit_title:i.title}:{}}),{merged:!0}}catch(o){let l=o instanceof Error?o.message:String(o);return l.includes("-> 405")?{merged:!1,reason:`GitHub refused the merge: the branch is not in a mergeable state, or this repository does not allow "${s}" merges. Check the PR for conflicts or required checks, then merge it there.`}:l.includes("-> 409")?{merged:!1,reason:"the branch moved since it was reviewed, so GitHub refused to merge the commit that was approved. Re-review the PR and approve again."}:l.includes("-> 403")?{merged:!1,reason:`this runner's GitHub token is not allowed to merge in ${e}/${n}. It needs write access to the repository - or merge the PR yourself.`}:{merged:!1,reason:l}}}async repoAccess(e,n){try{let{data:r}=await this.request("GET",`/repos/${e}/${n}`);return{ok:!0,canPush:!!(r.permissions?.push||r.permissions?.admin)}}catch(r){let s=r instanceof Error?r.message:String(r);return{ok:!1,canPush:!1,error:s.includes("-> 404")?"not found (private repo this token cannot see, or the name is wrong)":s.slice(0,200)}}}async closePullRequest(e,n,r){await this.request("PATCH",`/repos/${e}/${n}/pulls/${r}`,{state:"closed"})}async deleteBranch(e,n,r){try{await this.request("DELETE",`/repos/${e}/${n}/git/refs/heads/${encodeURIComponent(r)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var Bt=re((pS,ih)=>{"use strict";var rh=["nodebuffer","arraybuffer","fragments"],sh=typeof Blob<"u";sh&&rh.push("blob");ih.exports={BINARY_TYPES:rh,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:sh,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var zs=re((mS,Wi)=>{"use strict";var{EMPTY_BUFFER:vb}=Bt(),Qa=Buffer[Symbol.species];function wb(t,e){if(t.length===0)return vb;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new Qa(n.buffer,n.byteOffset,r):n}function oh(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function ah(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function _b(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function el(t){if(el.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Qa(t):ArrayBuffer.isView(t)?e=new Qa(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),el.readOnly=!1),e}Wi.exports={concat:wb,mask:oh,toArrayBuffer:_b,toBuffer:el,unmask:ah};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Wi.exports.mask=function(e,n,r,s,i){i<48?oh(e,n,r,s,i):t.mask(e,n,r,s,i)},Wi.exports.unmask=function(e,n){e.length<32?ah(e,n):t.unmask(e,n)}}catch{}});var uh=re((gS,ch)=>{"use strict";var lh=Symbol("kDone"),tl=Symbol("kRun"),nl=class{constructor(e){this[lh]=()=>{this.pending--,this[tl]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[tl]()}[tl](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[lh])}}};ch.exports=nl});var ss=re((yS,ph)=>{"use strict";var Ds=require("zlib"),dh=zs(),kb=uh(),{kStatusCode:hh}=Bt(),Sb=Buffer[Symbol.species],Tb=Buffer.from([0,0,255,255]),Yi=Symbol("permessage-deflate"),Kt=Symbol("total-length"),ns=Symbol("callback"),fn=Symbol("buffers"),rs=Symbol("error"),Ji,rl=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,!Ji){let n=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ji=new kb(n)}}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[ns];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="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 "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){Ji.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){Ji.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ds.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Yi]=this,this._inflate[Kt]=0,this._inflate[fn]=[],this._inflate.on("error",Cb),this._inflate.on("data",fh)}this._inflate[ns]=r,this._inflate.write(e),n&&this._inflate.write(Tb),this._inflate.flush(()=>{let i=this._inflate[rs];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=dh.concat(this._inflate[fn],this._inflate[Kt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Kt]=0,this._inflate[fn]=[],n&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ds.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Kt]=0,this._deflate[fn]=[],this._deflate.on("data",xb)}this._deflate[ns]=r,this._deflate.write(e),this._deflate.flush(Ds.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=dh.concat(this._deflate[fn],this._deflate[Kt]);n&&(i=new Sb(i.buffer,i.byteOffset,i.length-4)),this._deflate[ns]=null,this._deflate[Kt]=0,this._deflate[fn]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};ph.exports=rl;function xb(t){this[fn].push(t),this[Kt]+=t.length}function fh(t){if(this[Kt]+=t.length,this[Yi]._maxPayload<1||this[Kt]<=this[Yi]._maxPayload){this[fn].push(t);return}this[rs]=new RangeError("Max payload size exceeded"),this[rs].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[rs][hh]=1009,this.removeListener("data",fh),this.reset()}function Cb(t){if(this[Yi]._inflate=null,this[rs]){this[ns](this[rs]);return}t[hh]=1007,this[ns](t)}});var is=re((bS,Xi)=>{"use strict";var{isUtf8:mh}=require("buffer"),{hasBlob:Ib}=Bt(),Eb=[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 Ab(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function sl(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function Rb(t){return Ib&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Xi.exports={isBlob:Rb,isValidStatusCode:Ab,isValidUTF8:sl,tokenChars:Eb};if(mh)Xi.exports.isValidUTF8=function(t){return t.length<24?sl(t):mh(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Xi.exports.isValidUTF8=function(e){return e.length<32?sl(e):t(e)}}catch{}});var cl=re((vS,kh)=>{"use strict";var{Writable:$b}=require("stream"),gh=ss(),{BINARY_TYPES:Pb,EMPTY_BUFFER:yh,kStatusCode:jb,kWebSocket:Ob}=Bt(),{concat:il,toArrayBuffer:Nb,unmask:Mb}=zs(),{isValidStatusCode:zb,isValidUTF8:bh}=is(),Qi=Buffer[Symbol.species],rt=0,vh=1,wh=2,_h=3,ol=4,al=5,eo=6,ll=class extends $b{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Pb[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[Ob]=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=rt}_write(e,n,r){if(this._opcode===8&&this._state==rt)return r();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){r(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(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Qi(r.buffer,r.byteOffset+e,r.length-e),new Qi(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Qi(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case rt:this.getInfo(e);break;case vh:this.getPayloadLength16(e);break;case wh:this.getPayloadLength64(e);break;case _h:this.getMask();break;case ol:this.getData(e);break;case al:case eo:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[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 r=(n[0]&64)===64;if(r&&!this._extensions[gh.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){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=r}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(r){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=(n[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=vh:this._payloadLength===127?this._state=wh: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 n=this.consume(8),r=n.readUInt32BE(0);if(r>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=r*Math.pow(2,32)+n.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 n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=_h:this._state=ol}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=ol}getData(e){let n=yh;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Mb(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let r=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(r);return}if(this._compressed){this._state=al,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[gh.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(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");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===rt&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=rt;return}let n=this._messageLength,r=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=il(r,n):this._binaryType==="arraybuffer"?s=Nb(il(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit("message",s,!0),this._state=rt,this.startLoop(e)}))}else{let s=il(r,n);if(!this._skipUTF8Validation&&!bh(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===al||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit("message",s,!1),this._state=rt,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,yh),this.end();else{let r=e.readUInt16BE(0);if(!zb(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Qi(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!bh(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=rt;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=rt):(this._state=eo,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=rt,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[jb]=s,o}};kh.exports=ll});var hl=re((_S,xh)=>{"use strict";var{Duplex:wS}=require("stream"),{randomFillSync:Db}=require("crypto"),{types:{isUint8Array:Lb}}=require("util"),Sh=ss(),{EMPTY_BUFFER:Ub,kWebSocket:qb,NOOP:Fb}=Bt(),{isBlob:os,isValidStatusCode:Bb}=is(),{mask:Th,toBuffer:vr}=zs(),st=Symbol("kByteLength"),Kb=Buffer.alloc(4),to=8*1024,wr,as=to,ht=0,Hb=1,Zb=2,ul=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ht,this.onerror=Fb,this[qb]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Kb,n.generateMask?n.generateMask(r):(as===to&&(wr===void 0&&(wr=Buffer.alloc(to)),Db(wr,0,to),as=0),r[0]=wr[as++],r[1]=wr[as++],r[2]=wr[as++],r[3]=wr[as++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let l;typeof e=="string"?(!n.mask||o)&&n[st]!==void 0?l=n[st]:(e=Buffer.from(e),l=e.length):(l=e.length,s=n.mask&&n.readOnly&&!o);let c=l;l>=65536?(i+=8,c=127):l>125&&(i+=2,c=126);let u=Buffer.allocUnsafe(s?l+i:i);return u[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(u[0]|=64),u[1]=c,c===126?u.writeUInt16BE(l,2):c===127&&(u[2]=u[3]=0,u.writeUIntBE(l,4,6)),n.mask?(u[1]|=128,u[i-4]=r[0],u[i-3]=r[1],u[i-2]=r[2],u[i-1]=r[3],o?[u,e]:s?(Th(e,r,u,i,l),[u]):(Th(e,r,e,0,l),[u,e])):[u,e]}close(e,n,r,s){let i;if(e===void 0)i=Ub;else{if(typeof e!="number"||!Bb(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let l=Buffer.byteLength(n);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+l),i.writeUInt16BE(e,0),typeof n=="string")i.write(n,2);else if(Lb(n))i.set(n,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[st]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ht?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):os(e)?(s=e.size,i=!1):(e=vr(e),s=e.length,i=vr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[st]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ht?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):os(e)?(s=e.size,i=!1):(e=vr(e),s=e.length,i=vr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[st]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ht?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[Sh.extensionName],i=n.binary?2:1,o=n.compress,l,c;typeof e=="string"?(l=Buffer.byteLength(e),c=!1):os(e)?(l=e.size,c=!1):(e=vr(e),l=e.length,c=vr.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[st]:l,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};os(e)?this._state!==ht?this.enqueue([this.getBlobData,e,this._compress,u,r]):this.getBlobData(e,this._compress,u,r):this._state!==ht?this.enqueue([this.dispatch,e,this._compress,u,r]):this.dispatch(e,this._compress,u,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[st],this._state=Zb,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(dl,this,l,s);return}this._bufferedBytes-=r[st];let o=vr(i);n?this.dispatch(o,n,r,s):(this._state=ht,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(Gb,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[Sh.extensionName];this._bufferedBytes+=r[st],this._state=Hb,i.compress(e,r.fin,(o,l)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");dl(this,c,s);return}this._bufferedBytes-=r[st],this._state=ht,r.readOnly=!1,this.sendFrame(t.frame(l,r),s),this.dequeue()})}dequeue(){for(;this._state===ht&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][st],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][st],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};xh.exports=ul;function dl(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function Gb(t,e,n){dl(t,e,n),t.onerror(e)}});var Oh=re((kS,jh)=>{"use strict";var{kForOnEventAttribute:Ls,kListener:fl}=Bt(),Ch=Symbol("kCode"),Ih=Symbol("kData"),Eh=Symbol("kError"),Ah=Symbol("kMessage"),Rh=Symbol("kReason"),ls=Symbol("kTarget"),$h=Symbol("kType"),Ph=Symbol("kWasClean"),Ht=class{constructor(e){this[ls]=null,this[$h]=e}get target(){return this[ls]}get type(){return this[$h]}};Object.defineProperty(Ht.prototype,"target",{enumerable:!0});Object.defineProperty(Ht.prototype,"type",{enumerable:!0});var _r=class extends Ht{constructor(e,n={}){super(e),this[Ch]=n.code===void 0?0:n.code,this[Rh]=n.reason===void 0?"":n.reason,this[Ph]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[Ch]}get reason(){return this[Rh]}get wasClean(){return this[Ph]}};Object.defineProperty(_r.prototype,"code",{enumerable:!0});Object.defineProperty(_r.prototype,"reason",{enumerable:!0});Object.defineProperty(_r.prototype,"wasClean",{enumerable:!0});var cs=class extends Ht{constructor(e,n={}){super(e),this[Eh]=n.error===void 0?null:n.error,this[Ah]=n.message===void 0?"":n.message}get error(){return this[Eh]}get message(){return this[Ah]}};Object.defineProperty(cs.prototype,"error",{enumerable:!0});Object.defineProperty(cs.prototype,"message",{enumerable:!0});var Us=class extends Ht{constructor(e,n={}){super(e),this[Ih]=n.data===void 0?null:n.data}get data(){return this[Ih]}};Object.defineProperty(Us.prototype,"data",{enumerable:!0});var Vb={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Ls]&&s[fl]===e&&!s[Ls])return;let r;if(t==="message")r=function(i,o){let l=new Us("message",{data:o?i:i.toString()});l[ls]=this,no(e,this,l)};else if(t==="close")r=function(i,o){let l=new _r("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[ls]=this,no(e,this,l)};else if(t==="error")r=function(i){let o=new cs("error",{error:i,message:i.message});o[ls]=this,no(e,this,o)};else if(t==="open")r=function(){let i=new Ht("open");i[ls]=this,no(e,this,i)};else return;r[Ls]=!!n[Ls],r[fl]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[fl]===e&&!n[Ls]){this.removeListener(t,n);break}}};jh.exports={CloseEvent:_r,ErrorEvent:cs,Event:Ht,EventTarget:Vb,MessageEvent:Us};function no(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var ro=re((SS,Nh)=>{"use strict";var{tokenChars:qs}=is();function xt(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Wb(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!1,i=!1,o,l,c=-1,u=-1,f=-1,p=0;for(;p<t.length;p++)if(u=t.charCodeAt(p),o===void 0)if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(p!==0&&(u===32||u===9))f===-1&&c!==-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let w=t.slice(c,f);u===44?(xt(e,w,n),n=Object.create(null)):o=w,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(l===void 0)if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(u===32||u===9)f===-1&&c!==-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),xt(n,t.slice(c,f),!0),u===44&&(xt(e,o,n),n=Object.create(null),o=void 0),c=f=-1}else if(u===61&&c!==-1&&f===-1)l=t.slice(c,p),c=f=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(qs[u]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);c===-1?c=p:r||(r=!0),s=!1}else if(i)if(qs[u]===1)c===-1&&(c=p);else if(u===34&&c!==-1)i=!1,f=p;else if(u===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(u===34&&t.charCodeAt(p-1)===61)i=!0;else if(f===-1&&qs[u]===1)c===-1&&(c=p);else if(c!==-1&&(u===32||u===9))f===-1&&(f=p);else if(u===59||u===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let w=t.slice(c,f);r&&(w=w.replace(/\\/g,""),r=!1),xt(n,l,w),u===44&&(xt(e,o,n),n=Object.create(null),o=void 0),l=void 0,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(c===-1||i||u===32||u===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=p);let b=t.slice(c,f);return o===void 0?xt(e,b,n):(l===void 0?xt(n,b,!0):r?xt(n,l,b.replace(/\\/g,"")):xt(n,l,b),xt(e,o,n)),e}function Jb(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Nh.exports={format:Jb,parse:Wb}});var ao=re((CS,Gh)=>{"use strict";var Yb=require("events"),Xb=require("https"),Qb=require("http"),Dh=require("net"),ev=require("tls"),{randomBytes:tv,createHash:nv}=require("crypto"),{Duplex:TS,Readable:xS}=require("stream"),{URL:pl}=require("url"),pn=ss(),rv=cl(),sv=hl(),{isBlob:iv}=is(),{BINARY_TYPES:Mh,CLOSE_TIMEOUT:ov,EMPTY_BUFFER:so,GUID:av,kForOnEventAttribute:ml,kListener:lv,kStatusCode:cv,kWebSocket:Se,NOOP:Lh}=Bt(),{EventTarget:{addEventListener:uv,removeEventListener:dv}}=Oh(),{format:hv,parse:fv}=ro(),{toBuffer:pv}=zs(),Uh=Symbol("kAborted"),gl=[8,13],Zt=["CONNECTING","OPEN","CLOSING","CLOSED"],mv=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,fe=class t extends Yb{constructor(e,n,r){super(),this._binaryType=Mh[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=so,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),qh(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Mh.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,n,r){let s=new rv({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:r.maxBufferedChunks,maxFragments:r.maxFragments,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new sv(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[Se]=this,i[Se]=this,e[Se]=this,s.on("conclude",bv),s.on("drain",vv),s.on("error",wv),s.on("message",_v),s.on("ping",kv),s.on("pong",Sv),i.onerror=Tv,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Kh),e.on("data",oo),e.on("end",Hh),e.on("error",Zh),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[pn.extensionName]&&this._extensions[pn.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){He(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bh(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||so,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||so,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){yl(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[pn.extensionName]||(s.compress=!1),this._sender.send(e||so,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){He(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(fe,"CONNECTING",{enumerable:!0,value:Zt.indexOf("CONNECTING")});Object.defineProperty(fe.prototype,"CONNECTING",{enumerable:!0,value:Zt.indexOf("CONNECTING")});Object.defineProperty(fe,"OPEN",{enumerable:!0,value:Zt.indexOf("OPEN")});Object.defineProperty(fe.prototype,"OPEN",{enumerable:!0,value:Zt.indexOf("OPEN")});Object.defineProperty(fe,"CLOSING",{enumerable:!0,value:Zt.indexOf("CLOSING")});Object.defineProperty(fe.prototype,"CLOSING",{enumerable:!0,value:Zt.indexOf("CLOSING")});Object.defineProperty(fe,"CLOSED",{enumerable:!0,value:Zt.indexOf("CLOSED")});Object.defineProperty(fe.prototype,"CLOSED",{enumerable:!0,value:Zt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(fe.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(fe.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[ml])return e[lv];return null},set(e){for(let n of this.listeners(t))if(n[ml]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[ml]:!0})}})});fe.prototype.addEventListener=uv;fe.prototype.removeEventListener=dv;Gh.exports=fe;function qh(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:ov,protocolVersion:gl[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!gl.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${gl.join(", ")})`);let i;if(e instanceof pl)i=e;else try{i=new pl(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",l=i.protocol==="ws+unix:",c;if(i.protocol!=="ws:"&&!o&&!l?c=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"),c){let x=new SyntaxError(c);if(t._redirects===0)throw x;io(t,x);return}let u=o?443:80,f=tv(16).toString("base64"),p=o?Xb.request:Qb.request,b=new Set,w;if(s.createConnection=s.createConnection||(o?yv:gv),s.defaultPort=s.defaultPort||u,s.port=i.port||u,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":f,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(w=new pn({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=hv({[pn.extensionName]:w.offer()})),n.length){for(let x of n){if(typeof x!="string"||!mv.test(x)||b.has(x))throw new SyntaxError("An invalid or duplicated subprotocol was specified");b.add(x)}s.headers["Sec-WebSocket-Protocol"]=n.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}`),l){let x=s.path.split(":");s.socketPath=x[0],s.path=x[1]}let S;if(s.followRedirects){if(t._redirects===0){t._originalIpc=l,t._originalSecure=o,t._originalHostOrSocketPath=l?s.socketPath:i.host;let x=r&&r.headers;if(r={...r,headers:{}},x)for(let[R,j]of Object.entries(x))r.headers[R.toLowerCase()]=j}else if(t.listenerCount("redirect")===0){let x=l?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!x||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,x||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),S=t._req=p(s),t._redirects&&t.emit("redirect",t.url,S)}else S=t._req=p(s);s.timeout&&S.on("timeout",()=>{He(t,S,"Opening handshake has timed out")}),S.on("error",x=>{S===null||S[Uh]||(S=t._req=null,io(t,x))}),S.on("response",x=>{let R=x.headers.location,j=x.statusCode;if(R&&s.followRedirects&&j>=300&&j<400){if(++t._redirects>s.maxRedirects){He(t,S,"Maximum redirects exceeded");return}S.abort();let v;try{v=new pl(R,e)}catch{let Z=new SyntaxError(`Invalid URL: ${R}`);io(t,Z);return}qh(t,v,n,r)}else t.emit("unexpected-response",S,x)||He(t,S,`Unexpected server response: ${x.statusCode}`)}),S.on("upgrade",(x,R,j)=>{if(t.emit("upgrade",x),t.readyState!==fe.CONNECTING)return;S=t._req=null;let v=x.headers.upgrade;if(v===void 0||v.toLowerCase()!=="websocket"){He(t,R,"Invalid Upgrade header");return}let O=nv("sha1").update(f+av).digest("base64");if(x.headers["sec-websocket-accept"]!==O){He(t,R,"Invalid Sec-WebSocket-Accept header");return}let Z=x.headers["sec-websocket-protocol"],z;if(Z!==void 0?b.size?b.has(Z)||(z="Server sent an invalid subprotocol"):z="Server sent a subprotocol but none was requested":b.size&&(z="Server sent no subprotocol"),z){He(t,R,z);return}Z&&(t._protocol=Z);let K=x.headers["sec-websocket-extensions"];if(K!==void 0){if(!w){He(t,R,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let d;try{d=fv(K)}catch{He(t,R,"Invalid Sec-WebSocket-Extensions header");return}let m=Object.keys(d);if(m.length!==1||m[0]!==pn.extensionName){He(t,R,"Server indicated an extension that was not requested");return}try{w.accept(d[pn.extensionName])}catch{He(t,R,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[pn.extensionName]=w}t.setSocket(R,j,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(S,t):S.end()}function io(t,e){t._readyState=fe.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function gv(t){return t.path=t.socketPath,Dh.connect(t)}function yv(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=Dh.isIP(t.host)?"":t.host),ev.connect(t)}function He(t,e,n){t._readyState=fe.CLOSING;let r=new Error(n);Error.captureStackTrace(r,He),e.setHeader?(e[Uh]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(io,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function yl(t,e,n){if(e){let r=iv(e)?e.size:pv(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${Zt[t.readyState]})`);process.nextTick(n,r)}}function bv(t,e){let n=this[Se];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[Se]!==void 0&&(n._socket.removeListener("data",oo),process.nextTick(Fh,n._socket),t===1005?n.close():n.close(t,e))}function vv(){let t=this[Se];t.isPaused||t._socket.resume()}function wv(t){let e=this[Se];e._socket[Se]!==void 0&&(e._socket.removeListener("data",oo),process.nextTick(Fh,e._socket),e.close(t[cv])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function zh(){this[Se].emitClose()}function _v(t,e){this[Se].emit("message",t,e)}function kv(t){let e=this[Se];e._autoPong&&e.pong(t,!this._isServer,Lh),e.emit("ping",t)}function Sv(t){this[Se].emit("pong",t)}function Fh(t){t.resume()}function Tv(t){let e=this[Se];e.readyState!==fe.CLOSED&&(e.readyState===fe.OPEN&&(e._readyState=fe.CLOSING,Bh(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Bh(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Kh(){let t=this[Se];if(this.removeListener("close",Kh),this.removeListener("data",oo),this.removeListener("end",Hh),t._readyState=fe.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[Se]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",zh),t._receiver.on("finish",zh))}function oo(t){this[Se]._receiver.write(t)||this.pause()}function Hh(){let t=this[Se];t._readyState=fe.CLOSING,t._receiver.end(),this.end()}function Zh(){let t=this[Se];this.removeListener("error",Zh),this.on("error",Lh),t&&(t._readyState=fe.CLOSING,this.destroy())}});var Yh=re((ES,Jh)=>{"use strict";var IS=ao(),{Duplex:xv}=require("stream");function Vh(t){t.emit("close")}function Cv(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Wh(t){this.removeListener("error",Wh),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Iv(t,e){let n=!0,r=new xv({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let l=!o&&r._readableState.objectMode?i.toString():i;r.push(l)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Vh,r);return}let o=!1;t.once("error",function(c){o=!0,i(c)}),t.once("close",function(){o||i(s),process.nextTick(Vh,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",Cv),r.on("error",Wh),r}Jh.exports=Iv});var bl=re((AS,Xh)=>{"use strict";var{tokenChars:Ev}=is();function Av(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&Ev[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let l=t.slice(n,r);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Xh.exports={parse:Av}});var of=re(($S,sf)=>{"use strict";var Rv=require("events"),lo=require("http"),{Duplex:RS}=require("stream"),{createHash:$v}=require("crypto"),Qh=ro(),kr=ss(),Pv=bl(),jv=ao(),{CLOSE_TIMEOUT:Ov,GUID:Nv,kWebSocket:Mv}=Bt(),zv=/^[+/0-9A-Za-z]{22}==$/,ef=0,tf=1,rf=2,vl=class extends Rv{constructor(e,n){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:Ov,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:jv,...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=lo.createServer((r,s)=>{let i=lo.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,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Dv(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=ef}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===rf){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Fs,this);return}if(e&&this.once("close",e),this._state!==tf)if(this._state=tf,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(Fs,this):process.nextTick(Fs,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Fs(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",nf);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Sr(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Sr(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!zv.test(i)){Sr(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){Sr(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Bs(n,400);return}let c=e.headers["sec-websocket-protocol"],u=new Set;if(c!==void 0)try{u=Pv.parse(c)}catch{Sr(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let f=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&f!==void 0){let b=new kr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let w=Qh.parse(f);w[kr.extensionName]&&(b.accept(w[kr.extensionName]),p[kr.extensionName]=b)}catch{Sr(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let b={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(b,(w,S,x,R)=>{if(!w)return Bs(n,S||401,x,R);this.completeUpgrade(p,i,u,e,n,r,s)});return}if(!this.options.verifyClient(b))return Bs(n,401)}this.completeUpgrade(p,i,u,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,l){if(!i.readable||!i.writable)return i.destroy();if(i[Mv])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ef)return Bs(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${$v("sha1").update(n+Nv).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(r.size){let p=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;p&&(u.push(`Sec-WebSocket-Protocol: ${p}`),f._protocol=p)}if(e[kr.extensionName]){let p=e[kr.extensionName].params,b=Qh.format({[kr.extensionName]:[p]});u.push(`Sec-WebSocket-Extensions: ${b}`),f._extensions=e}this.emit("headers",u,s),i.write(u.concat(`\r
293
293
  `).join(`\r
294
294
  `)),i.removeListener("error",nf),f.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(f),f.on("close",()=>{this.clients.delete(f),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Fs,this)})),l(f,s)}};sf.exports=vl;function Dv(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let r of Object.keys(e))t.removeListener(r,e[r])}}function Fs(t){t._state=rf,t.emit("close")}function nf(){this.destroy()}function Bs(t,e,n,r){n=n||lo.STATUS_CODES[e],r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...r},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${lo.STATUS_CODES[e]}\r
295
295
  `+Object.keys(r).map(s=>`${s}: ${r[s]}`).join(`\r
296
296
  `)+`\r
297
297
  \r
298
- `+n)}function Sr(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Sr),t.emit("wsClientError",o,n,e)}else Bs(n,r,s,i)}});var yf={};Ws(yf,{buildSetupReport:()=>rw,claudeLoggedIn:()=>gf,repoDefaultBranch:()=>mf});function mf(t){let e=(...s)=>{try{return(0,po.execFileSync)("git",["-C",t,...s],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}},n=e("symbolic-ref","--short","refs/remotes/origin/HEAD");if(n?.startsWith("origin/"))return n.slice(7);let r=e("rev-parse","--abbrev-ref","HEAD");return r&&r!=="HEAD"?r:""}function gf(t=ff.default.homedir()){if(mn.default.existsSync(xr.default.join(t,".claude",".credentials.json")))return!0;try{return!!JSON.parse(mn.default.readFileSync(xr.default.join(t,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function rw(t,e,n){let r=!1,s="";if(Zs&&Date.now()-Zs.at<6e4)r=Zs.installed,s=Zs.version;else{try{let{stdout:l}=await nw(t.claudeBin,["--version"],{timeout:1e4});r=!0,s=l.trim().slice(0,60)}catch{r=!1}Zs={at:Date.now(),installed:r,version:s}}let i=e.map(l=>{let c=t.repos[l];if(!c)return{repoName:l,mapped:!1,liveMapped:!!n?.repos?.[l],pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1,githubToken:!1,githubTokenOwn:!1,defaultBranch:""};let u=mn.default.existsSync(c.path);return{repoName:l,mapped:!0,liveMapped:n?!!n.repos?.[l]:!0,pathExists:u,isGit:u&&mn.default.existsSync(xr.default.join(c.path,".git")),claudeMd:u&&mn.default.existsSync(xr.default.join(c.path,"CLAUDE.md")),deployMd:u&&mn.default.existsSync(xr.default.join(c.path,"DEPLOY.md")),testMd:u&&mn.default.existsSync(xr.default.join(c.path,"TEST.md")),githubToken:!!Ae(t,l),githubTokenOwn:!!c.github?.token,defaultBranch:u?mf(c.path):""}}),o=Object.values(t.repos).find(l=>l.github?.token);return{jiraConfigured:!!t.jira,jiraEmail:t.jira?.email??"",claude:{installed:r,version:s,loggedIn:gf()},githubTokenSet:!!(t.github?.token||o),githubLogin:t.github?.login??o?.github?.login??"",deploysEnabled:t.deploy.enabled,jiraUserCount:Object.keys(t.jiraUsers).length,repos:i}}var po,mn,ff,xr,pf,nw,Zs,bf=Vs(()=>{"use strict";po=require("node:child_process"),mn=I(require("node:fs"),1),ff=I(require("node:os"),1),xr=I(require("node:path"),1),pf=require("node:util");nr();nw=(0,pf.promisify)(po.execFile);Zs=null});var ft=I(require("node:fs"),1),Tl=I(require("node:os"),1),ds=I(require("node:path"),1),Gt=require("node:child_process"),Gs=require("node:crypto"),yn=I(require("node:readline/promises"),1);var Fl=I(ql(),1),{program:fw,createCommand:pw,createArgument:mw,createOption:gw,CommanderError:yw,InvalidArgumentError:bw,InvalidOptionArgumentError:vw,Command:Bl,Argument:ww,Option:_w,Help:kw}=Fl.default;var Pt=I(require("node:fs"),1),ri=I(require("node:os"),1),si=I(require("node:path"),1);var _={};Ws(_,{BRAND:()=>fp,DIRTY:()=>bn,EMPTY_PATH:()=>Hf,INVALID:()=>K,NEVER:()=>Yp,OK:()=>Re,ParseStatus:()=>xe,Schema:()=>te,ZodAny:()=>Jt,ZodArray:()=>$t,ZodBigInt:()=>wn,ZodBoolean:()=>_n,ZodBranded:()=>gs,ZodCatch:()=>Pn,ZodDate:()=>kn,ZodDefault:()=>$n,ZodDiscriminatedUnion:()=>ei,ZodEffects:()=>Ye,ZodEnum:()=>En,ZodError:()=>Me,ZodFirstPartyTypeKind:()=>Z,ZodFunction:()=>ni,ZodIntersection:()=>Cn,ZodIssueCode:()=>R,ZodLazy:()=>In,ZodLiteral:()=>Rn,ZodMap:()=>Pr,ZodNaN:()=>Or,ZodNativeEnum:()=>An,ZodNever:()=>it,ZodNull:()=>Tn,ZodNullable:()=>gt,ZodNumber:()=>vn,ZodObject:()=>ze,ZodOptional:()=>We,ZodParsedType:()=>N,ZodPipeline:()=>ys,ZodPromise:()=>Yt,ZodReadonly:()=>jn,ZodRecord:()=>ti,ZodSchema:()=>te,ZodSet:()=>jr,ZodString:()=>Wt,ZodSymbol:()=>Ar,ZodTransformer:()=>Ye,ZodTuple:()=>mt,ZodType:()=>te,ZodUndefined:()=>Sn,ZodUnion:()=>xn,ZodUnknown:()=>At,ZodVoid:()=>$r,addIssueToContext:()=>P,any:()=>kp,array:()=>Cp,bigint:()=>yp,boolean:()=>ec,coerce:()=>Jp,custom:()=>Yl,date:()=>bp,datetimeRegex:()=>Wl,defaultErrorMap:()=>Rt,discriminatedUnion:()=>Ap,effect:()=>Fp,enum:()=>Lp,function:()=>Mp,getErrorMap:()=>Ir,getParsedType:()=>pt,instanceof:()=>mp,intersection:()=>$p,isAborted:()=>Xs,isAsync:()=>Rr,isDirty:()=>Qs,isValid:()=>Vt,late:()=>pp,lazy:()=>zp,literal:()=>Dp,makeIssue:()=>ms,map:()=>Op,nan:()=>gp,nativeEnum:()=>Up,never:()=>Tp,null:()=>_p,nullable:()=>Kp,number:()=>Ql,object:()=>Ip,objectUtil:()=>Po,oboolean:()=>Wp,onumber:()=>Vp,optional:()=>Bp,ostring:()=>Gp,pipeline:()=>Zp,preprocess:()=>Hp,promise:()=>qp,quotelessJson:()=>Ff,record:()=>jp,set:()=>Np,setErrorMap:()=>Kf,strictObject:()=>Rp,string:()=>Xl,symbol:()=>vp,transformer:()=>Fp,tuple:()=>Pp,undefined:()=>wp,union:()=>Ep,unknown:()=>Sp,util:()=>ne,void:()=>xp});var ne;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},t.getValidEnumValues=s=>{let i=t.objectKeys(s).filter(l=>typeof s[s[l]]!="number"),o={};for(let l of i)o[l]=s[l];return t.objectValues(o)},t.objectValues=s=>t.objectKeys(s).map(function(i){return s[i]}),t.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},t.find=(s,i)=>{for(let o of s)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(ne||(ne={}));var Po;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Po||(Po={}));var N=ne.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),pt=t=>{switch(typeof t){case"undefined":return N.undefined;case"string":return N.string;case"number":return Number.isNaN(t)?N.nan:N.number;case"boolean":return N.boolean;case"function":return N.function;case"bigint":return N.bigint;case"symbol":return N.symbol;case"object":return Array.isArray(t)?N.array:t===null?N.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?N.promise:typeof Map<"u"&&t instanceof Map?N.map:typeof Set<"u"&&t instanceof Set?N.set:typeof Date<"u"&&t instanceof Date?N.date:N.object;default:return N.unknown}};var R=ne.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"]),Ff=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),Me=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_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)r._errors.push(n(o));else{let l=r,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(l[u]=l[u]||{_errors:[]},l[u]._errors.push(n(o))):l[u]=l[u]||{_errors:[]},l=l[u],c++}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,ne.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];n[i]=n[i]||[],n[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};Me.create=t=>new Me(t);var Bf=(t,e)=>{let n;switch(t.code){case R.invalid_type:t.received===N.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case R.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,ne.jsonStringifyReplacer)}`;break;case R.unrecognized_keys:n=`Unrecognized key(s) in object: ${ne.joinValues(t.keys,", ")}`;break;case R.invalid_union:n="Invalid input";break;case R.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${ne.joinValues(t.options)}`;break;case R.invalid_enum_value:n=`Invalid enum value. Expected ${ne.joinValues(t.options)}, received '${t.received}'`;break;case R.invalid_arguments:n="Invalid function arguments";break;case R.invalid_return_type:n="Invalid function return type";break;case R.invalid_date:n="Invalid date";break;case R.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:ne.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case R.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case R.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case R.custom:n="Invalid input";break;case R.invalid_intersection_types:n="Intersection results could not be merged";break;case R.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case R.not_finite:n="Number must be finite";break;default:n=e.defaultError,ne.assertNever(t)}return{message:n}},Rt=Bf;var Kl=Rt;function Kf(t){Kl=t}function Ir(){return Kl}var ms=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,i=[...n,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let l="",c=r.filter(u=>!!u).slice().reverse();for(let u of c)l=u(o,{data:e,defaultError:l}).message;return{...s,path:i,message:l}},Hf=[];function P(t,e){let n=Ir(),r=ms({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===Rt?void 0:Rt].filter(s=>!!s)});t.common.issues.push(r)}var xe=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return K;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return K;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},K=Object.freeze({status:"aborted"}),bn=t=>({status:"dirty",value:t}),Re=t=>({status:"valid",value:t}),Xs=t=>t.status==="aborted",Qs=t=>t.status==="dirty",Vt=t=>t.status==="valid",Rr=t=>typeof Promise<"u"&&t instanceof Promise;var U;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(U||(U={}));var Je=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},Hl=(t,e)=>{if(Vt(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new Me(t.common.issues);return this._error=n,this._error}}};function J(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))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,l)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??l.defaultError}:typeof l.data>"u"?{message:c??r??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:c??n??l.defaultError}},description:s}}var te=class{get description(){return this._def.description}_getType(e){return pt(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:pt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new xe,ctx:{common:e.parent.common,data:e.data,parsedType:pt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(Rr(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Hl(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return Vt(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>Vt(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(Rr(s)?s:Promise.resolve(s));return Hl(r,i)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,i)=>{let o=e(s),l=()=>i.addIssue({code:R.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(e,n){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof n=="function"?n(r,s):n),!1))}_refinement(e){return new Ye({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:n=>this["~validate"](n)}}optional(){return We.create(this,this._def)}nullable(){return gt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return $t.create(this)}promise(){return Yt.create(this,this._def)}or(e){return xn.create([this,e],this._def)}and(e){return Cn.create(this,e,this._def)}transform(e){return new Ye({...J(this._def),schema:this,typeName:Z.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new $n({...J(this._def),innerType:this,defaultValue:n,typeName:Z.ZodDefault})}brand(){return new gs({typeName:Z.ZodBranded,type:this,...J(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Pn({...J(this._def),innerType:this,catchValue:n,typeName:Z.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return ys.create(this,e)}readonly(){return jn.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Zf=/^c[^\s-]{8,}$/i,Gf=/^[0-9a-z]+$/,Vf=/^[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,Jf=/^[a-z0-9_-]{21}$/i,Yf=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Xf=/^[-+]?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)?)??$/,Qf=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ep="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",jo,tp=/^(?:(?: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])$/,np=/^(?:(?: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])$/,rp=/^(([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]))$/,sp=/^(([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])$/,ip=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,op=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Gl="((\\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])))",ap=new RegExp(`^${Gl}$`);function Vl(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function lp(t){return new RegExp(`^${Vl(t)}$`)}function Wl(t){let e=`${Gl}T${Vl(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function cp(t,e){return!!((e==="v4"||!e)&&tp.test(t)||(e==="v6"||!e)&&rp.test(t))}function up(t,e){if(!Yf.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function dp(t,e){return!!((e==="v4"||!e)&&np.test(t)||(e==="v6"||!e)&&sp.test(t))}var Wt=class t extends te{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==N.string){let i=this._getOrReturnCtx(e);return P(i,{code:R.invalid_type,expected:N.string,received:i.parsedType}),K}let r=new xe,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:R.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:R.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,l=e.data.length<i.value;(o||l)&&(s=this._getOrReturnCtx(e,s),o?P(s,{code:R.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):l&&P(s,{code:R.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Qf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"email",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")jo||(jo=new RegExp(ep,"u")),jo.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"emoji",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Wf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"uuid",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Jf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"nanoid",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Zf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cuid",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Gf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cuid2",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Vf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"ulid",code:R.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),P(s,{validation:"url",code:R.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"regex",code:R.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),P(s,{code:R.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.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),P(s,{code:R.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),P(s,{code:R.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?Wl(i).test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:R.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?ap.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:R.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?lp(i).test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:R.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Xf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"duration",code:R.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?cp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"ip",code:R.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?up(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"jwt",code:R.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?dp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cidr",code:R.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?ip.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"base64",code:R.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?op.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"base64url",code:R.invalid_string,message:i.message}),r.dirty()):ne.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:R.invalid_string,...U.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...U.errToObj(e)})}url(e){return this._addCheck({kind:"url",...U.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...U.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...U.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...U.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...U.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...U.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...U.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...U.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...U.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...U.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...U.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...U.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,...U.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,...U.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...U.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...U.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...U.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...U.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...U.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...U.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...U.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...U.errToObj(n)})}nonempty(e){return this.min(1,U.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...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 n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Wt.create=t=>new Wt({checks:[],typeName:Z.ZodString,coerce:t?.coerce??!1,...J(t)});function hp(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,i=Number.parseInt(t.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var vn=class t extends te{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)!==N.number){let i=this._getOrReturnCtx(e);return P(i,{code:R.invalid_type,expected:N.number,received:i.parsedType}),K}let r,s=new xe;for(let i of this._def.checks)i.kind==="int"?ne.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:R.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.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)&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?hp(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:R.not_finite,message:i.message}),s.dirty()):ne.assertNever(i);return{status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:U.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:U.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:U.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:U.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:U.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&ne.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};vn.create=t=>new vn({checks:[],typeName:Z.ZodNumber,coerce:t?.coerce||!1,...J(t)});var wn=class t extends te{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)!==N.bigint)return this._getInvalidInput(e);let r,s=new xe;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.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)&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),P(r,{code:R.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):ne.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return P(n,{code:R.invalid_type,expected:N.bigint,received:n.parsedType}),K}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:U.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};wn.create=t=>new wn({checks:[],typeName:Z.ZodBigInt,coerce:t?.coerce??!1,...J(t)});var _n=class extends te{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==N.boolean){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.boolean,received:r.parsedType}),K}return Re(e.data)}};_n.create=t=>new _n({typeName:Z.ZodBoolean,coerce:t?.coerce||!1,...J(t)});var kn=class t extends te{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==N.date){let i=this._getOrReturnCtx(e);return P(i,{code:R.invalid_type,expected:N.date,received:i.parsedType}),K}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return P(i,{code:R.invalid_date}),K}let r=new xe,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:R.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:R.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):ne.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:U.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:U.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};kn.create=t=>new kn({checks:[],coerce:t?.coerce||!1,typeName:Z.ZodDate,...J(t)});var Ar=class extends te{_parse(e){if(this._getType(e)!==N.symbol){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.symbol,received:r.parsedType}),K}return Re(e.data)}};Ar.create=t=>new Ar({typeName:Z.ZodSymbol,...J(t)});var Sn=class extends te{_parse(e){if(this._getType(e)!==N.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.undefined,received:r.parsedType}),K}return Re(e.data)}};Sn.create=t=>new Sn({typeName:Z.ZodUndefined,...J(t)});var Tn=class extends te{_parse(e){if(this._getType(e)!==N.null){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.null,received:r.parsedType}),K}return Re(e.data)}};Tn.create=t=>new Tn({typeName:Z.ZodNull,...J(t)});var Jt=class extends te{constructor(){super(...arguments),this._any=!0}_parse(e){return Re(e.data)}};Jt.create=t=>new Jt({typeName:Z.ZodAny,...J(t)});var At=class extends te{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Re(e.data)}};At.create=t=>new At({typeName:Z.ZodUnknown,...J(t)});var it=class extends te{_parse(e){let n=this._getOrReturnCtx(e);return P(n,{code:R.invalid_type,expected:N.never,received:n.parsedType}),K}};it.create=t=>new it({typeName:Z.ZodNever,...J(t)});var $r=class extends te{_parse(e){if(this._getType(e)!==N.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.void,received:r.parsedType}),K}return Re(e.data)}};$r.create=t=>new $r({typeName:Z.ZodVoid,...J(t)});var $t=class t extends te{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==N.array)return P(n,{code:R.invalid_type,expected:N.array,received:n.parsedType}),K;if(s.exactLength!==null){let o=n.data.length>s.exactLength.value,l=n.data.length<s.exactLength.value;(o||l)&&(P(n,{code:o?R.too_big:R.too_small,minimum:l?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&n.data.length<s.minLength.value&&(P(n,{code:R.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(P(n,{code:R.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,l)=>s.type._parseAsync(new Je(n,o,n.path,l)))).then(o=>xe.mergeArray(r,o));let i=[...n.data].map((o,l)=>s.type._parseSync(new Je(n,o,n.path,l)));return xe.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:U.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:U.toString(n)}})}nonempty(e){return this.min(1,e)}};$t.create=(t,e)=>new $t({type:t,minLength:null,maxLength:null,exactLength:null,typeName:Z.ZodArray,...J(e)});function Er(t){if(t instanceof ze){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=We.create(Er(r))}return new ze({...t._def,shape:()=>e})}else return t instanceof $t?new $t({...t._def,type:Er(t.element)}):t instanceof We?We.create(Er(t.unwrap())):t instanceof gt?gt.create(Er(t.unwrap())):t instanceof mt?mt.create(t.items.map(e=>Er(e))):t}var ze=class t extends te{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(),n=ne.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==N.object){let u=this._getOrReturnCtx(e);return P(u,{code:R.invalid_type,expected:N.object,received:u.parsedType}),K}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof it&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||l.push(u);let c=[];for(let u of o){let f=i[u],p=s.data[u];c.push({key:{status:"valid",value:u},value:f._parse(new Je(s,p,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof it){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of l)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")l.length>0&&(P(s,{code:R.unrecognized_keys,keys:l}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of l){let p=s.data[f];c.push({key:{status:"valid",value:f},value:u._parse(new Je(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let u=[];for(let f of c){let p=await f.key,b=await f.value;u.push({key:p,value:b,alwaysSet:f.alwaysSet})}return u}).then(u=>xe.mergeObjectSync(r,u)):xe.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return U.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:U.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:Z.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of ne.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of ne.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Er(this)}partial(e){let n={};for(let r of ne.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of ne.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof We;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return Jl(ne.objectKeys(this.shape))}};ze.create=(t,e)=>new ze({shape:()=>t,unknownKeys:"strip",catchall:it.create(),typeName:Z.ZodObject,...J(e)});ze.strictCreate=(t,e)=>new ze({shape:()=>t,unknownKeys:"strict",catchall:it.create(),typeName:Z.ZodObject,...J(e)});ze.lazycreate=(t,e)=>new ze({shape:t,unknownKeys:"strip",catchall:it.create(),typeName:Z.ZodObject,...J(e)});var xn=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(i){for(let l of i)if(l.result.status==="valid")return l.result;for(let l of i)if(l.result.status==="dirty")return n.common.issues.push(...l.ctx.common.issues),l.result;let o=i.map(l=>new Me(l.ctx.common.issues));return P(n,{code:R.invalid_union,unionErrors:o}),K}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let u={...n,common:{...n.common,issues:[]},parent:null},f=c._parseSync({data:n.data,path:n.path,parent:u});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let l=o.map(c=>new Me(c));return P(n,{code:R.invalid_union,unionErrors:l}),K}}get options(){return this._def.options}};xn.create=(t,e)=>new xn({options:t,typeName:Z.ZodUnion,...J(e)});var Et=t=>t instanceof In?Et(t.schema):t instanceof Ye?Et(t.innerType()):t instanceof Rn?[t.value]:t instanceof En?t.options:t instanceof An?ne.objectValues(t.enum):t instanceof $n?Et(t._def.innerType):t instanceof Sn?[void 0]:t instanceof Tn?[null]:t instanceof We?[void 0,...Et(t.unwrap())]:t instanceof gt?[null,...Et(t.unwrap())]:t instanceof gs||t instanceof jn?Et(t.unwrap()):t instanceof Pn?Et(t._def.innerType):[],ei=class t extends te{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.object)return P(n,{code:R.invalid_type,expected:N.object,received:n.parsedType}),K;let r=this.discriminator,s=n.data[r],i=this.optionsMap.get(s);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(P(n,{code:R.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),K)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let i of n){let o=Et(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 l of o){if(s.has(l))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(l)}`);s.set(l,i)}}return new t({typeName:Z.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...J(r)})}};function Oo(t,e){let n=pt(t),r=pt(e);if(t===e)return{valid:!0,data:t};if(n===N.object&&r===N.object){let s=ne.objectKeys(e),i=ne.objectKeys(t).filter(l=>s.indexOf(l)!==-1),o={...t,...e};for(let l of i){let c=Oo(t[l],e[l]);if(!c.valid)return{valid:!1};o[l]=c.data}return{valid:!0,data:o}}else if(n===N.array&&r===N.array){if(t.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let o=t[i],l=e[i],c=Oo(o,l);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return n===N.date&&r===N.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Cn=class extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(Xs(i)||Xs(o))return K;let l=Oo(i.value,o.value);return l.valid?((Qs(i)||Qs(o))&&n.dirty(),{status:n.value,value:l.data}):(P(r,{code:R.invalid_intersection_types}),K)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};Cn.create=(t,e,n)=>new Cn({left:t,right:e,typeName:Z.ZodIntersection,...J(n)});var mt=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.array)return P(r,{code:R.invalid_type,expected:N.array,received:r.parsedType}),K;if(r.data.length<this._def.items.length)return P(r,{code:R.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),K;!this._def.rest&&r.data.length>this._def.items.length&&(P(r,{code:R.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,l)=>{let c=this._def.items[l]||this._def.rest;return c?c._parse(new Je(r,o,r.path,l)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>xe.mergeArray(n,o)):xe.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};mt.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new mt({items:t,typeName:Z.ZodTuple,rest:null,...J(e)})};var ti=class t extends te{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.object)return P(r,{code:R.invalid_type,expected:N.object,received:r.parsedType}),K;let s=[],i=this._def.keyType,o=this._def.valueType;for(let l in r.data)s.push({key:i._parse(new Je(r,l,r.path,l)),value:o._parse(new Je(r,r.data[l],r.path,l)),alwaysSet:l in r.data});return r.common.async?xe.mergeObjectAsync(n,s):xe.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof te?new t({keyType:e,valueType:n,typeName:Z.ZodRecord,...J(r)}):new t({keyType:Wt.create(),valueType:e,typeName:Z.ZodRecord,...J(n)})}},Pr=class extends te{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.map)return P(r,{code:R.invalid_type,expected:N.map,received:r.parsedType}),K;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([l,c],u)=>({key:s._parse(new Je(r,l,r.path,[u,"key"])),value:i._parse(new Je(r,c,r.path,[u,"value"]))}));if(r.common.async){let l=new Map;return Promise.resolve().then(async()=>{for(let c of o){let u=await c.key,f=await c.value;if(u.status==="aborted"||f.status==="aborted")return K;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}})}else{let l=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return K;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}}}};Pr.create=(t,e,n)=>new Pr({valueType:e,keyType:t,typeName:Z.ZodMap,...J(n)});var jr=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.set)return P(r,{code:R.invalid_type,expected:N.set,received:r.parsedType}),K;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(P(r,{code:R.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(P(r,{code:R.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return K;f.status==="dirty"&&n.dirty(),u.add(f.value)}return{status:n.value,value:u}}let l=[...r.data.values()].map((c,u)=>i._parse(new Je(r,c,r.path,u)));return r.common.async?Promise.all(l).then(c=>o(c)):o(l)}min(e,n){return new t({...this._def,minSize:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:U.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};jr.create=(t,e)=>new jr({valueType:t,minSize:null,maxSize:null,typeName:Z.ZodSet,...J(e)});var ni=class t extends te{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.function)return P(n,{code:R.invalid_type,expected:N.function,received:n.parsedType}),K;function r(l,c){return ms({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Ir(),Rt].filter(u=>!!u),issueData:{code:R.invalid_arguments,argumentsError:c}})}function s(l,c){return ms({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Ir(),Rt].filter(u=>!!u),issueData:{code:R.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof Yt){let l=this;return Re(async function(...c){let u=new Me([]),f=await l._def.args.parseAsync(c,i).catch(w=>{throw u.addIssue(r(c,w)),u}),p=await Reflect.apply(o,this,f);return await l._def.returns._def.type.parseAsync(p,i).catch(w=>{throw u.addIssue(s(p,w)),u})})}else{let l=this;return Re(function(...c){let u=l._def.args.safeParse(c,i);if(!u.success)throw new Me([r(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=l._def.returns.safeParse(f,i);if(!p.success)throw new Me([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:mt.create(e).rest(At.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||mt.create([]).rest(At.create()),returns:n||At.create(),typeName:Z.ZodFunction,...J(r)})}},In=class extends te{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};In.create=(t,e)=>new In({getter:t,typeName:Z.ZodLazy,...J(e)});var Rn=class extends te{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return P(n,{received:n.data,code:R.invalid_literal,expected:this._def.value}),K}return{status:"valid",value:e.data}}get value(){return this._def.value}};Rn.create=(t,e)=>new Rn({value:t,typeName:Z.ZodLiteral,...J(e)});function Jl(t,e){return new En({values:t,typeName:Z.ZodEnum,...J(e)})}var En=class t extends te{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return P(n,{expected:ne.joinValues(r),received:n.parsedType,code:R.invalid_type}),K}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return P(n,{received:n.data,code:R.invalid_enum_value,options:r}),K}return Re(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};En.create=Jl;var An=class extends te{_parse(e){let n=ne.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==N.string&&r.parsedType!==N.number){let s=ne.objectValues(n);return P(r,{expected:ne.joinValues(s),received:r.parsedType,code:R.invalid_type}),K}if(this._cache||(this._cache=new Set(ne.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=ne.objectValues(n);return P(r,{received:r.data,code:R.invalid_enum_value,options:s}),K}return Re(e.data)}get enum(){return this._def.values}};An.create=(t,e)=>new An({values:t,typeName:Z.ZodNativeEnum,...J(e)});var Yt=class extends te{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.promise&&n.common.async===!1)return P(n,{code:R.invalid_type,expected:N.promise,received:n.parsedType}),K;let r=n.parsedType===N.promise?n.data:Promise.resolve(n.data);return Re(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Yt.create=(t,e)=>new Yt({type:t,typeName:Z.ZodPromise,...J(e)});var Ye=class extends te{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:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{P(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async l=>{if(n.value==="aborted")return K;let c=await this._def.schema._parseAsync({data:l,path:r.path,parent:r});return c.status==="aborted"?K:c.status==="dirty"?bn(c.value):n.value==="dirty"?bn(c.value):c});{if(n.value==="aborted")return K;let l=this._def.schema._parseSync({data:o,path:r.path,parent:r});return l.status==="aborted"?K:l.status==="dirty"?bn(l.value):n.value==="dirty"?bn(l.value):l}}if(s.type==="refinement"){let o=l=>{let c=s.refinement(l,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(r.common.async===!1){let l=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return l.status==="aborted"?K:(l.status==="dirty"&&n.dirty(),o(l.value),{status:n.value,value:l.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(l=>l.status==="aborted"?K:(l.status==="dirty"&&n.dirty(),o(l.value).then(()=>({status:n.value,value:l.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Vt(o))return K;let l=s.transform(o.value,i);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:l}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Vt(o)?Promise.resolve(s.transform(o.value,i)).then(l=>({status:n.value,value:l})):K);ne.assertNever(s)}};Ye.create=(t,e,n)=>new Ye({schema:t,typeName:Z.ZodEffects,effect:e,...J(n)});Ye.createWithPreprocess=(t,e,n)=>new Ye({schema:e,effect:{type:"preprocess",transform:t},typeName:Z.ZodEffects,...J(n)});var We=class extends te{_parse(e){return this._getType(e)===N.undefined?Re(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};We.create=(t,e)=>new We({innerType:t,typeName:Z.ZodOptional,...J(e)});var gt=class extends te{_parse(e){return this._getType(e)===N.null?Re(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};gt.create=(t,e)=>new gt({innerType:t,typeName:Z.ZodNullable,...J(e)});var $n=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===N.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};$n.create=(t,e)=>new $n({innerType:t,typeName:Z.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...J(e)});var Pn=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Rr(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Me(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new Me(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Pn.create=(t,e)=>new Pn({innerType:t,typeName:Z.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...J(e)});var Or=class extends te{_parse(e){if(this._getType(e)!==N.nan){let r=this._getOrReturnCtx(e);return P(r,{code:R.invalid_type,expected:N.nan,received:r.parsedType}),K}return{status:"valid",value:e.data}}};Or.create=t=>new Or({typeName:Z.ZodNaN,...J(t)});var fp=Symbol("zod_brand"),gs=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},ys=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?K:i.status==="dirty"?(n.dirty(),bn(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?K:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:Z.ZodPipeline})}},jn=class extends te{_parse(e){let n=this._def.innerType._parse(e),r=s=>(Vt(s)&&(s.value=Object.freeze(s.value)),s);return Rr(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};jn.create=(t,e)=>new jn({innerType:t,typeName:Z.ZodReadonly,...J(e)});function Zl(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Yl(t,e={},n){return t?Jt.create().superRefine((r,s)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let l=Zl(e,r),c=l.fatal??n??!0;s.addIssue({code:"custom",...l,fatal:c})}});if(!i){let o=Zl(e,r),l=o.fatal??n??!0;s.addIssue({code:"custom",...o,fatal:l})}}):Jt.create()}var pp={object:ze.lazycreate},Z;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(Z||(Z={}));var mp=(t,e={message:`Input not instance of ${t.name}`})=>Yl(n=>n instanceof t,e),Xl=Wt.create,Ql=vn.create,gp=Or.create,yp=wn.create,ec=_n.create,bp=kn.create,vp=Ar.create,wp=Sn.create,_p=Tn.create,kp=Jt.create,Sp=At.create,Tp=it.create,xp=$r.create,Cp=$t.create,Ip=ze.create,Rp=ze.strictCreate,Ep=xn.create,Ap=ei.create,$p=Cn.create,Pp=mt.create,jp=ti.create,Op=Pr.create,Np=jr.create,Mp=ni.create,zp=In.create,Dp=Rn.create,Lp=En.create,Up=An.create,qp=Yt.create,Fp=Ye.create,Bp=We.create,Kp=gt.create,Hp=Ye.createWithPreprocess,Zp=ys.create,Gp=()=>Xl().optional(),Vp=()=>Ql().optional(),Wp=()=>ec().optional(),Jp={string:(t=>Wt.create({...t,coerce:!0})),number:(t=>vn.create({...t,coerce:!0})),boolean:(t=>_n.create({...t,coerce:!0})),bigint:(t=>wn.create({...t,coerce:!0})),date:(t=>kn.create({...t,coerce:!0}))};var Yp=K;var tc=_.object({baseUrl:_.string().url(),email:_.string().email(),apiToken:_.string().min(1)}),No=_.object({controlPlaneUrl:_.string().url(),runnerId:_.string().optional(),runnerToken:_.string().optional(),runnerName:_.string().default(ri.default.hostname()),jira:tc.optional(),repos:_.record(_.object({path:_.string(),jira:tc.optional(),github:_.object({token:_.string().min(1),login:_.string().optional()}).optional()})).default({}),github:_.object({token:_.string().min(1),login:_.string().optional()}).optional(),githubUsers:_.record(_.object({token:_.string().min(1),login:_.string().optional()})).default({}),deploy:_.object({enabled:_.boolean().default(!1)}).default({enabled:!1}),environments:_.record(_.object({secrets:_.record(_.string()).default({})})).default({}),claudeProfiles:_.record(_.object({configDir:_.string()})).default({}),claudeBin:_.string().default("claude"),agents:_.record(_.object({bin:_.string()})).default({}),jiraUsers:_.record(_.object({email:_.string().email(),apiToken:_.string().min(1)})).default({}),auditSchedules:_.array(_.object({repoName:_.string(),role:_.enum(["security","testing"]),intervalHours:_.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:_.number().int().min(10).max(600).default(30)});function se(){let t=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(t)return t;let e=si.default.join(ri.default.homedir(),".config","allwright"),n=si.default.join(ri.default.homedir(),".config","ticketpilot");return!Pt.default.existsSync(e)&&Pt.default.existsSync(n)?n:e}function jt(){return si.default.join(se(),"runner.json")}function ye(){let t=jt();if(!Pt.default.existsSync(t))return null;let e=JSON.parse(Pt.default.readFileSync(t,"utf8"));return No.parse(e)}function ge(t){let e=se();Pt.default.mkdirSync(e,{recursive:!0,mode:448});let n=jt(),r=n+".tmp";Pt.default.writeFileSync(r,JSON.stringify(t,null,2)+`
298
+ `+n)}function Sr(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Sr),t.emit("wsClientError",o,n,e)}else Bs(n,r,s,i)}});var yf={};Ws(yf,{buildSetupReport:()=>rw,claudeLoggedIn:()=>gf,repoDefaultBranch:()=>mf});function mf(t){let e=(...s)=>{try{return(0,po.execFileSync)("git",["-C",t,...s],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}},n=e("symbolic-ref","--short","refs/remotes/origin/HEAD");if(n?.startsWith("origin/"))return n.slice(7);let r=e("rev-parse","--abbrev-ref","HEAD");return r&&r!=="HEAD"?r:""}function gf(t=ff.default.homedir()){if(mn.default.existsSync(xr.default.join(t,".claude",".credentials.json")))return!0;try{return!!JSON.parse(mn.default.readFileSync(xr.default.join(t,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function rw(t,e,n){let r=!1,s="";if(Zs&&Date.now()-Zs.at<6e4)r=Zs.installed,s=Zs.version;else{try{let{stdout:l}=await nw(t.claudeBin,["--version"],{timeout:1e4});r=!0,s=l.trim().slice(0,60)}catch{r=!1}Zs={at:Date.now(),installed:r,version:s}}let i=e.map(l=>{let c=t.repos[l];if(!c)return{repoName:l,mapped:!1,liveMapped:!!n?.repos?.[l],pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1,githubToken:!1,githubTokenOwn:!1,defaultBranch:""};let u=mn.default.existsSync(c.path);return{repoName:l,mapped:!0,liveMapped:n?!!n.repos?.[l]:!0,pathExists:u,isGit:u&&mn.default.existsSync(xr.default.join(c.path,".git")),claudeMd:u&&mn.default.existsSync(xr.default.join(c.path,"CLAUDE.md")),deployMd:u&&mn.default.existsSync(xr.default.join(c.path,"DEPLOY.md")),testMd:u&&mn.default.existsSync(xr.default.join(c.path,"TEST.md")),githubToken:!!Re(t,l),githubTokenOwn:!!c.github?.token,defaultBranch:u?mf(c.path):""}}),o=Object.values(t.repos).find(l=>l.github?.token);return{jiraConfigured:!!t.jira,jiraEmail:t.jira?.email??"",claude:{installed:r,version:s,loggedIn:gf()},githubTokenSet:!!(t.github?.token||o),githubLogin:t.github?.login??o?.github?.login??"",deploysEnabled:t.deploy.enabled,jiraUserCount:Object.keys(t.jiraUsers).length,repos:i}}var po,mn,ff,xr,pf,nw,Zs,bf=Vs(()=>{"use strict";po=require("node:child_process"),mn=I(require("node:fs"),1),ff=I(require("node:os"),1),xr=I(require("node:path"),1),pf=require("node:util");nr();nw=(0,pf.promisify)(po.execFile);Zs=null});var ft=I(require("node:fs"),1),Tl=I(require("node:os"),1),ds=I(require("node:path"),1),Gt=require("node:child_process"),Gs=require("node:crypto"),yn=I(require("node:readline/promises"),1);var Fl=I(ql(),1),{program:fw,createCommand:pw,createArgument:mw,createOption:gw,CommanderError:yw,InvalidArgumentError:bw,InvalidOptionArgumentError:vw,Command:Bl,Argument:ww,Option:_w,Help:kw}=Fl.default;var Pt=I(require("node:fs"),1),ri=I(require("node:os"),1),si=I(require("node:path"),1);var _={};Ws(_,{BRAND:()=>fp,DIRTY:()=>bn,EMPTY_PATH:()=>Hf,INVALID:()=>H,NEVER:()=>Yp,OK:()=>Ee,ParseStatus:()=>xe,Schema:()=>te,ZodAny:()=>Jt,ZodArray:()=>$t,ZodBigInt:()=>wn,ZodBoolean:()=>_n,ZodBranded:()=>gs,ZodCatch:()=>Pn,ZodDate:()=>kn,ZodDefault:()=>$n,ZodDiscriminatedUnion:()=>ei,ZodEffects:()=>Ye,ZodEnum:()=>An,ZodError:()=>Me,ZodFirstPartyTypeKind:()=>G,ZodFunction:()=>ni,ZodIntersection:()=>Cn,ZodIssueCode:()=>E,ZodLazy:()=>In,ZodLiteral:()=>En,ZodMap:()=>Pr,ZodNaN:()=>Or,ZodNativeEnum:()=>Rn,ZodNever:()=>it,ZodNull:()=>Tn,ZodNullable:()=>gt,ZodNumber:()=>vn,ZodObject:()=>ze,ZodOptional:()=>We,ZodParsedType:()=>N,ZodPipeline:()=>ys,ZodPromise:()=>Yt,ZodReadonly:()=>jn,ZodRecord:()=>ti,ZodSchema:()=>te,ZodSet:()=>jr,ZodString:()=>Wt,ZodSymbol:()=>Rr,ZodTransformer:()=>Ye,ZodTuple:()=>mt,ZodType:()=>te,ZodUndefined:()=>Sn,ZodUnion:()=>xn,ZodUnknown:()=>Rt,ZodVoid:()=>$r,addIssueToContext:()=>P,any:()=>kp,array:()=>Cp,bigint:()=>yp,boolean:()=>ec,coerce:()=>Jp,custom:()=>Yl,date:()=>bp,datetimeRegex:()=>Wl,defaultErrorMap:()=>Et,discriminatedUnion:()=>Rp,effect:()=>Fp,enum:()=>Lp,function:()=>Mp,getErrorMap:()=>Ir,getParsedType:()=>pt,instanceof:()=>mp,intersection:()=>$p,isAborted:()=>Xs,isAsync:()=>Er,isDirty:()=>Qs,isValid:()=>Vt,late:()=>pp,lazy:()=>zp,literal:()=>Dp,makeIssue:()=>ms,map:()=>Op,nan:()=>gp,nativeEnum:()=>Up,never:()=>Tp,null:()=>_p,nullable:()=>Kp,number:()=>Ql,object:()=>Ip,objectUtil:()=>Po,oboolean:()=>Wp,onumber:()=>Vp,optional:()=>Bp,ostring:()=>Gp,pipeline:()=>Zp,preprocess:()=>Hp,promise:()=>qp,quotelessJson:()=>Ff,record:()=>jp,set:()=>Np,setErrorMap:()=>Kf,strictObject:()=>Ep,string:()=>Xl,symbol:()=>vp,transformer:()=>Fp,tuple:()=>Pp,undefined:()=>wp,union:()=>Ap,unknown:()=>Sp,util:()=>ne,void:()=>xp});var ne;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},t.getValidEnumValues=s=>{let i=t.objectKeys(s).filter(l=>typeof s[s[l]]!="number"),o={};for(let l of i)o[l]=s[l];return t.objectValues(o)},t.objectValues=s=>t.objectKeys(s).map(function(i){return s[i]}),t.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},t.find=(s,i)=>{for(let o of s)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(ne||(ne={}));var Po;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Po||(Po={}));var N=ne.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),pt=t=>{switch(typeof t){case"undefined":return N.undefined;case"string":return N.string;case"number":return Number.isNaN(t)?N.nan:N.number;case"boolean":return N.boolean;case"function":return N.function;case"bigint":return N.bigint;case"symbol":return N.symbol;case"object":return Array.isArray(t)?N.array:t===null?N.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?N.promise:typeof Map<"u"&&t instanceof Map?N.map:typeof Set<"u"&&t instanceof Set?N.set:typeof Date<"u"&&t instanceof Date?N.date:N.object;default:return N.unknown}};var E=ne.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"]),Ff=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),Me=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_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)r._errors.push(n(o));else{let l=r,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(l[u]=l[u]||{_errors:[]},l[u]._errors.push(n(o))):l[u]=l[u]||{_errors:[]},l=l[u],c++}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,ne.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];n[i]=n[i]||[],n[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};Me.create=t=>new Me(t);var Bf=(t,e)=>{let n;switch(t.code){case E.invalid_type:t.received===N.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case E.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,ne.jsonStringifyReplacer)}`;break;case E.unrecognized_keys:n=`Unrecognized key(s) in object: ${ne.joinValues(t.keys,", ")}`;break;case E.invalid_union:n="Invalid input";break;case E.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${ne.joinValues(t.options)}`;break;case E.invalid_enum_value:n=`Invalid enum value. Expected ${ne.joinValues(t.options)}, received '${t.received}'`;break;case E.invalid_arguments:n="Invalid function arguments";break;case E.invalid_return_type:n="Invalid function return type";break;case E.invalid_date:n="Invalid date";break;case E.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:ne.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case E.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case E.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case E.custom:n="Invalid input";break;case E.invalid_intersection_types:n="Intersection results could not be merged";break;case E.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case E.not_finite:n="Number must be finite";break;default:n=e.defaultError,ne.assertNever(t)}return{message:n}},Et=Bf;var Kl=Et;function Kf(t){Kl=t}function Ir(){return Kl}var ms=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,i=[...n,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let l="",c=r.filter(u=>!!u).slice().reverse();for(let u of c)l=u(o,{data:e,defaultError:l}).message;return{...s,path:i,message:l}},Hf=[];function P(t,e){let n=Ir(),r=ms({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===Et?void 0:Et].filter(s=>!!s)});t.common.issues.push(r)}var xe=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return H;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return H;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},H=Object.freeze({status:"aborted"}),bn=t=>({status:"dirty",value:t}),Ee=t=>({status:"valid",value:t}),Xs=t=>t.status==="aborted",Qs=t=>t.status==="dirty",Vt=t=>t.status==="valid",Er=t=>typeof Promise<"u"&&t instanceof Promise;var U;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(U||(U={}));var Je=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},Hl=(t,e)=>{if(Vt(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new Me(t.common.issues);return this._error=n,this._error}}};function Y(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))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,l)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??l.defaultError}:typeof l.data>"u"?{message:c??r??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:c??n??l.defaultError}},description:s}}var te=class{get description(){return this._def.description}_getType(e){return pt(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:pt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new xe,ctx:{common:e.parent.common,data:e.data,parsedType:pt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(Er(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Hl(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return Vt(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>Vt(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pt(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(Er(s)?s:Promise.resolve(s));return Hl(r,i)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,i)=>{let o=e(s),l=()=>i.addIssue({code:E.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(e,n){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof n=="function"?n(r,s):n),!1))}_refinement(e){return new Ye({schema:this,typeName:G.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:n=>this["~validate"](n)}}optional(){return We.create(this,this._def)}nullable(){return gt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return $t.create(this)}promise(){return Yt.create(this,this._def)}or(e){return xn.create([this,e],this._def)}and(e){return Cn.create(this,e,this._def)}transform(e){return new Ye({...Y(this._def),schema:this,typeName:G.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new $n({...Y(this._def),innerType:this,defaultValue:n,typeName:G.ZodDefault})}brand(){return new gs({typeName:G.ZodBranded,type:this,...Y(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Pn({...Y(this._def),innerType:this,catchValue:n,typeName:G.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return ys.create(this,e)}readonly(){return jn.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Zf=/^c[^\s-]{8,}$/i,Gf=/^[0-9a-z]+$/,Vf=/^[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,Jf=/^[a-z0-9_-]{21}$/i,Yf=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Xf=/^[-+]?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)?)??$/,Qf=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ep="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",jo,tp=/^(?:(?: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])$/,np=/^(?:(?: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])$/,rp=/^(([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]))$/,sp=/^(([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])$/,ip=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,op=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Gl="((\\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])))",ap=new RegExp(`^${Gl}$`);function Vl(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function lp(t){return new RegExp(`^${Vl(t)}$`)}function Wl(t){let e=`${Gl}T${Vl(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function cp(t,e){return!!((e==="v4"||!e)&&tp.test(t)||(e==="v6"||!e)&&rp.test(t))}function up(t,e){if(!Yf.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function dp(t,e){return!!((e==="v4"||!e)&&np.test(t)||(e==="v6"||!e)&&sp.test(t))}var Wt=class t extends te{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==N.string){let i=this._getOrReturnCtx(e);return P(i,{code:E.invalid_type,expected:N.string,received:i.parsedType}),H}let r=new xe,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:E.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:E.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,l=e.data.length<i.value;(o||l)&&(s=this._getOrReturnCtx(e,s),o?P(s,{code:E.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):l&&P(s,{code:E.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Qf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"email",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")jo||(jo=new RegExp(ep,"u")),jo.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"emoji",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Wf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"uuid",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Jf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"nanoid",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Zf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cuid",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Gf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cuid2",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Vf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"ulid",code:E.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),P(s,{validation:"url",code:E.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"regex",code:E.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),P(s,{code:E.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.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),P(s,{code:E.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),P(s,{code:E.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?Wl(i).test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:E.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?ap.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:E.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?lp(i).test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{code:E.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Xf.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"duration",code:E.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?cp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"ip",code:E.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?up(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"jwt",code:E.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?dp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"cidr",code:E.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?ip.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"base64",code:E.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?op.test(e.data)||(s=this._getOrReturnCtx(e,s),P(s,{validation:"base64url",code:E.invalid_string,message:i.message}),r.dirty()):ne.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:E.invalid_string,...U.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...U.errToObj(e)})}url(e){return this._addCheck({kind:"url",...U.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...U.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...U.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...U.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...U.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...U.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...U.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...U.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...U.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...U.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...U.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...U.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,...U.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,...U.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...U.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...U.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...U.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...U.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...U.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...U.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...U.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...U.errToObj(n)})}nonempty(e){return this.min(1,U.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...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 n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Wt.create=t=>new Wt({checks:[],typeName:G.ZodString,coerce:t?.coerce??!1,...Y(t)});function hp(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,i=Number.parseInt(t.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var vn=class t extends te{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)!==N.number){let i=this._getOrReturnCtx(e);return P(i,{code:E.invalid_type,expected:N.number,received:i.parsedType}),H}let r,s=new xe;for(let i of this._def.checks)i.kind==="int"?ne.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:E.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.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)&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?hp(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:E.not_finite,message:i.message}),s.dirty()):ne.assertNever(i);return{status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:U.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:U.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:U.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:U.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:U.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&ne.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};vn.create=t=>new vn({checks:[],typeName:G.ZodNumber,coerce:t?.coerce||!1,...Y(t)});var wn=class t extends te{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)!==N.bigint)return this._getInvalidInput(e);let r,s=new xe;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.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)&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),P(r,{code:E.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):ne.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return P(n,{code:E.invalid_type,expected:N.bigint,received:n.parsedType}),H}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:U.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};wn.create=t=>new wn({checks:[],typeName:G.ZodBigInt,coerce:t?.coerce??!1,...Y(t)});var _n=class extends te{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==N.boolean){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.boolean,received:r.parsedType}),H}return Ee(e.data)}};_n.create=t=>new _n({typeName:G.ZodBoolean,coerce:t?.coerce||!1,...Y(t)});var kn=class t extends te{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==N.date){let i=this._getOrReturnCtx(e);return P(i,{code:E.invalid_type,expected:N.date,received:i.parsedType}),H}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return P(i,{code:E.invalid_date}),H}let r=new xe,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:E.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),P(s,{code:E.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):ne.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:U.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:U.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};kn.create=t=>new kn({checks:[],coerce:t?.coerce||!1,typeName:G.ZodDate,...Y(t)});var Rr=class extends te{_parse(e){if(this._getType(e)!==N.symbol){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.symbol,received:r.parsedType}),H}return Ee(e.data)}};Rr.create=t=>new Rr({typeName:G.ZodSymbol,...Y(t)});var Sn=class extends te{_parse(e){if(this._getType(e)!==N.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.undefined,received:r.parsedType}),H}return Ee(e.data)}};Sn.create=t=>new Sn({typeName:G.ZodUndefined,...Y(t)});var Tn=class extends te{_parse(e){if(this._getType(e)!==N.null){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.null,received:r.parsedType}),H}return Ee(e.data)}};Tn.create=t=>new Tn({typeName:G.ZodNull,...Y(t)});var Jt=class extends te{constructor(){super(...arguments),this._any=!0}_parse(e){return Ee(e.data)}};Jt.create=t=>new Jt({typeName:G.ZodAny,...Y(t)});var Rt=class extends te{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Ee(e.data)}};Rt.create=t=>new Rt({typeName:G.ZodUnknown,...Y(t)});var it=class extends te{_parse(e){let n=this._getOrReturnCtx(e);return P(n,{code:E.invalid_type,expected:N.never,received:n.parsedType}),H}};it.create=t=>new it({typeName:G.ZodNever,...Y(t)});var $r=class extends te{_parse(e){if(this._getType(e)!==N.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.void,received:r.parsedType}),H}return Ee(e.data)}};$r.create=t=>new $r({typeName:G.ZodVoid,...Y(t)});var $t=class t extends te{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==N.array)return P(n,{code:E.invalid_type,expected:N.array,received:n.parsedType}),H;if(s.exactLength!==null){let o=n.data.length>s.exactLength.value,l=n.data.length<s.exactLength.value;(o||l)&&(P(n,{code:o?E.too_big:E.too_small,minimum:l?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&n.data.length<s.minLength.value&&(P(n,{code:E.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(P(n,{code:E.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,l)=>s.type._parseAsync(new Je(n,o,n.path,l)))).then(o=>xe.mergeArray(r,o));let i=[...n.data].map((o,l)=>s.type._parseSync(new Je(n,o,n.path,l)));return xe.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:U.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:U.toString(n)}})}nonempty(e){return this.min(1,e)}};$t.create=(t,e)=>new $t({type:t,minLength:null,maxLength:null,exactLength:null,typeName:G.ZodArray,...Y(e)});function Ar(t){if(t instanceof ze){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=We.create(Ar(r))}return new ze({...t._def,shape:()=>e})}else return t instanceof $t?new $t({...t._def,type:Ar(t.element)}):t instanceof We?We.create(Ar(t.unwrap())):t instanceof gt?gt.create(Ar(t.unwrap())):t instanceof mt?mt.create(t.items.map(e=>Ar(e))):t}var ze=class t extends te{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(),n=ne.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==N.object){let u=this._getOrReturnCtx(e);return P(u,{code:E.invalid_type,expected:N.object,received:u.parsedType}),H}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof it&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||l.push(u);let c=[];for(let u of o){let f=i[u],p=s.data[u];c.push({key:{status:"valid",value:u},value:f._parse(new Je(s,p,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof it){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of l)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")l.length>0&&(P(s,{code:E.unrecognized_keys,keys:l}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of l){let p=s.data[f];c.push({key:{status:"valid",value:f},value:u._parse(new Je(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let u=[];for(let f of c){let p=await f.key,b=await f.value;u.push({key:p,value:b,alwaysSet:f.alwaysSet})}return u}).then(u=>xe.mergeObjectSync(r,u)):xe.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return U.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:U.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:G.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of ne.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of ne.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Ar(this)}partial(e){let n={};for(let r of ne.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of ne.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof We;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return Jl(ne.objectKeys(this.shape))}};ze.create=(t,e)=>new ze({shape:()=>t,unknownKeys:"strip",catchall:it.create(),typeName:G.ZodObject,...Y(e)});ze.strictCreate=(t,e)=>new ze({shape:()=>t,unknownKeys:"strict",catchall:it.create(),typeName:G.ZodObject,...Y(e)});ze.lazycreate=(t,e)=>new ze({shape:t,unknownKeys:"strip",catchall:it.create(),typeName:G.ZodObject,...Y(e)});var xn=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(i){for(let l of i)if(l.result.status==="valid")return l.result;for(let l of i)if(l.result.status==="dirty")return n.common.issues.push(...l.ctx.common.issues),l.result;let o=i.map(l=>new Me(l.ctx.common.issues));return P(n,{code:E.invalid_union,unionErrors:o}),H}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let u={...n,common:{...n.common,issues:[]},parent:null},f=c._parseSync({data:n.data,path:n.path,parent:u});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let l=o.map(c=>new Me(c));return P(n,{code:E.invalid_union,unionErrors:l}),H}}get options(){return this._def.options}};xn.create=(t,e)=>new xn({options:t,typeName:G.ZodUnion,...Y(e)});var At=t=>t instanceof In?At(t.schema):t instanceof Ye?At(t.innerType()):t instanceof En?[t.value]:t instanceof An?t.options:t instanceof Rn?ne.objectValues(t.enum):t instanceof $n?At(t._def.innerType):t instanceof Sn?[void 0]:t instanceof Tn?[null]:t instanceof We?[void 0,...At(t.unwrap())]:t instanceof gt?[null,...At(t.unwrap())]:t instanceof gs||t instanceof jn?At(t.unwrap()):t instanceof Pn?At(t._def.innerType):[],ei=class t extends te{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.object)return P(n,{code:E.invalid_type,expected:N.object,received:n.parsedType}),H;let r=this.discriminator,s=n.data[r],i=this.optionsMap.get(s);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(P(n,{code:E.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),H)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let i of n){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 l of o){if(s.has(l))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(l)}`);s.set(l,i)}}return new t({typeName:G.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...Y(r)})}};function Oo(t,e){let n=pt(t),r=pt(e);if(t===e)return{valid:!0,data:t};if(n===N.object&&r===N.object){let s=ne.objectKeys(e),i=ne.objectKeys(t).filter(l=>s.indexOf(l)!==-1),o={...t,...e};for(let l of i){let c=Oo(t[l],e[l]);if(!c.valid)return{valid:!1};o[l]=c.data}return{valid:!0,data:o}}else if(n===N.array&&r===N.array){if(t.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let o=t[i],l=e[i],c=Oo(o,l);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return n===N.date&&r===N.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Cn=class extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(Xs(i)||Xs(o))return H;let l=Oo(i.value,o.value);return l.valid?((Qs(i)||Qs(o))&&n.dirty(),{status:n.value,value:l.data}):(P(r,{code:E.invalid_intersection_types}),H)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};Cn.create=(t,e,n)=>new Cn({left:t,right:e,typeName:G.ZodIntersection,...Y(n)});var mt=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.array)return P(r,{code:E.invalid_type,expected:N.array,received:r.parsedType}),H;if(r.data.length<this._def.items.length)return P(r,{code:E.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),H;!this._def.rest&&r.data.length>this._def.items.length&&(P(r,{code:E.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,l)=>{let c=this._def.items[l]||this._def.rest;return c?c._parse(new Je(r,o,r.path,l)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>xe.mergeArray(n,o)):xe.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};mt.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new mt({items:t,typeName:G.ZodTuple,rest:null,...Y(e)})};var ti=class t extends te{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.object)return P(r,{code:E.invalid_type,expected:N.object,received:r.parsedType}),H;let s=[],i=this._def.keyType,o=this._def.valueType;for(let l in r.data)s.push({key:i._parse(new Je(r,l,r.path,l)),value:o._parse(new Je(r,r.data[l],r.path,l)),alwaysSet:l in r.data});return r.common.async?xe.mergeObjectAsync(n,s):xe.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof te?new t({keyType:e,valueType:n,typeName:G.ZodRecord,...Y(r)}):new t({keyType:Wt.create(),valueType:e,typeName:G.ZodRecord,...Y(n)})}},Pr=class extends te{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.map)return P(r,{code:E.invalid_type,expected:N.map,received:r.parsedType}),H;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([l,c],u)=>({key:s._parse(new Je(r,l,r.path,[u,"key"])),value:i._parse(new Je(r,c,r.path,[u,"value"]))}));if(r.common.async){let l=new Map;return Promise.resolve().then(async()=>{for(let c of o){let u=await c.key,f=await c.value;if(u.status==="aborted"||f.status==="aborted")return H;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}})}else{let l=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return H;(u.status==="dirty"||f.status==="dirty")&&n.dirty(),l.set(u.value,f.value)}return{status:n.value,value:l}}}};Pr.create=(t,e,n)=>new Pr({valueType:e,keyType:t,typeName:G.ZodMap,...Y(n)});var jr=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==N.set)return P(r,{code:E.invalid_type,expected:N.set,received:r.parsedType}),H;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(P(r,{code:E.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(P(r,{code:E.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return H;f.status==="dirty"&&n.dirty(),u.add(f.value)}return{status:n.value,value:u}}let l=[...r.data.values()].map((c,u)=>i._parse(new Je(r,c,r.path,u)));return r.common.async?Promise.all(l).then(c=>o(c)):o(l)}min(e,n){return new t({...this._def,minSize:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:U.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};jr.create=(t,e)=>new jr({valueType:t,minSize:null,maxSize:null,typeName:G.ZodSet,...Y(e)});var ni=class t extends te{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.function)return P(n,{code:E.invalid_type,expected:N.function,received:n.parsedType}),H;function r(l,c){return ms({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Ir(),Et].filter(u=>!!u),issueData:{code:E.invalid_arguments,argumentsError:c}})}function s(l,c){return ms({data:l,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Ir(),Et].filter(u=>!!u),issueData:{code:E.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof Yt){let l=this;return Ee(async function(...c){let u=new Me([]),f=await l._def.args.parseAsync(c,i).catch(w=>{throw u.addIssue(r(c,w)),u}),p=await Reflect.apply(o,this,f);return await l._def.returns._def.type.parseAsync(p,i).catch(w=>{throw u.addIssue(s(p,w)),u})})}else{let l=this;return Ee(function(...c){let u=l._def.args.safeParse(c,i);if(!u.success)throw new Me([r(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=l._def.returns.safeParse(f,i);if(!p.success)throw new Me([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:mt.create(e).rest(Rt.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||mt.create([]).rest(Rt.create()),returns:n||Rt.create(),typeName:G.ZodFunction,...Y(r)})}},In=class extends te{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};In.create=(t,e)=>new In({getter:t,typeName:G.ZodLazy,...Y(e)});var En=class extends te{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return P(n,{received:n.data,code:E.invalid_literal,expected:this._def.value}),H}return{status:"valid",value:e.data}}get value(){return this._def.value}};En.create=(t,e)=>new En({value:t,typeName:G.ZodLiteral,...Y(e)});function Jl(t,e){return new An({values:t,typeName:G.ZodEnum,...Y(e)})}var An=class t extends te{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return P(n,{expected:ne.joinValues(r),received:n.parsedType,code:E.invalid_type}),H}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return P(n,{received:n.data,code:E.invalid_enum_value,options:r}),H}return Ee(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};An.create=Jl;var Rn=class extends te{_parse(e){let n=ne.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==N.string&&r.parsedType!==N.number){let s=ne.objectValues(n);return P(r,{expected:ne.joinValues(s),received:r.parsedType,code:E.invalid_type}),H}if(this._cache||(this._cache=new Set(ne.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=ne.objectValues(n);return P(r,{received:r.data,code:E.invalid_enum_value,options:s}),H}return Ee(e.data)}get enum(){return this._def.values}};Rn.create=(t,e)=>new Rn({values:t,typeName:G.ZodNativeEnum,...Y(e)});var Yt=class extends te{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==N.promise&&n.common.async===!1)return P(n,{code:E.invalid_type,expected:N.promise,received:n.parsedType}),H;let r=n.parsedType===N.promise?n.data:Promise.resolve(n.data);return Ee(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Yt.create=(t,e)=>new Yt({type:t,typeName:G.ZodPromise,...Y(e)});var Ye=class extends te{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===G.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{P(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async l=>{if(n.value==="aborted")return H;let c=await this._def.schema._parseAsync({data:l,path:r.path,parent:r});return c.status==="aborted"?H:c.status==="dirty"?bn(c.value):n.value==="dirty"?bn(c.value):c});{if(n.value==="aborted")return H;let l=this._def.schema._parseSync({data:o,path:r.path,parent:r});return l.status==="aborted"?H:l.status==="dirty"?bn(l.value):n.value==="dirty"?bn(l.value):l}}if(s.type==="refinement"){let o=l=>{let c=s.refinement(l,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(r.common.async===!1){let l=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return l.status==="aborted"?H:(l.status==="dirty"&&n.dirty(),o(l.value),{status:n.value,value:l.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(l=>l.status==="aborted"?H:(l.status==="dirty"&&n.dirty(),o(l.value).then(()=>({status:n.value,value:l.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Vt(o))return H;let l=s.transform(o.value,i);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:l}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Vt(o)?Promise.resolve(s.transform(o.value,i)).then(l=>({status:n.value,value:l})):H);ne.assertNever(s)}};Ye.create=(t,e,n)=>new Ye({schema:t,typeName:G.ZodEffects,effect:e,...Y(n)});Ye.createWithPreprocess=(t,e,n)=>new Ye({schema:e,effect:{type:"preprocess",transform:t},typeName:G.ZodEffects,...Y(n)});var We=class extends te{_parse(e){return this._getType(e)===N.undefined?Ee(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};We.create=(t,e)=>new We({innerType:t,typeName:G.ZodOptional,...Y(e)});var gt=class extends te{_parse(e){return this._getType(e)===N.null?Ee(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};gt.create=(t,e)=>new gt({innerType:t,typeName:G.ZodNullable,...Y(e)});var $n=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===N.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};$n.create=(t,e)=>new $n({innerType:t,typeName:G.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Y(e)});var Pn=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Er(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Me(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new Me(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Pn.create=(t,e)=>new Pn({innerType:t,typeName:G.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Y(e)});var Or=class extends te{_parse(e){if(this._getType(e)!==N.nan){let r=this._getOrReturnCtx(e);return P(r,{code:E.invalid_type,expected:N.nan,received:r.parsedType}),H}return{status:"valid",value:e.data}}};Or.create=t=>new Or({typeName:G.ZodNaN,...Y(t)});var fp=Symbol("zod_brand"),gs=class extends te{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},ys=class t extends te{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?H:i.status==="dirty"?(n.dirty(),bn(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?H:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:G.ZodPipeline})}},jn=class extends te{_parse(e){let n=this._def.innerType._parse(e),r=s=>(Vt(s)&&(s.value=Object.freeze(s.value)),s);return Er(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};jn.create=(t,e)=>new jn({innerType:t,typeName:G.ZodReadonly,...Y(e)});function Zl(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Yl(t,e={},n){return t?Jt.create().superRefine((r,s)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let l=Zl(e,r),c=l.fatal??n??!0;s.addIssue({code:"custom",...l,fatal:c})}});if(!i){let o=Zl(e,r),l=o.fatal??n??!0;s.addIssue({code:"custom",...o,fatal:l})}}):Jt.create()}var pp={object:ze.lazycreate},G;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(G||(G={}));var mp=(t,e={message:`Input not instance of ${t.name}`})=>Yl(n=>n instanceof t,e),Xl=Wt.create,Ql=vn.create,gp=Or.create,yp=wn.create,ec=_n.create,bp=kn.create,vp=Rr.create,wp=Sn.create,_p=Tn.create,kp=Jt.create,Sp=Rt.create,Tp=it.create,xp=$r.create,Cp=$t.create,Ip=ze.create,Ep=ze.strictCreate,Ap=xn.create,Rp=ei.create,$p=Cn.create,Pp=mt.create,jp=ti.create,Op=Pr.create,Np=jr.create,Mp=ni.create,zp=In.create,Dp=En.create,Lp=An.create,Up=Rn.create,qp=Yt.create,Fp=Ye.create,Bp=We.create,Kp=gt.create,Hp=Ye.createWithPreprocess,Zp=ys.create,Gp=()=>Xl().optional(),Vp=()=>Ql().optional(),Wp=()=>ec().optional(),Jp={string:(t=>Wt.create({...t,coerce:!0})),number:(t=>vn.create({...t,coerce:!0})),boolean:(t=>_n.create({...t,coerce:!0})),bigint:(t=>wn.create({...t,coerce:!0})),date:(t=>kn.create({...t,coerce:!0}))};var Yp=H;var tc=_.object({baseUrl:_.string().url(),email:_.string().email(),apiToken:_.string().min(1)}),No=_.object({controlPlaneUrl:_.string().url(),runnerId:_.string().optional(),runnerToken:_.string().optional(),runnerName:_.string().default(ri.default.hostname()),jira:tc.optional(),repos:_.record(_.object({path:_.string(),jira:tc.optional(),github:_.object({token:_.string().min(1),login:_.string().optional()}).optional()})).default({}),github:_.object({token:_.string().min(1),login:_.string().optional()}).optional(),githubUsers:_.record(_.object({token:_.string().min(1),login:_.string().optional()})).default({}),deploy:_.object({enabled:_.boolean().default(!1)}).default({enabled:!1}),environments:_.record(_.object({secrets:_.record(_.string()).default({})})).default({}),claudeProfiles:_.record(_.object({configDir:_.string()})).default({}),claudeBin:_.string().default("claude"),agents:_.record(_.object({bin:_.string()})).default({}),jiraUsers:_.record(_.object({email:_.string().email(),apiToken:_.string().min(1)})).default({}),auditSchedules:_.array(_.object({repoName:_.string(),role:_.enum(["security","testing"]),intervalHours:_.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:_.number().int().min(10).max(600).default(30)});function se(){let t=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(t)return t;let e=si.default.join(ri.default.homedir(),".config","allwright"),n=si.default.join(ri.default.homedir(),".config","ticketpilot");return!Pt.default.existsSync(e)&&Pt.default.existsSync(n)?n:e}function jt(){return si.default.join(se(),"runner.json")}function ye(){let t=jt();if(!Pt.default.existsSync(t))return null;let e=JSON.parse(Pt.default.readFileSync(t,"utf8"));return No.parse(e)}function ge(t){let e=se();Pt.default.mkdirSync(e,{recursive:!0,mode:448});let n=jt(),r=n+".tmp";Pt.default.writeFileSync(r,JSON.stringify(t,null,2)+`
299
299
  `,{mode:384}),Pt.default.renameSync(r,n),Pt.default.chmodSync(n,384)}function ii(t,e){return`${t}:${e}`}function Ot(t,e,n){return t.environments[ii(e,n)]?.secrets??{}}function ie(){let t=ye();if(!t)throw new Error(`No runner config found at ${jt()}. Run \`allwright init\` first.`);return t}var oi=require("node:child_process"),qe=I(require("node:fs"),1),ai=I(require("node:path"),1);var Xp=new Set(["runner.log","runner.pid"]);function Qp(t){return qe.default.readdirSync(t).filter(e=>!Xp.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function nc(t){let e=se();if(!qe.default.existsSync(e))throw new Error(`nothing to export - ${e} does not exist`);let n=Qp(e);if(!n.length)throw new Error(`nothing to export - ${e} is empty`);let r=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-"),s=ai.default.resolve(t||`ticketpilot-backup-${r}.tgz`);return qe.default.writeFileSync(s,"",{mode:384}),(0,oi.execFileSync)("tar",["-czf",s,"-C",e,...n]),qe.default.chmodSync(s,384),{file:s,entries:n}}function rc(t){let e=ai.default.resolve(t);if(!qe.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let n=(0,oi.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
300
300
  `).filter(Boolean);for(let i of n)if(i.startsWith("/")||i.split("/").includes(".."))throw new Error(`refusing to import - unsafe path in archive: ${i}`);let r=se(),s;qe.default.existsSync(r)&&qe.default.readdirSync(r).length&&(s=`${r}.bak-${Date.now()}`,qe.default.renameSync(r,s)),qe.default.mkdirSync(r,{recursive:!0,mode:448}),(0,oi.execFileSync)("tar",["-xzf",e,"-C",r]);for(let i of qe.default.readdirSync(r)){let o=ai.default.join(r,i);qe.default.statSync(o).isFile()&&qe.default.chmodSync(o,384)}return{restored:n.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var Nr=I(require("node:fs"),1),Xt=I(require("node:path"),1),li=".ticketpilot-attachments",em=15*1024*1024,tm=50*1024*1024,sc=20;function ic(t,e){let n=Xt.default.basename(t).replace(/[^\w.\- ()]/g,"_").replace(/^\.+/,"").slice(-100)||"file",r=n,s=1;for(;e.has(r);)r=`${s++}-${n}`;return e.add(r),r}async function Mr(t,e,n,r){if(!e.length)return"";let s=Xt.default.join(n,li);Nr.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],l=0;for(let c of e){if(o.length>=sc){r("warn",`attachment cap reached (${sc} files) - skipping the rest`);break}if(c.size>em){r("warn",`skipping attachment "${c.filename}" - ${sm(c.size)} MB exceeds the 15 MB limit`);continue}if(l+c.size>tm){r("warn",`attachment size budget reached - skipping "${c.filename}" and the rest`);break}try{let u=await t.downloadAttachment(c.contentUrl),f=ic(c.filename,i);Nr.default.writeFileSync(Xt.default.join(s,f),u),l+=u.length,o.push(`- ${li}/${f} (${c.mimeType||"unknown type"}, ${Mo(u.length)} KB)`),r("info",`Downloaded attachment "${c.filename}" (${Mo(u.length)} KB)`)}catch(u){r("warn",`could not download attachment "${c.filename}": ${u instanceof Error?u.message:u}`)}}return o.length?`
301
301
 
@@ -351,7 +351,7 @@ Pick the ONE ticket that should be implemented FIRST. Weigh, in this order: (1)
351
351
  Answer with ONLY a fenced json block, nothing after it:
352
352
  \`\`\`json
353
353
  {"issueKey": "<one of the keys above>", "reason": "<2-3 sentences: why this one first, and what it unblocks>"}
354
- \`\`\``}function ru(t,e){let r=t.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??t.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!r)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(r),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 _a=require("node:crypto"),Eu=I(require("node:fs"),1);var ha=I(require("node:fs"),1),Ii=I(require("node:path"),1),Ri=I(_e(),1),Ng={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 - 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 - 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 - real structural pain for this team, not textbook purity."};function iu(t,e,n,r={}){let s=e.map(u=>`### Pack: ${u.name}
354
+ \`\`\``}function ru(t,e){let r=t.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??t.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!r)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(r),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 _a=require("node:crypto"),Au=I(require("node:fs"),1);var ha=I(require("node:fs"),1),Ii=I(require("node:path"),1),Ei=I(_e(),1),Ng={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 - 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 - 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 - real structural pain for this team, not textbook purity."};function iu(t,e,n,r={}){let s=e.map(u=>`### Pack: ${u.name}
355
355
 
356
356
  ${u.content}`).join(`
357
357
 
@@ -390,7 +390,7 @@ Explore the repository first - entry points, routes, storage, tests - then audit
390
390
  "evidence": [{"file": "<repo-relative path>", "line": <number, omit if n/a>, "note": "<what is there>"}],
391
391
  "fix": "<2-4 sentences: concrete fix, specific to this code>"}]}
392
392
  \`\`\`
393
- Rules: every finding needs at least one evidence file you actually read - 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.`+c}function ou(t){let n=t.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??t.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!n)return{error:"the agent's report contained no JSON block"};let r;try{r=JSON.parse(n)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(r.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let l of r.findings.slice(0,25)){let c=Mg(l),u=c?Ri.AuditFinding.safeParse(c):null;if(!u?.success){i++;continue}let f=u.data.id;for(;o.has(f);)f=`${f}-2`;o.add(f),s.push({...u.data,id:f})}return{summary:typeof r.summary=="string"?r.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function Mg(t){if(typeof t!="object"||t===null)return null;let e=t,n=typeof e.severity=="string"?e.severity.toLowerCase():"",r=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...su(i.line)?{line:su(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:zg(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:Ri.AuditSeverity.options.includes(n)?n:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:r,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function su(t){let e=typeof t=="number"?t:typeof t=="string"?parseInt(t,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function zg(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}function Dg(t){try{let e=ha.default.readFileSync(t,"utf8");return e?e.split(`
393
+ Rules: every finding needs at least one evidence file you actually read - 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.`+c}function ou(t){let n=t.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??t.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!n)return{error:"the agent's report contained no JSON block"};let r;try{r=JSON.parse(n)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(r.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let l of r.findings.slice(0,25)){let c=Mg(l),u=c?Ei.AuditFinding.safeParse(c):null;if(!u?.success){i++;continue}let f=u.data.id;for(;o.has(f);)f=`${f}-2`;o.add(f),s.push({...u.data,id:f})}return{summary:typeof r.summary=="string"?r.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function Mg(t){if(typeof t!="object"||t===null)return null;let e=t,n=typeof e.severity=="string"?e.severity.toLowerCase():"",r=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...su(i.line)?{line:su(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:zg(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:Ei.AuditSeverity.options.includes(n)?n:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:r,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function su(t){let e=typeof t=="number"?t:typeof t=="string"?parseInt(t,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function zg(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}function Dg(t){try{let e=ha.default.readFileSync(t,"utf8");return e?e.split(`
394
394
  `).length:0}catch{return null}}function au(t,e){let n=Ii.default.resolve(t),r=[],s=[],i=0;for(let o of e){let l=[];for(let c of o.evidence){let u=c.file.trim().replace(/^\.\//,""),f=Ii.default.resolve(n,u);if(f!==n&&!f.startsWith(n+Ii.default.sep))continue;let p;try{p=ha.default.statSync(f)}catch{continue}if(p.isFile()){if(c.line!==void 0){let b=Dg(f);if(b!==null&&c.line>b){l.push({...c,line:void 0}),i++;continue}}l.push(c)}}if(!l.length){s.push({title:o.title,files:o.evidence.map(c=>c.file)});continue}r.push({...o,evidence:l})}return{findings:r,droppedFindings:s,correctedLines:i}}var Cs=I(require("node:fs"),1),fa=I(require("node:path"),1),lu=I(_e(),1);var Lg=20;function cu(){return fa.default.join(se(),"audits.json")}function Vr(){try{return{byProject:JSON.parse(Cs.default.readFileSync(cu(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function uu(t){let e=cu();Cs.default.mkdirSync(fa.default.dirname(e),{recursive:!0,mode:448});let n=e+".tmp";Cs.default.writeFileSync(n,JSON.stringify(t,null,2),{mode:384}),Cs.default.renameSync(n,e)}function du(t,e){let n=Vr(),r=n.byProject[t]??[];r.unshift(lu.AuditRecord.parse(e)),n.byProject[t]=r.slice(0,Lg),uu(n)}function hu(t){return(Vr().byProject[t]??[]).map(e=>{let n={};for(let r of e.findings)n[r.severity]=(n[r.severity]??0)+1;return{id:e.id,role:e.role,createdAt:e.createdAt,findingCount:e.findings.length,bySeverity:n,detailLevel:e.detailLevel??"technical"}})}function fu(t,e){let n=Vr(),r=e?Date.parse(e):NaN,s={};for(let i of t){let o=(n.byProject[i]??[]).filter(c=>!Number.isFinite(r)||Date.parse(c.createdAt)>=r);if(!o.length)continue;let l={audits:o.length,findings:0,valid:0,falsePositive:0,wontFix:0,unreviewed:0};for(let c of o){l.findings+=c.findings.length;for(let u of c.findings){let f=c.verdicts[u.id]?.verdict;f==="valid"?l.valid++:f==="false-positive"?l.falsePositive++:f==="wont-fix"?l.wontFix++:l.unreviewed++}}s[i]=l}return s}function pa(t,e,n){let r=Vr(),i=(r.byProject[t]??[]).find(l=>l.id===e);if(!i)return null;i.ticketed??={},i.verdicts??={},i.lessonsWritten??=[];let o=new Set(i.findings.map(l=>l.id));n.selected&&(i.review={selected:n.selected.filter(l=>o.has(l)),updatedAt:new Date().toISOString()});for(let l of n.ticketed??[])o.has(l.findingId)&&(i.ticketed={...i.ticketed,[l.findingId]:l.issueKey});for(let l of n.verdicts??[])o.has(l.findingId)&&(i.verdicts={...i.verdicts,[l.findingId]:{verdict:l.verdict,note:l.note,by:n.verdictBy??"",at:new Date().toISOString()}});for(let l of n.markLessonsWritten??[])o.has(l)&&!i.lessonsWritten.includes(l)&&i.lessonsWritten.push(l);return uu(r),i}function pu(t,e){return(Vr().byProject[t]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function mu(t,e){return(Vr().byProject[t]??[]).find(n=>n.id===e)??null}wt();var je=I(require("node:fs"),1),kt=I(require("node:path"),1),vu=I(_e(),1);var Ut=I(require("node:fs"),1),ma=I(require("node:path"),1),Ug=25e4,qg=2e5,gu=`# Incident ledger
395
395
 
396
396
  Machine-written facts about this repository's runs: what failed, what
@@ -559,7 +559,7 @@ deviations.
559
559
 
560
560
  Summarize with an overall verdict: is this repository HEALTHY for its
561
561
  purpose, and what are the 2-3 structural moves with the best payoff?
562
- `,bu={security:[{name:"baseline.md",content:Bg},{name:"gdpr.md",content:Hg}],testing:[{name:"test-gaps.md",content:Kg}],architecture:[{name:"architecture-health.md",content:Zg}],implement:[]},Gg=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function ya(t){return kt.default.join(se(),"knowledge",t)}function wu(t,e){return kt.default.join(t,".ticketpilot","knowledge",`${e}.md`)}function ba(t,e){return kt.default.join(t,".ticketpilot","lessons",`${e}.md`)}function _u(t,e){let n=[],r=ya(t),s=[];if(je.default.existsSync(r)){for(let c of je.default.readdirSync(r)){if(!c.endsWith(".md"))continue;let u=kt.default.join(r,c),f=je.default.readFileSync(u,"utf8");if(Gg.some(p=>f.includes(p))&&bu[t].map(b=>b.name).includes(c)&&!f.includes("SEC-0")&&!f.includes("TEST-0")&&!f.includes("GDPR-0")){je.default.rmSync(u);continue}s.push(c)}s.sort()}let i=new Set(s);for(let c of bu[t])i.has(c.name)||n.push({level:"global",source:"pack",name:c.name,content:c.content,editable:!1});for(let c of s)n.push({level:"org",source:"pack",name:c,content:je.default.readFileSync(kt.default.join(r,c),"utf8").slice(0,3e4),editable:!0});let o=wu(e,t);je.default.existsSync(o)&&n.push({level:"project",source:"pack",name:`${t}.md`,content:je.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let l=ba(e,t);return je.default.existsSync(l)&&n.push({level:"project",source:"lessons",name:`${t}.md`,content:je.default.readFileSync(l,"utf8").slice(0,2e4),editable:!0}),n}function Ei(t,e){let n=_u(t,e);return{packs:n.filter(r=>r.source==="pack").map(r=>({name:`${r.level}/${r.name}`,content:r.content})),lessons:n.find(r=>r.source==="lessons")?.content??"",layers:n}}function va(t,e,n,r="project"){let s=r==="org"?kt.default.join(ya(e),"org-lessons.md"):ba(t,e);je.default.mkdirSync(kt.default.dirname(s),{recursive:!0});let i=je.default.existsSync(s)?"":`# ${e} lessons (${r} level)
562
+ `,bu={security:[{name:"baseline.md",content:Bg},{name:"gdpr.md",content:Hg}],testing:[{name:"test-gaps.md",content:Kg}],architecture:[{name:"architecture-health.md",content:Zg}],implement:[]},Gg=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function ya(t){return kt.default.join(se(),"knowledge",t)}function wu(t,e){return kt.default.join(t,".ticketpilot","knowledge",`${e}.md`)}function ba(t,e){return kt.default.join(t,".ticketpilot","lessons",`${e}.md`)}function _u(t,e){let n=[],r=ya(t),s=[];if(je.default.existsSync(r)){for(let c of je.default.readdirSync(r)){if(!c.endsWith(".md"))continue;let u=kt.default.join(r,c),f=je.default.readFileSync(u,"utf8");if(Gg.some(p=>f.includes(p))&&bu[t].map(b=>b.name).includes(c)&&!f.includes("SEC-0")&&!f.includes("TEST-0")&&!f.includes("GDPR-0")){je.default.rmSync(u);continue}s.push(c)}s.sort()}let i=new Set(s);for(let c of bu[t])i.has(c.name)||n.push({level:"global",source:"pack",name:c.name,content:c.content,editable:!1});for(let c of s)n.push({level:"org",source:"pack",name:c,content:je.default.readFileSync(kt.default.join(r,c),"utf8").slice(0,3e4),editable:!0});let o=wu(e,t);je.default.existsSync(o)&&n.push({level:"project",source:"pack",name:`${t}.md`,content:je.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let l=ba(e,t);return je.default.existsSync(l)&&n.push({level:"project",source:"lessons",name:`${t}.md`,content:je.default.readFileSync(l,"utf8").slice(0,2e4),editable:!0}),n}function Ai(t,e){let n=_u(t,e);return{packs:n.filter(r=>r.source==="pack").map(r=>({name:`${r.level}/${r.name}`,content:r.content})),lessons:n.find(r=>r.source==="lessons")?.content??"",layers:n}}function va(t,e,n,r="project"){let s=r==="org"?kt.default.join(ya(e),"org-lessons.md"):ba(t,e);je.default.mkdirSync(kt.default.dirname(s),{recursive:!0});let i=je.default.existsSync(s)?"":`# ${e} lessons (${r} level)
563
563
 
564
564
  Human-confirmed corrections and rules. `+(e==="implement"?`Every implement run on this repo reads this BEFORE starting work.
565
565
 
@@ -570,15 +570,15 @@ Human-confirmed corrections and rules. `+(e==="implement"?`Every implement run o
570
570
  `)}function ku(t,e,n,r){let s=new Date().toISOString().slice(0,10),i=t.evidence[0]?` (${t.evidence[0].file}${t.evidence[0].line?`:${t.evidence[0].line}`:""})`:"",o=t.ruleId?` \xB7 rule ${t.ruleId}`:"";return`## ${s} \xB7 ${e}${o} \xB7 ${t.title}${i}
571
571
  Finding \`${t.id}\` [${t.severity}] was marked **${e}**`+(r?` by ${r}`:"")+`.${n?` Reason: ${n}`:""}
572
572
  `+(e==="false-positive"?"Do not raise this class of finding here again unless the code meaningfully changes.":"Known and accepted - do not re-raise; mention only if its risk materially grows.")}function Su(t,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
573
- ${t.trim()}`}function Tu(t){let e=[];for(let r of vu.KnowledgeRole.options)for(let s of _u(r,t))e.push({role:r,...s});let n=yu(t);return n&&e.push({role:"implement",level:"project",source:"memory",name:"incidents.md",content:n.slice(-3e4),editable:!1}),e}function xu(t,e,n,r,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=n==="org"?kt.default.join(ya(e),s):r==="lessons"?ba(t,e):wu(t,e);je.default.mkdirSync(kt.default.dirname(o),{recursive:!0}),je.default.writeFileSync(o,i,{mode:n==="org"?384:420})}var wa=()=>new Date().toISOString(),y={info:t=>console.log(`${wa()} [info] ${t}`),warn:t=>console.warn(`${wa()} [warn] ${t}`),error:t=>console.error(`${wa()} [error] ${t}`)};var Cu=require("node:child_process"),Iu=I(require("node:fs"),1),Ru=I(require("node:path"),1);function Wr(t){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let n=Ru.default.join(t,e);if(Iu.default.existsSync(n))return n}return null}function Jr(t){let e=[];for(let n of t.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let r of n[1].split(`
573
+ ${t.trim()}`}function Tu(t){let e=[];for(let r of vu.KnowledgeRole.options)for(let s of _u(r,t))e.push({role:r,...s});let n=yu(t);return n&&e.push({role:"implement",level:"project",source:"memory",name:"incidents.md",content:n.slice(-3e4),editable:!1}),e}function xu(t,e,n,r,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=n==="org"?kt.default.join(ya(e),s):r==="lessons"?ba(t,e):wu(t,e);je.default.mkdirSync(kt.default.dirname(o),{recursive:!0}),je.default.writeFileSync(o,i,{mode:n==="org"?384:420})}var wa=()=>new Date().toISOString(),y={info:t=>console.log(`${wa()} [info] ${t}`),warn:t=>console.warn(`${wa()} [warn] ${t}`),error:t=>console.error(`${wa()} [error] ${t}`)};var Cu=require("node:child_process"),Iu=I(require("node:fs"),1),Eu=I(require("node:path"),1);function Wr(t){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let n=Eu.default.join(t,e);if(Iu.default.existsSync(n))return n}return null}function Jr(t){let e=[];for(let n of t.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let r of n[1].split(`
574
574
  `)){let s=r.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function sr(t,e,n={}){let r=[],s=n.perCommandTimeoutMs??6e5;for(let i of e){n.onProgress?.(`running: ${i}`);let o=Date.now(),l=await new Promise(c=>{let u=(0,Cu.spawn)("bash",["-lc",i],{cwd:t,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),f="",p=w=>{f+=w.toString(),f.length>2e5&&(f=f.slice(-1e5))};u.stdout.on("data",p),u.stderr.on("data",p);let b=setTimeout(()=>{u.kill("SIGKILL"),f+=`
575
- [killed: timed out]`},s);u.on("close",w=>{clearTimeout(b),c({command:i,exitCode:w??-1,durationMs:Date.now()-o,tail:f.slice(-4e3)})}),u.on("error",w=>{clearTimeout(b),c({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(w)})})});n.onProgress?.(`exit ${l.exitCode} in ${Math.round(l.durationMs/1e3)}s: ${i}`),r.push(l)}return r}async function Yr(t){let{packs:e,lessons:n}=Ei(t.role,t.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${t.role} role - add markdown files under ~/.config/ticketpilot/knowledge/${t.role}/ on the runner`};let r="";if(t.scope.kind==="ticket"&&t.scope.ref){let b=t.scope.ref,w="";try{let x=await t.jira.getIssue(b);w=`Ticket ${b}: ${x.summary}
575
+ [killed: timed out]`},s);u.on("close",w=>{clearTimeout(b),c({command:i,exitCode:w??-1,durationMs:Date.now()-o,tail:f.slice(-4e3)})}),u.on("error",w=>{clearTimeout(b),c({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(w)})})});n.onProgress?.(`exit ${l.exitCode} in ${Math.round(l.durationMs/1e3)}s: ${i}`),r.push(l)}return r}async function Yr(t){let{packs:e,lessons:n}=Ai(t.role,t.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${t.role} role - add markdown files under ~/.config/ticketpilot/knowledge/${t.role}/ on the runner`};let r="";if(t.scope.kind==="ticket"&&t.scope.ref){let b=t.scope.ref,w="";try{let x=await t.jira.getIssue(b);w=`Ticket ${b}: ${x.summary}
576
576
 
577
- ${x.description}`.slice(0,4e3)}catch{w=`Ticket ${b} (could not fetch its text from Jira).`}let S=await Xo(t.repoPath,b).catch(()=>null);if(S){let{base:x,stat:A,diff:j}=await Ti(t.repoPath,S).catch(()=>({base:"",stat:"",diff:""}));r=`${w}
577
+ ${x.description}`.slice(0,4e3)}catch{w=`Ticket ${b} (could not fetch its text from Jira).`}let S=await Xo(t.repoPath,b).catch(()=>null);if(S){let{base:x,stat:R,diff:j}=await Ti(t.repoPath,S).catch(()=>({base:"",stat:"",diff:""}));r=`${w}
578
578
 
579
579
  Its implementation branch \`${S}\` vs \`${x}\`:
580
580
  \`\`\`
581
- ${A}\`\`\`
581
+ ${R}\`\`\`
582
582
  \`\`\`diff
583
583
  ${j}
584
584
  \`\`\``}else r=`${w}
@@ -588,20 +588,20 @@ No implementation branch found for ${b} - audit the parts of the codebase this t
588
588
  ${w}\`\`\`
589
589
  \`\`\`diff
590
590
  ${S}
591
- \`\`\``}let s,i;if(t.role==="testing"){let b=Wr(t.repoPath),w=b?Jr(Eu.default.readFileSync(b,"utf8")):[];w.length&&(y.info(`Audit (testing): executing ${w.length} TEST.md command(s)`),i=await sr(t.repoPath,w,{onProgress:S=>y.info(`[test-run] ${S}`)}),s=i.map(S=>`$ ${S.command}
591
+ \`\`\``}let s,i;if(t.role==="testing"){let b=Wr(t.repoPath),w=b?Jr(Au.default.readFileSync(b,"utf8")):[];w.length&&(y.info(`Audit (testing): executing ${w.length} TEST.md command(s)`),i=await sr(t.repoPath,w,{onProgress:S=>y.info(`[test-run] ${S}`)}),s=i.map(S=>`$ ${S.command}
592
592
  (exit ${S.exitCode}, ${Math.round(S.durationMs/1e3)}s)
593
593
  ${S.tail.slice(-2e3)}`).join(`
594
594
 
595
595
  ---
596
596
 
597
- `))}let o=t.model||t.agent.adapter.deepModel,l=t.detailLevel??"technical",c=await t.agent.adapter.run({repoPath:t.repoPath,prompt:iu(t.role,e,n,{scopeNote:r,testResults:s,detailLevel:l}),timeoutSeconds:480,bin:t.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,_a.randomUUID)(),model:o,onLog:(b,w)=>{b==="agent"&&y.info(`[audit:${t.role}] ${w.slice(0,160)}`)}}),u=ou(c.resultText);if("error"in u)return{ok:!1,error:u.error};let f=au(t.repoPath,u.findings);for(let b of f.droppedFindings)y.warn(`[audit:${t.role}] dropped "${b.title}" - cited files do not exist: `+b.files.join(", "));let p={id:(0,_a.randomUUID)(),role:t.role,createdAt:new Date().toISOString(),model:c.model||o,summary:u.summary,packNames:e.map(b=>b.name),findings:f.findings,costUsd:c.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:t.scope,detailLevel:l,...i?{testRun:i}:{}};return du(t.projectId,p),y.info(`Audit (${t.role}${t.scope.kind!=="repo"?` \xB7 ${t.scope.kind}:${t.scope.ref}`:""}) done: ${f.findings.length} finding(s)`+(u.dropped?`, ${u.dropped} malformed`:"")+(f.droppedFindings.length?`, ${f.droppedFindings.length} dropped for citing files that do not exist`:"")+(f.correctedLines?`, ${f.correctedLines} bad line number(s) stripped`:"")),{ok:!0,audit:p}}var hn=I(_e(),1);var ja=I(require("node:fs"),1),Di=I(require("node:path"),1),Li=require("node:crypto"),we=I(_e(),1);var ir=I(_e(),1);var ka=I(require("node:fs"),1),Au=I(require("node:os"),1),$i=I(require("node:path"),1),$u=require("node:child_process"),Pu=I(require("node:readline"),1),ju=I(_e(),1);function Ai(t){return`
597
+ `))}let o=t.model||t.agent.adapter.deepModel,l=t.detailLevel??"technical",c=await t.agent.adapter.run({repoPath:t.repoPath,prompt:iu(t.role,e,n,{scopeNote:r,testResults:s,detailLevel:l}),timeoutSeconds:480,bin:t.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,_a.randomUUID)(),model:o,onLog:(b,w)=>{b==="agent"&&y.info(`[audit:${t.role}] ${w.slice(0,160)}`)}}),u=ou(c.resultText);if("error"in u)return{ok:!1,error:u.error};let f=au(t.repoPath,u.findings);for(let b of f.droppedFindings)y.warn(`[audit:${t.role}] dropped "${b.title}" - cited files do not exist: `+b.files.join(", "));let p={id:(0,_a.randomUUID)(),role:t.role,createdAt:new Date().toISOString(),model:c.model||o,summary:u.summary,packNames:e.map(b=>b.name),findings:f.findings,costUsd:c.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:t.scope,detailLevel:l,...i?{testRun:i}:{}};return du(t.projectId,p),y.info(`Audit (${t.role}${t.scope.kind!=="repo"?` \xB7 ${t.scope.kind}:${t.scope.ref}`:""}) done: ${f.findings.length} finding(s)`+(u.dropped?`, ${u.dropped} malformed`:"")+(f.droppedFindings.length?`, ${f.droppedFindings.length} dropped for citing files that do not exist`:"")+(f.correctedLines?`, ${f.correctedLines} bad line number(s) stripped`:"")),{ok:!0,audit:p}}var hn=I(_e(),1);var ja=I(require("node:fs"),1),Di=I(require("node:path"),1),Li=require("node:crypto"),we=I(_e(),1);var ir=I(_e(),1);var ka=I(require("node:fs"),1),Ru=I(require("node:os"),1),$i=I(require("node:path"),1),$u=require("node:child_process"),Pu=I(require("node:readline"),1),ju=I(_e(),1);function Ri(t){return`
598
598
 
599
599
  YOUR CAPABILITIES IN THIS RUN - state them accurately, never guess:
600
600
  - You CANNOT run shell commands, install anything, restart services, touch a database, or reach any machine. There is no shell tool here and asking for permission will not create one.
601
601
  `+(t==="edit_no_shell"?`- You CAN read files and CREATE or EDIT files inside this working directory.
602
602
  `:`- You can ONLY read: Read, Glob and Grep inside this working directory. You cannot create or change a single file.
603
- `)+'NEVER offer to do something outside this list, and never ask "shall I do X?" when X is outside it - offering it and then failing costs the person a whole turn and their trust. Say plainly what you cannot do here, then name the route that CAN do it (a ticket, an implement run, or a command for a human to run).'}var Vg=4e3,Wg={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Jg(t){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=t??$i.default.join(Au.default.homedir(),".claude");try{if(ka.default.existsSync($i.default.join(e,".credentials.json"))||ka.default.existsSync($i.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Yg(t){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Wg[t.mode].join(","),"--max-turns",String(t.maxTurns??60),...t.model?["--model",t.model]:[],...t.resume?["--resume",t.sessionId]:["--session-id",t.sessionId]],n=Jg(t.configDir);return n!=="unknown"&&t.onLog("info",n==="subscription"?"Billing: Claude subscription - costs shown are notional list prices, not money charged":"Billing: Anthropic API key - costs shown are actual metered spend"),new Promise(r=>{let s=(0,$u.spawn)(t.bin,e,{cwd:t.repoPath,env:t.configDir?{...process.env,CLAUDE_CONFIG_DIR:t.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,billingMode:n==="subscription"?"subscription":n==="API key"?"api":"unknown"},o=0,l=0,c=0,u=0,f=0,p=()=>{if(!t.onUsage)return;let v=Date.now();v-f<Vg||(f=v,t.onUsage({inputTokens:l,outputTokens:c,cacheReadTokens:u,turns:o}))},b=!1,w=()=>{b||(b=!0,clearTimeout(x),t.signal?.removeEventListener("abort",S),r(i))},S=()=>{i.cancelled=!0,i.error="stopped from the dashboard",t.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),3e3).unref()};t.signal?.addEventListener("abort",S,{once:!0});let x=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${t.timeoutSeconds}s wall-clock limit`,t.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},t.timeoutSeconds*1e3);s.stdin.write(t.prompt+Ai(t.mode)),s.stdin.end(),Pu.default.createInterface({input:s.stdout}).on("line",v=>{if(!v.trim())return;let O;try{O=JSON.parse(v)}catch{t.onLog("agent",v.slice(0,1e3));return}if(O.type==="system"&&O.subtype==="init")i.model=typeof O.model=="string"?O.model:void 0,t.onLog("info",`Claude Code session started (model: ${O.model??"default"})`);else if(O.type==="assistant"){o+=1;let H=O.message?.usage;H&&(l+=Number(H.input_tokens??0)+Number(H.cache_creation_input_tokens??0),c+=Number(H.output_tokens??0),u+=Number(H.cache_read_input_tokens??0),p());for(let z of O.message?.content??[])if(z.type==="text"&&z.text?.trim())t.onLog("agent",z.text.trim().slice(0,4e3));else if(z.type==="tool_use"){let B=z.input??{},d=["file_path","path","pattern","command","description","url"].map(g=>typeof B[g]=="string"?`${g}=${B[g]}`:null).filter(Boolean).join(" "),m=JSON.stringify(B).slice(0,400);t.onLog("info",`tool ${z.name} ${d?`${d} `:""}${m}`)}}else O.type==="result"&&(i.costUsd=Number(O.total_cost_usd??0),i.inputTokens=Number(O.usage?.input_tokens??0)+Number(O.usage?.cache_creation_input_tokens??0),i.outputTokens=Number(O.usage?.output_tokens??0),l=Math.max(i.inputTokens,l),c=Math.max(i.outputTokens,c),i.inputTokens=l,i.outputTokens=c,u=Number(O.usage?.cache_read_input_tokens??u),i.cacheReadTokens=u,t.onUsage&&(t.onUsage({inputTokens:l,outputTokens:c,cacheReadTokens:u,costUsd:i.costUsd,turns:o}),f=Date.now()),O.subtype==="success"&&!O.is_error?(i.ok=!0,i.resultText=String(O.result??"")):O.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${t.maxTurns??60}-turn limit before finishing`):(i.error=String(O.result??O.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 - the run will work again once the limit window resets. Original error: ${i.error.slice(0,400)}`)))});let j="";s.stderr.on("data",v=>{j=(j+v.toString()).slice(-2e3)}),s.on("error",v=>{i.error=`failed to start ${t.bin}: ${v.message}`,t.onLog("error",i.error),w()}),s.on("close",v=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${v}${j?`: ${j.slice(-500)}`:""}`),w()})})}var Pi={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:ju.REGISTERED_AGENTS.find(t=>t.id==="claude-code").capabilities,run:Yg};var Ou=require("node:child_process"),Nu=I(require("node:readline"),1),Mu=I(_e(),1);async function Xg(t){if(t.mode!=="read_only")return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,error:"the codex adapter only supports read-only runs - its write sandbox cannot exclude shell, and Allwright never weakens a guarantee silently"};if(t.resume)return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,error:"the codex adapter cannot resume sessions"};let e=["exec","--json","--sandbox","read-only","--skip-git-repo-check","--cd",t.repoPath,...t.model?["--model",t.model]:[],"-"];return new Promise(n=>{let r=(0,Ou.spawn)(t.bin,e,{cwd:t.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0},i="",o=!1,l=()=>{o||(o=!0,clearTimeout(c),n(s))},c=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${t.timeoutSeconds}s wall-clock limit`,t.onLog("error",s.error),r.kill("SIGTERM"),setTimeout(()=>r.kill("SIGKILL"),5e3).unref()},t.timeoutSeconds*1e3);r.stdin.write(t.prompt+Ai(t.mode)),r.stdin.end(),Nu.default.createInterface({input:r.stdout}).on("line",p=>{if(!p.trim())return;let b;try{b=JSON.parse(p)}catch{t.onLog("agent",p.slice(0,1e3));return}let w=b.item??b.msg??b,S=w?.type??b.type,x=w?.text??w?.message??"";S==="agent_message"&&typeof x=="string"&&x.trim()?(i=x,t.onLog("agent",x.trim().slice(0,4e3))):S==="command_execution"||S==="exec_command_begin"?t.onLog("info",`tool ${String(w?.command??"").slice(0,300)}`):S==="error"&&typeof x=="string"&&x&&t.onLog("error",x.slice(0,1e3))});let f="";r.stderr.on("data",p=>{f=(f+p.toString()).slice(-2e3)}),r.on("error",p=>{s.error=`failed to start ${t.bin}: ${p.message} - is the Codex CLI installed and logged in?`,t.onLog("error",s.error),l()}),r.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")+(f?`: ${f.slice(-500)}`:"")),l()})})}var Sa={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:Mu.REGISTERED_AGENTS.find(t=>t.id==="codex").capabilities,run:Xg};var Qg={[Pi.id]:Pi,[Sa.id]:Sa};function Be(t){return Qg[t||ir.DEFAULT_AGENT_ID]??null}function Ue(t,e){return!e||e===Pi.id?t.claudeBin:t.agents[e]?.bin??e}function dn(t,e){let n=Be(t);if(!n)return`no agent adapter named "${t}" on this runner - update the runner, or set the rule's agent to "${ir.DEFAULT_AGENT_ID}"`;let r=(0,ir.missingAgentCapabilities)(n.id,e);return r&&r.length?`agent "${n.displayName}" cannot run ${e} rules: it cannot guarantee ${r.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function Ke(t,e,n){let r=e.defaultAgent||ir.DEFAULT_AGENT_ID,s=Be(r);if(!s)return{error:`this project's default agent "${r}" is not on this runner - update the runner, or change the project's agent`};let i=(0,ir.missingAgentCapabilities)(s.id,n);return i&&i.length?{error:`this project's default agent "${s.displayName}" cannot power this - it lacks ${i.join(", ")}. Change the project's agent, or use one that can.`}:{adapter:s,bin:Ue(t,s.id)}}function qt(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>r in e?e[r]:n)}var Gu=I(_e(),1);ct();nr();wt();var Oe=I(require("node:fs"),1),Xr=I(require("node:path"),1);var ty=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),branch:_.string(),headSha:_.string(),doneLabel:_.string(),failedLabel:_.string(),jiraTransition:_.string().optional(),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),nextDecisionSeq:_.number().int().default(1e5),changesRequestedNotified:_.boolean().optional(),conflictNotified:_.boolean().optional(),agentConfigDir:_.string().optional()}),ny=_.record(ty),ry=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),projectId:_.string(),repoName:_.string(),environmentName:_.string(),requestedBy:_.string().default(""),createdAt:_.string()}),sy=_.record(ry),iy=_.object({runId:_.string(),issueKey:_.string(),kind:_.enum(["plan","implement"]),repoPath:_.string(),sessionId:_.string(),doneLabel:_.string(),failedLabel:_.string(),timeoutSeconds:_.number(),createdAt:_.string(),questionsPostedAt:_.string(),rounds:_.number().int().default(1),nextLogSeq:_.number().int().nonnegative().default(0),baseRepoPath:_.string().optional(),repoName:_.string().optional(),branch:_.string().optional(),baseBranch:_.string().optional(),jiraTransition:_.string().optional(),jiraTransitionOnMerge:_.string().optional(),requireApproval:_.boolean().optional(),maxTurns:_.number().int().optional(),runTests:_.boolean().default(!0),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),issueSummary:_.string().default(""),claudeConfigDir:_.string().optional(),agent:_.string().optional(),model:_.string().optional(),actorEmail:_.string().optional()}),oy=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),repoName:_.string(),baseRepoPath:_.string(),branch:_.string(),baseBranch:_.string(),headSha:_.string(),requireApproval:_.boolean(),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),doneLabel:_.string(),failedLabel:_.string(),jiraTransition:_.string().optional(),jiraTransitionOnMerge:_.string().optional(),actorEmail:_.string().optional(),resultSummary:_.string().default(""),prSummary:_.string().default(""),costUsd:_.number().default(0),nextLogSeq:_.number().int().default(1e5),createdAt:_.string()}),ay=_.record(oy),ly=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),jiraTransitionOnMerge:_.string().default(""),createdAt:_.string()}),cy=_.record(ly),uy=_.record(iy);function zu(){return Xr.default.join(se(),"pending-runs.json")}function Ta(){return Xr.default.join(se(),"pending-deploys.json")}function xa(){return Xr.default.join(se(),"pending-inputs.json")}function Ca(){return Xr.default.join(se(),"merge-watch.json")}function Ia(){return Xr.default.join(se(),"pending-pushes.json")}function Ra(){let t=Ia();if(!Oe.default.existsSync(t))return{};try{return ay.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function ji(t){let e=Ra();e[t.runId]=t,Ft(Ia(),e)}function Oi(t){return Ra()[t]??null}function Ea(t){let e=Ra();t in e&&(delete e[t],Ft(Ia(),e))}function Ni(){let t=Ca();if(!Oe.default.existsSync(t))return{};try{return cy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Du(t){let e=Ni();e[t.runId]=t,Ft(Ca(),e)}function Rs(t){let e=Ni();t in e&&(delete e[t],Ft(Ca(),e))}function Es(){let t=zu();if(!Oe.default.existsSync(t))return{};try{return ny.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Ft(t,e){Oe.default.mkdirSync(se(),{recursive:!0,mode:448});let n=t+".tmp";Oe.default.writeFileSync(n,JSON.stringify(e,null,2)+`
604
- `,{mode:384}),Oe.default.renameSync(n,t),Oe.default.chmodSync(t,384)}function Lu(t){Ft(zu(),t)}function ut(t){let e=Es();e[t.runId]=t,Lu(e)}function Qr(t){return Es()[t]??null}function ar(t){let e=Es();t in e&&(delete e[t],Lu(e))}function Aa(){let t=Ta();if(!Oe.default.existsSync(t))return{};try{return sy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Uu(t){let e=Aa();e[t.runId]=t,Ft(Ta(),e)}function Mi(t){return Aa()[t]??null}function zi(t){let e=Aa();t in e&&(delete e[t],Ft(Ta(),e))}function lr(){let t=xa();if(!Oe.default.existsSync(t))return{};try{return uy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function qu(t){let e=lr();e[t.runId]=t,Ft(xa(),e)}function Fu(t){return lr()[t]??null}function St(t){let e=lr();t in e&&(delete e[t],Ft(xa(),e))}var dy=`
603
+ `)+'NEVER offer to do something outside this list, and never ask "shall I do X?" when X is outside it - offering it and then failing costs the person a whole turn and their trust. Say plainly what you cannot do here, then name the route that CAN do it (a ticket, an implement run, or a command for a human to run).'}var Vg=4e3,Wg={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Jg(t){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=t??$i.default.join(Ru.default.homedir(),".claude");try{if(ka.default.existsSync($i.default.join(e,".credentials.json"))||ka.default.existsSync($i.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Yg(t){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Wg[t.mode].join(","),"--max-turns",String(t.maxTurns??60),...t.model?["--model",t.model]:[],...t.resume?["--resume",t.sessionId]:["--session-id",t.sessionId]],n=Jg(t.configDir);return n!=="unknown"&&t.onLog("info",n==="subscription"?"Billing: Claude subscription - costs shown are notional list prices, not money charged":"Billing: Anthropic API key - costs shown are actual metered spend"),new Promise(r=>{let s=(0,$u.spawn)(t.bin,e,{cwd:t.repoPath,env:t.configDir?{...process.env,CLAUDE_CONFIG_DIR:t.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,billingMode:n==="subscription"?"subscription":n==="API key"?"api":"unknown"},o=0,l=0,c=0,u=0,f=0,p=()=>{if(!t.onUsage)return;let v=Date.now();v-f<Vg||(f=v,t.onUsage({inputTokens:l,outputTokens:c,cacheReadTokens:u,turns:o}))},b=!1,w=()=>{b||(b=!0,clearTimeout(x),t.signal?.removeEventListener("abort",S),r(i))},S=()=>{i.cancelled=!0,i.error="stopped from the dashboard",t.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),3e3).unref()};t.signal?.addEventListener("abort",S,{once:!0});let x=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${t.timeoutSeconds}s wall-clock limit`,t.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},t.timeoutSeconds*1e3);s.stdin.write(t.prompt+Ri(t.mode)),s.stdin.end(),Pu.default.createInterface({input:s.stdout}).on("line",v=>{if(!v.trim())return;let O;try{O=JSON.parse(v)}catch{t.onLog("agent",v.slice(0,1e3));return}if(O.type==="system"&&O.subtype==="init")i.model=typeof O.model=="string"?O.model:void 0,t.onLog("info",`Claude Code session started (model: ${O.model??"default"})`);else if(O.type==="assistant"){o+=1;let Z=O.message?.usage;Z&&(l+=Number(Z.input_tokens??0)+Number(Z.cache_creation_input_tokens??0),c+=Number(Z.output_tokens??0),u+=Number(Z.cache_read_input_tokens??0),p());for(let z of O.message?.content??[])if(z.type==="text"&&z.text?.trim())t.onLog("agent",z.text.trim().slice(0,4e3));else if(z.type==="tool_use"){let K=z.input??{},d=["file_path","path","pattern","command","description","url"].map(g=>typeof K[g]=="string"?`${g}=${K[g]}`:null).filter(Boolean).join(" "),m=JSON.stringify(K).slice(0,400);t.onLog("info",`tool ${z.name} ${d?`${d} `:""}${m}`)}}else O.type==="result"&&(i.costUsd=Number(O.total_cost_usd??0),i.inputTokens=Number(O.usage?.input_tokens??0)+Number(O.usage?.cache_creation_input_tokens??0),i.outputTokens=Number(O.usage?.output_tokens??0),l=Math.max(i.inputTokens,l),c=Math.max(i.outputTokens,c),i.inputTokens=l,i.outputTokens=c,u=Number(O.usage?.cache_read_input_tokens??u),i.cacheReadTokens=u,t.onUsage&&(t.onUsage({inputTokens:l,outputTokens:c,cacheReadTokens:u,costUsd:i.costUsd,turns:o}),f=Date.now()),O.subtype==="success"&&!O.is_error?(i.ok=!0,i.resultText=String(O.result??"")):O.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${t.maxTurns??60}-turn limit before finishing`):(i.error=String(O.result??O.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 - the run will work again once the limit window resets. Original error: ${i.error.slice(0,400)}`)))});let j="";s.stderr.on("data",v=>{j=(j+v.toString()).slice(-2e3)}),s.on("error",v=>{i.error=`failed to start ${t.bin}: ${v.message}`,t.onLog("error",i.error),w()}),s.on("close",v=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${v}${j?`: ${j.slice(-500)}`:""}`),w()})})}var Pi={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:ju.REGISTERED_AGENTS.find(t=>t.id==="claude-code").capabilities,run:Yg};var Ou=require("node:child_process"),Nu=I(require("node:readline"),1),Mu=I(_e(),1);async function Xg(t){if(t.mode!=="read_only")return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,error:"the codex adapter only supports read-only runs - its write sandbox cannot exclude shell, and Allwright never weakens a guarantee silently"};if(t.resume)return{ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,error:"the codex adapter cannot resume sessions"};let e=["exec","--json","--sandbox","read-only","--skip-git-repo-check","--cd",t.repoPath,...t.model?["--model",t.model]:[],"-"];return new Promise(n=>{let r=(0,Ou.spawn)(t.bin,e,{cwd:t.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0},i="",o=!1,l=()=>{o||(o=!0,clearTimeout(c),n(s))},c=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${t.timeoutSeconds}s wall-clock limit`,t.onLog("error",s.error),r.kill("SIGTERM"),setTimeout(()=>r.kill("SIGKILL"),5e3).unref()},t.timeoutSeconds*1e3);r.stdin.write(t.prompt+Ri(t.mode)),r.stdin.end(),Nu.default.createInterface({input:r.stdout}).on("line",p=>{if(!p.trim())return;let b;try{b=JSON.parse(p)}catch{t.onLog("agent",p.slice(0,1e3));return}let w=b.item??b.msg??b,S=w?.type??b.type,x=w?.text??w?.message??"";S==="agent_message"&&typeof x=="string"&&x.trim()?(i=x,t.onLog("agent",x.trim().slice(0,4e3))):S==="command_execution"||S==="exec_command_begin"?t.onLog("info",`tool ${String(w?.command??"").slice(0,300)}`):S==="error"&&typeof x=="string"&&x&&t.onLog("error",x.slice(0,1e3))});let f="";r.stderr.on("data",p=>{f=(f+p.toString()).slice(-2e3)}),r.on("error",p=>{s.error=`failed to start ${t.bin}: ${p.message} - is the Codex CLI installed and logged in?`,t.onLog("error",s.error),l()}),r.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")+(f?`: ${f.slice(-500)}`:"")),l()})})}var Sa={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:Mu.REGISTERED_AGENTS.find(t=>t.id==="codex").capabilities,run:Xg};var Qg={[Pi.id]:Pi,[Sa.id]:Sa};function Be(t){return Qg[t||ir.DEFAULT_AGENT_ID]??null}function Ue(t,e){return!e||e===Pi.id?t.claudeBin:t.agents[e]?.bin??e}function dn(t,e){let n=Be(t);if(!n)return`no agent adapter named "${t}" on this runner - update the runner, or set the rule's agent to "${ir.DEFAULT_AGENT_ID}"`;let r=(0,ir.missingAgentCapabilities)(n.id,e);return r&&r.length?`agent "${n.displayName}" cannot run ${e} rules: it cannot guarantee ${r.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function Ke(t,e,n){let r=e.defaultAgent||ir.DEFAULT_AGENT_ID,s=Be(r);if(!s)return{error:`this project's default agent "${r}" is not on this runner - update the runner, or change the project's agent`};let i=(0,ir.missingAgentCapabilities)(s.id,n);return i&&i.length?{error:`this project's default agent "${s.displayName}" cannot power this - it lacks ${i.join(", ")}. Change the project's agent, or use one that can.`}:{adapter:s,bin:Ue(t,s.id)}}function qt(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>r in e?e[r]:n)}var Gu=I(_e(),1);ct();nr();wt();var Oe=I(require("node:fs"),1),Xr=I(require("node:path"),1);var ty=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),branch:_.string(),headSha:_.string(),doneLabel:_.string(),failedLabel:_.string(),jiraTransition:_.string().optional(),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),nextDecisionSeq:_.number().int().default(1e5),changesRequestedNotified:_.boolean().optional(),conflictNotified:_.boolean().optional(),agentConfigDir:_.string().optional()}),ny=_.record(ty),ry=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),projectId:_.string(),repoName:_.string(),environmentName:_.string(),requestedBy:_.string().default(""),createdAt:_.string()}),sy=_.record(ry),iy=_.object({runId:_.string(),issueKey:_.string(),kind:_.enum(["plan","implement"]),repoPath:_.string(),sessionId:_.string(),doneLabel:_.string(),failedLabel:_.string(),timeoutSeconds:_.number(),createdAt:_.string(),questionsPostedAt:_.string(),rounds:_.number().int().default(1),nextLogSeq:_.number().int().nonnegative().default(0),baseRepoPath:_.string().optional(),repoName:_.string().optional(),branch:_.string().optional(),baseBranch:_.string().optional(),jiraTransition:_.string().optional(),jiraTransitionOnMerge:_.string().optional(),requireApproval:_.boolean().optional(),maxTurns:_.number().int().optional(),runTests:_.boolean().default(!0),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),issueSummary:_.string().default(""),claudeConfigDir:_.string().optional(),agent:_.string().optional(),model:_.string().optional(),actorEmail:_.string().optional()}),oy=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),repoName:_.string(),baseRepoPath:_.string(),branch:_.string(),baseBranch:_.string(),headSha:_.string(),requireApproval:_.boolean(),mergeOnApprove:_.boolean().default(!1),mergeMethod:_.enum(["squash","merge","rebase"]).default("squash"),autoMerge:_.boolean().default(!1),doneLabel:_.string(),failedLabel:_.string(),jiraTransition:_.string().optional(),jiraTransitionOnMerge:_.string().optional(),actorEmail:_.string().optional(),resultSummary:_.string().default(""),prSummary:_.string().default(""),costUsd:_.number().default(0),nextLogSeq:_.number().int().default(1e5),createdAt:_.string()}),ay=_.record(oy),ly=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),jiraTransitionOnMerge:_.string().default(""),createdAt:_.string()}),cy=_.record(ly),uy=_.record(iy);function zu(){return Xr.default.join(se(),"pending-runs.json")}function Ta(){return Xr.default.join(se(),"pending-deploys.json")}function xa(){return Xr.default.join(se(),"pending-inputs.json")}function Ca(){return Xr.default.join(se(),"merge-watch.json")}function Ia(){return Xr.default.join(se(),"pending-pushes.json")}function Ea(){let t=Ia();if(!Oe.default.existsSync(t))return{};try{return ay.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function ji(t){let e=Ea();e[t.runId]=t,Ft(Ia(),e)}function Oi(t){return Ea()[t]??null}function Aa(t){let e=Ea();t in e&&(delete e[t],Ft(Ia(),e))}function Ni(){let t=Ca();if(!Oe.default.existsSync(t))return{};try{return cy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Du(t){let e=Ni();e[t.runId]=t,Ft(Ca(),e)}function Es(t){let e=Ni();t in e&&(delete e[t],Ft(Ca(),e))}function As(){let t=zu();if(!Oe.default.existsSync(t))return{};try{return ny.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Ft(t,e){Oe.default.mkdirSync(se(),{recursive:!0,mode:448});let n=t+".tmp";Oe.default.writeFileSync(n,JSON.stringify(e,null,2)+`
604
+ `,{mode:384}),Oe.default.renameSync(n,t),Oe.default.chmodSync(t,384)}function Lu(t){Ft(zu(),t)}function ut(t){let e=As();e[t.runId]=t,Lu(e)}function Qr(t){return As()[t]??null}function ar(t){let e=As();t in e&&(delete e[t],Lu(e))}function Ra(){let t=Ta();if(!Oe.default.existsSync(t))return{};try{return sy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function Uu(t){let e=Ra();e[t.runId]=t,Ft(Ta(),e)}function Mi(t){return Ra()[t]??null}function zi(t){let e=Ra();t in e&&(delete e[t],Ft(Ta(),e))}function lr(){let t=xa();if(!Oe.default.existsSync(t))return{};try{return uy.parse(JSON.parse(Oe.default.readFileSync(t,"utf8")))}catch{return{}}}function qu(t){let e=lr();e[t.runId]=t,Ft(xa(),e)}function Fu(t){return lr()[t]??null}function St(t){let e=lr();t in e&&(delete e[t],Ft(xa(),e))}var dy=`
605
605
 
606
606
  NEVER create or modify CI/workflow files (.github/workflows/, .githooks/ or similar CI config) - the runner refuses to push them, and the refusal costs the whole run. When the ticket needs something enforced on every change, use a path that is yours to edit instead: add the check as a command in TEST.md (this runner executes TEST.md commands after every implement run and posts the results into the PR), wire it into a script CI already runs (package.json test/build scripts, the test suite itself), or - only if it truly must be a workflow file - put the exact proposed YAML in your summary for a human to apply by hand.`,hy=`
607
607
 
@@ -619,7 +619,7 @@ Fix what these failures point at, with the smallest change that makes them pass.
619
619
  - If a failure is clearly pre-existing on the base branch and unrelated to your change, leave the code alone and say so in one sentence.
620
620
  - Do not ask questions; if you cannot fix something safely, say what you found and stop.
621
621
  - The runner re-runs every documented command after you finish, so a fix that breaks a previously passing command will be caught.
622
- End with one short paragraph stating exactly what you changed, or why you changed nothing. Then repeat your "## PR summary" section, updated if your fix changed what a reviewer sees.`}function my(t){try{let{packs:e,lessons:n}=Ei("implement",t),r="",s=e.map(o=>`### ${o.name}
622
+ End with one short paragraph stating exactly what you changed, or why you changed nothing. Then repeat your "## PR summary" section, updated if your fix changed what a reviewer sees.`}function my(t){try{let{packs:e,lessons:n}=Ai("implement",t),r="",s=e.map(o=>`### ${o.name}
623
623
  ${o.content}`).join(`
624
624
 
625
625
  `).trim();s&&(r+=`
@@ -631,7 +631,7 @@ This repository has working rules taught to Allwright - follow them:
631
631
  Lessons from earlier runs on this repository (human-confirmed - follow them BEFORE writing code, they exist because a run got this wrong once):
632
632
  `+o}return r}catch{return""}}function Oa(t){return ja.default.existsSync(Di.default.join(t,"DESIGN.md"))?`
633
633
 
634
- This repository has a DESIGN.md at its root: read it before doing any user-facing work (UI, copy, styling) and follow it. Where the ticket and DESIGN.md conflict, say so instead of silently picking one.`:""}var Vu=5,Ku=2,gy=8,Hu=2,yy="You stopped because the session hit its turn limit - 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 As(t,e,n,r){let s=Date.now(),i="";r&&(i=await r().catch(()=>""));let o=await t.run(e),l=0,c="",u=r?gy:Ku;for(;!o.ok&&o.turnLimitHit&&!o.cancelled&&t.capabilities.sessionResume;){if(l>=u){c=`resume cap (${u}) reached`;break}if(r&&l>=Ku){let p=await r().catch(()=>""),b=p!==""&&p!==i;if(i=p,!b){c="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*Hu*1e3){c=`wall-clock budget (${Hu}x the rule's timeout) exhausted`;break}}l++,n("info",`Turn limit hit mid-work - auto-resuming the same session (resume ${l}, cap ${u})`);let f=await t.run({...e,prompt:yy,resume:!0});f.costUsd+=o.costUsd,f.inputTokens+=o.inputTokens,f.outputTokens+=o.outputTokens,o=f}return!o.ok&&o.turnLimitHit&&t.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} - even after ${l} automatic same-session resume(s)${c?` (stopped: ${c})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}var Pa=new Map;function Wu(t){let e=Pa.get(t);return e?(e.abort(),!0):!1}async function ts(t,e,n,r,s){let i=new AbortController;Pa.set(t,i);try{return await As(e,{...n,signal:i.signal},r,s)}finally{Pa.delete(t)}}function cr(t,e,n=0){let r=n;return{emit:(l,c)=>{e.send({type:"run.log",runId:t,seq:r++,ts:new Date().toISOString(),level:l,message:c}),l!=="agent"&&y.info(`[run ${t}] ${c}`)},setStatus:(l,c={})=>{e.send({type:"run.status",runId:t,status:l,...c})},sendUsage:l=>{e.send({type:"run.usage",runId:t,inputTokens:Math.round(l.inputTokens),outputTokens:Math.round(l.outputTokens),cacheReadTokens:l.cacheReadTokens===void 0?void 0:Math.round(l.cacheReadTokens),costUsd:l.costUsd,turns:l.turns})},nextSeq:()=>r}}async function Ui(t){return t.rule.action.type==="implement"?wy(t):t.rule.action.type==="respond"?vy(t):by(t)}async function by(t){let{emit:e,setStatus:n,sendUsage:r,nextSeq:s}=cr(t.runId,t.transport),{trigger:i}=t.rule,o=t.rule.action;if(o.type!=="plan_only")return;let l=dn(o.agent,o.type);if(l){e("error",l),await es(t,l),n("failed",{error:l});return}let c=(0,Li.randomUUID)();try{n("running"),e("info",`Run started for ${t.issueKey} (rule "${t.rule.name}", plan-only)`),e("info",`Fetching ${t.issueKey} from Jira`);let u=await t.jira.getIssue(t.issueKey),f=qt(o.promptTemplate,{issueKey:u.key,summary:u.summary,description:u.description||"(no description)",comments:Ps(u.comments)})+await Mr(t.jira,u.attachments,t.repoPath,e)+Oa(t.repoPath)+we.NEEDS_INPUT_OPTIONS_PROMPT;e("info",`Starting Claude Code in ${t.repoPath} - read-only tools, path-jailed to the repo, timeout ${o.timeoutSeconds}s`);let p=await ts(t.runId,Be(o.agent),{repoPath:t.repoPath,prompt:f,timeoutSeconds:o.timeoutSeconds,bin:Ue(t.cfg,o.agent),configDir:t.claudeConfigDir,mode:"read_only",model:o.model||void 0,sessionId:c,onLog:(S,x)=>e(S,x),onUsage:r},e),b={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok||!p.resultText.trim()){let S=p.error??"Claude Code produced no output";e("error",`Run failed: ${S}`),await es(t,S),n(p.timedOut?"timed_out":"failed",{error:S,...p.cancelled?{errorKind:"guard"}:{},...b});return}let w=js(p.resultText);if(w){await qi({kind:"plan",runId:t.runId,issueKey:t.issueKey,repoPath:t.repoPath,sessionId:c,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:t.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:t.claudeConfigDir,agent:o.agent,model:o.model},w,e,n,b);return}await Ju({runId:t.runId,issueKey:t.issueKey,doneLabel:i.doneLabel,jira:t.jira,resultText:p.resultText,costFields:b,emit:e,setStatus:n})}catch(u){let f=u instanceof Error?u.message:String(u);e("error",`Run failed: ${f}`),await es(t,f),n("failed",{error:f})}finally{Qt(t.repoPath)}}async function Na(t,e,n,r){let{emit:s,setStatus:i,sendUsage:o,nextSeq:l}=cr(t.runId,r.transport,t.nextLogSeq);try{i("running"),s("info",`Reply received on ${t.issueKey} - continuing run \`${t.runId}\``);let c=od(e)+await Mr(r.jiraFor(t.repoName??""),n,t.repoPath,s),u=await ts(t.runId,Be(t.agent),{repoPath:t.repoPath,prompt:c,timeoutSeconds:t.timeoutSeconds,bin:Ue(r.cfg,t.agent??""),configDir:t.claudeConfigDir,mode:"read_only",model:t.model||void 0,sessionId:t.sessionId,resume:!0,onLog:(b,w)=>s(b,w),onUsage:o},s),f={costUsd:u.costUsd,inputTokens:u.inputTokens,outputTokens:u.outputTokens,billingMode:u.billingMode,model:u.model};if(!u.ok||!u.resultText.trim()){let b=u.error??"Claude Code produced no output";s("error",`Run failed: ${b}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,b),St(t.runId),i(u.timedOut?"timed_out":"failed",{error:b,...u.cancelled?{errorKind:"guard"}:{},...f});return}let p=js(u.resultText);if(p){if(t.rounds>=Vu){await ad(r.jiraFor(t.repoName??""),t,s,i,f);return}await qi({kind:"plan",runId:t.runId,issueKey:t.issueKey,repoPath:t.repoPath,sessionId:t.sessionId,doneLabel:t.doneLabel,failedLabel:t.failedLabel,timeoutSeconds:t.timeoutSeconds,jira:r.jiraFor(t.repoName??""),nextLogSeq:l(),rounds:t.rounds+1,createdAt:t.createdAt,claudeConfigDir:t.claudeConfigDir,actorEmail:t.actorEmail,agent:t.agent,model:t.model},p,s,i,f);return}await Ju({runId:t.runId,issueKey:t.issueKey,doneLabel:t.doneLabel,jira:r.jiraFor(t.repoName??""),resultText:u.resultText,costFields:f,emit:s,setStatus:i}),St(t.runId)}catch(c){let u=c instanceof Error?c.message:String(c);s("error",`Run failed: ${u}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,u),St(t.runId),i("failed",{error:u})}finally{Qt(t.repoPath)}}async function Ju(t){let{runId:e,issueKey:n,doneLabel:r,jira:s,resultText:i,costFields:o,emit:l,setStatus:c}=t;c("posting",o),l("info",`Posting plan to ${n} (${i.length} chars)`);let u=`
634
+ This repository has a DESIGN.md at its root: read it before doing any user-facing work (UI, copy, styling) and follow it. Where the ticket and DESIGN.md conflict, say so instead of silently picking one.`:""}var Vu=5,Ku=2,gy=8,Hu=2,yy="You stopped because the session hit its turn limit - 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 Rs(t,e,n,r){let s=Date.now(),i="";r&&(i=await r().catch(()=>""));let o=await t.run(e),l=0,c="",u=r?gy:Ku;for(;!o.ok&&o.turnLimitHit&&!o.cancelled&&t.capabilities.sessionResume;){if(l>=u){c=`resume cap (${u}) reached`;break}if(r&&l>=Ku){let p=await r().catch(()=>""),b=p!==""&&p!==i;if(i=p,!b){c="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*Hu*1e3){c=`wall-clock budget (${Hu}x the rule's timeout) exhausted`;break}}l++,n("info",`Turn limit hit mid-work - auto-resuming the same session (resume ${l}, cap ${u})`);let f=await t.run({...e,prompt:yy,resume:!0});f.costUsd+=o.costUsd,f.inputTokens+=o.inputTokens,f.outputTokens+=o.outputTokens,o=f}return!o.ok&&o.turnLimitHit&&t.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} - even after ${l} automatic same-session resume(s)${c?` (stopped: ${c})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}var Pa=new Map;function Wu(t){let e=Pa.get(t);return e?(e.abort(),!0):!1}async function ts(t,e,n,r,s){let i=new AbortController;Pa.set(t,i);try{return await Rs(e,{...n,signal:i.signal},r,s)}finally{Pa.delete(t)}}function cr(t,e,n=0){let r=n;return{emit:(l,c)=>{e.send({type:"run.log",runId:t,seq:r++,ts:new Date().toISOString(),level:l,message:c}),l!=="agent"&&y.info(`[run ${t}] ${c}`)},setStatus:(l,c={})=>{e.send({type:"run.status",runId:t,status:l,...c})},sendUsage:l=>{e.send({type:"run.usage",runId:t,inputTokens:Math.round(l.inputTokens),outputTokens:Math.round(l.outputTokens),cacheReadTokens:l.cacheReadTokens===void 0?void 0:Math.round(l.cacheReadTokens),costUsd:l.costUsd,turns:l.turns})},nextSeq:()=>r}}async function Ui(t){return t.rule.action.type==="implement"?wy(t):t.rule.action.type==="respond"?vy(t):by(t)}async function by(t){let{emit:e,setStatus:n,sendUsage:r,nextSeq:s}=cr(t.runId,t.transport),{trigger:i}=t.rule,o=t.rule.action;if(o.type!=="plan_only")return;let l=dn(o.agent,o.type);if(l){e("error",l),await es(t,l),n("failed",{error:l});return}let c=(0,Li.randomUUID)();try{n("running"),e("info",`Run started for ${t.issueKey} (rule "${t.rule.name}", plan-only)`),e("info",`Fetching ${t.issueKey} from Jira`);let u=await t.jira.getIssue(t.issueKey),f=qt(o.promptTemplate,{issueKey:u.key,summary:u.summary,description:u.description||"(no description)",comments:Ps(u.comments)})+await Mr(t.jira,u.attachments,t.repoPath,e)+Oa(t.repoPath)+we.NEEDS_INPUT_OPTIONS_PROMPT;e("info",`Starting Claude Code in ${t.repoPath} - read-only tools, path-jailed to the repo, timeout ${o.timeoutSeconds}s`);let p=await ts(t.runId,Be(o.agent),{repoPath:t.repoPath,prompt:f,timeoutSeconds:o.timeoutSeconds,bin:Ue(t.cfg,o.agent),configDir:t.claudeConfigDir,mode:"read_only",model:o.model||void 0,sessionId:c,onLog:(S,x)=>e(S,x),onUsage:r},e),b={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok||!p.resultText.trim()){let S=p.error??"Claude Code produced no output";e("error",`Run failed: ${S}`),await es(t,S),n(p.timedOut?"timed_out":"failed",{error:S,...p.cancelled?{errorKind:"guard"}:{},...b});return}let w=js(p.resultText);if(w){await qi({kind:"plan",runId:t.runId,issueKey:t.issueKey,repoPath:t.repoPath,sessionId:c,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:t.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:t.claudeConfigDir,agent:o.agent,model:o.model},w,e,n,b);return}await Ju({runId:t.runId,issueKey:t.issueKey,doneLabel:i.doneLabel,jira:t.jira,resultText:p.resultText,costFields:b,emit:e,setStatus:n})}catch(u){let f=u instanceof Error?u.message:String(u);e("error",`Run failed: ${f}`),await es(t,f),n("failed",{error:f})}finally{Qt(t.repoPath)}}async function Na(t,e,n,r){let{emit:s,setStatus:i,sendUsage:o,nextSeq:l}=cr(t.runId,r.transport,t.nextLogSeq);try{i("running"),s("info",`Reply received on ${t.issueKey} - continuing run \`${t.runId}\``);let c=od(e)+await Mr(r.jiraFor(t.repoName??""),n,t.repoPath,s),u=await ts(t.runId,Be(t.agent),{repoPath:t.repoPath,prompt:c,timeoutSeconds:t.timeoutSeconds,bin:Ue(r.cfg,t.agent??""),configDir:t.claudeConfigDir,mode:"read_only",model:t.model||void 0,sessionId:t.sessionId,resume:!0,onLog:(b,w)=>s(b,w),onUsage:o},s),f={costUsd:u.costUsd,inputTokens:u.inputTokens,outputTokens:u.outputTokens,billingMode:u.billingMode,model:u.model};if(!u.ok||!u.resultText.trim()){let b=u.error??"Claude Code produced no output";s("error",`Run failed: ${b}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,b),St(t.runId),i(u.timedOut?"timed_out":"failed",{error:b,...u.cancelled?{errorKind:"guard"}:{},...f});return}let p=js(u.resultText);if(p){if(t.rounds>=Vu){await ad(r.jiraFor(t.repoName??""),t,s,i,f);return}await qi({kind:"plan",runId:t.runId,issueKey:t.issueKey,repoPath:t.repoPath,sessionId:t.sessionId,doneLabel:t.doneLabel,failedLabel:t.failedLabel,timeoutSeconds:t.timeoutSeconds,jira:r.jiraFor(t.repoName??""),nextLogSeq:l(),rounds:t.rounds+1,createdAt:t.createdAt,claudeConfigDir:t.claudeConfigDir,actorEmail:t.actorEmail,agent:t.agent,model:t.model},p,s,i,f);return}await Ju({runId:t.runId,issueKey:t.issueKey,doneLabel:t.doneLabel,jira:r.jiraFor(t.repoName??""),resultText:u.resultText,costFields:f,emit:s,setStatus:i}),St(t.runId)}catch(c){let u=c instanceof Error?c.message:String(c);s("error",`Run failed: ${u}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,u),St(t.runId),i("failed",{error:u})}finally{Qt(t.repoPath)}}async function Ju(t){let{runId:e,issueKey:n,doneLabel:r,jira:s,resultText:i,costFields:o,emit:l,setStatus:c}=t;c("posting",o),l("info",`Posting plan to ${n} (${i.length} chars)`);let u=`
635
635
 
636
636
  ---
637
637
  _Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(n,i+u),await s.editLabels(n,{add:[r],remove:[we.NEEDS_INPUT_LABEL]}),l("info",`Labeled ${n} with "${r}"`),c("succeeded",{...o,resultSummary:ur(i)}),l("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function vy(t){let{emit:e,setStatus:n,sendUsage:r}=cr(t.runId,t.transport),s=t.rule.action;if(s.type!=="respond")return;let i=dn(s.agent,s.type);if(i){e("error",i),await t.jira.addComment(t.issueKey,`**Allwright could not answer this question.**
@@ -642,11 +642,11 @@ Error: ${f.slice(0,800)}
642
642
 
643
643
  Ask again in a new comment to retry. (run \`${t.runId}\`)`).catch(p=>y.error(`could not post answer failure to ${t.issueKey}: ${p}`)),n(c.timedOut?"timed_out":"failed",{error:f,...c.cancelled?{errorKind:"guard"}:{},...u});return}n("posting",u),e("info",`Posting answer to ${t.issueKey} (${c.resultText.length} chars)`),await t.jira.addComment(t.issueKey,c.resultText),n("succeeded",{...u,resultSummary:ur(c.resultText)}),e("info",`Run succeeded \xB7 $${c.costUsd.toFixed(4)}`)}catch(o){let l=o instanceof Error?o.message:String(o);e("error",`Run failed: ${l}`),n("failed",{error:l})}finally{Qt(t.repoPath)}}async function Yu(t,e,n,r){let s=`${e}-wip`;try{return Qt(t),await Qn(t,`WIP: turn limit exhausted (Allwright run ${n})`),await Go(t,s),r("info",`Partial work preserved on branch "${s}"`),s}catch(i){return r("warn",`could not preserve partial work: ${i instanceof Error?i.message:i}`),null}}function Xu(t){return`
644
644
 
645
- Partial work from this run is saved on branch \`${t}\` - 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 wy(t){let{emit:e,setStatus:n,sendUsage:r,nextSeq:s}=cr(t.runId,t.transport),{trigger:i}=t.rule,o=t.rule.action;if(o.type!=="implement")return;let l=dn(o.agent,o.type);if(l){e("error",l),await es(t,l),n("failed",{error:l});return}let c=Di.default.join(Lt(),t.runId),u=qt(o.branchTemplate,{issueKey:t.issueKey}),f=(0,Li.randomUUID)(),p=!1,b=!1;try{if(!Ci(ye()??t.cfg,t.project.repoName,t.actorEmail))throw new Error("no GitHub token applies to this repo - run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");if(u===o.baseBranch&&!t.continueBranch)throw new Error(`rendered branch "${u}" equals the base branch - refusing (check the rule's branch template)`);if(n("running"),e("info",`Run started for ${t.issueKey} (rule "${t.rule.name}", implement)`),o.jiraTransitionOnStart)try{await t.jira.transitionByName(t.issueKey,o.jiraTransitionOnStart)?e("info",`Jira transition "${o.jiraTransitionOnStart}" applied at run start`):e("warn",`no transition named "${o.jiraTransitionOnStart}" is available from this ticket's current status - continuing anyway`)}catch(H){e("warn",`Jira start transition failed: ${H instanceof Error?H.message:H} - continuing anyway`)}let w=await tr(t.repoPath);if(e("info",`Repo origin: ${w}`),!at(w))throw new Error(`origin "${w}" is not a GitHub remote - implement mode supports GitHub only`);e("info",`Fetching ${t.issueKey} from Jira`);let S=await t.jira.getIssue(t.issueKey),x=t.continueBranch?u:o.baseBranch;e("info",t.continueBranch?`Continuing branch "${u}" from origin/${u} (autopilot batch)`:`Preparing worktree on branch "${u}" from origin/${o.baseBranch}`),await ln(t.repoPath,x),await Wo(t.repoPath,u),await Jo(t.repoPath,c,u,x),p=!0;let A=qt(o.promptTemplate,{issueKey:S.key,summary:S.summary,description:S.description||"(no description)",comments:Ps(S.comments)})+await Mr(t.jira,S.attachments,c,e)+Oa(c)+my(t.repoPath)+dy+we.NEEDS_INPUT_OPTIONS_PROMPT+hy+(t.project.goLiveIssueKey?fy:"")+(o.writeTests?Gu.WRITE_TESTS_PROMPT:"")+(o.updateMemory?we.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree - edit tools enabled, path-jailed, no shell, timeout ${o.timeoutSeconds}s`);let j=await ts(t.runId,Be(o.agent),{repoPath:c,prompt:A,timeoutSeconds:o.timeoutSeconds,bin:Ue(t.cfg,o.agent),configDir:t.claudeConfigDir,mode:"edit_no_shell",model:o.model||void 0,maxTurns:o.maxTurns,sessionId:f,onLog:(H,z)=>e(H,z),onUsage:r},e,()=>ki(c)),v={costUsd:j.costUsd,inputTokens:j.inputTokens,outputTokens:j.outputTokens,billingMode:j.billingMode,model:j.model};if(!j.ok){let H=j.error??"Claude Code failed";e("error",`Run failed: ${H}`);let z=H;if(j.turnLimitHit){let B=await Yu(c,u,t.runId,e);B&&(z+=Xu(B))}lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:"implement failed",detail:H.slice(0,500)}),await es(t,z),n(j.timedOut?"timed_out":"failed",{error:H,...j.cancelled?{errorKind:"guard"}:{},...v});return}let O=js(j.resultText);if(O){b=!0,await qi({kind:"implement",runId:t.runId,issueKey:t.issueKey,repoPath:c,sessionId:f,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:t.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:t.claudeConfigDir,agent:o.agent,model:o.model,actorEmail:t.actorEmail,baseRepoPath:t.repoPath,repoName:t.project.repoName,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,autoMerge:o.autoMerge,runTests:o.runTests,maxTurns:o.maxTurns,issueSummary:S.summary},O,e,n,v);return}Qt(c),await Qu({runId:t.runId,issueKey:t.issueKey,issueSummary:S.summary,worktreePath:c,agentConfigDir:t.claudeConfigDir,baseRepoPath:t.repoPath,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,doneLabel:i.doneLabel,failedLabel:i.failedLabel,repoName:t.project.repoName,jira:t.jira,cfg:t.cfg,actorEmail:t.actorEmail,resultText:j.resultText,costFields:v,runTests:o.runTests,fixSession:{sessionId:f,agent:o.agent,model:o.model,timeoutSeconds:o.timeoutSeconds,maxTurns:o.maxTurns},sendUsage:r,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,autoMerge:o.autoMerge,emit:e,setStatus:n})}catch(w){let S=w instanceof Error?w.message:String(w);e("error",`Run failed: ${S}`),lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:"implement failed",detail:S.slice(0,500)}),await es(t,S),n("failed",{error:S})}finally{p&&!b&&await vt(t.repoPath,c).catch(()=>{})}}async function Ma(t,e,n,r){let{emit:s,setStatus:i,sendUsage:o,nextSeq:l}=cr(t.runId,r.transport,t.nextLogSeq),c=t.repoPath,u=!1;try{if(!Ci(ye()??r.cfg,t.repoName??"",t.actorEmail))throw new Error("no GitHub token applies to this repo - run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");i("running"),s("info",`Reply received on ${t.issueKey} - continuing run \`${t.runId}\``);let f=od(e)+await Mr(r.jiraFor(t.repoName??""),n,c,s),p=await ts(t.runId,Be(t.agent),{repoPath:c,prompt:f,timeoutSeconds:t.timeoutSeconds,bin:Ue(r.cfg,t.agent??""),configDir:t.claudeConfigDir,mode:"edit_no_shell",model:t.model||void 0,maxTurns:t.maxTurns??120,sessionId:t.sessionId,resume:!0,onLog:(S,x)=>s(S,x),onUsage:o},s,()=>ki(c)),b={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok){let S=p.error??"Claude Code failed";s("error",`Run failed: ${S}`);let x=S;if(p.turnLimitHit&&t.branch){let A=await Yu(c,t.branch,t.runId,s);A&&(x+=Xu(A))}await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,x),St(t.runId),i(p.timedOut?"timed_out":"failed",{error:S,...p.cancelled?{errorKind:"guard"}:{},...b});return}let w=js(p.resultText);if(w){if(t.rounds>=Vu){await ad(r.jiraFor(t.repoName??""),t,s,i,b);return}u=!0,await qi({kind:"implement",runId:t.runId,issueKey:t.issueKey,repoPath:c,sessionId:t.sessionId,doneLabel:t.doneLabel,failedLabel:t.failedLabel,timeoutSeconds:t.timeoutSeconds,jira:r.jiraFor(t.repoName??""),nextLogSeq:l(),rounds:t.rounds+1,createdAt:t.createdAt,claudeConfigDir:t.claudeConfigDir,actorEmail:t.actorEmail,agent:t.agent,model:t.model,baseRepoPath:t.baseRepoPath,repoName:t.repoName,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,mergeOnApprove:t.mergeOnApprove,mergeMethod:t.mergeMethod,autoMerge:t.autoMerge,runTests:t.runTests,maxTurns:t.maxTurns,issueSummary:t.issueSummary},w,s,i,b);return}Qt(c),await Qu({runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,worktreePath:c,agentConfigDir:t.claudeConfigDir,baseRepoPath:t.baseRepoPath??c,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,requireApproval:t.requireApproval??!0,doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:r.jiraFor(t.repoName??""),cfg:r.cfg,actorEmail:t.actorEmail,resultText:p.resultText,costFields:b,runTests:t.runTests,fixSession:{sessionId:t.sessionId,agent:t.agent??"",model:t.model,timeoutSeconds:t.timeoutSeconds,maxTurns:t.maxTurns},sendUsage:o,mergeOnApprove:t.mergeOnApprove,mergeMethod:t.mergeMethod,autoMerge:t.autoMerge??!1,emit:s,setStatus:i}),St(t.runId)}catch(f){let p=f instanceof Error?f.message:String(f);s("error",`Run failed: ${p}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,p),St(t.runId),i("failed",{error:p})}finally{u||await vt(t.baseRepoPath??c,c).catch(()=>{})}}async function Qu(t){let{runId:e,issueKey:n,issueSummary:r,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:l,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:b,repoName:w,jira:S,cfg:x,actorEmail:A,runTests:j,mergeOnApprove:v,mergeMethod:O,autoMerge:H,resultText:z,costFields:B,emit:d,setStatus:m}=t,g=await Hr(s);g.deleted.length&&d("info",`Deleted ${g.deleted.length} file(s) listed in ${Dt}: `+g.deleted.slice(0,10).join(", ")+(g.deleted.length>10?", \u2026":""));for(let ve of g.refused)d("warn",`${Dt} entry refused: ${ve}`);d("info","Committing changes"),await Qn(s,`${n}: ${r}
645
+ Partial work from this run is saved on branch \`${t}\` - 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 wy(t){let{emit:e,setStatus:n,sendUsage:r,nextSeq:s}=cr(t.runId,t.transport),{trigger:i}=t.rule,o=t.rule.action;if(o.type!=="implement")return;let l=dn(o.agent,o.type);if(l){e("error",l),await es(t,l),n("failed",{error:l});return}let c=Di.default.join(Lt(),t.runId),u=qt(o.branchTemplate,{issueKey:t.issueKey}),f=(0,Li.randomUUID)(),p=!1,b=!1;try{if(!Ci(ye()??t.cfg,t.project.repoName,t.actorEmail))throw new Error("no GitHub token applies to this repo - run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");if(u===o.baseBranch&&!t.continueBranch)throw new Error(`rendered branch "${u}" equals the base branch - refusing (check the rule's branch template)`);if(n("running"),e("info",`Run started for ${t.issueKey} (rule "${t.rule.name}", implement)`),o.jiraTransitionOnStart)try{await t.jira.transitionByName(t.issueKey,o.jiraTransitionOnStart)?e("info",`Jira transition "${o.jiraTransitionOnStart}" applied at run start`):e("warn",`no transition named "${o.jiraTransitionOnStart}" is available from this ticket's current status - continuing anyway`)}catch(Z){e("warn",`Jira start transition failed: ${Z instanceof Error?Z.message:Z} - continuing anyway`)}let w=await tr(t.repoPath);if(e("info",`Repo origin: ${w}`),!at(w))throw new Error(`origin "${w}" is not a GitHub remote - implement mode supports GitHub only`);e("info",`Fetching ${t.issueKey} from Jira`);let S=await t.jira.getIssue(t.issueKey),x=t.continueBranch?u:o.baseBranch;e("info",t.continueBranch?`Continuing branch "${u}" from origin/${u} (autopilot batch)`:`Preparing worktree on branch "${u}" from origin/${o.baseBranch}`),await ln(t.repoPath,x),await Wo(t.repoPath,u),await Jo(t.repoPath,c,u,x),p=!0;let R=qt(o.promptTemplate,{issueKey:S.key,summary:S.summary,description:S.description||"(no description)",comments:Ps(S.comments)})+await Mr(t.jira,S.attachments,c,e)+Oa(c)+my(t.repoPath)+dy+we.NEEDS_INPUT_OPTIONS_PROMPT+hy+(t.project.goLiveIssueKey?fy:"")+(o.writeTests?Gu.WRITE_TESTS_PROMPT:"")+(o.updateMemory?we.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree - edit tools enabled, path-jailed, no shell, timeout ${o.timeoutSeconds}s`);let j=await ts(t.runId,Be(o.agent),{repoPath:c,prompt:R,timeoutSeconds:o.timeoutSeconds,bin:Ue(t.cfg,o.agent),configDir:t.claudeConfigDir,mode:"edit_no_shell",model:o.model||void 0,maxTurns:o.maxTurns,sessionId:f,onLog:(Z,z)=>e(Z,z),onUsage:r},e,()=>ki(c)),v={costUsd:j.costUsd,inputTokens:j.inputTokens,outputTokens:j.outputTokens,billingMode:j.billingMode,model:j.model};if(!j.ok){let Z=j.error??"Claude Code failed";e("error",`Run failed: ${Z}`);let z=Z;if(j.turnLimitHit){let K=await Yu(c,u,t.runId,e);K&&(z+=Xu(K))}lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:"implement failed",detail:Z.slice(0,500)}),await es(t,z),n(j.timedOut?"timed_out":"failed",{error:Z,...j.cancelled?{errorKind:"guard"}:{},...v});return}let O=js(j.resultText);if(O){b=!0,await qi({kind:"implement",runId:t.runId,issueKey:t.issueKey,repoPath:c,sessionId:f,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:t.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:t.claudeConfigDir,agent:o.agent,model:o.model,actorEmail:t.actorEmail,baseRepoPath:t.repoPath,repoName:t.project.repoName,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,autoMerge:o.autoMerge,runTests:o.runTests,maxTurns:o.maxTurns,issueSummary:S.summary},O,e,n,v);return}Qt(c),await Qu({runId:t.runId,issueKey:t.issueKey,issueSummary:S.summary,worktreePath:c,agentConfigDir:t.claudeConfigDir,baseRepoPath:t.repoPath,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,doneLabel:i.doneLabel,failedLabel:i.failedLabel,repoName:t.project.repoName,jira:t.jira,cfg:t.cfg,actorEmail:t.actorEmail,resultText:j.resultText,costFields:v,runTests:o.runTests,fixSession:{sessionId:f,agent:o.agent,model:o.model,timeoutSeconds:o.timeoutSeconds,maxTurns:o.maxTurns},sendUsage:r,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,autoMerge:o.autoMerge,emit:e,setStatus:n})}catch(w){let S=w instanceof Error?w.message:String(w);e("error",`Run failed: ${S}`),lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:"implement failed",detail:S.slice(0,500)}),await es(t,S),n("failed",{error:S})}finally{p&&!b&&await vt(t.repoPath,c).catch(()=>{})}}async function Ma(t,e,n,r){let{emit:s,setStatus:i,sendUsage:o,nextSeq:l}=cr(t.runId,r.transport,t.nextLogSeq),c=t.repoPath,u=!1;try{if(!Ci(ye()??r.cfg,t.repoName??"",t.actorEmail))throw new Error("no GitHub token applies to this repo - run `allwright github set-token` (runner-wide) or `github set <repoName>` (this repo only)");i("running"),s("info",`Reply received on ${t.issueKey} - continuing run \`${t.runId}\``);let f=od(e)+await Mr(r.jiraFor(t.repoName??""),n,c,s),p=await ts(t.runId,Be(t.agent),{repoPath:c,prompt:f,timeoutSeconds:t.timeoutSeconds,bin:Ue(r.cfg,t.agent??""),configDir:t.claudeConfigDir,mode:"edit_no_shell",model:t.model||void 0,maxTurns:t.maxTurns??120,sessionId:t.sessionId,resume:!0,onLog:(S,x)=>s(S,x),onUsage:o},s,()=>ki(c)),b={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok){let S=p.error??"Claude Code failed";s("error",`Run failed: ${S}`);let x=S;if(p.turnLimitHit&&t.branch){let R=await Yu(c,t.branch,t.runId,s);R&&(x+=Xu(R))}await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,x),St(t.runId),i(p.timedOut?"timed_out":"failed",{error:S,...p.cancelled?{errorKind:"guard"}:{},...b});return}let w=js(p.resultText);if(w){if(t.rounds>=Vu){await ad(r.jiraFor(t.repoName??""),t,s,i,b);return}u=!0,await qi({kind:"implement",runId:t.runId,issueKey:t.issueKey,repoPath:c,sessionId:t.sessionId,doneLabel:t.doneLabel,failedLabel:t.failedLabel,timeoutSeconds:t.timeoutSeconds,jira:r.jiraFor(t.repoName??""),nextLogSeq:l(),rounds:t.rounds+1,createdAt:t.createdAt,claudeConfigDir:t.claudeConfigDir,actorEmail:t.actorEmail,agent:t.agent,model:t.model,baseRepoPath:t.baseRepoPath,repoName:t.repoName,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,mergeOnApprove:t.mergeOnApprove,mergeMethod:t.mergeMethod,autoMerge:t.autoMerge,runTests:t.runTests,maxTurns:t.maxTurns,issueSummary:t.issueSummary},w,s,i,b);return}Qt(c),await Qu({runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,worktreePath:c,agentConfigDir:t.claudeConfigDir,baseRepoPath:t.baseRepoPath??c,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,requireApproval:t.requireApproval??!0,doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:r.jiraFor(t.repoName??""),cfg:r.cfg,actorEmail:t.actorEmail,resultText:p.resultText,costFields:b,runTests:t.runTests,fixSession:{sessionId:t.sessionId,agent:t.agent??"",model:t.model,timeoutSeconds:t.timeoutSeconds,maxTurns:t.maxTurns},sendUsage:o,mergeOnApprove:t.mergeOnApprove,mergeMethod:t.mergeMethod,autoMerge:t.autoMerge??!1,emit:s,setStatus:i}),St(t.runId)}catch(f){let p=f instanceof Error?f.message:String(f);s("error",`Run failed: ${p}`),await Tt(r.jiraFor(t.repoName??""),t.issueKey,t.runId,t.failedLabel,p),St(t.runId),i("failed",{error:p})}finally{u||await vt(t.baseRepoPath??c,c).catch(()=>{})}}async function Qu(t){let{runId:e,issueKey:n,issueSummary:r,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:l,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:b,repoName:w,jira:S,cfg:x,actorEmail:R,runTests:j,mergeOnApprove:v,mergeMethod:O,autoMerge:Z,resultText:z,costFields:K,emit:d,setStatus:m}=t,g=await Hr(s);g.deleted.length&&d("info",`Deleted ${g.deleted.length} file(s) listed in ${Dt}: `+g.deleted.slice(0,10).join(", ")+(g.deleted.length>10?", \u2026":""));for(let ve of g.refused)d("warn",`${Dt} entry refused: ${ve}`);d("info","Committing changes"),await Qn(s,`${n}: ${r}
646
646
 
647
- Allwright run ${e}`);let C=await cn(s,l);if(!C.ok){let ve=C.forbidden.length?`refusing to push: changes touch protected paths (${C.forbidden.slice(0,5).join(", ")}) - CI/workflow files can exfiltrate repo secrets and are never pushed by the agent. Apply those files' changes yourself, or re-run the ticket with them out of scope.`:`refusing to push: change is too large (${C.files} files, ${C.insertions+C.deletions} lines; limits ${on}/${an})`;d("error",ve),await Tt(S,n,e,b,ve),m("failed",{error:ve,errorKind:"guard",...B});return}d("info",`Diff: ${C.files} file(s), +${C.insertions}/-${C.deletions}`);let M={...B},V="",Q="",W,D,L;if(j){let ve=Wr(s);if(!ve)d("info","No TEST.md in this repo - skipping the test run (nothing documented to run)");else{let be=Jr(ja.default.readFileSync(ve,"utf8"));if(!be.length)d("info",`${Di.default.basename(ve)} lists no commands - nothing to run`);else{d("info",`Running ${be.length} documented test command(s) - no tokens, plain shell`);let ue=await sr(s,be,{perCommandTimeoutMs:15*6e4}),Ie=ue.filter(ae=>ae.exitCode!==0),mo=Ie.length;for(let ae of ue)d(ae.exitCode===0?"info":"warn",`${ae.exitCode===0?"PASS":"FAIL"} ${ae.command} (exit ${ae.exitCode})`+(ae.exitCode===0?"":`
648
- ${ae.tail.slice(-1500)}`));let Cr="";if(Ie.length&&t.fixSession){let ae=await ky({runId:e,issueKey:n,worktreePath:s,baseBranch:l,fixSession:t.fixSession,agentConfigDir:t.agentConfigDir,cfg:x,failed:Ie,emit:d,sendUsage:t.sendUsage,baseCost:M});if(M.costUsd+=ae.cost.costUsd,M.inputTokens+=ae.cost.inputTokens,M.outputTokens+=ae.cost.outputTokens,ae.outcome==="cancelled"){let Ge="stopped by a person during the automatic test-fix attempt - nothing was pushed";d("warn",Ge),ji({runId:e,issueKey:n,issueSummary:r,mergeOnApprove:v,mergeMethod:O,autoMerge:H,repoName:w,baseRepoPath:i,branch:o,baseBranch:l,headSha:await tt(s),requireApproval:f,doneLabel:p,failedLabel:b,jiraTransition:c,jiraTransitionOnMerge:u,actorEmail:A,resultSummary:Zu(z),prSummary:$a(z)??"",costUsd:M.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),await Tt(S,n,e,b,`${Ge}. The commit survived on the runner - "Retry push" on the run's dashboard page ships it without a new agent run.`),m("failed",{error:Ge,errorKind:"guard",retryAvailable:!0,...M});return}if(ae.outcome==="committed"){Q=ae.resultText,d("info",`Re-running ${be.length} documented test command(s) after the fix`),ue=await sr(s,be,{perCommandTimeoutMs:15*6e4}),Ie=ue.filter(Ge=>Ge.exitCode!==0);for(let Ge of ue)d(Ge.exitCode===0?"info":"warn",`${Ge.exitCode===0?"PASS":"FAIL"} ${Ge.command} (exit ${Ge.exitCode})`+(Ge.exitCode===0?"":`
649
- ${Ge.tail.slice(-1500)}`));Cr=Ie.length?`One automatic same-session fix attempt ran; the results above are AFTER it. First pass: ${mo} failure(s). ${ae.note}`:`The first pass had ${mo} failure(s); one automatic same-session fix attempt resolved them. ${ae.note}`}else Cr=ae.note}W=Ie.slice(0,20).map(ae=>({command:ae.command.slice(0,500),exitCode:ae.exitCode,tail:ae.tail.slice(-4e3)})),D=ue.length-Ie.length,L=ue.length,V=`
647
+ Allwright run ${e}`);let C=await cn(s,l);if(!C.ok){let ve=C.forbidden.length?`refusing to push: changes touch protected paths (${C.forbidden.slice(0,5).join(", ")}) - CI/workflow files can exfiltrate repo secrets and are never pushed by the agent. Apply those files' changes yourself, or re-run the ticket with them out of scope.`:`refusing to push: change is too large (${C.files} files, ${C.insertions+C.deletions} lines; limits ${on}/${an})`;d("error",ve),await Tt(S,n,e,b,ve),m("failed",{error:ve,errorKind:"guard",...K});return}d("info",`Diff: ${C.files} file(s), +${C.insertions}/-${C.deletions}`);let M={...K},W="",ee="",J,D,L;if(j){let ve=Wr(s);if(!ve)d("info","No TEST.md in this repo - skipping the test run (nothing documented to run)");else{let be=Jr(ja.default.readFileSync(ve,"utf8"));if(!be.length)d("info",`${Di.default.basename(ve)} lists no commands - nothing to run`);else{d("info",`Running ${be.length} documented test command(s) - no tokens, plain shell`);let ue=await sr(s,be,{perCommandTimeoutMs:15*6e4}),Ie=ue.filter(ae=>ae.exitCode!==0),mo=Ie.length;for(let ae of ue)d(ae.exitCode===0?"info":"warn",`${ae.exitCode===0?"PASS":"FAIL"} ${ae.command} (exit ${ae.exitCode})`+(ae.exitCode===0?"":`
648
+ ${ae.tail.slice(-1500)}`));let Cr="";if(Ie.length&&t.fixSession){let ae=await ky({runId:e,issueKey:n,worktreePath:s,baseBranch:l,fixSession:t.fixSession,agentConfigDir:t.agentConfigDir,cfg:x,failed:Ie,emit:d,sendUsage:t.sendUsage,baseCost:M});if(M.costUsd+=ae.cost.costUsd,M.inputTokens+=ae.cost.inputTokens,M.outputTokens+=ae.cost.outputTokens,ae.outcome==="cancelled"){let Ge="stopped by a person during the automatic test-fix attempt - nothing was pushed";d("warn",Ge),ji({runId:e,issueKey:n,issueSummary:r,mergeOnApprove:v,mergeMethod:O,autoMerge:Z,repoName:w,baseRepoPath:i,branch:o,baseBranch:l,headSha:await tt(s),requireApproval:f,doneLabel:p,failedLabel:b,jiraTransition:c,jiraTransitionOnMerge:u,actorEmail:R,resultSummary:Zu(z),prSummary:$a(z)??"",costUsd:M.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),await Tt(S,n,e,b,`${Ge}. The commit survived on the runner - "Retry push" on the run's dashboard page ships it without a new agent run.`),m("failed",{error:Ge,errorKind:"guard",retryAvailable:!0,...M});return}if(ae.outcome==="committed"){ee=ae.resultText,d("info",`Re-running ${be.length} documented test command(s) after the fix`),ue=await sr(s,be,{perCommandTimeoutMs:15*6e4}),Ie=ue.filter(Ge=>Ge.exitCode!==0);for(let Ge of ue)d(Ge.exitCode===0?"info":"warn",`${Ge.exitCode===0?"PASS":"FAIL"} ${Ge.command} (exit ${Ge.exitCode})`+(Ge.exitCode===0?"":`
649
+ ${Ge.tail.slice(-1500)}`));Cr=Ie.length?`One automatic same-session fix attempt ran; the results above are AFTER it. First pass: ${mo} failure(s). ${ae.note}`:`The first pass had ${mo} failure(s); one automatic same-session fix attempt resolved them. ${ae.note}`}else Cr=ae.note}J=Ie.slice(0,20).map(ae=>({command:ae.command.slice(0,500),exitCode:ae.exitCode,tail:ae.tail.slice(-4e3)})),D=ue.length-Ie.length,L=ue.length,W=`
650
650
 
651
651
  ### Tests
652
652
  `+ue.map(ae=>`- ${ae.exitCode===0?"PASS":"FAIL"} \`${ae.command}\``).join(`
@@ -658,28 +658,28 @@ All ${ue.length} passed.`)+(Cr?`
658
658
 
659
659
  ${Cr}`:""),Ie.length&&d("warn",`${Ie.length} test command(s) failed - the PR will say so; review before merging`),mo>0&&lt(i,{issueKey:n,runId:e,title:Ie.length?`TEST.md commands failing at PR (${Ie.length} of ${ue.length})`:"TEST.md failures fixed by same-session retry",detail:ue.map(ae=>`${ae.exitCode===0?"PASS":"FAIL"} ${ae.command}`).join(`
660
660
  `)+(Cr?`
661
- ${Cr}`:"")})}}}let ee=await tr(s),le=at(ee);if(!le){let ve=`origin "${ee}" is not a GitHub remote - implement mode supports GitHub only`;d("error",ve),await Tt(S,n,e,b,ve),m("failed",{error:ve,...B});return}let he=await tt(s),Ne=Zu(z),pe=(Q?$a(Q):null)??$a(z);try{await ed({gitDir:s,ownerRepo:le,runId:e,issueKey:n,issueSummary:r,agentConfigDir:t.agentConfigDir,branch:o,baseBranch:l,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:b,repoName:w,jira:S,cfg:x,actorEmail:A,mergeOnApprove:v,mergeMethod:O,autoMerge:H,summary:Ne,prSummary:pe??void 0,cost:M,testReport:V,failedTests:W,testsPassed:D,testsTotal:L,goLiveDraft:(Q?Bu(Q):null)??Bu(z)??void 0,emit:d,setStatus:m})}catch(ve){let be=ve instanceof Error?ve.message:String(ve);ji({runId:e,issueKey:n,issueSummary:r,mergeOnApprove:v,mergeMethod:O,autoMerge:H,repoName:w,baseRepoPath:i,branch:o,baseBranch:l,headSha:he,requireApproval:f,doneLabel:p,failedLabel:b,jiraTransition:c,jiraTransitionOnMerge:u,actorEmail:A,resultSummary:Ne,prSummary:pe??"",costUsd:M.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),d("error",`Run failed: ${be}`),d("info",`The commit itself survived on the runner (branch ${o}) - fix the cause, then use "Retry push" on this run's dashboard page.`),await Tt(S,n,e,b,`${be}
661
+ ${Cr}`:"")})}}}let B=await tr(s),le=at(B);if(!le){let ve=`origin "${B}" is not a GitHub remote - implement mode supports GitHub only`;d("error",ve),await Tt(S,n,e,b,ve),m("failed",{error:ve,...K});return}let he=await tt(s),Ne=Zu(z),pe=(ee?$a(ee):null)??$a(z);try{await ed({gitDir:s,ownerRepo:le,runId:e,issueKey:n,issueSummary:r,agentConfigDir:t.agentConfigDir,branch:o,baseBranch:l,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:b,repoName:w,jira:S,cfg:x,actorEmail:R,mergeOnApprove:v,mergeMethod:O,autoMerge:Z,summary:Ne,prSummary:pe??void 0,cost:M,testReport:W,failedTests:J,testsPassed:D,testsTotal:L,goLiveDraft:(ee?Bu(ee):null)??Bu(z)??void 0,emit:d,setStatus:m})}catch(ve){let be=ve instanceof Error?ve.message:String(ve);ji({runId:e,issueKey:n,issueSummary:r,mergeOnApprove:v,mergeMethod:O,autoMerge:Z,repoName:w,baseRepoPath:i,branch:o,baseBranch:l,headSha:he,requireApproval:f,doneLabel:p,failedLabel:b,jiraTransition:c,jiraTransitionOnMerge:u,actorEmail:R,resultSummary:Ne,prSummary:pe??"",costUsd:M.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),d("error",`Run failed: ${be}`),d("info",`The commit itself survived on the runner (branch ${o}) - fix the cause, then use "Retry push" on this run's dashboard page.`),await Tt(S,n,e,b,`${be}
662
662
 
663
663
  The agent's commit survived on the runner - "Retry push" on the dashboard's run page re-pushes it without a new agent run.`),m("failed",{error:be,retryAvailable:!0,...M})}}var _y={costUsd:0,inputTokens:0,outputTokens:0};async function ky(t){let{runId:e,issueKey:n,worktreePath:r,baseBranch:s,fixSession:i,cfg:o,failed:l,emit:c,sendUsage:u,baseCost:f}=t,p=Be(i.agent);if(!p?.capabilities.sessionResume){let j=`No automatic fix attempt: the ${i.agent||"configured"} adapter cannot resume sessions.`;return c("info",j),{outcome:"skipped",note:j,cost:_y}}c("info",`${l.length} test command(s) failed - resuming the same agent session for one fix attempt (same session = cached context, not a re-explore)`);let b=await tt(r),w=await ts(e,p,{repoPath:r,prompt:py(l),timeoutSeconds:i.timeoutSeconds,bin:Ue(o,i.agent),configDir:t.agentConfigDir,mode:"edit_no_shell",model:i.model||void 0,maxTurns:Math.min(i.maxTurns??120,60),sessionId:i.sessionId,resume:!0,onLog:(j,v)=>c(j,v),onUsage:u?j=>u({...j,inputTokens:f.inputTokens+j.inputTokens,outputTokens:f.outputTokens+j.outputTokens,costUsd:j.costUsd===void 0?void 0:f.costUsd+j.costUsd}):void 0},c),S={costUsd:w.costUsd,inputTokens:w.inputTokens,outputTokens:w.outputTokens};if(w.cancelled)return{outcome:"cancelled",cost:S};if(!w.ok){let j=`One automatic fix attempt did not complete (${w.error??"agent error"}) - the results above are from the original work.`;return c("warn",j),{outcome:"agent_failed",note:j,cost:S}}if(js(w.resultText)){let j="One automatic fix attempt asked for human input instead of fixing - the original commit ships unchanged; answer on the PR instead.";return c("warn",j),{outcome:"agent_failed",note:j,cost:S}}let x=await Hr(r);for(let j of x.refused)c("warn",`${Dt} entry refused: ${j}`);try{await Qn(r,`${n}: fix failing TEST.md commands
664
664
 
665
- Allwright run ${e} (automatic test-fix attempt)`)}catch{let j=`An automatic fix attempt concluded no code change was warranted: ${ur(w.resultText)}`;return c("info",j),{outcome:"no_changes",note:j,cost:S}}let A=await cn(r,s);if(!A.ok){await Zr(r,b);let j=A.forbidden.length?`An automatic fix attempt touched protected paths (${A.forbidden.slice(0,3).join(", ")}) and was discarded - the results above are from the original work.`:"An automatic fix attempt pushed the diff past the safety limits and was discarded - the results above are from the original work.";return c("warn",j),{outcome:"reverted",note:j,cost:S}}return{outcome:"committed",note:`Fix attempt: ${ur(w.resultText)}`,resultText:w.resultText,cost:S}}async function ed(t){let{gitDir:e,ownerRepo:n,runId:r,issueKey:s,issueSummary:i,mergeOnApprove:o,mergeMethod:l,autoMerge:c,branch:u,baseBranch:f,jiraTransition:p,jiraTransitionOnMerge:b,requireApproval:w,doneLabel:S,failedLabel:x,repoName:A,jira:j,cfg:v,actorEmail:O,summary:H,prSummary:z,cost:B,testReport:d,emit:m,setStatus:g}=t;m("info",`Pushing ${u} to origin`),await er(e,u);let C=await Si(e,u),V=`${z?.trim()?`${z.trim()}
665
+ Allwright run ${e} (automatic test-fix attempt)`)}catch{let j=`An automatic fix attempt concluded no code change was warranted: ${ur(w.resultText)}`;return c("info",j),{outcome:"no_changes",note:j,cost:S}}let R=await cn(r,s);if(!R.ok){await Zr(r,b);let j=R.forbidden.length?`An automatic fix attempt touched protected paths (${R.forbidden.slice(0,3).join(", ")}) and was discarded - the results above are from the original work.`:"An automatic fix attempt pushed the diff past the safety limits and was discarded - the results above are from the original work.";return c("warn",j),{outcome:"reverted",note:j,cost:S}}return{outcome:"committed",note:`Fix attempt: ${ur(w.resultText)}`,resultText:w.resultText,cost:S}}async function ed(t){let{gitDir:e,ownerRepo:n,runId:r,issueKey:s,issueSummary:i,mergeOnApprove:o,mergeMethod:l,autoMerge:c,branch:u,baseBranch:f,jiraTransition:p,jiraTransitionOnMerge:b,requireApproval:w,doneLabel:S,failedLabel:x,repoName:R,jira:j,cfg:v,actorEmail:O,summary:Z,prSummary:z,cost:K,testReport:d,emit:m,setStatus:g}=t;m("info",`Pushing ${u} to origin`),await er(e,u);let C=await Si(e,u),W=`${z?.trim()?`${z.trim()}
666
666
 
667
667
  <details>
668
668
  <summary>Technical details</summary>
669
669
 
670
- ${H}
670
+ ${Z}
671
671
 
672
- </details>`:H}${d??""}
672
+ </details>`:Z}${d??""}
673
673
 
674
674
  ---
675
675
  Jira: ${new URL(`/browse/${s}`,v.jira?.baseUrl??"").toString()}
676
- _Allwright implement run \`${r}\` \xB7 cost $${B.costUsd.toFixed(4)}. `+(d?"Tests were run by the runner, not the agent._":"The agent has no shell and no tests were run here - review accordingly._");m("info","Opening pull request");let Q=Ci(ye()??v,A,O);Q.source==="user"&&m("info",`PR will be authored with ${O}'s own GitHub token`);let D=await new $e(Q.token).createPullRequest(n.owner,n.repo,{title:`${s}: ${i}`.slice(0,250),head:u,base:f,body:V});m("info",`PR ready: ${D.url}`),Du({runId:r,issueKey:s,repoName:A,owner:n.owner,repo:n.repo,prNumber:D.number,prUrl:D.url,jiraTransitionOnMerge:b??"",createdAt:new Date().toISOString()}),g("posting",B);let L={nextDecisionSeq:1e5,runId:r,issueKey:s,repoName:A,owner:n.owner,repo:n.repo,prNumber:D.number,prUrl:D.url,branch:u,headSha:C,doneLabel:S,failedLabel:x,jiraTransition:p,mergeOnApprove:o,mergeMethod:l,autoMerge:c,agentConfigDir:t.agentConfigDir};if(w)ut(L),await j.addComment(s,`**Allwright opened a pull request for review.**
676
+ _Allwright implement run \`${r}\` \xB7 cost $${K.costUsd.toFixed(4)}. `+(d?"Tests were run by the runner, not the agent._":"The agent has no shell and no tests were run here - review accordingly._");m("info","Opening pull request");let ee=Ci(ye()??v,R,O);ee.source==="user"&&m("info",`PR will be authored with ${O}'s own GitHub token`);let D=await new $e(ee.token).createPullRequest(n.owner,n.repo,{title:`${s}: ${i}`.slice(0,250),head:u,base:f,body:W});m("info",`PR ready: ${D.url}`),Du({runId:r,issueKey:s,repoName:R,owner:n.owner,repo:n.repo,prNumber:D.number,prUrl:D.url,jiraTransitionOnMerge:b??"",createdAt:new Date().toISOString()}),g("posting",K);let L={nextDecisionSeq:1e5,runId:r,issueKey:s,repoName:R,owner:n.owner,repo:n.repo,prNumber:D.number,prUrl:D.url,branch:u,headSha:C,doneLabel:S,failedLabel:x,jiraTransition:p,mergeOnApprove:o,mergeMethod:l,autoMerge:c,agentConfigDir:t.agentConfigDir};if(w)ut(L),await j.addComment(s,`**Allwright opened a pull request for review.**
677
677
 
678
678
  PR: ${D.url}
679
679
 
680
- Approve the PR on GitHub OR on the Allwright dashboard - either completes the run. Rejecting on the dashboard closes the PR and deletes the branch. (run \`${r}\`)`),g("awaiting_approval",{...B,prUrl:D.url,headSha:C,resultSummary:ur(z?.trim()||H),retryAvailable:!1,...t.failedTests!==void 0?{failedTests:t.failedTests}:{},...t.testsPassed!==void 0?{testsPassed:t.testsPassed}:{},...t.testsTotal!==void 0?{testsTotal:t.testsTotal}:{},...t.goLiveDraft!==void 0?{goLiveDraft:t.goLiveDraft}:{}}),m("info",`Awaiting approval on the dashboard \xB7 $${B.costUsd.toFixed(4)}`);else{if(c){m("info",`Auto-merging PR #${D.number} (${l})`);let le=Ae(v,A),he=le?await new $e(le).mergePullRequest(n.owner,n.repo,D.number,l,{sha:C,title:`${s} (#${D.number})`}):{merged:!1,reason:"no GitHub token applies to this repo"};he.merged?m("info",`PR #${D.number} merged`):(m("warn",`Auto-merge did not go through - ${he.reason}. The PR stays open.`),await j.addComment(s,`**Allwright:** the work is done and the PR is open, but auto-merge did not go through - ${he.reason}
680
+ Approve the PR on GitHub OR on the Allwright dashboard - either completes the run. Rejecting on the dashboard closes the PR and deletes the branch. (run \`${r}\`)`),g("awaiting_approval",{...K,prUrl:D.url,headSha:C,resultSummary:ur(z?.trim()||Z),retryAvailable:!1,...t.failedTests!==void 0?{failedTests:t.failedTests}:{},...t.testsPassed!==void 0?{testsPassed:t.testsPassed}:{},...t.testsTotal!==void 0?{testsTotal:t.testsTotal}:{},...t.goLiveDraft!==void 0?{goLiveDraft:t.goLiveDraft}:{}}),m("info",`Awaiting approval on the dashboard \xB7 $${K.costUsd.toFixed(4)}`);else{if(c){m("info",`Auto-merging PR #${D.number} (${l})`);let le=Re(v,R),he=le?await new $e(le).mergePullRequest(n.owner,n.repo,D.number,l,{sha:C,title:`${s} (#${D.number})`}):{merged:!1,reason:"no GitHub token applies to this repo"};he.merged?m("info",`PR #${D.number} merged`):(m("warn",`Auto-merge did not go through - ${he.reason}. The PR stays open.`),await j.addComment(s,`**Allwright:** the work is done and the PR is open, but auto-merge did not go through - ${he.reason}
681
681
 
682
- PR: ${D.url}`))}let ee=(ye()??v).repos[A]?.path;ee&&Is(ee,s)&&lt(ee,{issueKey:s,runId:r,title:"shipped after earlier failure",detail:`PR ${D.url} merged/opened straight-through.`}),await td({jira:j,issueKey:s},L,m),g("succeeded",{...B,prUrl:D.url,headSha:C,resultSummary:ur(z?.trim()||H),retryAvailable:!1,...t.failedTests!==void 0?{failedTests:t.failedTests}:{},...t.testsPassed!==void 0?{testsPassed:t.testsPassed}:{},...t.testsTotal!==void 0?{testsTotal:t.testsTotal}:{},...t.goLiveDraft!==void 0?{goLiveDraft:t.goLiveDraft}:{}}),m("info",`Run succeeded \xB7 ${D.url} \xB7 $${B.costUsd.toFixed(4)}`)}}async function td(t,e,n){let r=null;if(e.jiraTransition)try{await t.jira.transitionByName(e.issueKey,e.jiraTransition)?n("info",`Jira transition "${e.jiraTransition}" applied`):(r=`no transition named "${e.jiraTransition}" is available from this ticket's current status - the PR is fine, but move the ticket manually`,n("warn",r))}catch(i){r=`Jira transition failed: ${i instanceof Error?i.message:i}`,n("warn",r)}let s=e.mergeOnApprove;return await t.jira.addComment(e.issueKey,(s?`**Allwright: implementation complete - the pull request was merged.**
682
+ PR: ${D.url}`))}let B=(ye()??v).repos[R]?.path;B&&Is(B,s)&&lt(B,{issueKey:s,runId:r,title:"shipped after earlier failure",detail:`PR ${D.url} merged/opened straight-through.`}),await td({jira:j,issueKey:s},L,m),g("succeeded",{...K,prUrl:D.url,headSha:C,resultSummary:ur(z?.trim()||Z),retryAvailable:!1,...t.failedTests!==void 0?{failedTests:t.failedTests}:{},...t.testsPassed!==void 0?{testsPassed:t.testsPassed}:{},...t.testsTotal!==void 0?{testsTotal:t.testsTotal}:{},...t.goLiveDraft!==void 0?{goLiveDraft:t.goLiveDraft}:{}}),m("info",`Run succeeded \xB7 ${D.url} \xB7 $${K.costUsd.toFixed(4)}`)}}async function td(t,e,n){let r=null;if(e.jiraTransition)try{await t.jira.transitionByName(e.issueKey,e.jiraTransition)?n("info",`Jira transition "${e.jiraTransition}" applied`):(r=`no transition named "${e.jiraTransition}" is available from this ticket's current status - the PR is fine, but move the ticket manually`,n("warn",r))}catch(i){r=`Jira transition failed: ${i instanceof Error?i.message:i}`,n("warn",r)}let s=e.mergeOnApprove;return await t.jira.addComment(e.issueKey,(s?`**Allwright: implementation complete - the pull request was merged.**
683
683
 
684
684
  PR: ${e.prUrl}`:`**Allwright: the change is approved, but NOT merged yet.**
685
685
 
@@ -689,11 +689,11 @@ This rule is set to "my team merges on GitHub", so Allwright deliberately did no
689
689
 
690
690
  Note: ${r}`:"")+`
691
691
 
692
- (run \`${e.runId}\`)`),await t.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[we.NEEDS_INPUT_LABEL]}),r}async function $s(t,e,n){let r=Qr(e);if(!r){y.warn(`run.approved for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:s,setStatus:i}=sd(t,e);try{let o=Ae(ye()??t.cfg,r.repoName);if(!o)throw new Error("GitHub token missing on this runner");let l=new $e(o);s("info",`Approval received for ${r.issueKey} - verifying PR state`);let c=await l.getPullRequest(r.owner,r.repo,r.prNumber);if(!c)throw new Error(`PR #${r.prNumber} no longer exists on GitHub`);if(c.state==="closed"&&!c.merged)throw new Error(`PR #${r.prNumber} was closed on GitHub without merging`);let u=n??r.headSha;if(c.state==="open"&&c.headSha!==u){let f=`PR #${r.prNumber} changed since review started (${u.slice(0,7)} \u2192 ${c.headSha.slice(0,7)}) - approval not applied. Re-review the PR and approve again.`;s("warn",f),await t.jiraFor(r.repoName??"").addComment(r.issueKey,`**Allwright:** ${f}`),i("awaiting_approval",{prUrl:r.prUrl,headSha:c.headSha,resultSummary:f});return}if(r.mergeOnApprove&&c.state==="open"&&!c.merged){s("info",`Merging PR #${r.prNumber} (${r.mergeMethod})`);let f=await l.mergePullRequest(r.owner,r.repo,r.prNumber,r.mergeMethod,{sha:u,title:`${r.issueKey} (#${r.prNumber})`});if(!f.merged){let p=`Approved, but the merge did not go through - ${f.reason}`;s("warn",p),await t.jiraFor(r.repoName??"").addComment(r.issueKey,`**Allwright:** ${p}
692
+ (run \`${e.runId}\`)`),await t.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[we.NEEDS_INPUT_LABEL]}),r}async function $s(t,e,n){let r=Qr(e);if(!r){y.warn(`run.approved for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:s,setStatus:i}=sd(t,e);try{let o=Re(ye()??t.cfg,r.repoName);if(!o)throw new Error("GitHub token missing on this runner");let l=new $e(o);s("info",`Approval received for ${r.issueKey} - verifying PR state`);let c=await l.getPullRequest(r.owner,r.repo,r.prNumber);if(!c)throw new Error(`PR #${r.prNumber} no longer exists on GitHub`);if(c.state==="closed"&&!c.merged)throw new Error(`PR #${r.prNumber} was closed on GitHub without merging`);let u=n??r.headSha;if(c.state==="open"&&c.headSha!==u){let f=`PR #${r.prNumber} changed since review started (${u.slice(0,7)} \u2192 ${c.headSha.slice(0,7)}) - approval not applied. Re-review the PR and approve again.`;s("warn",f),await t.jiraFor(r.repoName??"").addComment(r.issueKey,`**Allwright:** ${f}`),i("awaiting_approval",{prUrl:r.prUrl,headSha:c.headSha,resultSummary:f});return}if(r.mergeOnApprove&&c.state==="open"&&!c.merged){s("info",`Merging PR #${r.prNumber} (${r.mergeMethod})`);let f=await l.mergePullRequest(r.owner,r.repo,r.prNumber,r.mergeMethod,{sha:u,title:`${r.issueKey} (#${r.prNumber})`});if(!f.merged){let p=`Approved, but the merge did not go through - ${f.reason}`;s("warn",p),await t.jiraFor(r.repoName??"").addComment(r.issueKey,`**Allwright:** ${p}
693
693
 
694
- PR: ${r.prUrl}`),i("awaiting_approval",{prUrl:r.prUrl,headSha:c.headSha,resultSummary:p});return}s("info",`PR #${r.prNumber} merged`)}{let f=(ye()??t.cfg).repos[r.repoName??""]?.path;f&&Is(f,r.issueKey)&&lt(f,{issueKey:r.issueKey,runId:e,title:"shipped after earlier failure",detail:`PR ${r.prUrl} approved and completed.`})}await td({jira:t.jiraFor(r.repoName??""),issueKey:r.issueKey},r,s),i("succeeded",{prUrl:r.prUrl,...r.mergeOnApprove?{}:{resultSummary:"Approved, but the PR was NOT merged - this rule leaves merging to your team on GitHub. Nothing ships until someone merges it."}}),s("info",r.mergeOnApprove?"Run completed after approval":'Run completed after approval - the PR is still OPEN because this rule does not merge on approval. Merge it on GitHub, or turn on "Merge the PR when I approve" in the rule.'),ar(e)}catch(o){let l=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${l}`),await id(t,r,l),i("failed",{error:l}),ar(e)}}async function nd(t,e){let n=Qr(e);if(!n){y.warn(`run.rejected for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:r,setStatus:s}=sd(t,e);try{let i=Ae(ye()??t.cfg,n.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new $e(i);r("info",`Rejection received for ${n.issueKey} - closing PR #${n.prNumber}`);let l=await o.getPullRequest(n.owner,n.repo,n.prNumber);l&&l.state==="open"&&await o.closePullRequest(n.owner,n.repo,n.prNumber),l?.merged||await o.deleteBranch(n.owner,n.repo,n.branch),await t.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright: changes rejected.**
694
+ PR: ${r.prUrl}`),i("awaiting_approval",{prUrl:r.prUrl,headSha:c.headSha,resultSummary:p});return}s("info",`PR #${r.prNumber} merged`)}{let f=(ye()??t.cfg).repos[r.repoName??""]?.path;f&&Is(f,r.issueKey)&&lt(f,{issueKey:r.issueKey,runId:e,title:"shipped after earlier failure",detail:`PR ${r.prUrl} approved and completed.`})}await td({jira:t.jiraFor(r.repoName??""),issueKey:r.issueKey},r,s),i("succeeded",{prUrl:r.prUrl,...r.mergeOnApprove?{}:{resultSummary:"Approved, but the PR was NOT merged - this rule leaves merging to your team on GitHub. Nothing ships until someone merges it."}}),s("info",r.mergeOnApprove?"Run completed after approval":'Run completed after approval - the PR is still OPEN because this rule does not merge on approval. Merge it on GitHub, or turn on "Merge the PR when I approve" in the rule.'),ar(e)}catch(o){let l=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${l}`),await id(t,r,l),i("failed",{error:l}),ar(e)}}async function nd(t,e){let n=Qr(e);if(!n){y.warn(`run.rejected for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:r,setStatus:s}=sd(t,e);try{let i=Re(ye()??t.cfg,n.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new $e(i);r("info",`Rejection received for ${n.issueKey} - closing PR #${n.prNumber}`);let l=await o.getPullRequest(n.owner,n.repo,n.prNumber);l&&l.state==="open"&&await o.closePullRequest(n.owner,n.repo,n.prNumber),l?.merged||await o.deleteBranch(n.owner,n.repo,n.branch),await t.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright: changes rejected.**
695
695
 
696
- The pull request was closed and the branch deleted. This ticket is labeled \`${n.failedLabel}\`; remove the label to try again. (run \`${n.runId}\`)`),await t.jiraFor(n.repoName??"").editLabels(n.issueKey,{add:[n.failedLabel]}),s("failed",{error:"rejected by user"}),r("info","PR closed, branch deleted, ticket labeled"),ar(e)}catch(i){let o=i instanceof Error?i.message:String(i);r("error",`Rejection handling failed: ${o}`),await id(t,n,o),s("failed",{error:o}),ar(e)}}async function rd(t,e){let n=Oi(e);if(!n){y.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:l,setStatus:c,sendUsage:u}=cr(e,t.transport,1e5);l("error","Retry push requested, but this runner holds no retry record for the run - it was already used or never saved. Re-run the ticket instead."),c("failed",{retryAvailable:!1});return}let{emit:r,setStatus:s,sendUsage:i,nextSeq:o}=cr(e,t.transport,n.nextLogSeq);try{let l=await Si(n.baseRepoPath,n.branch);if(l!==n.headSha){r("error",`Retry push aborted: branch ${n.branch} no longer holds the commit this run produced (expected ${n.headSha.slice(0,7)}, ${l?`found ${l.slice(0,7)}`:"the branch is gone"}) - a newer run has likely reused the branch. Re-run the ticket instead.`),Ea(e),s("failed",{retryAvailable:!1});return}let c=await tr(n.baseRepoPath),u=at(c);if(!u)throw new Error(`origin "${c}" is not a GitHub remote`);r("info",`Retry push for ${n.issueKey}: branch ${n.branch} at ${n.headSha.slice(0,7)}`);let f=t.jiraFor(n.repoName);await ed({gitDir:n.baseRepoPath,ownerRepo:u,runId:n.runId,issueKey:n.issueKey,issueSummary:n.issueSummary,branch:n.branch,baseBranch:n.baseBranch,jiraTransition:n.jiraTransition,jiraTransitionOnMerge:n.jiraTransitionOnMerge,requireApproval:n.requireApproval,mergeOnApprove:n.mergeOnApprove??!1,mergeMethod:n.mergeMethod??"squash",autoMerge:n.autoMerge??!1,doneLabel:n.doneLabel,failedLabel:n.failedLabel,repoName:n.repoName,jira:f,cfg:ye()??t.cfg,actorEmail:n.actorEmail,summary:n.resultSummary,prSummary:n.prSummary||void 0,cost:{costUsd:n.costUsd},emit:r,setStatus:s}),Ea(e),await f.editLabels(n.issueKey,{remove:[n.failedLabel]}).catch(()=>{})}catch(l){let c=l instanceof Error?l.message:String(l);r("error",`Retry push failed: ${c}`),ji({...n,nextLogSeq:o()}),s("failed",{error:c,retryAvailable:!0})}}function sd(t,e){let n=1e5;return{emit:(i,o)=>{t.transport.send({type:"run.log",runId:e,seq:n++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&y.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{t.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function id(t,e,n){try{await t.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
696
+ The pull request was closed and the branch deleted. This ticket is labeled \`${n.failedLabel}\`; remove the label to try again. (run \`${n.runId}\`)`),await t.jiraFor(n.repoName??"").editLabels(n.issueKey,{add:[n.failedLabel]}),s("failed",{error:"rejected by user"}),r("info","PR closed, branch deleted, ticket labeled"),ar(e)}catch(i){let o=i instanceof Error?i.message:String(i);r("error",`Rejection handling failed: ${o}`),await id(t,n,o),s("failed",{error:o}),ar(e)}}async function rd(t,e){let n=Oi(e);if(!n){y.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:l,setStatus:c,sendUsage:u}=cr(e,t.transport,1e5);l("error","Retry push requested, but this runner holds no retry record for the run - it was already used or never saved. Re-run the ticket instead."),c("failed",{retryAvailable:!1});return}let{emit:r,setStatus:s,sendUsage:i,nextSeq:o}=cr(e,t.transport,n.nextLogSeq);try{let l=await Si(n.baseRepoPath,n.branch);if(l!==n.headSha){r("error",`Retry push aborted: branch ${n.branch} no longer holds the commit this run produced (expected ${n.headSha.slice(0,7)}, ${l?`found ${l.slice(0,7)}`:"the branch is gone"}) - a newer run has likely reused the branch. Re-run the ticket instead.`),Aa(e),s("failed",{retryAvailable:!1});return}let c=await tr(n.baseRepoPath),u=at(c);if(!u)throw new Error(`origin "${c}" is not a GitHub remote`);r("info",`Retry push for ${n.issueKey}: branch ${n.branch} at ${n.headSha.slice(0,7)}`);let f=t.jiraFor(n.repoName);await ed({gitDir:n.baseRepoPath,ownerRepo:u,runId:n.runId,issueKey:n.issueKey,issueSummary:n.issueSummary,branch:n.branch,baseBranch:n.baseBranch,jiraTransition:n.jiraTransition,jiraTransitionOnMerge:n.jiraTransitionOnMerge,requireApproval:n.requireApproval,mergeOnApprove:n.mergeOnApprove??!1,mergeMethod:n.mergeMethod??"squash",autoMerge:n.autoMerge??!1,doneLabel:n.doneLabel,failedLabel:n.failedLabel,repoName:n.repoName,jira:f,cfg:ye()??t.cfg,actorEmail:n.actorEmail,summary:n.resultSummary,prSummary:n.prSummary||void 0,cost:{costUsd:n.costUsd},emit:r,setStatus:s}),Aa(e),await f.editLabels(n.issueKey,{remove:[n.failedLabel]}).catch(()=>{})}catch(l){let c=l instanceof Error?l.message:String(l);r("error",`Retry push failed: ${c}`),ji({...n,nextLogSeq:o()}),s("failed",{error:c,retryAvailable:!0})}}function sd(t,e){let n=1e5;return{emit:(i,o)=>{t.transport.send({type:"run.log",runId:e,seq:n++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&y.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{t.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function id(t,e,n){try{await t.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
697
697
 
698
698
  Error: ${n.slice(0,800)}
699
699
 
@@ -722,7 +722,7 @@ What this means: ${t.cause}
722
722
  Run these ON THE DEPLOY MACHINE:
723
723
  `+t.commands.map(e=>` ${e}`).join(`
724
724
  `)+`
725
- ${t.note}`:""}var dr=I(require("node:path"),1),fr=require("node:child_process"),qa=I(require("node:readline"),1),Fa=require("node:crypto"),pr=I(_e(),1);var wd=I(_e(),1);wt();ct();nr();var dd=require("node:child_process"),Os=I(require("node:fs"),1),Da=I(require("node:path"),1),Cy=["/etc/systemd/system","/lib/systemd/system","/usr/lib/systemd/system"],Iy=["/etc/caddy/Caddyfile","/usr/local/etc/caddy/Caddyfile","/etc/nginx/nginx.conf"],Ry=["/etc/nginx/sites-enabled","/etc/nginx/conf.d","/etc/caddy/conf.d","/etc/caddy/sites-enabled"];function hd(t,e=512e3){try{let n=Os.default.statSync(t);return!n.isFile()||n.size>e?null:Os.default.readFileSync(t,"utf8")}catch{return null}}function fd(t,e=60){try{return Os.default.readdirSync(t).slice(0,e).map(n=>Da.default.join(t,n)).filter(n=>{try{return Os.default.statSync(n).isFile()}catch{return!1}})}catch{return[]}}function Ey(t,e=Cy){let n=t.replace(/\/+$/,"");if(!n)return[];let r=[];for(let s of e)for(let i of fd(s)){if(!i.endsWith(".service"))continue;let o=hd(i);if(!o||!o.includes(n))continue;let l=/^\s*ExecStart\s*=\s*(.+)$/m.exec(o)?.[1]?.trim()??"",c=/^\s*User\s*=\s*(.+)$/m.exec(o)?.[1]?.trim()??"root (no User= line)";r.push(`${Da.default.basename(i,".service")} (User=${c})`+(l?` runs: ${l}`:""))}return r}function Ay(t,e=Iy,n=Ry){let r=t.map(o=>o.trim().toLowerCase()).filter(Boolean);if(!r.length)return[];let s=[...e,...n.flatMap(o=>fd(o))],i=[];for(let o of s){let l=hd(o);if(!l)continue;let c=l.toLowerCase(),u=r.find(p=>c.includes(p));if(!u)continue;let f=l.split(`
725
+ ${t.note}`:""}var dr=I(require("node:path"),1),fr=require("node:child_process"),qa=I(require("node:readline"),1),Fa=require("node:crypto"),pr=I(_e(),1);var wd=I(_e(),1);wt();ct();nr();var dd=require("node:child_process"),Os=I(require("node:fs"),1),Da=I(require("node:path"),1),Cy=["/etc/systemd/system","/lib/systemd/system","/usr/lib/systemd/system"],Iy=["/etc/caddy/Caddyfile","/usr/local/etc/caddy/Caddyfile","/etc/nginx/nginx.conf"],Ey=["/etc/nginx/sites-enabled","/etc/nginx/conf.d","/etc/caddy/conf.d","/etc/caddy/sites-enabled"];function hd(t,e=512e3){try{let n=Os.default.statSync(t);return!n.isFile()||n.size>e?null:Os.default.readFileSync(t,"utf8")}catch{return null}}function fd(t,e=60){try{return Os.default.readdirSync(t).slice(0,e).map(n=>Da.default.join(t,n)).filter(n=>{try{return Os.default.statSync(n).isFile()}catch{return!1}})}catch{return[]}}function Ay(t,e=Cy){let n=t.replace(/\/+$/,"");if(!n)return[];let r=[];for(let s of e)for(let i of fd(s)){if(!i.endsWith(".service"))continue;let o=hd(i);if(!o||!o.includes(n))continue;let l=/^\s*ExecStart\s*=\s*(.+)$/m.exec(o)?.[1]?.trim()??"",c=/^\s*User\s*=\s*(.+)$/m.exec(o)?.[1]?.trim()??"root (no User= line)";r.push(`${Da.default.basename(i,".service")} (User=${c})`+(l?` runs: ${l}`:""))}return r}function Ry(t,e=Iy,n=Ey){let r=t.map(o=>o.trim().toLowerCase()).filter(Boolean);if(!r.length)return[];let s=[...e,...n.flatMap(o=>fd(o))],i=[];for(let o of s){let l=hd(o);if(!l)continue;let c=l.toLowerCase(),u=r.find(p=>c.includes(p));if(!u)continue;let f=l.split(`
726
726
  `).filter(p=>/reverse_proxy|proxy_pass|root\s+\*?\s*\//i.test(p)).map(p=>p.trim()).slice(0,8);i.push(`${o} mentions ${u}`+(f.length?` - routing lines: ${f.join(" | ")}`:" - no routing line found"))}return i}function Ns(t){let e=l=>{try{return(0,dd.execFileSync)("git",l,{cwd:t,encoding:"utf8",timeout:2e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0",GIT_ASKPASS:"true"},stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}},n=e(["ls-remote","--heads","origin"]),r=e(["branch","--format=%(refname:short)"]),s=e(["branch","-r","--format=%(refname:short)"]),i=n?n.split(`
727
727
  `).map(l=>l.split(/\s+/)[1]??"").map(l=>l.replace(/^refs\/heads\//,"")).filter(Boolean):null,o=[`
728
728
 
@@ -730,7 +730,7 @@ BRANCHES - asked of git just now by the runner, which has a shell. Do NOT conclu
730
730
  `).join(", ")}`),s&&o.push(`- remote-tracking refs already fetched here: ${s.split(`
731
731
  `).join(", ")}`),i&&s){let l=new Set(s.split(`
732
732
  `).map(u=>u.replace(/^origin\//,""))),c=i.filter(u=>!l.has(u));c.length&&o.push(`- exists on origin but NOT fetched here yet: ${c.join(", ")}. This is a \`git fetch\`, not a missing branch - never report it as a blocker.`)}return o.join(`
733
- `)}function $y(t){try{return new URL(t).hostname}catch{return""}}function La(t){let e=t.urls.map($y).filter(Boolean),n=Ey(t.repoPath),r=Ay(e),s=[`
733
+ `)}function $y(t){try{return new URL(t).hostname}catch{return""}}function La(t){let e=t.urls.map($y).filter(Boolean),n=Ay(t.repoPath),r=Ry(e),s=[`
734
734
 
735
735
  ABOUT THE MACHINE THIS RUNS ON - gathered by the runner just now, read-only. Trust these over anything you infer from the repository: the repo is exactly where supervision and proxying are NOT configured, so "the repo has no systemd unit" says nothing about whether a unit exists.`];return s.push(n.length?`- systemd units pointing at this checkout (${t.repoPath}):
736
736
  `+n.map(i=>` - ${i}`).join(`
@@ -749,7 +749,7 @@ ${t.requestedBy?`Requested by ${t.requestedBy}. `:""}Nothing has been executed y
749
749
 
750
750
  ${i.slice(0,800)}
751
751
 
752
- (run \`${t.runId}\`)`),n("failed",{error:i})}}function Ny(t){let e=t.environment;if(!t.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 - 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 n=Ot(t.cfg,t.project.repoName,e.name),r=e.requiredSecrets.filter(s=>!n[s]&&!process.env[s]);return r.length?`missing deploy secret(s) on this runner: ${r.join(", ")}. Set them with: allwright env set "${t.project.repoName}" "${e.name}" ${r[0]}=...`:null}async function _d(t,e,n){let r=t.environment,s=Ot(t.cfg,t.project.repoName,r.name),i=Ka(Object.values(s)),o=Date.now(),l=[];if(n("running"),e("info",`Deploying ${t.issueKey} to "${r.name}"`+(t.requestedBy?` (requested by ${t.requestedBy})`:"")+` - ${r.steps.length} step(s), ${r.timeoutSeconds}s budget`),r.auditBeforeDeploy){e("info",`Pre-deploy ${r.auditBeforeDeploy} audit starting (advisory - will not block)`);try{let v=Ke(t.cfg,t.project,"assist"),O="error"in v?{ok:!1,error:v.error}:await Yr({projectId:t.project.id,repoPath:t.repoPath,role:r.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",agent:v,jira:t.jira});if(!O.ok)e("warn",`Pre-deploy audit could not run: ${O.error} - deploying anyway (advisory)`);else if(!O.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let H={};for(let z of O.audit.findings)H[z.severity]=(H[z.severity]??0)+1;e("warn",`Pre-deploy audit: ${O.audit.findings.length} finding(s) (`+Object.entries(H).map(([z,B])=>`${B} ${z}`).join(", ")+") - full report on the Audits page. Deploying anyway (advisory).");for(let z of O.audit.findings.slice(0,5))e("warn",` [${z.severity}] ${z.title} - ${z.evidence[0]?.file??""}`)}}catch(v){e("warn",`Pre-deploy audit crashed: ${v instanceof Error?v.message:String(v)} - deploying anyway`)}}if(r.requireSyncCheck){if(!r.previousEnvBranch||!r.branch){let O=r.branch?`"${r.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 "${r.name}" moved to the top?), or turn the check off.`:`"${r.name}" requires a branch sync check but has no branch set - set it, or turn the check off`;e("error",O),await dt(t,`**Allwright refused to deploy to \`${r.name}\`.**
752
+ (run \`${t.runId}\`)`),n("failed",{error:i})}}function Ny(t){let e=t.environment;if(!t.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 - 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 n=Ot(t.cfg,t.project.repoName,e.name),r=e.requiredSecrets.filter(s=>!n[s]&&!process.env[s]);return r.length?`missing deploy secret(s) on this runner: ${r.join(", ")}. Set them with: allwright env set "${t.project.repoName}" "${e.name}" ${r[0]}=...`:null}async function _d(t,e,n){let r=t.environment,s=Ot(t.cfg,t.project.repoName,r.name),i=Ka(Object.values(s)),o=Date.now(),l=[];if(n("running"),e("info",`Deploying ${t.issueKey} to "${r.name}"`+(t.requestedBy?` (requested by ${t.requestedBy})`:"")+` - ${r.steps.length} step(s), ${r.timeoutSeconds}s budget`),r.auditBeforeDeploy){e("info",`Pre-deploy ${r.auditBeforeDeploy} audit starting (advisory - will not block)`);try{let v=Ke(t.cfg,t.project,"assist"),O="error"in v?{ok:!1,error:v.error}:await Yr({projectId:t.project.id,repoPath:t.repoPath,role:r.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",agent:v,jira:t.jira});if(!O.ok)e("warn",`Pre-deploy audit could not run: ${O.error} - deploying anyway (advisory)`);else if(!O.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let Z={};for(let z of O.audit.findings)Z[z.severity]=(Z[z.severity]??0)+1;e("warn",`Pre-deploy audit: ${O.audit.findings.length} finding(s) (`+Object.entries(Z).map(([z,K])=>`${K} ${z}`).join(", ")+") - full report on the Audits page. Deploying anyway (advisory).");for(let z of O.audit.findings.slice(0,5))e("warn",` [${z.severity}] ${z.title} - ${z.evidence[0]?.file??""}`)}}catch(v){e("warn",`Pre-deploy audit crashed: ${v instanceof Error?v.message:String(v)} - deploying anyway`)}}if(r.requireSyncCheck){if(!r.previousEnvBranch||!r.branch){let O=r.branch?`"${r.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 "${r.name}" moved to the top?), or turn the check off.`:`"${r.name}" requires a branch sync check but has no branch set - set it, or turn the check off`;e("error",O),await dt(t,`**Allwright refused to deploy to \`${r.name}\`.**
753
753
 
754
754
  ${O}
755
755
 
@@ -757,14 +757,14 @@ ${O}
757
757
 
758
758
  Allwright run ${t.runId}`);if(!O.ok){e("error",O.reason??"merge failed"),await dt(t,`**Allwright deploy to \`${r.name}\` failed before running anything.**
759
759
 
760
- ${O.reason}`),n("failed",{error:O.reason});return}O.alreadyMerged?e("info",`"${v}" is already in "${r.branch}" - nothing to merge`):(e("info",`Pushing "${r.branch}" to origin`),await sa(c,r.branch))}let f=await tt(c).catch(()=>"");f&&e("info",`Deploying commit ${f.slice(0,10)}`);let p=Dy(c,r.workdir),b={...process.env,...s,ALLWRIGHT_ENVIRONMENT:r.name,ALLWRIGHT_ISSUE_KEY:t.issueKey,ALLWRIGHT_RUN_ID:t.runId,ALLWRIGHT_DEPLOY_REF:f,ALLWRIGHT_BRANCH:r.branch,TICKETPILOT_ENVIRONMENT:r.name,TICKETPILOT_ISSUE_KEY:t.issueKey,TICKETPILOT_RUN_ID:t.runId,TICKETPILOT_DEPLOY_REF:f,TICKETPILOT_BRANCH:r.branch},w=0,S=r.timeoutSeconds*1e3;for(let[v,O]of r.steps.entries()){let H=S-(Date.now()-o);if(H<=0){let B=`deploy exceeded its ${r.timeoutSeconds}s budget before step ${v+1}`;e("error",B),await dt(t,`**Allwright deploy to \`${r.name}\` timed out.**
760
+ ${O.reason}`),n("failed",{error:O.reason});return}O.alreadyMerged?e("info",`"${v}" is already in "${r.branch}" - nothing to merge`):(e("info",`Pushing "${r.branch}" to origin`),await sa(c,r.branch))}let f=await tt(c).catch(()=>"");f&&e("info",`Deploying commit ${f.slice(0,10)}`);let p=Dy(c,r.workdir),b={...process.env,...s,ALLWRIGHT_ENVIRONMENT:r.name,ALLWRIGHT_ISSUE_KEY:t.issueKey,ALLWRIGHT_RUN_ID:t.runId,ALLWRIGHT_DEPLOY_REF:f,ALLWRIGHT_BRANCH:r.branch,TICKETPILOT_ENVIRONMENT:r.name,TICKETPILOT_ISSUE_KEY:t.issueKey,TICKETPILOT_RUN_ID:t.runId,TICKETPILOT_DEPLOY_REF:f,TICKETPILOT_BRANCH:r.branch},w=0,S=r.timeoutSeconds*1e3;for(let[v,O]of r.steps.entries()){let Z=S-(Date.now()-o);if(Z<=0){let K=`deploy exceeded its ${r.timeoutSeconds}s budget before step ${v+1}`;e("error",K),await dt(t,`**Allwright deploy to \`${r.name}\` timed out.**
761
761
 
762
- ${B}`),n("timed_out",{error:B,deployedRef:f});return}e("info",`\u25B6 step ${v+1}/${r.steps.length}: ${O.name}`);let z=await Ly({command:O.run,cwd:p,env:b,timeoutMs:H,onLine:(B,d)=>{w++;let m=Oy(d);m&&l.length<20&&l.push(m),w===pd&&e("warn","(output truncated - deploy log limit reached)"),!(w>=pd)&&e(B,i(d))}});if(z.timedOut){let B=`step "${O.name}" hit the ${r.timeoutSeconds}s deploy budget and was killed`;e("error",B),await dt(t,`**Allwright deploy to \`${r.name}\` timed out.**
762
+ ${K}`),n("timed_out",{error:K,deployedRef:f});return}e("info",`\u25B6 step ${v+1}/${r.steps.length}: ${O.name}`);let z=await Ly({command:O.run,cwd:p,env:b,timeoutMs:Z,onLine:(K,d)=>{w++;let m=Oy(d);m&&l.length<20&&l.push(m),w===pd&&e("warn","(output truncated - deploy log limit reached)"),!(w>=pd)&&e(K,i(d))}});if(z.timedOut){let K=`step "${O.name}" hit the ${r.timeoutSeconds}s deploy budget and was killed`;e("error",K),await dt(t,`**Allwright deploy to \`${r.name}\` timed out.**
763
763
 
764
- ${B}`),n("timed_out",{error:B,deployedRef:f});return}if(z.code!==0){if(O.continueOnError){e("warn",`step "${O.name}" exited ${z.code} - continuing (marked continue-on-error)`);continue}let B="";try{B=i(await Vo(c))}catch{}let d=ud(cd(z.tail??"",{cwd:c})),m=`step ${v+1} "${O.name}" failed with exit code ${z.code}`+(z.tail?`: ${i(z.tail)}`:"")+d+(B?`
764
+ ${K}`),n("timed_out",{error:K,deployedRef:f});return}if(z.code!==0){if(O.continueOnError){e("warn",`step "${O.name}" exited ${z.code} - continuing (marked continue-on-error)`);continue}let K="";try{K=i(await Vo(c))}catch{}let d=ud(cd(z.tail??"",{cwd:c})),m=`step ${v+1} "${O.name}" failed with exit code ${z.code}`+(z.tail?`: ${i(z.tail)}`:"")+d+(K?`
765
765
 
766
766
  Checkout at failure:
767
- ${B}`:"");e("error",m),await dt(t,`**Allwright deploy to \`${r.name}\` failed.**
767
+ ${K}`:"");e("error",m),await dt(t,`**Allwright deploy to \`${r.name}\` failed.**
768
768
 
769
769
  Step ${v+1} \`${O.name}\` exited ${z.code}.
770
770
 
@@ -774,9 +774,9 @@ ${i(z.tail).slice(0,1200)}
774
774
 
775
775
  `:"")+(d?`${d.trim()}
776
776
 
777
- `:"")+(B?`Checkout at failure:
777
+ `:"")+(K?`Checkout at failure:
778
778
  \`\`\`
779
- ${B.slice(0,800)}
779
+ ${K.slice(0,800)}
780
780
  \`\`\`
781
781
 
782
782
  `:"")+(l.length?`**Before retrying, these still need a person:**
@@ -784,9 +784,9 @@ ${B.slice(0,800)}
784
784
  `)+`
785
785
 
786
786
  `:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${t.runId}\`)`),lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:`deploy to ${r.name} failed`,detail:`step ${v+1} "${O.name}" exit ${z.code}`+(z.tail?`
787
- ${i(z.tail).slice(0,500)}`:"")}),l.length&&md(e,l),n("failed",{error:m.slice(0,1600),deployedRef:f,...l.length?{manualSteps:l}:{}});return}e("info",`\u2713 step ${v+1}/${r.steps.length}: ${O.name}`)}n("posting");let x=Math.round((Date.now()-o)/1e3),A=null;r.publicUrl?.trim()&&(A=await Fy(r.publicUrl.trim()),e(A?"warn":"info",A??`${r.publicUrl.trim()} points at this machine - the deploy is live there`)),t.issueKey!==pr.BRANCH_DEPLOY_ISSUE_KEY&&await dt(t,`**Allwright deployed \`${t.issueKey}\` to \`${r.name}\`.**
787
+ ${i(z.tail).slice(0,500)}`:"")}),l.length&&md(e,l),n("failed",{error:m.slice(0,1600),deployedRef:f,...l.length?{manualSteps:l}:{}});return}e("info",`\u2713 step ${v+1}/${r.steps.length}: ${O.name}`)}n("posting");let x=Math.round((Date.now()-o)/1e3),R=null;r.publicUrl?.trim()&&(R=await Fy(r.publicUrl.trim()),e(R?"warn":"info",R??`${r.publicUrl.trim()} points at this machine - the deploy is live there`)),t.issueKey!==pr.BRANCH_DEPLOY_ISSUE_KEY&&await dt(t,`**Allwright deployed \`${t.issueKey}\` to \`${r.name}\`.**
788
788
 
789
- `+(A?`> **Live where?** ${A}
789
+ `+(R?`> **Live where?** ${R}
790
790
 
791
791
  `:"")+(l.length?`**${l.length} step(s) still need a person - Allwright did not run these:**
792
792
  `+l.map(v=>`- \`${v.command}\`${v.why?` - ${v.why}`:""}`).join(`
@@ -795,14 +795,14 @@ ${i(z.tail).slice(0,500)}`:"")}),l.length&&md(e,l),n("failed",{error:m.slice(0,1
795
795
  `:"")+(f?`Commit: \`${f.slice(0,10)}\`${r.branch?` on \`${r.branch}\``:""}
796
796
  `:"")+`${r.steps.length} step(s) in ${x}s.`+(t.requestedBy?` Requested by ${t.requestedBy}.`:"")+`
797
797
 
798
- (run \`${t.runId}\`)`);let j=await My(t,e,f);t.project.goLiveIssueKey&&e("info",`Go-live checklist: this project keeps one on ${t.project.goLiveIssueKey} - review it before shipping to production`),Is(t.repoPath,t.issueKey)&&lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:`deploy to ${r.name} succeeded after earlier failure`,detail:f?`commit ${f.slice(0,10)}`:void 0}),l.length&&md(e,l),n("succeeded",{resultSummary:`Deployed to ${r.name}${f?` at ${f.slice(0,10)}`:""} in ${x}s`+(j!==null?` \xB7 ${j} ticket(s) moved to "${r.deployToColumn}"`:"")+(l.length?` \xB7 ${l.length} manual step(s) left for you`:"")+(A?` \xB7 NOT reachable at ${r.publicUrl} yet`:""),deployedRef:f,...l.length?{manualSteps:l}:{}}),e("info",`Deploy to "${r.name}" succeeded in ${x}s`)}async function My(t,e,n){let r=t.environment;if(!r.deployFromColumn||!r.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await t.jira.search(`project = "${t.project.jiraProjectKey}" AND status = "${r.deployFromColumn}" ORDER BY updated ASC`,50)}catch(l){return e("warn",`deploy succeeded, but listing tickets in "${r.deployFromColumn}" failed: ${l instanceof Error?l.message:l} - move them by hand`),null}if(!i.length)return e("info",`No tickets in "${r.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${r.deployFromColumn}" to "${r.deployToColumn}"`);let o=0;for(let l of i)try{if(await t.jira.addComment(l.key,`**Allwright: deployed to \`${r.name}\` on ${s}.**
798
+ (run \`${t.runId}\`)`);let j=await My(t,e,f);t.project.goLiveIssueKey&&e("info",`Go-live checklist: this project keeps one on ${t.project.goLiveIssueKey} - review it before shipping to production`),Is(t.repoPath,t.issueKey)&&lt(t.repoPath,{issueKey:t.issueKey,runId:t.runId,title:`deploy to ${r.name} succeeded after earlier failure`,detail:f?`commit ${f.slice(0,10)}`:void 0}),l.length&&md(e,l),n("succeeded",{resultSummary:`Deployed to ${r.name}${f?` at ${f.slice(0,10)}`:""} in ${x}s`+(j!==null?` \xB7 ${j} ticket(s) moved to "${r.deployToColumn}"`:"")+(l.length?` \xB7 ${l.length} manual step(s) left for you`:"")+(R?` \xB7 NOT reachable at ${r.publicUrl} yet`:""),deployedRef:f,...l.length?{manualSteps:l}:{}}),e("info",`Deploy to "${r.name}" succeeded in ${x}s`)}async function My(t,e,n){let r=t.environment;if(!r.deployFromColumn||!r.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await t.jira.search(`project = "${t.project.jiraProjectKey}" AND status = "${r.deployFromColumn}" ORDER BY updated ASC`,50)}catch(l){return e("warn",`deploy succeeded, but listing tickets in "${r.deployFromColumn}" failed: ${l instanceof Error?l.message:l} - move them by hand`),null}if(!i.length)return e("info",`No tickets in "${r.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${r.deployFromColumn}" to "${r.deployToColumn}"`);let o=0;for(let l of i)try{if(await t.jira.addComment(l.key,`**Allwright: deployed to \`${r.name}\` on ${s}.**
799
799
 
800
800
  `+(n?`Commit: \`${n.slice(0,10)}\`${r.branch?` on \`${r.branch}\``:""}
801
801
  `:"")+(t.requestedBy?`Requested by ${t.requestedBy}. `:"")+`(run \`${t.runId}\`)`),!await t.jira.transitionByName(l.key,r.deployToColumn)){e("warn",`${l.key}: no workflow transition to "${r.deployToColumn}" from its current status - left in place`),await t.jira.addComment(l.key,`**Allwright could not move this ticket to \`${r.deployToColumn}\`** - no such transition from its current status. The deploy itself succeeded; move it by hand. (run \`${t.runId}\`)`).catch(()=>{});continue}o++,e("info",`\u2713 ${l.key} \u2192 "${r.deployToColumn}"`)}catch(c){e("warn",`${l.key}: sweep failed (${c instanceof Error?c.message:c}) - left in "${r.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${r.deployToColumn}"`),o}async function zy(t,e){let n=t.environment,r=n.previousEnvBranch,s=(l,c=!1)=>({error:l,guard:c,comment:`**Allwright could not deploy \`${t.issueKey}\` to \`${n.name}\`.**
802
802
 
803
803
  ${l}
804
804
 
805
- (run \`${t.runId}\`)`});e("info",`Checking "${n.branch}" is in sync with "${r}" before deploying`);try{await ln(t.repoPath,r),await ln(t.repoPath,n.branch)}catch(l){return s(`sync check could not fetch branches: ${l instanceof Error?l.message:String(l)}`)}let i;try{i=await ia(t.repoPath,`origin/${r}`,`origin/${n.branch}`)}catch(l){return s(`sync check failed: ${l instanceof Error?l.message:String(l)}`)}if(!i)return e("info",`"${n.branch}" already matches "${r}" - continuing`),null;e("warn",`"${n.branch}" and "${r}" have diverged - opening a PR instead of deploying`);let o=Ae(ye()??t.cfg,t.project.repoName);if(!o)return s(`"${n.branch}" and "${r}" 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 l=await tr(t.repoPath),c=at(l);if(!c)throw new Error(`could not parse a GitHub owner/repo from origin "${l}"`);let f=await new $e(o).createPullRequest(c.owner,c.repo,{title:`Sync ${n.name} (${n.branch}) with ${r}`,head:r,base:n.branch,body:`Allwright opened this automatically while trying to deploy \`${t.issueKey}\` to \`${n.name}\`: \`${n.branch}\` doesn't have everything that's on \`${r}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
805
+ (run \`${t.runId}\`)`});e("info",`Checking "${n.branch}" is in sync with "${r}" before deploying`);try{await ln(t.repoPath,r),await ln(t.repoPath,n.branch)}catch(l){return s(`sync check could not fetch branches: ${l instanceof Error?l.message:String(l)}`)}let i;try{i=await ia(t.repoPath,`origin/${r}`,`origin/${n.branch}`)}catch(l){return s(`sync check failed: ${l instanceof Error?l.message:String(l)}`)}if(!i)return e("info",`"${n.branch}" already matches "${r}" - continuing`),null;e("warn",`"${n.branch}" and "${r}" have diverged - opening a PR instead of deploying`);let o=Re(ye()??t.cfg,t.project.repoName);if(!o)return s(`"${n.branch}" and "${r}" 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 l=await tr(t.repoPath),c=at(l);if(!c)throw new Error(`could not parse a GitHub owner/repo from origin "${l}"`);let f=await new $e(o).createPullRequest(c.owner,c.repo,{title:`Sync ${n.name} (${n.branch}) with ${r}`,head:r,base:n.branch,body:`Allwright opened this automatically while trying to deploy \`${t.issueKey}\` to \`${n.name}\`: \`${n.branch}\` doesn't have everything that's on \`${r}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
806
806
 
807
807
  (run \`${t.runId}\`)`});return s(`"${n.branch}" is not in sync with "${r}" - opened ${f.url} to catch it up. Merge that, then retry the deploy.`,!0)}catch(l){return s(`could not open a sync PR: ${l instanceof Error?l.message:String(l)}`)}}function Dy(t,e){if(!e.trim())return t;let n=dr.default.resolve(t,e),r=dr.default.relative(t,n);if(r.startsWith("..")||dr.default.isAbsolute(r))throw new Error(`working directory "${e}" is outside the repository checkout`);return n}function Ly(t){return new Promise(e=>{let n=(0,fr.spawn)("bash",["-lc",t.command],{cwd:t.cwd,env:t.env,detached:!0,stdio:["ignore","pipe","pipe"]}),r=[],s=u=>{r.push(u),r.length>20&&r.shift()},i=!1,o=!1,l=u=>{i||(i=!0,clearTimeout(c),e({code:u,timedOut:o,tail:r.join(`
808
808
  `)}))},c=setTimeout(()=>{o=!0,gd(n.pid,"SIGTERM"),setTimeout(()=>gd(n.pid,"SIGKILL"),1e4).unref()},t.timeoutMs);qa.default.createInterface({input:n.stdout}).on("line",u=>{s(u),t.onLine("info",u)}),qa.default.createInterface({input:n.stderr}).on("line",u=>{s(u),t.onLine("warn",u)}),n.on("error",u=>{s(`failed to start: ${u.message}`),l(127)}),n.on("close",u=>l(u??1))})}function gd(t,e){if(t)try{process.kill(-t,e)}catch{try{process.kill(t,e)}catch{}}}function Ka(t){let e=t.filter(n=>n&&n.length>=6).sort((n,r)=>r.length-n.length);return e.length?n=>{let r=n;for(let s of e)r=r.split(s).join("***");return r}:n=>n}async function dt(t,e){if(t.issueKey!==pr.BRANCH_DEPLOY_ISSUE_KEY)try{await t.jira.addComment(t.issueKey,e)}catch(n){y.error(`could not post deploy comment to ${t.issueKey}: ${n}`)}}function Ha(t){return Mi(t)!==null}async function kd(t,e){let n=Mi(e);if(!n)return;let{emit:r,setStatus:s}=Ba({runId:e,transport:t.transport}),i=t.lookup(n.projectId,n.environmentName);if(!i){let l=`approved, but environment "${n.environmentName}" is no longer in this runner's config (deleted or renamed?) - nothing was deployed`;r("error",l),s("failed",{error:l}),zi(e);return}zi(e);let o={runId:e,project:i.project,environment:i.environment,issueKey:n.issueKey,issueSummary:n.issueSummary,repoPath:i.repoPath,cfg:t.cfg,jira:t.jiraFor(i.project.repoName),transport:t.transport,requestedBy:n.requestedBy};r("info",`Approved - running the ${i.environment.steps.length} deploy step(s) now`);try{await _d(o,r,s)}catch(l){let c=l instanceof Error?l.message:String(l);r("error",`Deploy failed: ${c}`),await dt(o,`**Allwright deploy failed.**
@@ -820,11 +820,11 @@ ${t.map(n=>` ${n}`).join(`
820
820
  `)}`:""}function Cd(t,e,n,r="",s="."){let i=bd.filter(c=>Td(c)),o=bd.filter(c=>!i.includes(c)),l=Object.keys(Ot(t,e,n));return`About the machine these steps will run on (gathered by the runner, trust it):
821
821
  - available tools: ${i.join(", ")||"(none of the common ones)"}
822
822
  - NOT installed: ${o.join(", ")||"(none missing)"}
823
- - secrets already stored for this environment (names only): ${l.join(", ")||"(none yet)"}`+Hy()+Ky(r)+Ns(s)}async function Id(t){let e=[];if(t.publicUrl?.trim()&&await By(t.publicUrl.trim(),e),e.push(hr.default.existsSync(t.repoPath)?{name:"repo-path",ok:!0,detail:t.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${t.repoPath}`}),e.push({name:"deploys-enabled",ok:t.cfg.deploy.enabled,detail:t.cfg.deploy.enabled?"enabled on this runner":"disabled - run: allwright deploy enable (then restart the runner)"}),t.workdir){let l=dr.default.isAbsolute(t.workdir)?t.workdir:dr.default.join(t.repoPath,t.workdir);e.push(hr.default.existsSync(l)?{name:"workdir",ok:!0,detail:l}:{name:"workdir",ok:!1,detail:`does not exist: ${l}`})}if(t.branch){let l=xd("git",["-C",t.repoPath,"ls-remote","--heads","origin",t.branch]);e.push(l.trim()?{name:"branch",ok:!0,detail:`origin/${t.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${t.branch}" (or the remote is unreachable)`})}let n=Ot(t.cfg,t.repoName,t.environmentName),r=new Set(t.requiredSecrets);for(let l of t.steps)for(let c of l.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))r.add(c[1]);let s=[...r].filter(l=>!n[l]&&!process.env[l]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} - set with: allwright env set "${t.repoName}" "${t.environmentName}" ${s[0]}=...`:`${r.size} present`});let i=new Set;for(let l of t.steps)for(let c of l.run.split(/&&|\|\||;|\|/)){let u=c.trim().split(/\s+/),f=u.shift();for(;f&&(/^[A-Za-z_][A-Za-z0-9_]*=/.test(f)||f==="sudo"||f==="env"||f==="nohup");)f=u.shift();!f||f.startsWith("$")||f.startsWith("#")||f.startsWith("(")||i.add(f)}let o=[...i].filter(l=>!Td(l));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(l=>l.ok),checks:e}}async function Rd(t){let e=Cd(t.cfg,t.repoName,t.environmentName,"",t.repoPath),n=qt(wd.DEPLOY_FIX_PROMPT_TEMPLATE,{envName:t.environmentName,steps:t.steps.map((f,p)=>`${p+1}. [${f.name}]${f.continueOnError?" (continues on error)":""}
823
+ - secrets already stored for this environment (names only): ${l.join(", ")||"(none yet)"}`+Hy()+Ky(r)+Ns(s)}async function Id(t){let e=[];if(t.publicUrl?.trim()&&await By(t.publicUrl.trim(),e),e.push(hr.default.existsSync(t.repoPath)?{name:"repo-path",ok:!0,detail:t.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${t.repoPath}`}),e.push({name:"deploys-enabled",ok:t.cfg.deploy.enabled,detail:t.cfg.deploy.enabled?"enabled on this runner":"disabled - run: allwright deploy enable (then restart the runner)"}),t.workdir){let l=dr.default.isAbsolute(t.workdir)?t.workdir:dr.default.join(t.repoPath,t.workdir);e.push(hr.default.existsSync(l)?{name:"workdir",ok:!0,detail:l}:{name:"workdir",ok:!1,detail:`does not exist: ${l}`})}if(t.branch){let l=xd("git",["-C",t.repoPath,"ls-remote","--heads","origin",t.branch]);e.push(l.trim()?{name:"branch",ok:!0,detail:`origin/${t.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${t.branch}" (or the remote is unreachable)`})}let n=Ot(t.cfg,t.repoName,t.environmentName),r=new Set(t.requiredSecrets);for(let l of t.steps)for(let c of l.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))r.add(c[1]);let s=[...r].filter(l=>!n[l]&&!process.env[l]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} - set with: allwright env set "${t.repoName}" "${t.environmentName}" ${s[0]}=...`:`${r.size} present`});let i=new Set;for(let l of t.steps)for(let c of l.run.split(/&&|\|\||;|\|/)){let u=c.trim().split(/\s+/),f=u.shift();for(;f&&(/^[A-Za-z_][A-Za-z0-9_]*=/.test(f)||f==="sudo"||f==="env"||f==="nohup");)f=u.shift();!f||f.startsWith("$")||f.startsWith("#")||f.startsWith("(")||i.add(f)}let o=[...i].filter(l=>!Td(l));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(l=>l.ok),checks:e}}async function Ed(t){let e=Cd(t.cfg,t.repoName,t.environmentName,"",t.repoPath),n=qt(wd.DEPLOY_FIX_PROMPT_TEMPLATE,{envName:t.environmentName,steps:t.steps.map((f,p)=>`${p+1}. [${f.name}]${f.continueOnError?" (continues on error)":""}
824
824
  ${f.run}`).join(`
825
- `),failedStep:t.failedStep||"(unknown)",errorText:t.errorText||"(no error text recorded)",machineContext:e}),r=await t.agent.adapter.run({repoPath:t.repoPath,prompt:n,timeoutSeconds:240,bin:t.agent.bin,mode:"read_only",maxTurns:40,sessionId:(0,Fa.randomUUID)(),onLog:()=>{}});if(!r.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:r.error??"the agent produced no output"};let s=Ad(r.resultText),i=(r.resultText.split(/```/)[0]??"").replace(/^\s*CAUSE TYPE:.*$/im,"").trim(),l=/```(?:markdown|md)\s*\n([\s\S]*?)```/i.exec(r.resultText)?.[1]?.trim()??"",c=l?Ki(t.repoPath):null;if(!s)return{ok:!1,steps:[],requiredSecrets:[],notes:i,error:i?"the agent diagnosed the failure (see its notes) but did not produce an applicable step list - the cause may live outside the steps":`the agent's answer was not in the expected shape. It started: "${r.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`};let u=/^\s*CAUSE TYPE:\s*(CODE|MACHINE)\b/im.exec(r.resultText)?.[1]?.toUpperCase();return u?{ok:!1,steps:[],requiredSecrets:[],notes:i,error:u==="MACHINE"?"this is not a steps problem - the steps are right, but this machine is missing an access or a credential (git has no way to authenticate, a key is absent, something is not installed). The diagnosis above says what to run ON THAT MACHINE. Allwright will not paste a credential into a deploy recipe to work around it.":"this is not a steps problem - the deploy failed because the code or the database is not ready (a build error, a failing test, or a migration that was never applied). Changing deploy steps cannot fix it; the diagnosis above says what a person has to change."}:{ok:!0,...s,notes:i||s.notes,docPath:c?.path??(l?"DEPLOY.md":""),docContent:l}}async function Ed(t){let e=Ki(t.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 - the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let n=Cd(t.cfg,t.repoName,t.environmentName,e.content,t.repoPath),r=qt(pr.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:t.environmentName,docPath:e.path,docContent:e.content,notes:t.notes.trim()||"(nothing specified)",machineContext:n}),s=await t.agent.adapter.run({repoPath:t.repoPath,prompt:r,timeoutSeconds:t.timeoutSeconds,bin:t.agent.bin,mode:"read_only",maxTurns:30,sessionId:(0,Fa.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=Ad(s.resultText);return i?{ok:!0,...i}:(y.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
826
- `+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 Ad(t){for(let e of Zy(t)){let n;try{n=JSON.parse(e)}catch{continue}let r=Uy.safeParse(Gy(n));if(r.success&&r.data.steps.length||r.success&&r.data.notes.trim())return r.data}return null}function Zy(t){let e=[];for(let s of t.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let n=t.indexOf("{"),r=t.lastIndexOf("}");return n>=0&&r>n&&e.push(t.slice(n,r+1)),e}function Gy(t){if(!t||typeof t!="object")return t;let e=t,r=(Array.isArray(t)?t:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,l)=>{if(typeof o=="string")return o.trim()?{name:vd(o,l),run:o.trim()}:null;if(!o||typeof o!="object")return null;let c=o,u=Ua(c.run,c.command,c.cmd,c.script,c.shell);return u?{name:(Ua(c.name,c.title,c.description)??vd(u,l)).slice(0,120),run:u,continueOnError:c.continueOnError===!0||c.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:r.slice(0,50),requiredSecrets:i.slice(0,50),notes:Ua(e.notes,e.note,e.explanation)??""}}function Ua(...t){for(let e of t)if(typeof e=="string"&&e.trim())return e.trim()}function vd(t,e){return(t.split(`
827
- `)[0].trim()||`Step ${e+1}`).slice(0,120)}wt();ct();nr();function Hi(t,e){if(!t.componentRoutes.length)return{project:t};let n=e.filter(Boolean);if(!n.length)return{error:`no Jira component set - project "${t.name}" routes by component (${t.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let r=t.componentRoutes.filter(i=>n.includes(i.component));if(!r.length)return{error:`component(s) [${n.join(", ")}] not mapped - known: `+t.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(r.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) - ambiguous, refusing`}:{project:{...t,repoName:r[0].repoName}}}var $d=24*3600*1e3,Zi=14,Vy=Zi*24*3600*1e3,Wy=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),Gi=class{constructor(e,n,r){this.cfg=e;this.jiraFor=n;this.transport=r}cfg;jiraFor;transport;projects=[];rules=[];environments=[];inFlight=new Set;autopilotPausedUntil=0;get busyCount(){return Math.max(this.inFlight.size,this.activeWork)}activeWork=0;get idle(){return!this.ticking&&this.inFlight.size===0&&this.activeWork===0}repoQueues=new Map;envQueues=new Map;timer=null;ticking=!1;paused=!1;jiraOf(e){return this.jiraFor(e.repoName)}routingWarned=new Set;warnRoutingOnce(e,n){this.routingWarned.has(e)||(this.routingWarned.add(e),y.warn(`Component routing refused - ${n}`))}resolveClaudeProfile(e,n){if(!n)return;let r=this.cfg.claudeProfiles[n]?.configDir;return!r&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${n}" is not set up on this runner (allwright claude login "${n}") - using the runner's own login instead.`}),y.warn(`run ${e}: claude profile "${n}" missing locally - using default login`)),r}setConfig(e,n,r=!1,s=[]){this.projects=e,this.rules=n,this.environments=s;let i=n.filter(o=>o.enabled).length;y.info(`config synced: ${e.length} project(s), ${n.length} rule(s) (${i} enabled), ${s.length} environment(s)`),r!==this.paused&&(y.info(r?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=r)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),y.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 n=this.projects.find(s=>s.repoName===e.repoName);if(!n)continue;let r=pu(n.id,e.role);if(!(r&&Date.now()-new Date(r).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{y.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=Ke(this.cfg,n,"assist");if("error"in s){y.warn(`Scheduled audit skipped: ${s.error}`);continue}let i=await Yr({projectId:n.id,repoPath:this.cfg.repos[e.repoName]?.path??"",role:e.role,scope:{kind:"repo",ref:""},model:"",agent:s,jira:this.jiraFor(e.repoName)});if(i.ok){let o=i.audit.findings.length;y.info(`Scheduled audit done: ${o} finding(s) - drift visible on the Audits page`)}else y.warn(`Scheduled audit failed: ${i.error}`)}catch(s){y.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 n of this.rules){if(!n.enabled)continue;let r=this.projects.find(i=>i.id===n.projectId);if(!r)continue;let s=this.cfg.repos[r.repoName];if(!s){y.warn(`rule "${n.name}": no local path for repo "${r.repoName}" - run: allwright repo add "${r.repoName}" /path/to/checkout`);continue}n.action.type==="deploy"?await this.pollDeployRule(n,r,s.path):n.action.type==="respond"?await this.pollRespondRule(n,r,s.path):(e.has(r.id)||(e.add(r.id),await this.sweepNeedsInput(r)),n.trigger.type==="comment_keyword"&&await this.sweepRevisions(n,r),await this.pollRule(n,r,s.path))}await this.pullAutopilotWork()}catch(e){y.warn(`poll tick failed: ${e instanceof Error?e.message:e}`)}finally{this.ticking=!1}}}async pullAutopilotWork(){if(this.inFlight.size>0||this.autopilotPausedUntil>Date.now())return;let e=await this.transport.requestAutopilotNext();if(!e?.ok)return;if(e.pausedUntil){let S=Date.parse(e.pausedUntil);Number.isFinite(S)&&(this.autopilotPausedUntil=S);return}let n=e.item;if(!n)return;let r=this.rules.find(S=>S.id===n.ruleId&&S.enabled),s=this.projects.find(S=>S.id===n.projectId);if(!r||!s){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:"the rule or project this item was queued against no longer exists"});return}let i=Hi(s,[]),o="project"in i?i.project:s,l=this.cfg.repos[o.repoName];if(!l){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:`no local checkout mapped for "${o.repoName}" on this machine`});return}let c=n.baseOverride||n.branchOverride||n.autoMerge?{...r,action:r.action.type==="implement"?{...r.action,...n.baseOverride?{baseBranch:n.baseOverride}:{},...n.branchOverride?{branchTemplate:n.branchOverride}:{},...n.autoMerge?{requireApproval:!1,autoMerge:!0}:{}}:r.action}:r;y.info(`autopilot: taking ${n.issueKey} (${r.name})`+(n.branchOverride?` -> shared branch ${n.branchOverride}`:"")+(n.baseOverride?` -> stacked on ${n.baseOverride}`:""));let u=this.jiraOf(o),f="";try{f=(await u.getIssue(n.issueKey))?.summary??""}catch(S){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:`could not read ${n.issueKey} from Jira: ${S instanceof Error?S.message:String(S)}`});return}let p=await this.transport.claimRun({ruleId:r.id,issueKey:n.issueKey,issueSummary:f,triggerFingerprint:`autopilot:${n.id}`,dedupKey:`autopilot:${n.id}`});if(!p.accepted||!p.runId){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:p.reason??"the control plane refused the run"});return}this.transport.sendAutopilotReport({itemId:n.id,outcome:"claimed",runId:p.runId});let b=`${r.id}:${n.issueKey}`;this.inFlight.add(b);let w=this.resolveClaudeProfile(p.runId,p.claudeProfile);this.enqueueForRepo(l.path,async()=>{try{await Ui({runId:p.runId,rule:c,project:o,issueKey:n.issueKey,repoPath:l.path,cfg:this.cfg,jira:u,transport:this.transport,claudeConfigDir:w,actorEmail:p.actorEmail,continueBranch:n.continueBranch})}finally{this.inFlight.delete(b)}})}async sweepGitHubApprovals(){let e=Object.values(Es());if(!e.length)return;let n=ye()??this.cfg,r=new Map,s=i=>{let o=Ae(n,i);if(!o)return null;let l=r.get(o);return l||r.set(o,l=new $e(o)),l};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let l=`gh-approve:${i.runId}`;if(this.inFlight.has(l))continue;let c,u;try{[c,u]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(w){y.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${w instanceof Error?w.message:w}`);continue}if(!u)continue;let f={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(u.merged){y.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub - completing the run`),this.inFlight.add(l);try{await $s(f,i.runId,u.headSha)}finally{this.inFlight.delete(l)}continue}if(u.state==="closed"){y.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub - failing the run`);let w=this.jiraFor(i.repoName),S=`PR #${i.prNumber} was closed on GitHub without merging`;await w.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
825
+ `),failedStep:t.failedStep||"(unknown)",errorText:t.errorText||"(no error text recorded)",machineContext:e}),r=await t.agent.adapter.run({repoPath:t.repoPath,prompt:n,timeoutSeconds:240,bin:t.agent.bin,mode:"read_only",maxTurns:40,sessionId:(0,Fa.randomUUID)(),onLog:()=>{}});if(!r.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:r.error??"the agent produced no output"};let s=Rd(r.resultText),i=(r.resultText.split(/```/)[0]??"").replace(/^\s*CAUSE TYPE:.*$/im,"").trim(),l=/```(?:markdown|md)\s*\n([\s\S]*?)```/i.exec(r.resultText)?.[1]?.trim()??"",c=l?Ki(t.repoPath):null;if(!s)return{ok:!1,steps:[],requiredSecrets:[],notes:i,error:i?"the agent diagnosed the failure (see its notes) but did not produce an applicable step list - the cause may live outside the steps":`the agent's answer was not in the expected shape. It started: "${r.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`};let u=/^\s*CAUSE TYPE:\s*(CODE|MACHINE)\b/im.exec(r.resultText)?.[1]?.toUpperCase();return u?{ok:!1,steps:[],requiredSecrets:[],notes:i,error:u==="MACHINE"?"this is not a steps problem - the steps are right, but this machine is missing an access or a credential (git has no way to authenticate, a key is absent, something is not installed). The diagnosis above says what to run ON THAT MACHINE. Allwright will not paste a credential into a deploy recipe to work around it.":"this is not a steps problem - the deploy failed because the code or the database is not ready (a build error, a failing test, or a migration that was never applied). Changing deploy steps cannot fix it; the diagnosis above says what a person has to change."}:{ok:!0,...s,notes:i||s.notes,docPath:c?.path??(l?"DEPLOY.md":""),docContent:l}}async function Ad(t){let e=Ki(t.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 - the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let n=Cd(t.cfg,t.repoName,t.environmentName,e.content,t.repoPath),r=qt(pr.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:t.environmentName,docPath:e.path,docContent:e.content,notes:t.notes.trim()||"(nothing specified)",machineContext:n}),s=await t.agent.adapter.run({repoPath:t.repoPath,prompt:r,timeoutSeconds:t.timeoutSeconds,bin:t.agent.bin,mode:"read_only",maxTurns:30,sessionId:(0,Fa.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=Rd(s.resultText);return i?{ok:!0,...i}:(y.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
826
+ `+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 Rd(t){for(let e of Zy(t)){let n;try{n=JSON.parse(e)}catch{continue}let r=Uy.safeParse(Gy(n));if(r.success&&r.data.steps.length||r.success&&r.data.notes.trim())return r.data}return null}function Zy(t){let e=[];for(let s of t.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let n=t.indexOf("{"),r=t.lastIndexOf("}");return n>=0&&r>n&&e.push(t.slice(n,r+1)),e}function Gy(t){if(!t||typeof t!="object")return t;let e=t,r=(Array.isArray(t)?t:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,l)=>{if(typeof o=="string")return o.trim()?{name:vd(o,l),run:o.trim()}:null;if(!o||typeof o!="object")return null;let c=o,u=Ua(c.run,c.command,c.cmd,c.script,c.shell);return u?{name:(Ua(c.name,c.title,c.description)??vd(u,l)).slice(0,120),run:u,continueOnError:c.continueOnError===!0||c.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:r.slice(0,50),requiredSecrets:i.slice(0,50),notes:Ua(e.notes,e.note,e.explanation)??""}}function Ua(...t){for(let e of t)if(typeof e=="string"&&e.trim())return e.trim()}function vd(t,e){return(t.split(`
827
+ `)[0].trim()||`Step ${e+1}`).slice(0,120)}wt();ct();nr();function Hi(t,e){if(!t.componentRoutes.length)return{project:t};let n=e.filter(Boolean);if(!n.length)return{error:`no Jira component set - project "${t.name}" routes by component (${t.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let r=t.componentRoutes.filter(i=>n.includes(i.component));if(!r.length)return{error:`component(s) [${n.join(", ")}] not mapped - known: `+t.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(r.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) - ambiguous, refusing`}:{project:{...t,repoName:r[0].repoName}}}var $d=24*3600*1e3,Zi=14,Vy=Zi*24*3600*1e3,Wy=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),Gi=class{constructor(e,n,r){this.cfg=e;this.jiraFor=n;this.transport=r}cfg;jiraFor;transport;projects=[];rules=[];environments=[];inFlight=new Set;autopilotPausedUntil=0;get busyCount(){return Math.max(this.inFlight.size,this.activeWork)}activeWork=0;get idle(){return!this.ticking&&this.inFlight.size===0&&this.activeWork===0}repoQueues=new Map;envQueues=new Map;timer=null;ticking=!1;paused=!1;jiraOf(e){return this.jiraFor(e.repoName)}routingWarned=new Set;warnRoutingOnce(e,n){this.routingWarned.has(e)||(this.routingWarned.add(e),y.warn(`Component routing refused - ${n}`))}resolveClaudeProfile(e,n){if(!n)return;let r=this.cfg.claudeProfiles[n]?.configDir;return!r&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${n}" is not set up on this runner (allwright claude login "${n}") - using the runner's own login instead.`}),y.warn(`run ${e}: claude profile "${n}" missing locally - using default login`)),r}setConfig(e,n,r=!1,s=[]){this.projects=e,this.rules=n,this.environments=s;let i=n.filter(o=>o.enabled).length;y.info(`config synced: ${e.length} project(s), ${n.length} rule(s) (${i} enabled), ${s.length} environment(s)`),r!==this.paused&&(y.info(r?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=r)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),y.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 n=this.projects.find(s=>s.repoName===e.repoName);if(!n)continue;let r=pu(n.id,e.role);if(!(r&&Date.now()-new Date(r).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{y.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=Ke(this.cfg,n,"assist");if("error"in s){y.warn(`Scheduled audit skipped: ${s.error}`);continue}let i=await Yr({projectId:n.id,repoPath:this.cfg.repos[e.repoName]?.path??"",role:e.role,scope:{kind:"repo",ref:""},model:"",agent:s,jira:this.jiraFor(e.repoName)});if(i.ok){let o=i.audit.findings.length;y.info(`Scheduled audit done: ${o} finding(s) - drift visible on the Audits page`)}else y.warn(`Scheduled audit failed: ${i.error}`)}catch(s){y.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 n of this.rules){if(!n.enabled)continue;let r=this.projects.find(i=>i.id===n.projectId);if(!r)continue;let s=this.cfg.repos[r.repoName];if(!s){y.warn(`rule "${n.name}": no local path for repo "${r.repoName}" - run: allwright repo add "${r.repoName}" /path/to/checkout`);continue}n.action.type==="deploy"?await this.pollDeployRule(n,r,s.path):n.action.type==="respond"?await this.pollRespondRule(n,r,s.path):(e.has(r.id)||(e.add(r.id),await this.sweepNeedsInput(r)),n.trigger.type==="comment_keyword"&&await this.sweepRevisions(n,r),await this.pollRule(n,r,s.path))}await this.pullAutopilotWork()}catch(e){y.warn(`poll tick failed: ${e instanceof Error?e.message:e}`)}finally{this.ticking=!1}}}async pullAutopilotWork(){if(this.inFlight.size>0||this.autopilotPausedUntil>Date.now())return;let e=await this.transport.requestAutopilotNext();if(!e?.ok)return;if(e.pausedUntil){let S=Date.parse(e.pausedUntil);Number.isFinite(S)&&(this.autopilotPausedUntil=S);return}let n=e.item;if(!n)return;let r=this.rules.find(S=>S.id===n.ruleId&&S.enabled),s=this.projects.find(S=>S.id===n.projectId);if(!r||!s){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:"the rule or project this item was queued against no longer exists"});return}let i=Hi(s,[]),o="project"in i?i.project:s,l=this.cfg.repos[o.repoName];if(!l){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:`no local checkout mapped for "${o.repoName}" on this machine`});return}let c=n.baseOverride||n.branchOverride||n.autoMerge?{...r,action:r.action.type==="implement"?{...r.action,...n.baseOverride?{baseBranch:n.baseOverride}:{},...n.branchOverride?{branchTemplate:n.branchOverride}:{},...n.autoMerge?{requireApproval:!1,autoMerge:!0}:{}}:r.action}:r;y.info(`autopilot: taking ${n.issueKey} (${r.name})`+(n.branchOverride?` -> shared branch ${n.branchOverride}`:"")+(n.baseOverride?` -> stacked on ${n.baseOverride}`:""));let u=this.jiraOf(o),f="";try{f=(await u.getIssue(n.issueKey))?.summary??""}catch(S){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:`could not read ${n.issueKey} from Jira: ${S instanceof Error?S.message:String(S)}`});return}let p=await this.transport.claimRun({ruleId:r.id,issueKey:n.issueKey,issueSummary:f,triggerFingerprint:`autopilot:${n.id}`,dedupKey:`autopilot:${n.id}`});if(!p.accepted||!p.runId){this.transport.sendAutopilotReport({itemId:n.id,outcome:"failed",error:p.reason??"the control plane refused the run"});return}this.transport.sendAutopilotReport({itemId:n.id,outcome:"claimed",runId:p.runId});let b=`${r.id}:${n.issueKey}`;this.inFlight.add(b);let w=this.resolveClaudeProfile(p.runId,p.claudeProfile);this.enqueueForRepo(l.path,async()=>{try{await Ui({runId:p.runId,rule:c,project:o,issueKey:n.issueKey,repoPath:l.path,cfg:this.cfg,jira:u,transport:this.transport,claudeConfigDir:w,actorEmail:p.actorEmail,continueBranch:n.continueBranch})}finally{this.inFlight.delete(b)}})}async sweepGitHubApprovals(){let e=Object.values(As());if(!e.length)return;let n=ye()??this.cfg,r=new Map,s=i=>{let o=Re(n,i);if(!o)return null;let l=r.get(o);return l||r.set(o,l=new $e(o)),l};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let l=`gh-approve:${i.runId}`;if(this.inFlight.has(l))continue;let c,u;try{[c,u]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(w){y.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${w instanceof Error?w.message:w}`);continue}if(!u)continue;let f={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(u.merged){y.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub - completing the run`),this.inFlight.add(l);try{await $s(f,i.runId,u.headSha)}finally{this.inFlight.delete(l)}continue}if(u.state==="closed"){y.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub - failing the run`);let w=this.jiraFor(i.repoName),S=`PR #${i.prNumber} was closed on GitHub without merging`;await w.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
828
828
 
829
829
  PR: ${i.prUrl}
830
830
 
@@ -836,7 +836,7 @@ To fix: Reject this run on the Allwright dashboard (that closes the conflicted P
836
836
 
837
837
  PR: ${i.prUrl}
838
838
 
839
- Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),ut({...i,changesRequestedNotified:!0}),y.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} - ticket notified`));continue}if(b.commitId===u.headSha){y.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${b.user} - completing the run`),this.inFlight.add(l);try{await $s(f,i.runId,b.commitId)}catch(w){y.warn(`github-approval completion failed for ${i.runId}: ${w instanceof Error?w.message:w}`)}finally{this.inFlight.delete(l)}}}}}async sweepMergedPRs(){let e=Object.values(Ni());if(!e.length)return;let n=ye()??this.cfg,r=new Map,s=l=>{let c=Ae(n,l);if(!c)return null;let u=r.get(c);return u||r.set(c,u=new $e(c)),u},i=20,o=720*3600*1e3;for(let l of e.slice(0,i)){let c=s(l.repoName);if(!c)continue;if(Date.now()-new Date(l.createdAt).getTime()>o){y.warn(`merge watch for ${l.issueKey} PR #${l.prNumber} is over 30 days old - dropping`),Rs(l.runId);continue}let u;try{u=await c.getPullRequest(l.owner,l.repo,l.prNumber)}catch(b){y.warn(`merge check failed for ${l.owner}/${l.repo}#${l.prNumber}: ${b instanceof Error?b.message:b}`);continue}if(!u){Rs(l.runId);continue}if(u.state==="open")continue;if(!u.merged){Rs(l.runId);continue}let f=this.jiraFor(l.repoName),p="";if(l.jiraTransitionOnMerge)try{p=await f.transitionByName(l.issueKey,l.jiraTransitionOnMerge)?`
839
+ Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),ut({...i,changesRequestedNotified:!0}),y.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} - ticket notified`));continue}if(b.commitId===u.headSha){y.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${b.user} - completing the run`),this.inFlight.add(l);try{await $s(f,i.runId,b.commitId)}catch(w){y.warn(`github-approval completion failed for ${i.runId}: ${w instanceof Error?w.message:w}`)}finally{this.inFlight.delete(l)}}}}}async sweepMergedPRs(){let e=Object.values(Ni());if(!e.length)return;let n=ye()??this.cfg,r=new Map,s=l=>{let c=Re(n,l);if(!c)return null;let u=r.get(c);return u||r.set(c,u=new $e(c)),u},i=20,o=720*3600*1e3;for(let l of e.slice(0,i)){let c=s(l.repoName);if(!c)continue;if(Date.now()-new Date(l.createdAt).getTime()>o){y.warn(`merge watch for ${l.issueKey} PR #${l.prNumber} is over 30 days old - dropping`),Es(l.runId);continue}let u;try{u=await c.getPullRequest(l.owner,l.repo,l.prNumber)}catch(b){y.warn(`merge check failed for ${l.owner}/${l.repo}#${l.prNumber}: ${b instanceof Error?b.message:b}`);continue}if(!u){Es(l.runId);continue}if(u.state==="open")continue;if(!u.merged){Es(l.runId);continue}let f=this.jiraFor(l.repoName),p="";if(l.jiraTransitionOnMerge)try{p=await f.transitionByName(l.issueKey,l.jiraTransitionOnMerge)?`
840
840
 
841
841
  Ticket moved to **${l.jiraTransitionOnMerge}**.`:`
842
842
 
@@ -846,13 +846,13 @@ Note: the "${l.jiraTransitionOnMerge}" transition failed: ${b instanceof Error?b
846
846
 
847
847
  PR: ${l.prUrl} (merged at \`${u.headSha.slice(0,10)}\`)${p}
848
848
 
849
- (run \`${l.runId}\`)`)}catch(b){y.warn(`could not post merge comment to ${l.issueKey}: ${b instanceof Error?b.message:b}`);continue}y.info(`PR #${l.prNumber} for ${l.issueKey} merged - ticket updated`),Rs(l.runId)}}async sweepNeedsInput(e){let n;try{n=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${hn.NEEDS_INPUT_LABEL}"`,10)}catch(s){y.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!n.length)return;let r=lr();for(let s of n){let i=Object.values(r).filter(l=>l.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[hn.NEEDS_INPUT_LABEL]}).catch(()=>{}),y.warn(`${s.key}: needs-input label with no local pending record - removed`);continue}let o=null;for(let l of i){let c=`resume:${l.runId}`;if(this.inFlight.has(c))continue;if(Date.now()-new Date(l.createdAt).getTime()>Vy){this.inFlight.add(c),this.abandonStaleInput(l,e).finally(()=>this.inFlight.delete(c));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(S){y.warn(`needs-input check failed for ${s.key}: ${S instanceof Error?S.message:S}`);continue}let u=new Date(l.questionsPostedAt).getTime(),f=o.comments.filter(S=>!_t(S.body)&&new Date(S.created).getTime()>u);if(!f.length)continue;let p=Ps(f),b=o.attachments;this.inFlight.add(c),y.info(`reply received on ${s.key} - resuming run ${l.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[hn.NEEDS_INPUT_LABEL]}).catch(S=>{y.warn(`could not remove needs-input label on ${s.key}: ${S}`)});let w={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};l.kind==="implement"?this.enqueueForRepo(l.baseRepoPath??l.repoPath,async()=>{try{await Ma(l,p,b,w)}finally{this.inFlight.delete(c)}}):this.enqueueForRepo(l.repoPath,async()=>{try{await Na(l,p,b,w)}finally{this.inFlight.delete(c)}})}}}async answerPendingInput(e,n,r){let s=Fu(e);if(!s)return{ok:!1,note:"",error:"this run is not waiting for an answer on this server - it may have been answered already, or abandoned after 14 days without a reply"};let i=`resume:${e}`;if(this.inFlight.has(i))return{ok:!1,note:"",error:"an answer for this run is already being applied"};this.inFlight.add(i);let o=this.jiraFor(s.repoName??""),l=[];try{l=(await o.getIssue(s.issueKey)).attachments,await o.addComment(s.issueKey,`**Answered on the Allwright dashboard${r?` by ${r}`:""}.**
849
+ (run \`${l.runId}\`)`)}catch(b){y.warn(`could not post merge comment to ${l.issueKey}: ${b instanceof Error?b.message:b}`);continue}y.info(`PR #${l.prNumber} for ${l.issueKey} merged - ticket updated`),Es(l.runId)}}async sweepNeedsInput(e){let n;try{n=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${hn.NEEDS_INPUT_LABEL}"`,10)}catch(s){y.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!n.length)return;let r=lr();for(let s of n){let i=Object.values(r).filter(l=>l.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[hn.NEEDS_INPUT_LABEL]}).catch(()=>{}),y.warn(`${s.key}: needs-input label with no local pending record - removed`);continue}let o=null;for(let l of i){let c=`resume:${l.runId}`;if(this.inFlight.has(c))continue;if(Date.now()-new Date(l.createdAt).getTime()>Vy){this.inFlight.add(c),this.abandonStaleInput(l,e).finally(()=>this.inFlight.delete(c));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(S){y.warn(`needs-input check failed for ${s.key}: ${S instanceof Error?S.message:S}`);continue}let u=new Date(l.questionsPostedAt).getTime(),f=o.comments.filter(S=>!_t(S.body)&&new Date(S.created).getTime()>u);if(!f.length)continue;let p=Ps(f),b=o.attachments;this.inFlight.add(c),y.info(`reply received on ${s.key} - resuming run ${l.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[hn.NEEDS_INPUT_LABEL]}).catch(S=>{y.warn(`could not remove needs-input label on ${s.key}: ${S}`)});let w={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};l.kind==="implement"?this.enqueueForRepo(l.baseRepoPath??l.repoPath,async()=>{try{await Ma(l,p,b,w)}finally{this.inFlight.delete(c)}}):this.enqueueForRepo(l.repoPath,async()=>{try{await Na(l,p,b,w)}finally{this.inFlight.delete(c)}})}}}async answerPendingInput(e,n,r){let s=Fu(e);if(!s)return{ok:!1,note:"",error:"this run is not waiting for an answer on this server - it may have been answered already, or abandoned after 14 days without a reply"};let i=`resume:${e}`;if(this.inFlight.has(i))return{ok:!1,note:"",error:"an answer for this run is already being applied"};this.inFlight.add(i);let o=this.jiraFor(s.repoName??""),l=[];try{l=(await o.getIssue(s.issueKey)).attachments,await o.addComment(s.issueKey,`**Answered on the Allwright dashboard${r?` by ${r}`:""}.**
850
850
 
851
851
  ${n}
852
852
 
853
853
  This run is continuing from where it left off. (run \`${e}\`)`),await o.editLabels(s.issueKey,{remove:[hn.NEEDS_INPUT_LABEL]})}catch(p){this.inFlight.delete(i);let b=p instanceof Error?p.message:String(p);return{ok:!1,note:"",error:`could not write the answer to ${s.issueKey}: ${b}`}}y.info(`answer received from the dashboard for ${s.issueKey} - resuming run ${e}`);let c=r?`${r}: ${n}`:n,u={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg},f=s.kind==="implement"?s.baseRepoPath??s.repoPath:s.repoPath;return this.enqueueForRepo(f,async()=>{try{s.kind==="implement"?await Ma(s,c,l,u):await Na(s,c,l,u)}finally{this.inFlight.delete(i)}}),{ok:!0,note:`Answer sent - the run is continuing, and it was posted to ${s.issueKey} too.`}}async abandonStaleInput(e,n){y.warn(`${e.issueKey}: needs-input unanswered for over ${Zi}d - abandoning run ${e.runId}`);try{await this.jiraOf(n).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
854
854
 
855
- No reply arrived within ${Zi} 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(n).editLabels(e.issueKey,{add:[e.failedLabel],remove:[hn.NEEDS_INPUT_LABEL]})}catch(r){y.warn(`could not post staleness notice for ${e.issueKey}: ${r}`)}e.kind==="implement"&&await vt(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),St(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${Zi} days`})}async pollRule(e,n,r){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,n):await this.matchCommentTrigger(e,n);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let l=Hi(n,i.components??[]);if("error"in l){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${l.error}`);continue}let c=l.project,u=c.repoName===n.repoName?r:this.cfg.repos[c.repoName]?.path;if(!u){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${c.repoName}" but it has no local checkout - run: allwright repo add "${c.repoName}" /path/to/checkout`);continue}let f=await this.transport.claimRun({ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,triggerFingerprint:i.fingerprint,triggeredByAccountId:i.triggeredByAccountId});if(!f.accepted||!f.runId){f.reason!=="duplicate"&&y.warn(`claim rejected for ${i.issueKey}: ${f.reason??"unknown"}`);continue}this.inFlight.add(o),y.info(`claimed run ${f.runId} for ${i.issueKey}`+(c.repoName!==n.repoName?` (routed \u2192 ${c.repoName})`:"")+(f.claudeProfile?` (claude profile "${f.claudeProfile}")`:""));let p=this.resolveClaudeProfile(f.runId,f.claudeProfile);this.enqueueForRepo(u,async()=>{try{await Ui({runId:f.runId,rule:e,project:c,issueKey:i.issueKey,repoPath:u,cfg:this.cfg,jira:this.jiraOf(c),transport:this.transport,claudeConfigDir:p,actorEmail:f.actorEmail})}finally{this.inFlight.delete(o)}})}}async pollRespondRule(e,n,r){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(n).search(`project = "${n.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),l=Date.now()-$d;for(let c of i){let u=await this.jiraOf(n).getIssue(c.key);for(let f of u.comments){if(!f.body.toLowerCase().includes(o)||_t(f.body)||new Date(f.created).getTime()<l||!f.id)continue;let p=`respond:${f.id}`;if(this.inFlight.has(p))continue;let b=Hi(n,c.components??[]);if("error"in b){this.warnRoutingOnce(`${e.id}:${c.key}`,`${c.key}: ${b.error}`);continue}let w=b.project,S=w.repoName===n.repoName?r:this.cfg.repos[w.repoName]?.path;if(!S){this.warnRoutingOnce(`${e.id}:${c.key}:path`,`${c.key}: routed to repo "${w.repoName}" but it has no local checkout - run: allwright repo add "${w.repoName}" /path/to/checkout`);continue}let x=await this.transport.claimRun({ruleId:e.id,issueKey:c.key,issueSummary:c.summary,triggerFingerprint:`question by ${f.author} at ${f.created}`,dedupKey:`respond:comment:${f.id}`,triggeredByAccountId:f.authorAccountId??void 0});if(!x.accepted||!x.runId){x.reason!=="duplicate"&&y.warn(`respond claim rejected for ${c.key}: ${x.reason??"unknown"}`);continue}this.inFlight.add(p),y.info(`claimed respond run ${x.runId}: ${c.key} (comment ${f.id})`+(w.repoName!==n.repoName?` (routed \u2192 ${w.repoName})`:"")+(x.claudeProfile?` (claude profile "${x.claudeProfile}")`:""));let A={author:f.author,body:f.body},j=this.resolveClaudeProfile(x.runId,x.claudeProfile);this.enqueueForRepo(S,async()=>{try{await Ui({runId:x.runId,rule:e,project:w,issueKey:c.key,repoPath:S,cfg:this.cfg,jira:this.jiraOf(w),transport:this.transport,question:A,claudeConfigDir:j,actorEmail:x.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,n){let r=e.trigger;if(r.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(n).search(`project = "${n.jiraProjectKey}" AND labels = "${r.doneLabel}" AND updated >= "-2d"`,10)}catch(o){y.warn(`revision sweep failed for ${n.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=r.keyword.toLowerCase();for(let o of s)try{let l=await this.jiraOf(n).getIssue(o.key),c=null;for(let f of l.comments)_t(f.body)&&(c=Math.max(c??0,new Date(f.created).getTime()));if(c===null||!l.comments.some(f=>!_t(f.body)&&f.body.toLowerCase().includes(i)&&new Date(f.created).getTime()>c))continue;await this.jiraOf(n).editLabels(o.key,{remove:[r.doneLabel]}),y.info(`revision requested on ${o.key} (new "${r.keyword}" after completion) - done label removed, rule will re-fire`)}catch(l){y.warn(`revision check failed for ${o.key}: ${l instanceof Error?l.message:l}`)}}async pollDeployRule(e,n,r){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,n):await this.matchCommentDeploys(e,n);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let l=await this.transport.claimDeploy({projectId:n.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(!l.accepted||!l.runId||!l.environment){if(l.code==="duplicate")continue;l.reason&&l.runId?(await this.jiraOf(n).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
855
+ No reply arrived within ${Zi} 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(n).editLabels(e.issueKey,{add:[e.failedLabel],remove:[hn.NEEDS_INPUT_LABEL]})}catch(r){y.warn(`could not post staleness notice for ${e.issueKey}: ${r}`)}e.kind==="implement"&&await vt(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),St(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${Zi} days`})}async pollRule(e,n,r){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,n):await this.matchCommentTrigger(e,n);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let l=Hi(n,i.components??[]);if("error"in l){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${l.error}`);continue}let c=l.project,u=c.repoName===n.repoName?r:this.cfg.repos[c.repoName]?.path;if(!u){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${c.repoName}" but it has no local checkout - run: allwright repo add "${c.repoName}" /path/to/checkout`);continue}let f=await this.transport.claimRun({ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,triggerFingerprint:i.fingerprint,triggeredByAccountId:i.triggeredByAccountId});if(!f.accepted||!f.runId){f.reason!=="duplicate"&&y.warn(`claim rejected for ${i.issueKey}: ${f.reason??"unknown"}`);continue}this.inFlight.add(o),y.info(`claimed run ${f.runId} for ${i.issueKey}`+(c.repoName!==n.repoName?` (routed \u2192 ${c.repoName})`:"")+(f.claudeProfile?` (claude profile "${f.claudeProfile}")`:""));let p=this.resolveClaudeProfile(f.runId,f.claudeProfile);this.enqueueForRepo(u,async()=>{try{await Ui({runId:f.runId,rule:e,project:c,issueKey:i.issueKey,repoPath:u,cfg:this.cfg,jira:this.jiraOf(c),transport:this.transport,claudeConfigDir:p,actorEmail:f.actorEmail})}finally{this.inFlight.delete(o)}})}}async pollRespondRule(e,n,r){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(n).search(`project = "${n.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),l=Date.now()-$d;for(let c of i){let u=await this.jiraOf(n).getIssue(c.key);for(let f of u.comments){if(!f.body.toLowerCase().includes(o)||_t(f.body)||new Date(f.created).getTime()<l||!f.id)continue;let p=`respond:${f.id}`;if(this.inFlight.has(p))continue;let b=Hi(n,c.components??[]);if("error"in b){this.warnRoutingOnce(`${e.id}:${c.key}`,`${c.key}: ${b.error}`);continue}let w=b.project,S=w.repoName===n.repoName?r:this.cfg.repos[w.repoName]?.path;if(!S){this.warnRoutingOnce(`${e.id}:${c.key}:path`,`${c.key}: routed to repo "${w.repoName}" but it has no local checkout - run: allwright repo add "${w.repoName}" /path/to/checkout`);continue}let x=await this.transport.claimRun({ruleId:e.id,issueKey:c.key,issueSummary:c.summary,triggerFingerprint:`question by ${f.author} at ${f.created}`,dedupKey:`respond:comment:${f.id}`,triggeredByAccountId:f.authorAccountId??void 0});if(!x.accepted||!x.runId){x.reason!=="duplicate"&&y.warn(`respond claim rejected for ${c.key}: ${x.reason??"unknown"}`);continue}this.inFlight.add(p),y.info(`claimed respond run ${x.runId}: ${c.key} (comment ${f.id})`+(w.repoName!==n.repoName?` (routed \u2192 ${w.repoName})`:"")+(x.claudeProfile?` (claude profile "${x.claudeProfile}")`:""));let R={author:f.author,body:f.body},j=this.resolveClaudeProfile(x.runId,x.claudeProfile);this.enqueueForRepo(S,async()=>{try{await Ui({runId:x.runId,rule:e,project:w,issueKey:c.key,repoPath:S,cfg:this.cfg,jira:this.jiraOf(w),transport:this.transport,question:R,claudeConfigDir:j,actorEmail:x.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,n){let r=e.trigger;if(r.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(n).search(`project = "${n.jiraProjectKey}" AND labels = "${r.doneLabel}" AND updated >= "-2d"`,10)}catch(o){y.warn(`revision sweep failed for ${n.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=r.keyword.toLowerCase();for(let o of s)try{let l=await this.jiraOf(n).getIssue(o.key),c=null;for(let f of l.comments)_t(f.body)&&(c=Math.max(c??0,new Date(f.created).getTime()));if(c===null||!l.comments.some(f=>!_t(f.body)&&f.body.toLowerCase().includes(i)&&new Date(f.created).getTime()>c))continue;await this.jiraOf(n).editLabels(o.key,{remove:[r.doneLabel]}),y.info(`revision requested on ${o.key} (new "${r.keyword}" after completion) - done label removed, rule will re-fire`)}catch(l){y.warn(`revision check failed for ${o.key}: ${l instanceof Error?l.message:l}`)}}async pollDeployRule(e,n,r){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,n):await this.matchCommentDeploys(e,n);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let l=await this.transport.claimDeploy({projectId:n.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(!l.accepted||!l.runId||!l.environment){if(l.code==="duplicate")continue;l.reason&&l.runId?(await this.jiraOf(n).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
856
856
 
857
857
  ${l.reason}`+(i.requestedByAccountId?`
858
858
 
@@ -867,8 +867,8 @@ Rules:
867
867
  - When you are done, every listed file must contain no conflict markers and must be syntactically valid.
868
868
 
869
869
  Conflicted files:
870
- `;async function Od(t){let{cfg:e,repoPath:n,branch:r,baseBranch:s,issueKey:i,onLog:o}=t,l=jd.default.join(Lt(),`conflict-${(0,Za.randomUUID)().slice(0,8)}`),c=!1;try{o("info",`Preparing a worktree for ${r} to merge ${s} into it`),await Ts(n,l,r),c=!0;let u=await ta(l,s);if(u.ok&&u.alreadyUpToDate)return o("info",`${r} already contains ${s} - nothing to merge`),{ok:!0,freeOfCharge:!0,note:`This branch already contains ${s}, so there was nothing to merge - GitHub's conflict flag was out of date. Refresh the PR.`};if(!u.ok&&u.conflicts===null)return{ok:!1,note:`The merge could not even be started: ${u.reason}`};let f={},p=!1;if(!u.ok){let S=u.conflicts;o("info",`git merged everything except ${S.length} file(s): ${S.slice(0,20).join(", ")}`+(S.length>20?", \u2026":""));let x=Be(t.agentId);if(!x)return await un(l),{ok:!1,note:`no adapter for agent "${t.agentId}" on this runner`};let A=dn(t.agentId,"edit_no_shell");if(A)return await un(l),{ok:!1,note:`${A} Resolve the conflicts yourself on branch ${r}, or use Rebuild on current base.`};o("info",`Asking ${x.displayName} to resolve only those files`);let j=-1,v=setInterval(()=>{ra(l,S).then(z=>{let B=S.filter(d=>!z.includes(d));B.length!==j&&(j=B.length,o("info",`Conflict progress: ${B.length}/${S.length} resolved`+(B.length?` \xB7 clean: ${B.join(", ")}`:"")+(z.length?` \xB7 still conflicted: ${z.join(", ")}`:"")))}).catch(()=>{})},12e3),O=await As(x,{repoPath:l,prompt:Yy+S.map(z=>`- ${z}`).join(`
871
- `),timeoutSeconds:t.timeoutSeconds,bin:Ue(e,t.agentId),configDir:t.configDir,mode:"edit_no_shell",sessionId:(0,Za.randomUUID)(),onLog:(z,B)=>o(z,B)},(z,B)=>o(z==="warn"?"warn":z,B));if(clearInterval(v),f={costUsd:O.costUsd,inputTokens:O.inputTokens,outputTokens:O.outputTokens},!O.ok)return await un(l),{ok:!1,...f,note:`The agent could not do the resolution: ${O.error??"it produced no output"}. Nothing was changed - the merge was rolled back. Fix that first, then Resolve again.`};p=!0;let H=await xi(l);if(H.length)return await un(l),{ok:!1,...f,note:`The agent left conflict markers in ${H.slice(0,5).join(", ")}, so nothing was pushed and the merge was rolled back. Resolve it by hand on ${r}, or use Rebuild on current base to redo the ticket against today's base.`};await na(l,`${i}: merge ${s}, conflicts resolved by the agent
870
+ `;async function Od(t){let{cfg:e,repoPath:n,branch:r,baseBranch:s,issueKey:i,onLog:o}=t,l=jd.default.join(Lt(),`conflict-${(0,Za.randomUUID)().slice(0,8)}`),c=!1;try{o("info",`Preparing a worktree for ${r} to merge ${s} into it`),await Ts(n,l,r),c=!0;let u=await ta(l,s);if(u.ok&&u.alreadyUpToDate)return o("info",`${r} already contains ${s} - nothing to merge`),{ok:!0,freeOfCharge:!0,note:`This branch already contains ${s}, so there was nothing to merge - GitHub's conflict flag was out of date. Refresh the PR.`};if(!u.ok&&u.conflicts===null)return{ok:!1,note:`The merge could not even be started: ${u.reason}`};let f={},p=!1;if(!u.ok){let S=u.conflicts;o("info",`git merged everything except ${S.length} file(s): ${S.slice(0,20).join(", ")}`+(S.length>20?", \u2026":""));let x=Be(t.agentId);if(!x)return await un(l),{ok:!1,note:`no adapter for agent "${t.agentId}" on this runner`};let R=dn(t.agentId,"edit_no_shell");if(R)return await un(l),{ok:!1,note:`${R} Resolve the conflicts yourself on branch ${r}, or use Rebuild on current base.`};o("info",`Asking ${x.displayName} to resolve only those files`);let j=-1,v=setInterval(()=>{ra(l,S).then(z=>{let K=S.filter(d=>!z.includes(d));K.length!==j&&(j=K.length,o("info",`Conflict progress: ${K.length}/${S.length} resolved`+(K.length?` \xB7 clean: ${K.join(", ")}`:"")+(z.length?` \xB7 still conflicted: ${z.join(", ")}`:"")))}).catch(()=>{})},12e3),O=await Rs(x,{repoPath:l,prompt:Yy+S.map(z=>`- ${z}`).join(`
871
+ `),timeoutSeconds:t.timeoutSeconds,bin:Ue(e,t.agentId),configDir:t.configDir,mode:"edit_no_shell",sessionId:(0,Za.randomUUID)(),onLog:(z,K)=>o(z,K)},(z,K)=>o(z==="warn"?"warn":z,K));if(clearInterval(v),f={costUsd:O.costUsd,inputTokens:O.inputTokens,outputTokens:O.outputTokens},!O.ok)return await un(l),{ok:!1,...f,note:`The agent could not do the resolution: ${O.error??"it produced no output"}. Nothing was changed - the merge was rolled back. Fix that first, then Resolve again.`};p=!0;let Z=await xi(l);if(Z.length)return await un(l),{ok:!1,...f,note:`The agent left conflict markers in ${Z.slice(0,5).join(", ")}, so nothing was pushed and the merge was rolled back. Resolve it by hand on ${r}, or use Rebuild on current base to redo the ticket against today's base.`};await na(l,`${i}: merge ${s}, conflicts resolved by the agent
872
872
 
873
873
  Resolved via Allwright`)}let b=await cn(l,s);if(!b.ok){let S=b.forbidden.length?`the merged result touches protected paths (${b.forbidden.slice(0,5).join(", ")})`:`the merged result is too large (${b.files} files, ${b.insertions+b.deletions} lines; limits ${on}/${an})`;return await un(l),{ok:!1,...f,note:`Nothing was pushed: ${S}. The merge was rolled back.`}}await er(l,r);let w=await tt(l);return o("info",`Pushed the merge to ${r} (${w.slice(0,7)})`),{ok:!0,...f,freeOfCharge:!p,headSha:w,note:p?`Merged ${s} into ${r}; the agent resolved the overlapping files. The PR is the same one - review the merge commit, then approve.`:`Merged ${s} into ${r} cleanly - no agent was needed, so this cost nothing. The PR is the same one; review and approve.`}}catch(u){return await un(l).catch(()=>{}),{ok:!1,note:`Could not resolve the conflict: ${u instanceof Error?u.message.slice(0,300):String(u)}`}}finally{c&&(await vt(n,l).catch(()=>{}),Pd.default.rmSync(l,{recursive:!0,force:!0}))}}var Ga=I(require("node:fs"),1),Nd=I(require("node:path"),1),Va=require("node:crypto");wt();function Xy(t,e){let n=e.map(r=>`$ ${r.command} (exit ${r.exitCode})
874
874
  ${r.tail.slice(-2e3)}`).join(`
@@ -883,10 +883,10 @@ Your ONLY job is to make these commands pass, with the smallest change possible.
883
883
  - If a failure is clearly pre-existing on the base branch and unrelated to this PR's change, leave the code alone and say so in one sentence.
884
884
  - Do not ask questions; if you cannot fix something safely, say what you found and stop.
885
885
  - You have no shell; the runner re-runs every documented command after you finish.
886
- End with one short paragraph stating exactly what you changed, or why you changed nothing.`}async function Md(t){let{cfg:e,repoPath:n,branch:r,baseBranch:s,issueKey:i,failedTests:o,onLog:l}=t,c=Nd.default.join(Lt(),`testfix-${(0,Va.randomUUID)().slice(0,8)}`),u=!1;try{let f=Be(t.agentId);if(!f)return{ok:!1,note:`no adapter for agent "${t.agentId}" on this runner`};let p=dn(t.agentId,"edit_no_shell");if(p)return{ok:!1,note:p};l("info",`Preparing a worktree on ${r} for the test fix`),await ln(n,r),await Ts(n,c,r),u=!0,await Zr(c,`origin/${r}`);let b=await tt(c);l("info",`Asking ${f.displayName} to fix ${o.length} failing test command(s) - narrow prompt, failure output included, no re-exploration`);let w=await As(f,{repoPath:c,prompt:Xy(i,o),timeoutSeconds:t.timeoutSeconds,bin:Ue(e,t.agentId),configDir:t.configDir,mode:"edit_no_shell",maxTurns:60,sessionId:(0,Va.randomUUID)(),onLog:(d,m)=>l(d,m)},(d,m)=>l(d==="warn"?"warn":d,m)),S={costUsd:w.costUsd,inputTokens:w.inputTokens,outputTokens:w.outputTokens};if(!w.ok)return{ok:!1,...S,note:`The fix agent could not run: ${w.error??"it produced no output"}. Nothing was changed or pushed.`};let x=await Hr(c);for(let d of x.refused)l("warn",`${Dt} entry refused: ${d}`);let A=!0;try{await Qn(c,`${i}: fix failing TEST.md commands
886
+ End with one short paragraph stating exactly what you changed, or why you changed nothing.`}async function Md(t){let{cfg:e,repoPath:n,branch:r,baseBranch:s,issueKey:i,failedTests:o,onLog:l}=t,c=Nd.default.join(Lt(),`testfix-${(0,Va.randomUUID)().slice(0,8)}`),u=!1;try{let f=Be(t.agentId);if(!f)return{ok:!1,note:`no adapter for agent "${t.agentId}" on this runner`};let p=dn(t.agentId,"edit_no_shell");if(p)return{ok:!1,note:p};l("info",`Preparing a worktree on ${r} for the test fix`),await ln(n,r),await Ts(n,c,r),u=!0,await Zr(c,`origin/${r}`);let b=await tt(c);l("info",`Asking ${f.displayName} to fix ${o.length} failing test command(s) - narrow prompt, failure output included, no re-exploration`);let w=await Rs(f,{repoPath:c,prompt:Xy(i,o),timeoutSeconds:t.timeoutSeconds,bin:Ue(e,t.agentId),configDir:t.configDir,mode:"edit_no_shell",maxTurns:60,sessionId:(0,Va.randomUUID)(),onLog:(d,m)=>l(d,m)},(d,m)=>l(d==="warn"?"warn":d,m)),S={costUsd:w.costUsd,inputTokens:w.inputTokens,outputTokens:w.outputTokens};if(!w.ok)return{ok:!1,...S,note:`The fix agent could not run: ${w.error??"it produced no output"}. Nothing was changed or pushed.`};let x=await Hr(c);for(let d of x.refused)l("warn",`${Dt} entry refused: ${d}`);let R=!0;try{await Qn(c,`${i}: fix failing TEST.md commands
887
887
 
888
- Allwright test-fix run`)}catch{A=!1}if(!A){let d=`The agent changed nothing - its own conclusion: ${w.resultText.trim().slice(0,400)||"(no explanation given)"}`;return l("info",d),{ok:!0,...S,remaining:o,note:d}}let j=await cn(c,s);if(!j.ok){await Zr(c,b);let d=j.forbidden.length?`the fixed result touches protected paths (${j.forbidden.slice(0,5).join(", ")})`:`the fixed result is too large (${j.files} files, ${j.insertions+j.deletions} lines; limits ${on}/${an})`;return{ok:!1,...S,note:`Nothing was pushed: ${d}. The fix commit was discarded; the PR is unchanged.`}}let v=o,O,H,z=Wr(c);if(z){let d=Jr(Ga.default.readFileSync(z,"utf8"));if(d.length){l("info",`Re-running ${d.length} documented test command(s)`);let m=await sr(c,d,{perCommandTimeoutMs:15*6e4});for(let g of m)l(g.exitCode===0?"info":"warn",`${g.exitCode===0?"PASS":"FAIL"} ${g.command} (exit ${g.exitCode})`+(g.exitCode===0?"":`
889
- ${g.tail.slice(-1500)}`));v=m.filter(g=>g.exitCode!==0).slice(0,20).map(g=>({command:g.command.slice(0,500),exitCode:g.exitCode,tail:g.tail.slice(-4e3)})),H=m.length,O=m.length-v.length}}await er(c,r);let B=await tt(c);return l("info",`Pushed the fix to ${r} (${B.slice(0,7)})`),{ok:!0,...S,headSha:B,remaining:v,testsPassed:O,testsTotal:H,note:v.length?`The fix was pushed, but ${v.length} command(s) still fail - output is in the run log. The PR is the same one; review the new commit.`:"All documented test commands pass now. The PR is the same one - review the fix commit, then approve."}}catch(f){return{ok:!1,note:`Could not fix the tests: ${f instanceof Error?f.message.slice(0,300):String(f)}`}}finally{u&&(await vt(n,c).catch(()=>{}),Ga.default.rmSync(c,{recursive:!0,force:!0}))}}ct();var mr=I(require("node:fs"),1),Dd=I(require("node:path"),1);var Qy=_.object({role:_.enum(["user","agent"]),text:_.string(),steps:_.array(_.string()).default([]),files:_.array(_.string()).default([])}),eb=_.object({sessionId:_.string(),projectId:_.string(),title:_.string().default(""),updatedAt:_.string(),messages:_.array(Qy).default([])}),tb=_.record(eb),nb=10,rb=200,zd=2e4,sb=30,ib=2e3,ob=8,ab=255;function Ld(){return Dd.default.join(se(),"chat-sessions.json")}function Wa(){let t=Ld();if(!mr.default.existsSync(t))return{};try{return tb.parse(JSON.parse(mr.default.readFileSync(t,"utf8")))}catch{return{}}}function lb(t){mr.default.mkdirSync(se(),{recursive:!0,mode:448});let e=Ld(),n=e+".tmp";mr.default.writeFileSync(n,JSON.stringify(t,null,2)+`
888
+ Allwright test-fix run`)}catch{R=!1}if(!R){let d=`The agent changed nothing - its own conclusion: ${w.resultText.trim().slice(0,400)||"(no explanation given)"}`;return l("info",d),{ok:!0,...S,remaining:o,note:d}}let j=await cn(c,s);if(!j.ok){await Zr(c,b);let d=j.forbidden.length?`the fixed result touches protected paths (${j.forbidden.slice(0,5).join(", ")})`:`the fixed result is too large (${j.files} files, ${j.insertions+j.deletions} lines; limits ${on}/${an})`;return{ok:!1,...S,note:`Nothing was pushed: ${d}. The fix commit was discarded; the PR is unchanged.`}}let v=o,O,Z,z=Wr(c);if(z){let d=Jr(Ga.default.readFileSync(z,"utf8"));if(d.length){l("info",`Re-running ${d.length} documented test command(s)`);let m=await sr(c,d,{perCommandTimeoutMs:15*6e4});for(let g of m)l(g.exitCode===0?"info":"warn",`${g.exitCode===0?"PASS":"FAIL"} ${g.command} (exit ${g.exitCode})`+(g.exitCode===0?"":`
889
+ ${g.tail.slice(-1500)}`));v=m.filter(g=>g.exitCode!==0).slice(0,20).map(g=>({command:g.command.slice(0,500),exitCode:g.exitCode,tail:g.tail.slice(-4e3)})),Z=m.length,O=m.length-v.length}}await er(c,r);let K=await tt(c);return l("info",`Pushed the fix to ${r} (${K.slice(0,7)})`),{ok:!0,...S,headSha:K,remaining:v,testsPassed:O,testsTotal:Z,note:v.length?`The fix was pushed, but ${v.length} command(s) still fail - output is in the run log. The PR is the same one; review the new commit.`:"All documented test commands pass now. The PR is the same one - review the fix commit, then approve."}}catch(f){return{ok:!1,note:`Could not fix the tests: ${f instanceof Error?f.message.slice(0,300):String(f)}`}}finally{u&&(await vt(n,c).catch(()=>{}),Ga.default.rmSync(c,{recursive:!0,force:!0}))}}ct();var mr=I(require("node:fs"),1),Dd=I(require("node:path"),1);var Qy=_.object({role:_.enum(["user","agent"]),text:_.string(),steps:_.array(_.string()).default([]),files:_.array(_.string()).default([])}),eb=_.object({sessionId:_.string(),projectId:_.string(),title:_.string().default(""),updatedAt:_.string(),messages:_.array(Qy).default([])}),tb=_.record(eb),nb=10,rb=200,zd=2e4,sb=30,ib=2e3,ob=8,ab=255;function Ld(){return Dd.default.join(se(),"chat-sessions.json")}function Wa(){let t=Ld();if(!mr.default.existsSync(t))return{};try{return tb.parse(JSON.parse(mr.default.readFileSync(t,"utf8")))}catch{return{}}}function lb(t){mr.default.mkdirSync(se(),{recursive:!0,mode:448});let e=Ld(),n=e+".tmp";mr.default.writeFileSync(n,JSON.stringify(t,null,2)+`
890
890
  `,{mode:384}),mr.default.renameSync(n,e),mr.default.chmodSync(e,384)}function Ud(t,e,n,r,s=[],i=[]){let o=Wa(),c=o[e]??{sessionId:e,projectId:t,title:n.slice(0,80),updatedAt:new Date().toISOString(),messages:[]};c.messages.push({role:"user",text:n.slice(0,zd),steps:[],files:i.slice(0,ob).map(f=>f.slice(0,ab))},{role:"agent",text:r.slice(0,zd),steps:s.slice(0,sb).map(f=>f.slice(0,ib)),files:[]}),c.messages=c.messages.slice(-rb),c.updatedAt=new Date().toISOString(),o[e]=c;let u=Object.values(o).filter(f=>f.projectId===c.projectId).sort((f,p)=>p.updatedAt.localeCompare(f.updatedAt));for(let f of u.slice(nb))delete o[f.sessionId];lb(o)}function qd(t){return Object.values(Wa()).filter(e=>e.projectId===t).sort((e,n)=>n.updatedAt.localeCompare(e.updatedAt)).map(e=>({sessionId:e.sessionId,title:e.title,updatedAt:e.updatedAt,messageCount:e.messages.length}))}function Ms(t){return Wa()[t]??null}var Fd=36,Bd=60;function Kd(t){let e=t.toLowerCase();return e?e.includes("[1m]")||e.includes("-1m")?1e6:e.includes("haiku")||e.includes("sonnet")||e.includes("opus")||e.includes("fable")?2e5:0:0}var cb=`This conversation is being COMPACTED: it continues in a fresh window that will only have your summary, so anything you leave out is gone. Summarize it now under these headings, in under 500 words total:
891
891
  Goal: what the user is trying to achieve.
892
892
  Decided: choices already made, including ones you talked them out of - each as one line.
@@ -909,16 +909,16 @@ TWO OPTIONAL BLOCKS, for the dashboard's benefit. Never mention them in your pro
909
909
  Never emit both blocks in one reply, and never let either replace the actual answer.`;var gr=I(require("node:fs"),1),nt=I(require("node:path"),1),Ja=300,ub=4,Gd=512*1024,db=new Set([".git","node_modules","dist","build","out",".next","vendor","coverage",".venv","venv","__pycache__",".turbo",".cache"]),Vd=/\.mdx?$/i;function Wd(t){let e=nt.default.resolve(t),n=[],r=(s,i)=>{if(i>ub||n.length>=Ja)return;let o;try{o=gr.default.readdirSync(s,{withFileTypes:!0})}catch{return}for(let l of o){if(n.length>=Ja)return;if(!l.isFile()||!Vd.test(l.name))continue;let c=nt.default.join(s,l.name);try{let u=gr.default.statSync(c);n.push({path:nt.default.relative(e,c).split(nt.default.sep).join("/"),sizeBytes:u.size,updatedAt:u.mtime.toISOString()})}catch{}}for(let l of o){if(n.length>=Ja)return;!l.isDirectory()||l.isSymbolicLink()||db.has(l.name)||l.name.startsWith(".")||r(nt.default.join(s,l.name),i+1)}};return r(e,0),n}function Jd(t,e){let n=nt.default.resolve(t);if(!Vd.test(e))return{ok:!1,error:"only markdown files can be opened here"};let r=nt.default.resolve(n,e);if(r!==n&&!r.startsWith(n+nt.default.sep))return{ok:!1,error:"that path is outside the project checkout"};let s;try{s=gr.default.realpathSync(r)}catch{return{ok:!1,error:"file not found in this checkout"}}let i=(()=>{try{return gr.default.realpathSync(n)}catch{return n}})();if(s!==i&&!s.startsWith(i+nt.default.sep))return{ok:!1,error:"that path links outside the project checkout"};let o;try{o=gr.default.statSync(s)}catch{return{ok:!1,error:"file not found in this checkout"}}if(!o.isFile())return{ok:!1,error:"that path is not a file"};try{let l=gr.default.readFileSync(s,"utf8"),c=Buffer.byteLength(l,"utf8")>Gd;return{ok:!0,path:nt.default.relative(i,s).split(nt.default.sep).join("/"),content:c?l.slice(0,Gd):l,truncated:c}}catch(l){return{ok:!1,error:l instanceof Error?l.message:"could not read the file"}}}var Ze=I(_e(),1);var Vi=I(require("node:fs"),1),Yd=I(require("node:path"),1);var hb=_.object({id:_.string(),name:_.string().default(""),jiraProjectKey:_.string().default(""),repoName:_.string().default(""),jiraSiteUrl:_.string().default("")}),fb=_.array(hb);function Xd(){return Yd.default.join(se(),"synced-projects.json")}function Qd(t){try{let e=t.map(n=>({id:n.id,name:n.name,jiraProjectKey:n.jiraProjectKey,repoName:n.repoName,jiraSiteUrl:n.jiraSiteUrl??""}));Vi.default.mkdirSync(se(),{recursive:!0}),Vi.default.writeFileSync(Xd(),JSON.stringify(e,null,2),{mode:384})}catch{}}function pb(){try{let t=fb.safeParse(JSON.parse(Vi.default.readFileSync(Xd(),"utf8")));return t.success?t.data:[]}catch{return[]}}function eh(t){return pb().find(e=>e.repoName===t)??null}var Xa=I(require("node:fs"),1),yr=I(require("node:path"),1),th=require("node:child_process"),br=I(_e(),1);var mb=15e4,Ya=(t,e,n,r="")=>({ok:!1,file:t,checks:[e],output:r,error:n});function gb(t){let e=yr.default.join(t,"node_modules",".bin","prisma");return Xa.default.existsSync(e)?{bin:e,prefix:[]}:{bin:"npx",prefix:["--yes","prisma"]}}function yb(t,e){if(!(0,br.isSelfMigrationFilename)(e))return null;let n=yr.default.join(t,br.SELF_MIGRATION_DIR),r=yr.default.resolve(n,e),s=yr.default.relative(n,r);return s!==e||s.startsWith("..")||yr.default.isAbsolute(s)?null:r}async function nh(t){let{file:e}=t,n=yb(t.repoPath,e);if(!n)return Ya(e,{name:"file",ok:!1,detail:`"${e}" is not a migration filename`,fix:[]},`"${e}" is not a migration filename`);if(!Xa.default.existsSync(n))return Ya(e,{name:"file",ok:!1,detail:`${br.SELF_MIGRATION_DIR}/${e} does not exist in this checkout`,fix:[`cd ${t.repoPath} && git pull`]},`${br.SELF_MIGRATION_DIR}/${e} is not in this checkout - it may be newer than the code here`);let s=Ot(t.cfg,t.repoName,t.environmentName)[t.urlSecret]?.trim();if(!s)return Ya(e,{name:"database url",ok:!1,detail:`no ${t.urlSecret} in this runner's secret store for "${t.repoName}:${t.environmentName}" - the value stays on this machine`,fix:[`allwright env set ${t.repoName} ${t.environmentName} "${t.urlSecret}=postgresql://\u2026"`]},`this runner has no ${t.urlSecret} for "${t.environmentName}"`);let i=yr.default.join(t.repoPath,"apps","api"),{bin:o,prefix:l}=gb(i),c=Ka([s]),u=await bb(o,[...l,"db","execute","--url",s,"--file",n],i),f=c(u.output).slice(-8e3);return u.code!==0?{ok:!1,file:e,checks:[{name:"apply",ok:!1,detail:`prisma db execute exited ${u.code}`,fix:[`cd apps/api && npx prisma db execute --url "$DATABASE_URL" --file prisma/manual/${e}`]}],output:f,error:`applying ${e} failed (exit ${u.code})`}:{ok:!0,file:e,checks:[{name:"apply",ok:!0,detail:`${br.SELF_MIGRATION_DIR}/${e} applied`,fix:[]}],output:f,error:""}}function bb(t,e,n){return new Promise(r=>{(0,th.execFile)(t,e,{cwd:n,timeout:mb,maxBuffer:4*1024*1024,encoding:"utf8"},(s,i,o)=>{let l=[i,o].filter(Boolean).join(`
910
910
  `).trim();if(!s)return r({code:0,output:l});let c=typeof s.code=="number"?s.code:1;r({code:c||1,output:l||s.message})})})}var Lv=I(Yh(),1),Uv=I(ro(),1),qv=I(ss(),1),Fv=I(cl(),1),Bv=I(hl(),1),Kv=I(bl(),1),af=I(ao(),1),Hv=I(of(),1);var wl=af.default;var Ks=I(require("node:crypto"),1),Ct=I(_e(),1);function Zv(t){let e=t&&typeof t=="object"&&"name"in t?String(t.name):null;return e?`"${e}"`:"(unnamed)"}function _l(t,e,n,r){t.push(`dropped ${e} ${n} - this runner is out of date and does not understand it yet (${r}). Update the runner (npm install -g @ticketpilot/runner) to pick it up.`)}function Gv(t){if(!t||typeof t!="object"||t.type!=="config")return null;let e=t,n=[],r=[];for(let l of Array.isArray(e.projects)?e.projects:[]){let c=Ct.ProjectConfig.safeParse(l);c.success?r.push(c.data):_l(n,"project","",c.error.issues[0]?.message??"invalid shape")}let s=[];for(let l of Array.isArray(e.rules)?e.rules:[]){let c=Ct.RuleConfig.safeParse(l);c.success?s.push(c.data):_l(n,"rule",Zv(l),c.error.issues[0]?.message??"invalid shape")}let i=[];for(let l of Array.isArray(e.environments)?e.environments:[]){let c=Ct.EnvironmentConfig.safeParse(l);c.success?i.push(c.data):_l(n,"environment","",c.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:r,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:n}}var Vv=2e4,Wv=6e4,Jv=5e3,co=class{constructor(e,n,r,s){this.wsUrl=e;this.runnerToken=n;this.meta=r;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===wl.OPEN}connect(){if(this.closed)return;y.info(`connecting to control plane at ${this.wsUrl}`);let e=new wl(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:Ct.PROTOCOL_VERSION,runnerVersion:this.meta.runnerVersion,platform:`${process.platform}/${process.arch} node${process.versions.node}`,justBooted:!this.bootAnnounced});let n=this.queue.splice(0,this.queue.length);for(let r of n)this.sendNow(r);this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=setInterval(()=>{this.send({type:"heartbeat",ts:new Date().toISOString()})},Vv)}),e.on("message",n=>{let r;try{r=JSON.parse(n.toString())}catch(i){y.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,Ct.parseServerMsg)(r)}catch(i){let o=Gv(r);if(!o){y.warn(`ignoring malformed server message: ${i}`);return}for(let l of o.warnings)y.warn(l);y.warn(`config push had ${o.warnings.length} ${o.warnings.length===1?"entry":"entries"} this runner doesn't understand - applied everything else instead of dropping the whole config`),s=o.msg}this.handle(s)}),e.on("close",n=>{if(this.heartbeat&&clearInterval(this.heartbeat),n===4001)y.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(n===4003){y.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 r=Math.random()*.3+.85,s=Math.round(this.backoffMs*r);y.warn(`disconnected (code ${n}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,Wv)}),e.on("error",n=>{y.warn(`websocket error: ${n.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,y.info(`connected as runner "${e.runnerName}" (${e.runnerId})`);return}if(e.type==="run.claim.result"||e.type==="deploy.claim.result"||e.type==="autopilot.next.result"){let n=this.pending.get(e.requestId);n&&(clearTimeout(n.timer),this.pending.delete(e.requestId),n.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==="deploy.fix")return this.events.onDeployFix(e);if(e.type==="env.preflight")return this.events.onEnvPreflight(e);if(e.type==="selfmigration.apply")return this.events.onSelfMigrationApply(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==="repo.docs")return this.events.onRepoDocs(e);if(e.type==="repo.doc.read")return this.events.onRepoDocRead(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==="repo.doc.save")return this.events.onRepoDocSave(e);if(e.type==="runner.update")return this.events.onRunnerUpdate(e);if(e.type==="agent.profiles")return this.events.onAgentProfiles(e);if(e.type==="run.resolve.conflict")return this.events.onResolveConflict(e);if(e.type==="run.testfix")return this.events.onTestFix(e);if(e.type==="run.answer")return this.events.onRunAnswer(e);if(e.type==="audit.stats")return this.events.onAuditStats(e)}sendNow(e){this.ws?.send(JSON.stringify(e))}send(e){if(this.connected){this.sendNow(e);return}if(this.queue.length>=Jv){let n=this.queue.findIndex(r=>r.type==="run.log");n>=0?this.queue.splice(n,1):this.queue.shift()}this.queue.push(e)}async claimRun(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let n=Ks.default.randomUUID(),r=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(n),s(null)},15e3);this.pending.set(n,{resolve:s,timer:i}),this.sendNow({type:"run.claim",requestId:n,...e})});return!r||r.type!=="run.claim.result"?{accepted:!1,reason:"claim timed out"}:{accepted:r.accepted,runId:r.runId,reason:r.reason,claudeProfile:r.claudeProfile,actorEmail:r.actorEmail}}async requestAutopilotNext(){if(!this.connected)return null;let e=Ks.default.randomUUID(),n=await new Promise(r=>{let s=setTimeout(()=>{this.pending.delete(e),r(null)},15e3);this.pending.set(e,{resolve:r,timer:s}),this.sendNow({type:"autopilot.next",requestId:e})});return!n||n.type!=="autopilot.next.result"?null:{ok:n.ok,item:n.item,pausedUntil:n.pausedUntil}}sendAutopilotReport(e){this.send({type:"autopilot.report",requestId:Ks.default.randomUUID(),itemId:e.itemId,outcome:e.outcome,runId:e.runId??"",error:e.error??""})}async claimDeploy(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let n=Ks.default.randomUUID(),r=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(n),s(null)},15e3);this.pending.set(n,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:n,...e})});return!r||r.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:r.accepted,runId:r.runId,environment:r.environment,reason:r.reason,code:r.code}}sendDeploySuggestResult(e,n){this.send({type:"deploy.suggest.result",requestId:e,...n,docPath:n.docPath??"",docContent:n.docContent??""})}sendChatTurnResult(e,n){this.send({type:"chat.turn.result",requestId:e,...n,inputTokens:n.inputTokens??0,outputTokens:n.outputTokens??0,cacheReadTokens:n.cacheReadTokens??0,costUsd:n.costUsd??0,model:n.model??"",contextTokens:n.contextTokens??0,contextLimit:n.contextLimit??0,compacted:n.compacted??!1,compactedMessages:n.compactedMessages??0})}sendChatCreateTicketResult(e,n){this.send({type:"chat.create.ticket.result",requestId:e,...n,childKeys:n.childKeys??[]})}sendChatListResult(e,n){this.send({type:"chat.list.result",requestId:e,sessions:n})}sendRepoDocsResult(e,n){this.send({type:"repo.docs.result",requestId:e,...n})}sendRepoDocReadResult(e,n){this.send({type:"repo.doc.read.result",requestId:e,...n})}sendChatLoadResult(e,n){this.send({type:"chat.load.result",requestId:e,...n,messages:n.messages.map(r=>({...r,steps:r.steps??[],files:r.files??[]}))})}sendBoardFetchResult(e,n){this.send({type:"board.fetch.result",requestId:e,...n,browseBaseUrl:n.browseBaseUrl??""})}sendAuditStartResult(e,n){this.send({type:"audit.start.result",requestId:e,...n})}sendAuditListResult(e,n){this.send({type:"audit.list.result",requestId:e,ok:n.ok,error:n.error,audits:(n.audits??[]).map(r=>({...r,detailLevel:r.detailLevel??"technical"}))})}sendAuditGetResult(e,n){this.send({type:"audit.get.result",requestId:e,...n})}sendAuditReviewResult(e,n){this.send({type:"audit.review.result",requestId:e,...n})}sendKnowledgeListResult(e,n){this.send({type:"knowledge.list.result",requestId:e,ok:n.ok,error:n.error,files:n.files??[]})}sendKnowledgeSaveResult(e,n){this.send({type:"knowledge.save.result",requestId:e,...n})}sendEpicListResult(e,n){this.send({type:"epic.list.result",requestId:e,ok:n.ok,error:n.error,epics:n.epics??[],children:n.children??[]})}sendEpicSuggestResult(e,n){this.send({type:"epic.suggest.result",requestId:e,ok:n.ok,error:n.error,issueKey:n.issueKey??"",reason:n.reason??"",considered:n.considered??0})}sendTeamCredsResult(e,n){this.send({type:"team.creds.result",requestId:e,ok:n.ok,error:n.error,githubShared:n.githubShared??!1,sharedGithubLogin:n.sharedGithubLogin??"",entries:n.entries??[]})}sendBoardTriggerResult(e,n){this.send({type:"board.trigger.result",requestId:e,...n})}sendAuditStatsResult(e,n){this.send({type:"audit.stats.result",requestId:e,ok:n.ok,error:n.error,byProject:n.byProject??{}})}sendRunnerUpdateResult(e,n){this.send({type:"runner.update.result",requestId:e,ok:n.ok,error:n.error,note:n.note??"",scheduled:n.scheduled??!1})}sendSetupClaudeMdGenerateResult(e,n){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:n.ok,error:n.error,content:n.content??""})}sendSetupClaudeMdSaveResult(e,n){this.send({type:"setup.claudemd.save.result",requestId:e,ok:n.ok,error:n.error,note:n.note??""})}sendResolveConflictResult(e,n){this.send({type:"run.resolve.conflict.result",requestId:e,ok:n.ok,note:n.note??"",freeOfCharge:n.freeOfCharge??!1,headSha:n.headSha??"",costUsd:n.costUsd,inputTokens:n.inputTokens,outputTokens:n.outputTokens})}sendTestFixResult(e,n){this.send({type:"run.testfix.result",requestId:e,ok:n.ok,note:n.note??"",headSha:n.headSha??"",remaining:n.remaining??[],costUsd:n.costUsd,inputTokens:n.inputTokens,outputTokens:n.outputTokens})}sendRunAnswerResult(e,n){this.send({type:"run.answer.result",requestId:e,ok:n.ok,note:n.note??"",error:n.error})}sendAgentProfilesResult(e,n){this.send({type:"agent.profiles.result",requestId:e,ok:n.ok,error:n.error,profiles:n.profiles??[],defaultLoggedIn:n.defaultLoggedIn??!1,agentsWithoutProfiles:n.agentsWithoutProfiles??[]})}sendRepoDocSaveResult(e,n){this.send({type:"repo.doc.save.result",requestId:e,ok:n.ok,error:n.error,note:n.note??""})}sendSetupStatusResult(e,n){this.send({type:"setup.status.result",requestId:e,ok:n.ok,error:n.error,jiraConfigured:n.jiraConfigured??!1,jiraEmail:n.jiraEmail??"",claude:n.claude,githubTokenSet:n.githubTokenSet??!1,githubLogin:n.githubLogin??"",deploysEnabled:n.deploysEnabled??!1,jiraUserCount:n.jiraUserCount??0,repos:n.repos??[]})}sendEnvPreflightResult(e,n){this.send({type:"env.preflight.result",requestId:e,...n,checks:this.withFixDefaults(n.checks)})}sendSelfMigrationApplyResult(e,n){this.send({type:"selfmigration.apply.result",requestId:e,...n})}sendJiraUsersResult(e,n){this.send({type:"jira.users.result",requestId:e,...n})}withFixDefaults(e){return e.map(n=>({...n,kind:n.kind??"connection",fix:n.fix??[],fixNote:n.fixNote??""}))}sendProjectTestResult(e,n,r){this.send({type:"project.test.result",requestId:e,ok:n,checks:this.withFixDefaults(r)})}sendRuleDiagnoseResult(e,n){this.send({type:"rule.diagnose.result",requestId:e,...n,checks:this.withFixDefaults(n.checks)})}};var uo=I(require("node:fs"),1),us=I(require("node:path"),1),cf=require("node:child_process"),Yv=/\.mdx?$/i,lf=6,Xv=/^[\w.\- ()]+$/;function Qv(t,e){let n=e.trim().replace(/\\/g,"/").replace(/^\.\//,"");if(!n)return{ok:!1,error:"empty path"};if(us.default.isAbsolute(n))return{ok:!1,error:"path must be repo-relative"};if(!Yv.test(n))return{ok:!1,error:"only markdown files (.md) can be saved"};let r=n.split("/");if(r.length>lf)return{ok:!1,error:`path deeper than ${lf} levels`};for(let o of r)if(o==="."||o===".."||!Xv.test(o))return{ok:!1,error:`invalid path segment "${o}"`};if(r[0]===".git")return{ok:!1,error:"cannot write under .git"};let s=us.default.resolve(t),i=us.default.resolve(s,n);return i!==s&&!i.startsWith(s+us.default.sep)?{ok:!1,error:"path escapes the checkout"}:{ok:!0,abs:i,rel:n}}async function kl(t){let e=Qv(t.repoPath,t.relPath);if(!e.ok)return{ok:!1,error:e.error};if(uo.default.existsSync(e.abs)&&!t.overwrite)return{ok:!1,error:`${e.rel} already exists in this checkout`};uo.default.mkdirSync(us.default.dirname(e.abs),{recursive:!0}),uo.default.writeFileSync(e.abs,t.content.endsWith(`
911
911
  `)?t.content:t.content+`
912
- `);let n=s=>new Promise((i,o)=>{(0,cf.execFile)("git",["-C",t.repoPath,...s],{timeout:12e4},(l,c,u)=>l?o(new Error(u||l.message)):i())}),r="";try{await n(["add",e.rel]),await n(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",t.commitMessage]);try{await n(["push"]),r="committed and pushed to the repo"}catch(s){r="committed locally, but push failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - push it from the server when convenient"}}catch(s){r="file written, but commit failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - commit it from the server when convenient"}return{ok:!0,note:r}}var Tr=I(require("node:fs"),1),Sl=I(require("node:path"),1),ho=require("node:child_process"),df=require("node:util");nr();wt();var hf=I(_e(),1),uf=(0,df.promisify)(ho.execFile);function ew(t){try{return new URL(t).host}catch{return t}}function tw(t){try{return(0,ho.execFileSync)("git",["-C",t,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function fo(t,e,n=[],r){let s=[],i=t.repos[e.repoName]?.jira,o=i??t.jira,l=(e.jiraSiteUrl??"").trim().toLowerCase();if(!o)s.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else if(!l)s.push({name:"jira-site",ok:!1,detail:"this project has not said which Atlassian site it is on, so nothing here can be verified - a credential that authenticates somewhere else would look like a pass.",fixNote:"This one is fixed in the dashboard, not on the server: open the project and fill in its Atlassian site (for example yourcompany.atlassian.net), then run this test again."});else{let p=ew(o.baseUrl),b=i?"this repo's own Jira credential":"the runner-wide Jira credential";if(p!==l)s.push({name:"jira-site",ok:!1,detail:`this project is on ${l}, but ${b} is for ${p}.`,fix:[`allwright jira set "${e.repoName}"`],fixNote:`"${e.repoName}" in that command is this project's REPO NAME - the label that ties the project here to a checkout on the server (the same one used with allwright repo add). Not the Jira key, not a folder path. The command asks for three things for ${l}: the base URL (https://${l}), your Jira account email, and an API token from id.atlassian.com/manage-profile/security/api-tokens. They are stored on this server only. Restart afterwards: allwright stop && allwright start`});else{let w=new Pe(o);try{let S=await w.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${S.displayName} on ${p} (${b})`});try{await w.search(`project = "${e.jiraProjectKey}" ORDER BY created DESC`,1),s.push({name:"jira-project",ok:!0,detail:`project ${e.jiraProjectKey} is readable on ${p}`})}catch(x){s.push({name:"jira-project",ok:!1,detail:`cannot read project ${e.jiraProjectKey} on ${p}: ${Hs(x)}`})}}catch(S){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${Hs(S)}`})}}}let c=t.repos[e.repoName];if(c&&Tr.default.existsSync(c.path)){let p=Sl.default.join(c.path,"CLAUDE.md"),b=Tr.default.existsSync(p)&&Tr.default.readFileSync(p,"utf8").trim().length>0;s.push({name:"memory-file",kind:"content",ok:b,detail:b?"CLAUDE.md present - the agent has project memory":"MISSING: CLAUDE.md at the repo root. Rules can't be enabled until the project has a memory file - it is what makes every run smarter than the last.",...b?{}:{fixNote:"No command needed: the setup step below this one drafts CLAUDE.md by reading the repo, shows it to you, and commits it when you approve. Writing it by hand works too - any honest description of what the project is and how it is built beats an empty file."}});let w=Ki(c.path);s.push({name:"deploy-doc",kind:"content",ok:w!==null,detail:w?`${w.path} present - deploy suggestions will follow it`:"MISSING: DEPLOY.md (or .ticketpilot/deploy.md). Environments can't be created until the repo documents how it deploys.",...w?{}:{fixNote:"Only needed if this project will deploy from Allwright. The setup wizard can draft DEPLOY.md the same way it drafts CLAUDE.md - describe how you deploy today (the commands you actually run), and the agent proposes steps a human saves. Skip it if you only want tickets to become pull requests."}})}if(!c)s.push({name:"repo-path",ok:!1,detail:`no local path mapped for repo "${e.repoName}" - run: allwright repo add "${e.repoName}" /path/to/checkout`});else if(!Tr.default.existsSync(c.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${c.path}`});else{let p=Tr.default.existsSync(Sl.default.join(c.path,".git"));s.push({name:"repo-path",ok:!0,detail:`${c.path}${p?" (git checkout)":" (warning: not a git checkout)"}`})}let u=[...new Set([e.defaultAgent||"claude-code",...r??[]])];for(let p of u){let b=Ue(t,p),w=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:S}=await uf(b,["--version"],{timeout:15e3});s.push({name:w,ok:!0,detail:S.trim().slice(0,100)})}catch(S){s.push({name:w,ok:!1,detail:`cannot run "${b}" for agent "${p}": ${Hs(S)}`,fixNote:p==="claude-code"?"Install Claude Code on this server (npm install -g @anthropic-ai/claude-code) and log it in.":`Install the "${p}" CLI on this server, or point the runner at its binary in the config's agents section.`})}}try{let{stdout:p}=await uf("git",["--version"],{timeout:15e3});s.push({name:"git",ok:!0,detail:p.trim().slice(0,100)})}catch(p){s.push({name:"git",ok:!1,detail:`cannot run git: ${Hs(p)}`})}let f=Ae(t,e.repoName);if(!f)s.push({name:"github-token",ok:!1,detail:`no GitHub token applies to "${e.repoName}" - implement rules cannot push.`,fix:[`allwright github set "${e.repoName}"`,"allwright github set-token"],fixNote:`"${e.repoName}" is this project's REPO NAME - the same label used with allwright repo add, not a folder path. The first command stores a token for this repo alone (separately revocable); the second stores one shared by every repo on this server. Both print the exact permission checklist before asking. In short: create it at ${hf.GITHUB_TOKEN_PERMISSIONS.where}, with the RESOURCE OWNER set to the org that owns the repo (the usual mistake), Contents and Pull requests both Read and write.`});else try{let{GitHubClient:p}=await Promise.resolve().then(()=>(ct(),or)),b=new p(f),w=await b.whoami(),S=c&&Tr.default.existsSync(c.path)?tw(c.path):null,x=S?at(S):null;if(!x)s.push({name:"github-token",ok:!0,detail:`authenticated as ${w} - repo access not checked (no local checkout yet)`});else{let A=await b.repoAccess(x.owner,x.repo);s.push({name:"github-token",ok:A.ok&&A.canPush,detail:A.ok?A.canPush?`${w} has push access to ${x.owner}/${x.repo}`:`${w} can read ${x.owner}/${x.repo} but NOT push to it - implement rules will fail at the push`:`${w} cannot see ${x.owner}/${x.repo}: ${A.error}`,...A.ok&&A.canPush?{}:{fix:[`allwright github set "${e.repoName}"`],fixNote:`Two ways: edit the existing PAT on GitHub and add ${x.owner}/${x.repo} to it with contents:write and pull_requests:write - or give this repo its own token with the command above. A fine-grained PAT only ever covers ONE organisation, so a repo in a different org than your other projects always needs its own.`}})}}catch(p){s.push({name:"github-token",ok:!1,detail:Hs(p)})}if(n.length){t.deploy.enabled?s.push({name:"deploy",ok:!0,detail:"deployments enabled on this runner"}):s.push({name:"deploy",ok:!1,detail:"deployments are disabled on this runner - run `allwright deploy enable` to allow it to execute your saved deploy steps"});for(let p of n){let b=Ot(t,e.repoName,p.name),w=p.requiredSecrets.filter(S=>!b[S]&&!process.env[S]);s.push({name:`env:${p.name}`,ok:w.length===0,detail:w.length?`missing secret(s): ${w.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${w[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function Hs(t){return(t instanceof Error?t.message:String(t)).slice(0,300)}var Te=new Bl;Te.name("allwright").description("Allwright runner - 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(vi);function vf(t){y.info(`Create the token at ${Ze.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Ze.GITHUB_TOKEN_PERMISSIONS.steps)y.info(` - ${e}`);y.info(Ze.GITHUB_TOKEN_PERMISSIONS.note),y.info(`Then paste it below for ${t}.`)}Te.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",Tl.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 t=>{let e=yn.default.createInterface({input:process.stdin,output:process.stdout}),n=async(r,s,i=!1)=>{if(s)return s;let o=await e.question(`${r}: `);if(!o.trim())throw new Error(`${r} is required`);return o.trim()};try{let r=await n("Control plane URL",t.cpUrl),s=await n("Enrolment token (from the web UI)",t.enrollToken),i=await n("Jira base URL (https://yourorg.atlassian.net)",t.jiraUrl),o=await n("Jira account email",t.jiraEmail),l=await n("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",t.jiraToken,!0),c=No.parse({controlPlaneUrl:r,runnerName:t.name,jira:{baseUrl:i,email:o,apiToken:l}}),u=await new Pe(c.jira).myself();y.info(`Jira credential OK - authenticated as ${u.displayName}`),c=await zc(c,s),y.info(`Enrolled as runner "${c.runnerName}" (${c.runnerId})`),y.info(`Credentials saved to ${jt()} (mode 600, this machine only)`),y.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var xl=Te.command("repo").description("Map control-plane repo names to local checkouts");xl.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(t,e)=>{let n=ie();n.repos[t]={path:e},ge(n),y.info(`mapped repo "${t}" -> ${e}`);try{let{originUrl:r}=await Promise.resolve().then(()=>(wt(),Hc));y.info(` origin remote: ${await r(e)} - make sure this is the repo you meant`)}catch{y.warn(` could not read an origin remote at ${e} - is it a git checkout?`)}gn()||y.warn(`"${t}" is saved but NOT live yet - the running runner still does not know about it, and runs will keep saying it is not mapped until it reloads.`)});xl.command("list").description("Show configured repo mappings").action(()=>{let t=ie(),e=Object.entries(t.repos);if(!e.length)return y.info("no repos mapped yet");for(let[n,r]of e)y.info(`${n} -> ${r.path}`)});var wf=Te.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");wf.command("login <profileName>").description("Create (or re-login) a named Claude profile. Opens Claude Code interactively with its own config directory - 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 t=>{if(!/^[a-zA-Z0-9._-]+$/.test(t))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=ie(),n=e.claudeProfiles[t]?.configDir??`${jt().replace(/runner\.json$/,"")}claude-profiles/${t}`;ft.default.mkdirSync(n,{recursive:!0,mode:448}),e.claudeProfiles[t]={configDir:n},ge(e),y.info(`profile "${t}" -> ${n}`),y.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),y.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let r=(0,Gt.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:n},stdio:"inherit"});await new Promise(s=>r.on("exit",()=>s())),y.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${t}".`),gn()});wf.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let t=ie(),e=Object.entries(t.claudeProfiles);if(y.info("default: this OS user's own Claude login (no profile)"),!e.length)return y.info("no named profiles yet - allwright claude login <name>");for(let[n,r]of e){let s=ft.default.existsSync(r.configDir)&&ft.default.readdirSync(r.configDir).length>0;y.info(`${n} -> ${r.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});xl.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 - delete the project on the dashboard separately.").action(t=>{let e=ie();if(!e.repos[t]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}`)}let n=e.repos[t].path;delete e.repos[t];let r=Object.keys(e.environments).filter(i=>i.startsWith(`${t}:`));for(let i of r)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==t),ge(e),y.info(`Removed "${t}" (was ${n})`),r.length&&y.info(`Also removed ${r.length} environment secret set(s): ${r.join(", ")}`),e.auditSchedules.length!==s&&y.info("Also removed its audit schedule(s)"),y.info("The checkout on disk was NOT touched - remove it yourself if you want it gone."),y.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var Cl=Te.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Cl.command("install").description("Install + start the systemd service - 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(t=>{if(t.print){y.info(`
913
- `+da(ua()));return}Xc(y)});Cl.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>Qc(y));Cl.command("status").description("systemctl status for the runner service").action(()=>{(0,Gt.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});Te.command("update").description("Update the runner to the latest published version (npm install -g allwright@latest). Restart the runner afterwards - and only when no runs are active.").action(async()=>{y.info("Updating: npm install -g allwright@latest");let t=(0,Gt.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,n)=>{t.on("exit",r=>r===0?e():n(new Error(`npm exited with code ${r}`))),t.on("error",n)}),y.info("Updated. Restart the runner service to load the new version (check active runs first).")});var hs=Te.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");hs.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 t=>{let e=ie();if(!e.repos[t]){let l=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${l}. Run \`allwright repo add\` first.`)}let n=eh(t),r=(n?.jiraSiteUrl??"").trim(),s=r?`https://${r}`:"",i=e.jira?.email??"";if(s&&i&&e.jira?.apiToken){let l={baseUrl:s,email:i,apiToken:e.jira.apiToken};try{let c=await new Pe(l).myself();if(e.repos[t].jira=l,ge(e),y.info(`The token already on this server works on ${r} - authenticated as ${c.displayName}. Saved it for "${t}"; nothing to type.`),n?.jiraProjectKey)try{await new Pe(l).search(`project = "${n.jiraProjectKey}"`,1),y.info(`Project ${n.jiraProjectKey} is readable with it.`)}catch{y.warn(`Authenticated, but project ${n.jiraProjectKey} is not readable with this account. Ask a Jira admin for access, or re-run this command to enter a different account's token.`)}gn();return}catch{y.info(`The token already on this server does not work on ${r} - asking for one that does.`)}}let o=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let c=(await o.question(s?`Jira base URL [${s}]: `:"Jira base URL for this repo (https://yourorg.atlassian.net): ")).trim()||s,f=(await o.question(i?`Jira account email [${i}]: `:"Jira account email: ")).trim()||i,p=(await o.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!c||!f||!p)throw new Error("all three values are required");let b={baseUrl:c,email:f,apiToken:p},w=await new Pe(b).myself();y.info(`Jira credential OK - authenticated as ${w.displayName} on ${c}`),e.repos[t].jira=b,ge(e),y.info(`Saved: repo "${t}" now polls ${c} (other repos keep the runner-wide credential)`),gn()}finally{o.close()}});hs.command("set-token").description("Replace the RUNNER-WIDE Jira credential (the one every repo without an override uses). Until now this was only set at init - and Atlassian API tokens expire, which surfaces as boards quietly going empty. Prompts on stdin; validated before saving; applies live, no restart.").action(async()=>{let t=ie(),e=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let n=t.jira?.baseUrl??"",r=t.jira?.email??"",s=(await e.question(n?`Jira base URL [${n}]: `:"Jira base URL (https://yourorg.atlassian.net): ")).trim()||n,i=(await e.question(r?`Jira account email [${r}]: `:"Jira account email: ")).trim()||r,o=(await e.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!s||!i||!o)throw new Error("all three values are required");let l={baseUrl:s,email:i,apiToken:o},c=await new Pe(l).myself();t.jira=l,ge(t),y.info(`Jira credential OK - authenticated as ${c.displayName} on ${s}`),y.info(`Saved to ${jt()} (mode 600, this machine only). Repo overrides are untouched.`),gn()}finally{e.close()}});hs.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let t=ie();y.info(`runner-wide: ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(not configured)"}`);for(let[e,n]of Object.entries(t.repos))y.info(`${e} -> ${n.jira?`${n.jira.baseUrl} (${n.jira.email})`:"(runner-wide credential)"}`)});hs.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 - no restart needed.").action(async t=>{let e=ie(),n=t.trim().toLowerCase();if(!n.includes("@"))throw new Error(`"${t}" doesn't look like an email`);let r=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await r.question(`Their ATLASSIAN account email [${n}]: `)).trim()||n,i=(await r.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(u=>u.jira)].filter(u=>!!u),l=new Set,c=!1;for(let u of o)if(!l.has(u.baseUrl)){l.add(u.baseUrl);try{let f=await new Pe({baseUrl:u.baseUrl,email:s,apiToken:i}).myself();y.info(`${u.baseUrl}: OK - authenticated as ${f.displayName}`),c=!0}catch{y.warn(`${u.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!c)throw new Error("credential failed on every configured Jira site - nothing saved");e.jiraUsers[n]={email:s,apiToken:i},ge(e),y.info(`Saved. Dashboard actions by ${n} now post to Jira as ${s}. No restart needed.`)}finally{r.close()}});hs.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let t=ie(),e=Object.entries(t.jiraUsers);if(!e.length)return y.info("none yet - everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[n,r]of e)y.info(`${n} -> posts to Jira as ${r.email}`)});hs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(t=>{let e=ie(),n=t.trim().toLowerCase();if(!e.jiraUsers[n])throw new Error(`no credential stored for ${n}`);delete e.jiraUsers[n],ge(e),y.info(`Removed. Dashboard actions by ${n} will now be refused until a new credential is added.`)});var fs=Te.command("github").description("GitHub credential for implement-mode rules");fs.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 t=>{let e=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let n=t.token??void vf("every repo on this server")??(await e.question("GitHub token: ")).trim();if(!n)throw new Error("token is required");let{GitHubClient:r}=await Promise.resolve().then(()=>(ct(),or)),s=await new r(n).whoami(),i=ie();i.github={token:n,login:s},ge(i),y.info(`GitHub token OK - authenticated as ${s}`),y.info(`Saved to ${jt()} (mode 600, this machine only)`)}finally{e.close()}});fs.command("set <repoName>").description("Store a GitHub token for ONE repo only - 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 t=>{let e=ie();if(!e.repos[t]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}. Run \`allwright repo add\` first.`)}let n=e.github?.token,r=e.repos[t]?.path;if(n&&r&&ft.default.existsSync(r))try{let i=(0,Gt.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim(),o=at(i);if(o){let{GitHubClient:l}=await Promise.resolve().then(()=>(ct(),or)),c=new l(n),u=await c.repoAccess(o.owner,o.repo);if(u.ok&&u.canPush){let f=await c.whoami();y.info(`The shared token on this server already has push access to ${o.owner}/${o.repo} as ${f} - "${t}" needs nothing of its own. Storing a second token here would only give you two to rotate.`),y.info("Want a separately revocable one anyway? Paste it at the prompt below; press Enter to leave things as they are.")}}}catch{}let s=yn.default.createInterface({input:process.stdin,output:process.stdout});try{vf(`"${t}"`);let i=(await s.question(`GitHub token for "${t}": `)).trim();if(!i&&n){y.info(`Nothing changed - "${t}" keeps using the shared token.`);return}if(!i)throw new Error("token is required");let{GitHubClient:o}=await Promise.resolve().then(()=>(ct(),or)),l=await new o(i).whoami();e.repos[t].github={token:i,login:l},ge(e),y.info(`GitHub token OK - authenticated as ${l}`),y.info(`Saved: repo "${t}" now uses its own token (other repos keep the runner-wide one)`)}finally{s.close()}});fs.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 - 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 t=>{let e=ie(),n=t.trim().toLowerCase();if(!n.includes("@"))throw new Error(`"${t}" doesn't look like an email`);let r=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await r.question(`GitHub token for ${n}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(ct(),or)),o=await new i(s).whoami();e.githubUsers[n]={token:s,login:o},ge(e),y.info(`GitHub token OK - authenticated as ${o}`),y.info(`Saved. Implement runs triggered by ${n} now open PRs as ${o}. No restart needed.`)}finally{r.close()}});fs.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let t=ie(),e=Object.entries(t.githubUsers);if(!e.length)return y.info("no per-user GitHub tokens - everyone's PRs use the repo/runner-wide token");for(let[n]of e)y.info(`${n} -> own GitHub token stored`)});fs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(t=>{let e=ie(),n=t.trim().toLowerCase();if(!e.githubUsers[n])throw new Error(`no GitHub token stored for ${n}`);delete e.githubUsers[n],ge(e),y.info(`Removed. ${n}'s runs use the repo/runner-wide token again.`)});fs.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let t=ie();y.info(`runner-wide: ${t.github?.token?"token set":"(not configured)"}`);for(let[n,r]of Object.entries(t.repos))y.info(`${n} -> ${r.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(t.githubUsers);y.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var Il=Te.command("audit").description("Recurring specialist audits on this runner");Il.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 - nothing blocks.").action((t,e,n)=>{let r=ie();if(!r.repos[t]){let i=Object.keys(r.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(n,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");r.auditSchedules=[...r.auditSchedules.filter(i=>!(i.repoName===t&&i.role===e)),{repoName:t,role:e,intervalHours:s}],ge(r),y.info(`Scheduled: ${e} audit of "${t}" every ${s}h. Restart the runner to apply.`)});Il.command("schedules").description("List scheduled audits").action(()=>{let t=ie();if(!t.auditSchedules.length)return y.info("no scheduled audits - allwright audit schedule <repo> <role> <hours>");for(let e of t.auditSchedules)y.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});Il.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((t,e)=>{let n=ie(),r=n.auditSchedules.length;if(n.auditSchedules=n.auditSchedules.filter(s=>!(s.repoName===t&&s.role===e)),n.auditSchedules.length===r)throw new Error("no such schedule");ge(n),y.info("Removed. Restart the runner to apply.")});var Rl=Te.command("deploy").description("Deployment settings for this machine");Rl.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 - so this switch lives on the machine, not in the web UI, and only someone with shell access can flip it.").action(()=>{let t=ie();t.deploy={enabled:!0},ge(t),y.info("deployments ENABLED on this runner"),y.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),gn()});Rl.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let t=ie();t.deploy={enabled:!1},ge(t),y.info("deployments DISABLED on this runner"),gn()});Rl.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let t=ie();y.info(`deployments: ${t.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(t.environments);if(!e.length)return y.info("no environment secrets stored");for(let[n,r]of e){let s=Object.keys(r.secrets);y.info(`${n}: ${s.length?s.join(", "):"(no secrets)"}`)}});var El=Te.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");El.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((t,e,n)=>{let r=ie(),s=ii(t,e),i=r.environments[s]??{secrets:{}},o=[];for(let l of n){let c=l.indexOf("=");if(c<=0)throw new Error(`expected KEY=VALUE, got "${l}"`);let u=l.slice(0,c).trim();i.secrets[u]=l.slice(c+1),o.push(u)}r.environments[s]=i,ge(r),y.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),y.info(`Saved to ${jt()} (mode 600, this machine only)`),gn()});El.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((t,e,n)=>{let r=ie(),s=ii(t,e),i=r.environments[s];if(!i)return y.info(`nothing stored for ${s}`);for(let o of n)delete i.secrets[o];r.environments[s]=i,ge(r),y.info(`removed ${n.join(", ")} from ${s}`)});El.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let t=ie(),e=Object.entries(t.environments);if(!e.length)return y.info("no environment secrets stored");for(let[n,r]of e)y.info(`${n}: ${Object.keys(r.secrets).join(", ")||"(none)"}`)});Te.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(t=>{try{let e=nc(t);y.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),y.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private - anyone holding it can act as this runner."),y.info(`Restore on any machine with: allwright import ${ds.default.basename(e.file)}`)}catch(e){y.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});Te.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(t=>{let e=On();if(e&&Nn(e)){y.error("the runner is running - stop it first (systemctl stop allwright, or `allwright stop` for a pid-file daemon), then import."),process.exitCode=1;return}try{let n=rc(t);y.info(`Restored ${n.restored.length} entries into ${se()}`),n.previousDir&&y.info(`Previous config kept at ${n.previousDir}`),y.info("Start the runner and it will reconnect with the restored identity.")}catch(n){y.error(n instanceof Error?n.message:String(n)),process.exitCode=1}});Te.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let t=ie(),e=Object.keys(t.repos);if(!t.jira){y.error("no Jira credentials configured - run `allwright init`"),process.exitCode=1;return}let n=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],r=!0;for(let s of n){let i=await fo(t,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let l=o.ok?"PASS":"FAIL";(o.ok?y.info:y.error)(`[${l}] ${o.name}: ${o.detail}`),r&&=o.ok}}r||(process.exitCode=1)});function gn(){let t=On();if(t&&Nn(t)&&process.platform!=="win32")try{return process.kill(t,"SIGHUP"),y.info("running runner reloaded its config live - no restart needed"),!0}catch{}let e=t?dc(t):null;return y.info(e?`No background runner found to reload, but a service named "${e}" exists here: sudo systemctl kill -s HUP ${e} - otherwise it applies on the next start.`:"No background runner found to reload. Under systemd: sudo systemctl kill -s HUP <your allwright service> (allwright service install names it 'allwright'; installs predating the rename use 'ticketpilot-runner') - otherwise it applies on the next allwright start."),!1}function sw(t){if(!t.runnerToken)throw new Error("runner not enrolled - run `allwright init`");if(!t.jira)throw new Error("no Jira credentials - run `allwright init`");let e=uc();e.ok||(y.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",Do);let n=new Pe(t.jira),r=new Map,s=d=>{let m=t.repos[d]?.jira;if(!m)return n;let g=r.get(d);return g||(g=new Pe(m),r.set(d,g)),g},i=new Map,o=(d,m)=>{let g=Vc(ye()??t,d,m);switch(g.kind){case"legacy":return{jira:s(d),authored:!1};case"self":return{jira:s(d),authored:!0};case"missing":return{error:g.error};case"user":{let C=`${g.creds.baseUrl}:${g.creds.email}:${g.creds.apiToken.slice(-6)}`,M=i.get(C);return M||(M=new Pe(g.creds),i.set(C,M)),{jira:M,authored:!0}}}},l=new URL("/api/runner/ws",t.controlPlaneUrl);l.protocol=l.protocol==="https:"?"wss:":"ws:";let c=[],u=[],f=[],p,b=null,w={cfg:t,jiraFor:s,transport:null},S=new Set,x=d=>{let m=c.find(C=>C.id===d),g=m&&t.repos[m.repoName];return m&&g?{project:m,repoPath:g.path}:null},A=d=>{let m=c.find(M=>M.id===d),g=t.runnerName?`This runner ("${t.runnerName}")`:"This runner";if(!m)return`${g} does not know that project at all - it may have been deleted, or this runner has not synced yet.`;let C=Object.keys(t.repos).join(", ")||"(none)";return`${g} has no local checkout for "${m.name}" (repo "${m.repoName}"). Repos mapped here: ${C}. Either pin the project to the runner that HAS that repo (Dashboard \u2192 the project \u2192 Edit \u2192 Runner) - do this when several runners are online and the project is unpinned, because then the request goes to whichever one answers first - or map the repo on this machine: allwright repo add ${m.repoName} /path/to/checkout`},j={cfg:t,jiraFor:s,get transport(){return w.transport},lookup:(d,m)=>{let g=x(d),C=f.find(M=>M.projectId===d&&M.name===m);return g&&C?{...g,environment:C}:null}},v=new co(l.toString(),t.runnerToken,{runnerVersion:vi},{onConfig:d=>{c=d.projects,Qd(d.projects),u=d.rules,f=d.environments,p.setConfig(d.projects,d.rules,d.pollingPaused,d.environments)},onDeployFix:async d=>{let m=x(d.projectId);if(!m){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:A(d.projectId)});return}let g=Ke(t,m.project,"assist");if("error"in g){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:g.error});return}y.info(`investigating failed deploy of "${d.environmentName}" (step: ${d.failedStep||"?"})`);let C=await Rd({agent:g,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,steps:d.steps,failedStep:d.failedStep,errorText:d.errorText,cfg:t});v.sendDeploySuggestResult(d.requestId,C)},onProjectTest:async d=>{let m=c.find(C=>C.id===d.projectId);if(!m){v.sendProjectTestResult(d.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}y.info(`running connection test for project "${m.name}"`);let g=await fo(ye()??t,m,f.filter(C=>C.projectId===m.id),u.filter(C=>C.projectId===m.id).map(C=>"agent"in C.action?C.action.agent:"").filter(Boolean));v.sendProjectTestResult(d.requestId,g.every(C=>C.ok),g)},onRuleDiagnose:async d=>{let m=u.find(D=>D.id===d.ruleId),g=m&&c.find(D=>D.id===m.projectId);if(!m||!g){v.sendRuleDiagnoseResult(d.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}y.info(`diagnosing rule "${m.name}"`);let C=await fo(ye()??t,g,m.action.type==="deploy"?f.filter(D=>D.projectId===g.id):[]),M=m.action.type==="implement"?C:C.filter(D=>D.name!=="github-token"),{matchedCount:V,excludedCount:Q,excludedSample:W}=await p.diagnoseRule(m,g);v.sendRuleDiagnoseResult(d.requestId,{checks:M,matchedCount:V,excludedCount:Q,excludedSample:W})},onCancel:d=>{Wu(d)?y.info(`run ${d} stopped from the dashboard`):y.warn(`cancel requested for run ${d}, but nothing is running under that id here - it likely finished already`)},onApproved:(d,m)=>{if(Ha(d)){kd(j,d).catch(g=>y.error(`deploy approval crashed for ${d}: ${g instanceof Error?g.stack:g}`));return}$s(w,d,m).catch(g=>y.error(`approval handling crashed for ${d}: ${g instanceof Error?g.stack:g}`))},onRetryPush:d=>{let m=Oi(d),g=()=>rd(w,d).catch(C=>y.error(`retry push crashed for ${d}: ${C instanceof Error?C.stack:C}`));m?p.runOnRepoQueue(m.baseRepoPath,g):g()},onRejected:d=>{if(Ha(d)){Sd(j,d).catch(m=>y.error(`deploy rejection crashed for ${d}: ${m instanceof Error?m.stack:m}`));return}nd(w,d).catch(m=>y.error(`rejection handling crashed for ${d}: ${m instanceof Error?m.stack:m}`))},onDeployStart:d=>{let m=`${d.runId}#${d.attempt}`;if(S.has(m))return;S.add(m);let g=x(d.projectId);if(!g){let C=A(d.projectId);y.error(`deploy ${d.runId}: ${C}`),v.send({type:"run.status",runId:d.runId,status:"failed",error:C});return}y.info(`deploy ${d.runId} requested from the dashboard: ${d.issueKey} \u2192 ${d.environment.name}`),p.runOnEnvironmentQueue(d.environment.id,()=>Bi({runId:d.runId,project:g.project,environment:d.environment,issueKey:d.issueKey,issueSummary:d.issueSummary,repoPath:g.repoPath,cfg:t,jira:s(g.project.repoName),transport:v,requestedBy:d.requestedBy}).catch(C=>y.error(`deploy crashed for ${d.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async d=>{let m=x(d.projectId);if(!m){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:A(d.projectId)});return}let g=Ke(t,m.project,"assist");if("error"in g){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:g.error});return}y.info(`asking ${g.adapter.displayName} for "${d.environmentName}" deploy steps in ${m.repoPath}`);let C=await Ed({agent:g,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,notes:d.notes,timeoutSeconds:d.timeoutSeconds,cfg:t});v.sendDeploySuggestResult(d.requestId,C)},onEnvPreflight:async d=>{let m=x(d.projectId);if(!m){v.sendEnvPreflightResult(d.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let g=await Id({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,steps:d.steps,requiredSecrets:d.requiredSecrets,workdir:d.workdir,branch:d.branch,publicUrl:d.publicUrl,cfg:t});v.sendEnvPreflightResult(d.requestId,g)},onSelfMigrationApply:async d=>{let m=x(d.projectId);if(!m){v.sendSelfMigrationApplyResult(d.requestId,{ok:!1,file:d.file,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project",fix:[]}],output:"",error:A(d.projectId)});return}y.info(`applying migration ${d.file} for "${d.environmentName}"`);let g=await nh({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,file:d.file,urlSecret:d.urlSecret,cfg:t});y.info(g.ok?`migration ${d.file} applied`:`migration ${d.file} failed: ${g.error}`),v.sendSelfMigrationApplyResult(d.requestId,g)},onChatTurn:async d=>{let m=x(d.projectId);if(!m){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:d.sessionId??"",reply:"",error:A(d.projectId)});return}let g=d.sessionId||(0,Gs.randomUUID)(),C=!d.sessionId,M=C?0:Ms(g)?.messages.length??0,V=!1,Q=0,W="";if(!C&&M>=Fd){let be=await Hd(m,g,t);if(be)V=!0,Q=M,W=be,g=(0,Gs.randomUUID)(),C=!0,y.info(`chat compacted: ${M} message(s) summarized into a fresh session`);else if(M>=Bd){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:g,reply:"",error:"this chat is very long and could not be compacted automatically - start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}}let D=d.files.length?oc(m.repoPath,d.requestId,d.files):null,L=(0,Ze.replyPreferenceAppendix)({language:d.replyLanguage,languageInstruction:d.replyLanguageInstruction,style:d.replyStyle})+(0,Ze.pendingMigrationsAppendix)(d.pendingMigrations),ee="```",le=C?`You are the project assistant for "${m.project.name}" - this working directory is its repository, and you have read-only access.
912
+ `);let n=s=>new Promise((i,o)=>{(0,cf.execFile)("git",["-C",t.repoPath,...s],{timeout:12e4},(l,c,u)=>l?o(new Error(u||l.message)):i())}),r="";try{await n(["add",e.rel]),await n(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",t.commitMessage]);try{await n(["push"]),r="committed and pushed to the repo"}catch(s){r="committed locally, but push failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - push it from the server when convenient"}}catch(s){r="file written, but commit failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - commit it from the server when convenient"}return{ok:!0,note:r}}var Tr=I(require("node:fs"),1),Sl=I(require("node:path"),1),ho=require("node:child_process"),df=require("node:util");nr();wt();var hf=I(_e(),1),uf=(0,df.promisify)(ho.execFile);function ew(t){try{return new URL(t).host}catch{return t}}function tw(t){try{return(0,ho.execFileSync)("git",["-C",t,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function fo(t,e,n=[],r){let s=[],i=t.repos[e.repoName]?.jira,o=i??t.jira,l=(e.jiraSiteUrl??"").trim().toLowerCase();if(!o)s.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else if(!l)s.push({name:"jira-site",ok:!1,detail:"this project has not said which Atlassian site it is on, so nothing here can be verified - a credential that authenticates somewhere else would look like a pass.",fixNote:"This one is fixed in the dashboard, not on the server: open the project and fill in its Atlassian site (for example yourcompany.atlassian.net), then run this test again."});else{let p=ew(o.baseUrl),b=i?"this repo's own Jira credential":"the runner-wide Jira credential";if(p!==l)s.push({name:"jira-site",ok:!1,detail:`this project is on ${l}, but ${b} is for ${p}.`,fix:[`allwright jira set "${e.repoName}"`],fixNote:`"${e.repoName}" in that command is this project's REPO NAME - the label that ties the project here to a checkout on the server (the same one used with allwright repo add). Not the Jira key, not a folder path. The command asks for three things for ${l}: the base URL (https://${l}), your Jira account email, and an API token from id.atlassian.com/manage-profile/security/api-tokens. They are stored on this server only. Restart afterwards: allwright stop && allwright start`});else{let w=new Pe(o);try{let S=await w.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${S.displayName} on ${p} (${b})`});try{await w.search(`project = "${e.jiraProjectKey}" ORDER BY created DESC`,1),s.push({name:"jira-project",ok:!0,detail:`project ${e.jiraProjectKey} is readable on ${p}`})}catch(x){s.push({name:"jira-project",ok:!1,detail:`cannot read project ${e.jiraProjectKey} on ${p}: ${Hs(x)}`})}}catch(S){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${Hs(S)}`})}}}let c=t.repos[e.repoName];if(c&&Tr.default.existsSync(c.path)){let p=Sl.default.join(c.path,"CLAUDE.md"),b=Tr.default.existsSync(p)&&Tr.default.readFileSync(p,"utf8").trim().length>0;s.push({name:"memory-file",kind:"content",ok:b,detail:b?"CLAUDE.md present - the agent has project memory":"MISSING: CLAUDE.md at the repo root. Rules can't be enabled until the project has a memory file - it is what makes every run smarter than the last.",...b?{}:{fixNote:"No command needed: the setup step below this one drafts CLAUDE.md by reading the repo, shows it to you, and commits it when you approve. Writing it by hand works too - any honest description of what the project is and how it is built beats an empty file."}});let w=Ki(c.path);s.push({name:"deploy-doc",kind:"content",ok:w!==null,detail:w?`${w.path} present - deploy suggestions will follow it`:"MISSING: DEPLOY.md (or .ticketpilot/deploy.md). Environments can't be created until the repo documents how it deploys.",...w?{}:{fixNote:"Only needed if this project will deploy from Allwright. The setup wizard can draft DEPLOY.md the same way it drafts CLAUDE.md - describe how you deploy today (the commands you actually run), and the agent proposes steps a human saves. Skip it if you only want tickets to become pull requests."}})}if(!c)s.push({name:"repo-path",ok:!1,detail:`no local path mapped for repo "${e.repoName}" - run: allwright repo add "${e.repoName}" /path/to/checkout`});else if(!Tr.default.existsSync(c.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${c.path}`});else{let p=Tr.default.existsSync(Sl.default.join(c.path,".git"));s.push({name:"repo-path",ok:!0,detail:`${c.path}${p?" (git checkout)":" (warning: not a git checkout)"}`})}let u=[...new Set([e.defaultAgent||"claude-code",...r??[]])];for(let p of u){let b=Ue(t,p),w=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:S}=await uf(b,["--version"],{timeout:15e3});s.push({name:w,ok:!0,detail:S.trim().slice(0,100)})}catch(S){s.push({name:w,ok:!1,detail:`cannot run "${b}" for agent "${p}": ${Hs(S)}`,fixNote:p==="claude-code"?"Install Claude Code on this server (npm install -g @anthropic-ai/claude-code) and log it in.":`Install the "${p}" CLI on this server, or point the runner at its binary in the config's agents section.`})}}try{let{stdout:p}=await uf("git",["--version"],{timeout:15e3});s.push({name:"git",ok:!0,detail:p.trim().slice(0,100)})}catch(p){s.push({name:"git",ok:!1,detail:`cannot run git: ${Hs(p)}`})}let f=Re(t,e.repoName);if(!f)s.push({name:"github-token",ok:!1,detail:`no GitHub token applies to "${e.repoName}" - implement rules cannot push.`,fix:[`allwright github set "${e.repoName}"`,"allwright github set-token"],fixNote:`"${e.repoName}" is this project's REPO NAME - the same label used with allwright repo add, not a folder path. The first command stores a token for this repo alone (separately revocable); the second stores one shared by every repo on this server. Both print the exact permission checklist before asking. In short: create it at ${hf.GITHUB_TOKEN_PERMISSIONS.where}, with the RESOURCE OWNER set to the org that owns the repo (the usual mistake), Contents and Pull requests both Read and write.`});else try{let{GitHubClient:p}=await Promise.resolve().then(()=>(ct(),or)),b=new p(f),w=await b.whoami(),S=c&&Tr.default.existsSync(c.path)?tw(c.path):null,x=S?at(S):null;if(!x)s.push({name:"github-token",ok:!0,detail:`authenticated as ${w} - repo access not checked (no local checkout yet)`});else{let R=await b.repoAccess(x.owner,x.repo);s.push({name:"github-token",ok:R.ok&&R.canPush,detail:R.ok?R.canPush?`${w} has push access to ${x.owner}/${x.repo}`:`${w} can read ${x.owner}/${x.repo} but NOT push to it - implement rules will fail at the push`:`${w} cannot see ${x.owner}/${x.repo}: ${R.error}`,...R.ok&&R.canPush?{}:{fix:[`allwright github set "${e.repoName}"`],fixNote:`Two ways: edit the existing PAT on GitHub and add ${x.owner}/${x.repo} to it with contents:write and pull_requests:write - or give this repo its own token with the command above. A fine-grained PAT only ever covers ONE organisation, so a repo in a different org than your other projects always needs its own.`}})}}catch(p){s.push({name:"github-token",ok:!1,detail:Hs(p)})}if(n.length){t.deploy.enabled?s.push({name:"deploy",ok:!0,detail:"deployments enabled on this runner"}):s.push({name:"deploy",ok:!1,detail:"deployments are disabled on this runner - run `allwright deploy enable` to allow it to execute your saved deploy steps"});for(let p of n){let b=Ot(t,e.repoName,p.name),w=p.requiredSecrets.filter(S=>!b[S]&&!process.env[S]);s.push({name:`env:${p.name}`,ok:w.length===0,detail:w.length?`missing secret(s): ${w.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${w[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function Hs(t){return(t instanceof Error?t.message:String(t)).slice(0,300)}var Te=new Bl;Te.name("allwright").description("Allwright runner - 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(vi);function vf(t){y.info(`Create the token at ${Ze.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Ze.GITHUB_TOKEN_PERMISSIONS.steps)y.info(` - ${e}`);y.info(Ze.GITHUB_TOKEN_PERMISSIONS.note),y.info(`Then paste it below for ${t}.`)}Te.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",Tl.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 t=>{let e=yn.default.createInterface({input:process.stdin,output:process.stdout}),n=async(r,s,i=!1)=>{if(s)return s;let o=await e.question(`${r}: `);if(!o.trim())throw new Error(`${r} is required`);return o.trim()};try{let r=await n("Control plane URL",t.cpUrl),s=await n("Enrolment token (from the web UI)",t.enrollToken),i=await n("Jira base URL (https://yourorg.atlassian.net)",t.jiraUrl),o=await n("Jira account email",t.jiraEmail),l=await n("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",t.jiraToken,!0),c=No.parse({controlPlaneUrl:r,runnerName:t.name,jira:{baseUrl:i,email:o,apiToken:l}}),u=await new Pe(c.jira).myself();y.info(`Jira credential OK - authenticated as ${u.displayName}`),c=await zc(c,s),y.info(`Enrolled as runner "${c.runnerName}" (${c.runnerId})`),y.info(`Credentials saved to ${jt()} (mode 600, this machine only)`),y.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var xl=Te.command("repo").description("Map control-plane repo names to local checkouts");xl.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(t,e)=>{let n=ie();n.repos[t]={path:e},ge(n),y.info(`mapped repo "${t}" -> ${e}`);try{let{originUrl:r}=await Promise.resolve().then(()=>(wt(),Hc));y.info(` origin remote: ${await r(e)} - make sure this is the repo you meant`)}catch{y.warn(` could not read an origin remote at ${e} - is it a git checkout?`)}gn()||y.warn(`"${t}" is saved but NOT live yet - the running runner still does not know about it, and runs will keep saying it is not mapped until it reloads.`)});xl.command("list").description("Show configured repo mappings").action(()=>{let t=ie(),e=Object.entries(t.repos);if(!e.length)return y.info("no repos mapped yet");for(let[n,r]of e)y.info(`${n} -> ${r.path}`)});var wf=Te.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");wf.command("login <profileName>").description("Create (or re-login) a named Claude profile. Opens Claude Code interactively with its own config directory - 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 t=>{if(!/^[a-zA-Z0-9._-]+$/.test(t))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=ie(),n=e.claudeProfiles[t]?.configDir??`${jt().replace(/runner\.json$/,"")}claude-profiles/${t}`;ft.default.mkdirSync(n,{recursive:!0,mode:448}),e.claudeProfiles[t]={configDir:n},ge(e),y.info(`profile "${t}" -> ${n}`),y.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),y.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let r=(0,Gt.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:n},stdio:"inherit"});await new Promise(s=>r.on("exit",()=>s())),y.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${t}".`),gn()});wf.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let t=ie(),e=Object.entries(t.claudeProfiles);if(y.info("default: this OS user's own Claude login (no profile)"),!e.length)return y.info("no named profiles yet - allwright claude login <name>");for(let[n,r]of e){let s=ft.default.existsSync(r.configDir)&&ft.default.readdirSync(r.configDir).length>0;y.info(`${n} -> ${r.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});xl.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 - delete the project on the dashboard separately.").action(t=>{let e=ie();if(!e.repos[t]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}`)}let n=e.repos[t].path;delete e.repos[t];let r=Object.keys(e.environments).filter(i=>i.startsWith(`${t}:`));for(let i of r)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==t),ge(e),y.info(`Removed "${t}" (was ${n})`),r.length&&y.info(`Also removed ${r.length} environment secret set(s): ${r.join(", ")}`),e.auditSchedules.length!==s&&y.info("Also removed its audit schedule(s)"),y.info("The checkout on disk was NOT touched - remove it yourself if you want it gone."),y.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var Cl=Te.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Cl.command("install").description("Install + start the systemd service - 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(t=>{if(t.print){y.info(`
913
+ `+da(ua()));return}Xc(y)});Cl.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>Qc(y));Cl.command("status").description("systemctl status for the runner service").action(()=>{(0,Gt.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});Te.command("update").description("Update the runner to the latest published version (npm install -g allwright@latest). Restart the runner afterwards - and only when no runs are active.").action(async()=>{y.info("Updating: npm install -g allwright@latest");let t=(0,Gt.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,n)=>{t.on("exit",r=>r===0?e():n(new Error(`npm exited with code ${r}`))),t.on("error",n)}),y.info("Updated. Restart the runner service to load the new version (check active runs first).")});var hs=Te.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");hs.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 t=>{let e=ie();if(!e.repos[t]){let l=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${l}. Run \`allwright repo add\` first.`)}let n=eh(t),r=(n?.jiraSiteUrl??"").trim(),s=r?`https://${r}`:"",i=e.jira?.email??"";if(s&&i&&e.jira?.apiToken){let l={baseUrl:s,email:i,apiToken:e.jira.apiToken};try{let c=await new Pe(l).myself();if(e.repos[t].jira=l,ge(e),y.info(`The token already on this server works on ${r} - authenticated as ${c.displayName}. Saved it for "${t}"; nothing to type.`),n?.jiraProjectKey)try{await new Pe(l).search(`project = "${n.jiraProjectKey}"`,1),y.info(`Project ${n.jiraProjectKey} is readable with it.`)}catch{y.warn(`Authenticated, but project ${n.jiraProjectKey} is not readable with this account. Ask a Jira admin for access, or re-run this command to enter a different account's token.`)}gn();return}catch{y.info(`The token already on this server does not work on ${r} - asking for one that does.`)}}let o=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let c=(await o.question(s?`Jira base URL [${s}]: `:"Jira base URL for this repo (https://yourorg.atlassian.net): ")).trim()||s,f=(await o.question(i?`Jira account email [${i}]: `:"Jira account email: ")).trim()||i,p=(await o.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!c||!f||!p)throw new Error("all three values are required");let b={baseUrl:c,email:f,apiToken:p},w=await new Pe(b).myself();y.info(`Jira credential OK - authenticated as ${w.displayName} on ${c}`),e.repos[t].jira=b,ge(e),y.info(`Saved: repo "${t}" now polls ${c} (other repos keep the runner-wide credential)`),gn()}finally{o.close()}});hs.command("set-token").description("Replace the RUNNER-WIDE Jira credential (the one every repo without an override uses). Until now this was only set at init - and Atlassian API tokens expire, which surfaces as boards quietly going empty. Prompts on stdin; validated before saving; applies live, no restart.").action(async()=>{let t=ie(),e=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let n=t.jira?.baseUrl??"",r=t.jira?.email??"",s=(await e.question(n?`Jira base URL [${n}]: `:"Jira base URL (https://yourorg.atlassian.net): ")).trim()||n,i=(await e.question(r?`Jira account email [${r}]: `:"Jira account email: ")).trim()||r,o=(await e.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!s||!i||!o)throw new Error("all three values are required");let l={baseUrl:s,email:i,apiToken:o},c=await new Pe(l).myself();t.jira=l,ge(t),y.info(`Jira credential OK - authenticated as ${c.displayName} on ${s}`),y.info(`Saved to ${jt()} (mode 600, this machine only). Repo overrides are untouched.`),gn()}finally{e.close()}});hs.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let t=ie();y.info(`runner-wide: ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(not configured)"}`);for(let[e,n]of Object.entries(t.repos))y.info(`${e} -> ${n.jira?`${n.jira.baseUrl} (${n.jira.email})`:"(runner-wide credential)"}`)});hs.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 - no restart needed.").action(async t=>{let e=ie(),n=t.trim().toLowerCase();if(!n.includes("@"))throw new Error(`"${t}" doesn't look like an email`);let r=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await r.question(`Their ATLASSIAN account email [${n}]: `)).trim()||n,i=(await r.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(u=>u.jira)].filter(u=>!!u),l=new Set,c=!1;for(let u of o)if(!l.has(u.baseUrl)){l.add(u.baseUrl);try{let f=await new Pe({baseUrl:u.baseUrl,email:s,apiToken:i}).myself();y.info(`${u.baseUrl}: OK - authenticated as ${f.displayName}`),c=!0}catch{y.warn(`${u.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!c)throw new Error("credential failed on every configured Jira site - nothing saved");e.jiraUsers[n]={email:s,apiToken:i},ge(e),y.info(`Saved. Dashboard actions by ${n} now post to Jira as ${s}. No restart needed.`)}finally{r.close()}});hs.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let t=ie(),e=Object.entries(t.jiraUsers);if(!e.length)return y.info("none yet - everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[n,r]of e)y.info(`${n} -> posts to Jira as ${r.email}`)});hs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(t=>{let e=ie(),n=t.trim().toLowerCase();if(!e.jiraUsers[n])throw new Error(`no credential stored for ${n}`);delete e.jiraUsers[n],ge(e),y.info(`Removed. Dashboard actions by ${n} will now be refused until a new credential is added.`)});var fs=Te.command("github").description("GitHub credential for implement-mode rules");fs.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 t=>{let e=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let n=t.token??void vf("every repo on this server")??(await e.question("GitHub token: ")).trim();if(!n)throw new Error("token is required");let{GitHubClient:r}=await Promise.resolve().then(()=>(ct(),or)),s=await new r(n).whoami(),i=ie();i.github={token:n,login:s},ge(i),y.info(`GitHub token OK - authenticated as ${s}`),y.info(`Saved to ${jt()} (mode 600, this machine only)`)}finally{e.close()}});fs.command("set <repoName>").description("Store a GitHub token for ONE repo only - 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 t=>{let e=ie();if(!e.repos[t]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}. Run \`allwright repo add\` first.`)}let n=e.github?.token,r=e.repos[t]?.path;if(n&&r&&ft.default.existsSync(r))try{let i=(0,Gt.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim(),o=at(i);if(o){let{GitHubClient:l}=await Promise.resolve().then(()=>(ct(),or)),c=new l(n),u=await c.repoAccess(o.owner,o.repo);if(u.ok&&u.canPush){let f=await c.whoami();y.info(`The shared token on this server already has push access to ${o.owner}/${o.repo} as ${f} - "${t}" needs nothing of its own. Storing a second token here would only give you two to rotate.`),y.info("Want a separately revocable one anyway? Paste it at the prompt below; press Enter to leave things as they are.")}}}catch{}let s=yn.default.createInterface({input:process.stdin,output:process.stdout});try{vf(`"${t}"`);let i=(await s.question(`GitHub token for "${t}": `)).trim();if(!i&&n){y.info(`Nothing changed - "${t}" keeps using the shared token.`);return}if(!i)throw new Error("token is required");let{GitHubClient:o}=await Promise.resolve().then(()=>(ct(),or)),l=await new o(i).whoami();e.repos[t].github={token:i,login:l},ge(e),y.info(`GitHub token OK - authenticated as ${l}`),y.info(`Saved: repo "${t}" now uses its own token (other repos keep the runner-wide one)`)}finally{s.close()}});fs.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 - 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 t=>{let e=ie(),n=t.trim().toLowerCase();if(!n.includes("@"))throw new Error(`"${t}" doesn't look like an email`);let r=yn.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await r.question(`GitHub token for ${n}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(ct(),or)),o=await new i(s).whoami();e.githubUsers[n]={token:s,login:o},ge(e),y.info(`GitHub token OK - authenticated as ${o}`),y.info(`Saved. Implement runs triggered by ${n} now open PRs as ${o}. No restart needed.`)}finally{r.close()}});fs.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let t=ie(),e=Object.entries(t.githubUsers);if(!e.length)return y.info("no per-user GitHub tokens - everyone's PRs use the repo/runner-wide token");for(let[n]of e)y.info(`${n} -> own GitHub token stored`)});fs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(t=>{let e=ie(),n=t.trim().toLowerCase();if(!e.githubUsers[n])throw new Error(`no GitHub token stored for ${n}`);delete e.githubUsers[n],ge(e),y.info(`Removed. ${n}'s runs use the repo/runner-wide token again.`)});fs.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let t=ie();y.info(`runner-wide: ${t.github?.token?"token set":"(not configured)"}`);for(let[n,r]of Object.entries(t.repos))y.info(`${n} -> ${r.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(t.githubUsers);y.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var Il=Te.command("audit").description("Recurring specialist audits on this runner");Il.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 - nothing blocks.").action((t,e,n)=>{let r=ie();if(!r.repos[t]){let i=Object.keys(r.repos).join(", ")||"(none)";throw new Error(`unknown repo "${t}" - mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(n,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");r.auditSchedules=[...r.auditSchedules.filter(i=>!(i.repoName===t&&i.role===e)),{repoName:t,role:e,intervalHours:s}],ge(r),y.info(`Scheduled: ${e} audit of "${t}" every ${s}h. Restart the runner to apply.`)});Il.command("schedules").description("List scheduled audits").action(()=>{let t=ie();if(!t.auditSchedules.length)return y.info("no scheduled audits - allwright audit schedule <repo> <role> <hours>");for(let e of t.auditSchedules)y.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});Il.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((t,e)=>{let n=ie(),r=n.auditSchedules.length;if(n.auditSchedules=n.auditSchedules.filter(s=>!(s.repoName===t&&s.role===e)),n.auditSchedules.length===r)throw new Error("no such schedule");ge(n),y.info("Removed. Restart the runner to apply.")});var El=Te.command("deploy").description("Deployment settings for this machine");El.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 - so this switch lives on the machine, not in the web UI, and only someone with shell access can flip it.").action(()=>{let t=ie();t.deploy={enabled:!0},ge(t),y.info("deployments ENABLED on this runner"),y.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),gn()});El.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let t=ie();t.deploy={enabled:!1},ge(t),y.info("deployments DISABLED on this runner"),gn()});El.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let t=ie();y.info(`deployments: ${t.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(t.environments);if(!e.length)return y.info("no environment secrets stored");for(let[n,r]of e){let s=Object.keys(r.secrets);y.info(`${n}: ${s.length?s.join(", "):"(no secrets)"}`)}});var Al=Te.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");Al.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((t,e,n)=>{let r=ie(),s=ii(t,e),i=r.environments[s]??{secrets:{}},o=[];for(let l of n){let c=l.indexOf("=");if(c<=0)throw new Error(`expected KEY=VALUE, got "${l}"`);let u=l.slice(0,c).trim();i.secrets[u]=l.slice(c+1),o.push(u)}r.environments[s]=i,ge(r),y.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),y.info(`Saved to ${jt()} (mode 600, this machine only)`),gn()});Al.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((t,e,n)=>{let r=ie(),s=ii(t,e),i=r.environments[s];if(!i)return y.info(`nothing stored for ${s}`);for(let o of n)delete i.secrets[o];r.environments[s]=i,ge(r),y.info(`removed ${n.join(", ")} from ${s}`)});Al.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let t=ie(),e=Object.entries(t.environments);if(!e.length)return y.info("no environment secrets stored");for(let[n,r]of e)y.info(`${n}: ${Object.keys(r.secrets).join(", ")||"(none)"}`)});Te.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(t=>{try{let e=nc(t);y.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),y.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private - anyone holding it can act as this runner."),y.info(`Restore on any machine with: allwright import ${ds.default.basename(e.file)}`)}catch(e){y.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});Te.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(t=>{let e=On();if(e&&Nn(e)){y.error("the runner is running - stop it first (systemctl stop allwright, or `allwright stop` for a pid-file daemon), then import."),process.exitCode=1;return}try{let n=rc(t);y.info(`Restored ${n.restored.length} entries into ${se()}`),n.previousDir&&y.info(`Previous config kept at ${n.previousDir}`),y.info("Start the runner and it will reconnect with the restored identity.")}catch(n){y.error(n instanceof Error?n.message:String(n)),process.exitCode=1}});Te.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let t=ie(),e=Object.keys(t.repos);if(!t.jira){y.error("no Jira credentials configured - run `allwright init`"),process.exitCode=1;return}let n=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],r=!0;for(let s of n){let i=await fo(t,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let l=o.ok?"PASS":"FAIL";(o.ok?y.info:y.error)(`[${l}] ${o.name}: ${o.detail}`),r&&=o.ok}}r||(process.exitCode=1)});function gn(){let t=On();if(t&&Nn(t)&&process.platform!=="win32")try{return process.kill(t,"SIGHUP"),y.info("running runner reloaded its config live - no restart needed"),!0}catch{}let e=t?dc(t):null;return y.info(e?`No background runner found to reload, but a service named "${e}" exists here: sudo systemctl kill -s HUP ${e} - otherwise it applies on the next start.`:"No background runner found to reload. Under systemd: sudo systemctl kill -s HUP <your allwright service> (allwright service install names it 'allwright'; installs predating the rename use 'ticketpilot-runner') - otherwise it applies on the next allwright start."),!1}function sw(t){if(!t.runnerToken)throw new Error("runner not enrolled - run `allwright init`");if(!t.jira)throw new Error("no Jira credentials - run `allwright init`");let e=uc();e.ok||(y.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",Do);let n=new Pe(t.jira),r=new Map,s=d=>{let m=t.repos[d]?.jira;if(!m)return n;let g=r.get(d);return g||(g=new Pe(m),r.set(d,g)),g},i=new Map,o=(d,m)=>{let g=Vc(ye()??t,d,m);switch(g.kind){case"legacy":return{jira:s(d),authored:!1};case"self":return{jira:s(d),authored:!0};case"missing":return{error:g.error};case"user":{let C=`${g.creds.baseUrl}:${g.creds.email}:${g.creds.apiToken.slice(-6)}`,M=i.get(C);return M||(M=new Pe(g.creds),i.set(C,M)),{jira:M,authored:!0}}}},l=new URL("/api/runner/ws",t.controlPlaneUrl);l.protocol=l.protocol==="https:"?"wss:":"ws:";let c=[],u=[],f=[],p,b=null,w={cfg:t,jiraFor:s,transport:null},S=new Set,x=d=>{let m=c.find(C=>C.id===d),g=m&&t.repos[m.repoName];return m&&g?{project:m,repoPath:g.path}:null},R=d=>{let m=c.find(M=>M.id===d),g=t.runnerName?`This runner ("${t.runnerName}")`:"This runner";if(!m)return`${g} does not know that project at all - it may have been deleted, or this runner has not synced yet.`;let C=Object.keys(t.repos).join(", ")||"(none)";return`${g} has no local checkout for "${m.name}" (repo "${m.repoName}"). Repos mapped here: ${C}. Either pin the project to the runner that HAS that repo (Dashboard \u2192 the project \u2192 Edit \u2192 Runner) - do this when several runners are online and the project is unpinned, because then the request goes to whichever one answers first - or map the repo on this machine: allwright repo add ${m.repoName} /path/to/checkout`},j={cfg:t,jiraFor:s,get transport(){return w.transport},lookup:(d,m)=>{let g=x(d),C=f.find(M=>M.projectId===d&&M.name===m);return g&&C?{...g,environment:C}:null}},v=new co(l.toString(),t.runnerToken,{runnerVersion:vi},{onConfig:d=>{c=d.projects,Qd(d.projects),u=d.rules,f=d.environments,p.setConfig(d.projects,d.rules,d.pollingPaused,d.environments)},onDeployFix:async d=>{let m=x(d.projectId);if(!m){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:R(d.projectId)});return}let g=Ke(t,m.project,"assist");if("error"in g){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:g.error});return}y.info(`investigating failed deploy of "${d.environmentName}" (step: ${d.failedStep||"?"})`);let C=await Ed({agent:g,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,steps:d.steps,failedStep:d.failedStep,errorText:d.errorText,cfg:t});v.sendDeploySuggestResult(d.requestId,C)},onProjectTest:async d=>{let m=c.find(C=>C.id===d.projectId);if(!m){v.sendProjectTestResult(d.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}y.info(`running connection test for project "${m.name}"`);let g=await fo(ye()??t,m,f.filter(C=>C.projectId===m.id),u.filter(C=>C.projectId===m.id).map(C=>"agent"in C.action?C.action.agent:"").filter(Boolean));v.sendProjectTestResult(d.requestId,g.every(C=>C.ok),g)},onRuleDiagnose:async d=>{let m=u.find(D=>D.id===d.ruleId),g=m&&c.find(D=>D.id===m.projectId);if(!m||!g){v.sendRuleDiagnoseResult(d.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}y.info(`diagnosing rule "${m.name}"`);let C=await fo(ye()??t,g,m.action.type==="deploy"?f.filter(D=>D.projectId===g.id):[]),M=m.action.type==="implement"?C:C.filter(D=>D.name!=="github-token"),{matchedCount:W,excludedCount:ee,excludedSample:J}=await p.diagnoseRule(m,g);v.sendRuleDiagnoseResult(d.requestId,{checks:M,matchedCount:W,excludedCount:ee,excludedSample:J})},onCancel:d=>{Wu(d)?y.info(`run ${d} stopped from the dashboard`):y.warn(`cancel requested for run ${d}, but nothing is running under that id here - it likely finished already`)},onApproved:(d,m)=>{if(Ha(d)){kd(j,d).catch(g=>y.error(`deploy approval crashed for ${d}: ${g instanceof Error?g.stack:g}`));return}$s(w,d,m).catch(g=>y.error(`approval handling crashed for ${d}: ${g instanceof Error?g.stack:g}`))},onRetryPush:d=>{let m=Oi(d),g=()=>rd(w,d).catch(C=>y.error(`retry push crashed for ${d}: ${C instanceof Error?C.stack:C}`));m?p.runOnRepoQueue(m.baseRepoPath,g):g()},onRejected:d=>{if(Ha(d)){Sd(j,d).catch(m=>y.error(`deploy rejection crashed for ${d}: ${m instanceof Error?m.stack:m}`));return}nd(w,d).catch(m=>y.error(`rejection handling crashed for ${d}: ${m instanceof Error?m.stack:m}`))},onDeployStart:d=>{let m=`${d.runId}#${d.attempt}`;if(S.has(m))return;S.add(m);let g=x(d.projectId);if(!g){let C=R(d.projectId);y.error(`deploy ${d.runId}: ${C}`),v.send({type:"run.status",runId:d.runId,status:"failed",error:C});return}y.info(`deploy ${d.runId} requested from the dashboard: ${d.issueKey} \u2192 ${d.environment.name}`),p.runOnEnvironmentQueue(d.environment.id,()=>Bi({runId:d.runId,project:g.project,environment:d.environment,issueKey:d.issueKey,issueSummary:d.issueSummary,repoPath:g.repoPath,cfg:t,jira:s(g.project.repoName),transport:v,requestedBy:d.requestedBy}).catch(C=>y.error(`deploy crashed for ${d.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async d=>{let m=x(d.projectId);if(!m){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:R(d.projectId)});return}let g=Ke(t,m.project,"assist");if("error"in g){v.sendDeploySuggestResult(d.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:g.error});return}y.info(`asking ${g.adapter.displayName} for "${d.environmentName}" deploy steps in ${m.repoPath}`);let C=await Ad({agent:g,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,notes:d.notes,timeoutSeconds:d.timeoutSeconds,cfg:t});v.sendDeploySuggestResult(d.requestId,C)},onEnvPreflight:async d=>{let m=x(d.projectId);if(!m){v.sendEnvPreflightResult(d.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let g=await Id({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,steps:d.steps,requiredSecrets:d.requiredSecrets,workdir:d.workdir,branch:d.branch,publicUrl:d.publicUrl,cfg:t});v.sendEnvPreflightResult(d.requestId,g)},onSelfMigrationApply:async d=>{let m=x(d.projectId);if(!m){v.sendSelfMigrationApplyResult(d.requestId,{ok:!1,file:d.file,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project",fix:[]}],output:"",error:R(d.projectId)});return}y.info(`applying migration ${d.file} for "${d.environmentName}"`);let g=await nh({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:d.environmentName,file:d.file,urlSecret:d.urlSecret,cfg:t});y.info(g.ok?`migration ${d.file} applied`:`migration ${d.file} failed: ${g.error}`),v.sendSelfMigrationApplyResult(d.requestId,g)},onChatTurn:async d=>{let m=x(d.projectId);if(!m){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:d.sessionId??"",reply:"",error:R(d.projectId)});return}let g=d.sessionId||(0,Gs.randomUUID)(),C=!d.sessionId,M=C?0:Ms(g)?.messages.length??0,W=!1,ee=0,J="";if(!C&&M>=Fd){let be=await Hd(m,g,t);if(be)W=!0,ee=M,J=be,g=(0,Gs.randomUUID)(),C=!0,y.info(`chat compacted: ${M} message(s) summarized into a fresh session`);else if(M>=Bd){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:g,reply:"",error:"this chat is very long and could not be compacted automatically - start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}}let D=d.files.length?oc(m.repoPath,d.requestId,d.files):null,L=(0,Ze.replyPreferenceAppendix)({language:d.replyLanguage,languageInstruction:d.replyLanguageInstruction,style:d.replyStyle})+(0,Ze.pendingMigrationsAppendix)(d.pendingMigrations),B="```",le=C?`You are the project assistant for "${m.project.name}" - this working directory is its repository, and you have read-only access.
914
914
 
915
915
  DEFAULT MODE IS DISCUSSION. Answer questions, explain code, weigh approaches, review ideas - 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.
916
916
  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.
917
917
 
918
918
  ONLY when the user explicitly asks for a ticket, propose it by ending your reply with EXACTLY one fenced block in this shape:
919
- ${ee}ticket
919
+ ${B}ticket
920
920
  {"summary": "\u2026", "description": "\u2026"}
921
- ${ee}
921
+ ${B}
922
922
  Before drafting, re-read this ENTIRE conversation from its first message and fold in every decision, constraint, and correction agreed along the way - the ticket reflects the final state of the whole discussion, not just the last message.
923
923
  Write the description in plain human language, structured with these Markdown section headings in this order:
924
924
  Story: - one or two sentences: who needs this and why.
@@ -927,48 +927,51 @@ Expected Flow: - the flow once this ticket is done, as numbered steps.
927
927
  Current Flow: - how it behaves today; include ONLY when current behavior exists.
928
928
  Acceptance Criteria: - testable bullet points a reviewer can check off one by one.
929
929
  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 - 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.
930
- EXCEPTION - 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 - 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 ${ee}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks - a nested ${ee} would end the outer block early and corrupt the draft.
930
+ EXCEPTION - 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 - 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 - a nested ${B} would end the outer block early and corrupt the draft.
931
931
  EXCEPTION - 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:
932
932
  {"epic": {"summary": "\u2026", "description": "\u2026"}, "tickets": [{"summary": "\u2026", "description": "\u2026"}, \u2026]}
933
933
  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.
934
934
 
935
- `+Zd+(W?`
935
+ `+Zd+(J?`
936
936
 
937
937
  This conversation was already running and has been compacted. Everything agreed so far, in summary form - treat it as established, do not re-ask:
938
- ${W}
938
+ ${J}
939
939
  `:"")+L+`
940
- ${d.userName||"The user"} says: ${d.message}`+(D?.section??""):L+`${d.userName||"The user"} says: ${d.message}`+(D?.section??""),he=0,Ne=[],pe;try{let be=Ke(t,m.project,"chat");if("error"in be){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:g,reply:"",error:be.error});return}pe=await be.adapter.run({repoPath:m.repoPath,prompt:le,timeoutSeconds:180,bin:be.bin,mode:"read_only",maxTurns:25,model:d.model||be.adapter.fastModel,sessionId:g,resume:!C,onLog:(ue,Ie)=>{ue==="agent"&&(Ne.push(Ie.slice(0,4e3)),v.send({type:"chat.stream",requestId:d.requestId,seq:he++,text:Ie.slice(0,8e3)}))},onUsage:ue=>{v.send({type:"chat.usage",requestId:d.requestId,inputTokens:Math.round(ue.inputTokens),outputTokens:Math.round(ue.outputTokens),cacheReadTokens:ue.cacheReadTokens===void 0?void 0:Math.round(ue.cacheReadTokens),turns:ue.turns})}})}finally{D&&ft.default.rmSync(D.dir,{recursive:!0,force:!0})}if(pe.ok){let be=Ne.filter(ue=>ue.trim()&&!pe.resultText.trim().startsWith(ue.trim()));Ud(d.projectId,g,d.message,pe.resultText,be,d.files.map(ue=>ue.name))}let ve=(pe.inputTokens??0)+(pe.cacheReadTokens??0);v.sendChatTurnResult(d.requestId,{contextTokens:ve,contextLimit:Kd(pe.model||d.model||""),compacted:V,compactedMessages:Q,ok:pe.ok,sessionId:g,reply:pe.resultText,error:pe.ok?void 0:pe.error??"the agent produced no reply",inputTokens:pe.inputTokens,outputTokens:pe.outputTokens,cacheReadTokens:pe.cacheReadTokens,costUsd:pe.costUsd,model:pe.model??""})},onChatList:d=>{v.sendChatListResult(d.requestId,qd(d.projectId))},onRepoDocs:d=>{let m=x(d.projectId);if(!m){v.sendRepoDocsResult(d.requestId,{ok:!1,docs:[],error:A(d.projectId)});return}v.sendRepoDocsResult(d.requestId,{ok:!0,docs:Wd(m.repoPath)})},onRepoDocRead:d=>{let m=x(d.projectId);if(!m){v.sendRepoDocReadResult(d.requestId,{ok:!1,path:d.path,content:"",truncated:!1,error:A(d.projectId)});return}let g=Jd(m.repoPath,d.path);v.sendRepoDocReadResult(d.requestId,{ok:g.ok,path:g.ok?g.path:d.path,content:g.ok?g.content:"",truncated:g.ok?g.truncated:!1,error:g.ok?void 0:g.error})},onChatLoad:d=>{let m=Ms(d.sessionId);v.sendChatLoadResult(d.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 d=>{let m=x(d.projectId);if(!m){v.sendBoardFetchResult(d.requestId,{ok:!1,columns:[],error:A(d.projectId)});return}try{let g=s(m.project.repoName),C;try{C=await g.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await g.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let M=await g.boardColumns(m.project.jiraProjectKey),V;if(M){V=M.map(D=>({name:D.name,issues:[]}));let W=new Map;for(let D of C){let L=M.findIndex(le=>le.statusIds.includes(D.statusId)),ee={key:D.key,summary:D.summary,labels:D.labels};if(L>=0)V[L].issues.push(ee);else{let le=W.get(D.status)??[];le.push(ee),W.set(D.status,le)}}for(let[D,L]of W)V.push({name:D,issues:L})}else{let W=he=>he.trim().toLowerCase(),D=new Map,L=new Map;for(let he of C){let Ne=W(he.status);D.has(Ne)||D.set(Ne,he.status.trim());let pe=L.get(Ne)??[];pe.push({key:he.key,summary:he.summary,labels:he.labels}),L.set(Ne,pe)}let ee=[];try{ee=await g.projectStatuses(m.project.jiraProjectKey)}catch{}let le=[];for(let he of ee){let Ne=W(he);!le.includes(Ne)&&L.has(Ne)&&le.push(Ne)}for(let he of L.keys())le.includes(he)||le.push(he);V=le.map(he=>({name:D.get(he)??he,issues:L.get(he)??[]}))}let Q=t.repos[m.project.repoName]?.jira??t.jira;v.sendBoardFetchResult(d.requestId,{ok:!0,browseBaseUrl:(Q?.baseUrl??"").replace(/\/+$/,""),columns:V})}catch(g){v.sendBoardFetchResult(d.requestId,{ok:!1,columns:[],error:g instanceof Error?g.message:String(g)})}},onBoardTrigger:async d=>{let m=x(d.projectId);if(!m){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{let g=s(m.project.repoName),C=d.comment.trim()?o(m.project.repoName,d.requestedByEmail):{jira:g,authored:!1};if(C.error!==void 0){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:C.error});return}if(d.reimplement){let M=await g.getIssue(d.issueKey),V=M.comments.filter(D=>_t(D.body)),Q=V.length?Math.max(...V.map(D=>new Date(D.created).getTime())):0;if(!M.comments.some(D=>!_t(D.body)&&new Date(D.created).getTime()>Q)){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:`${d.issueKey} has nothing new since the last implementation - 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 g.editLabels(d.issueKey,{remove:["agent-implemented"]})}d.removeLabel.trim()&&await g.editLabels(d.issueKey,{remove:[d.removeLabel.trim()]}),d.comment.trim()&&await C.jira.addTriggerComment(d.issueKey,`${d.comment.trim()}`+(!C.authored&&d.requestedBy?`
940
+ ${d.userName||"The user"} says: ${d.message}`+(D?.section??""):L+`${d.userName||"The user"} says: ${d.message}`+(D?.section??""),he=0,Ne=[],pe;try{let be=Ke(t,m.project,"chat");if("error"in be){v.sendChatTurnResult(d.requestId,{ok:!1,sessionId:g,reply:"",error:be.error});return}pe=await be.adapter.run({repoPath:m.repoPath,prompt:le,timeoutSeconds:180,bin:be.bin,mode:"read_only",maxTurns:25,model:d.model||be.adapter.fastModel,sessionId:g,resume:!C,onLog:(ue,Ie)=>{ue==="agent"&&(Ne.push(Ie.slice(0,4e3)),v.send({type:"chat.stream",requestId:d.requestId,seq:he++,text:Ie.slice(0,8e3)}))},onUsage:ue=>{v.send({type:"chat.usage",requestId:d.requestId,inputTokens:Math.round(ue.inputTokens),outputTokens:Math.round(ue.outputTokens),cacheReadTokens:ue.cacheReadTokens===void 0?void 0:Math.round(ue.cacheReadTokens),turns:ue.turns})}})}finally{D&&ft.default.rmSync(D.dir,{recursive:!0,force:!0})}if(pe.ok){let be=Ne.filter(ue=>ue.trim()&&!pe.resultText.trim().startsWith(ue.trim()));Ud(d.projectId,g,d.message,pe.resultText,be,d.files.map(ue=>ue.name))}let ve=(pe.inputTokens??0)+(pe.cacheReadTokens??0);v.sendChatTurnResult(d.requestId,{contextTokens:ve,contextLimit:Kd(pe.model||d.model||""),compacted:W,compactedMessages:ee,ok:pe.ok,sessionId:g,reply:pe.resultText,error:pe.ok?void 0:pe.error??"the agent produced no reply",inputTokens:pe.inputTokens,outputTokens:pe.outputTokens,cacheReadTokens:pe.cacheReadTokens,costUsd:pe.costUsd,model:pe.model??""})},onChatList:d=>{v.sendChatListResult(d.requestId,qd(d.projectId))},onRepoDocs:d=>{let m=x(d.projectId);if(!m){v.sendRepoDocsResult(d.requestId,{ok:!1,docs:[],error:R(d.projectId)});return}v.sendRepoDocsResult(d.requestId,{ok:!0,docs:Wd(m.repoPath)})},onRepoDocRead:d=>{let m=x(d.projectId);if(!m){v.sendRepoDocReadResult(d.requestId,{ok:!1,path:d.path,content:"",truncated:!1,error:R(d.projectId)});return}let g=Jd(m.repoPath,d.path);v.sendRepoDocReadResult(d.requestId,{ok:g.ok,path:g.ok?g.path:d.path,content:g.ok?g.content:"",truncated:g.ok?g.truncated:!1,error:g.ok?void 0:g.error})},onChatLoad:d=>{let m=Ms(d.sessionId);v.sendChatLoadResult(d.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 d=>{let m=x(d.projectId);if(!m){v.sendBoardFetchResult(d.requestId,{ok:!1,columns:[],error:R(d.projectId)});return}try{let g=s(m.project.repoName),C;try{C=await g.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await g.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let M=await g.boardColumns(m.project.jiraProjectKey),W;if(M){W=M.map(D=>({name:D.name,issues:[]}));let J=new Map;for(let D of C){let L=M.findIndex(le=>le.statusIds.includes(D.statusId)),B={key:D.key,summary:D.summary,labels:D.labels};if(L>=0)W[L].issues.push(B);else{let le=J.get(D.status)??[];le.push(B),J.set(D.status,le)}}for(let[D,L]of J)W.push({name:D,issues:L})}else{let J=he=>he.trim().toLowerCase(),D=new Map,L=new Map;for(let he of C){let Ne=J(he.status);D.has(Ne)||D.set(Ne,he.status.trim());let pe=L.get(Ne)??[];pe.push({key:he.key,summary:he.summary,labels:he.labels}),L.set(Ne,pe)}let B=[];try{B=await g.projectStatuses(m.project.jiraProjectKey)}catch{}let le=[];for(let he of B){let Ne=J(he);!le.includes(Ne)&&L.has(Ne)&&le.push(Ne)}for(let he of L.keys())le.includes(he)||le.push(he);W=le.map(he=>({name:D.get(he)??he,issues:L.get(he)??[]}))}let ee=t.repos[m.project.repoName]?.jira??t.jira;v.sendBoardFetchResult(d.requestId,{ok:!0,browseBaseUrl:(ee?.baseUrl??"").replace(/\/+$/,""),columns:W})}catch(g){v.sendBoardFetchResult(d.requestId,{ok:!1,columns:[],error:g instanceof Error?g.message:String(g)})}},onBoardTrigger:async d=>{let m=x(d.projectId);if(!m){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{let g=s(m.project.repoName),C=d.comment.trim()?o(m.project.repoName,d.requestedByEmail):{jira:g,authored:!1};if(C.error!==void 0){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:C.error});return}if(d.reimplement){let M=await g.getIssue(d.issueKey),W=M.comments.filter(D=>_t(D.body)),ee=W.length?Math.max(...W.map(D=>new Date(D.created).getTime())):0;if(!M.comments.some(D=>!_t(D.body)&&new Date(D.created).getTime()>ee)){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:`${d.issueKey} has nothing new since the last implementation - 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 g.editLabels(d.issueKey,{remove:["agent-implemented"]})}d.removeLabel.trim()&&await g.editLabels(d.issueKey,{remove:[d.removeLabel.trim()]}),d.comment.trim()&&await C.jira.addTriggerComment(d.issueKey,`${d.comment.trim()}`+(!C.authored&&d.requestedBy?`
941
941
 
942
- _(requested by ${d.requestedBy} via Allwright)_`:"")),y.info(`Board action on ${d.issueKey}`+(d.comment?` comment "${d.comment.trim()}"`:"")+(d.removeLabel?` -label ${d.removeLabel}`:"")+(d.requestedBy?` by ${d.requestedBy}`:"")),v.sendBoardTriggerResult(d.requestId,{ok:!0})}catch(g){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onChatCreateTicket:async d=>{let m=x(d.projectId);if(!m){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:A(d.projectId)});return}try{let g=o(m.project.repoName,d.requestedByEmail);if(g.error!==void 0){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:g.error});return}let C=`
942
+ _(requested by ${d.requestedBy} via Allwright)_`:"")),y.info(`Board action on ${d.issueKey}`+(d.comment?` comment "${d.comment.trim()}"`:"")+(d.removeLabel?` -label ${d.removeLabel}`:"")+(d.requestedBy?` by ${d.requestedBy}`:"")),v.sendBoardTriggerResult(d.requestId,{ok:!0})}catch(g){v.sendBoardTriggerResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onChatCreateTicket:async d=>{let m=x(d.projectId);if(!m){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:R(d.projectId)});return}try{let g=o(m.project.repoName,d.requestedByEmail);if(g.error!==void 0){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:g.error});return}let C=`
943
943
 
944
944
  ---
945
- _Created via Allwright Compose`+(!g.authored&&d.requestedBy?` by ${d.requestedBy}`:"")+", drafted with the project agent._";if(d.asEpic&&d.createAs!=="epic_with_children"&&d.children.length){let Q=d.createAs==="separate_epics"?"Epic":"Task",W=[];for(let D of d.children){let L=await g.jira.createIssue(m.project.jiraProjectKey,D.summary,(D.description||"(no description)")+C,Q);W.push(L.key)}y.info(`Compose created ${W.length} standalone ${Q.toLowerCase()}(s)`),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:W[0]??"",childKeys:W});return}let{key:M}=await g.jira.createIssue(m.project.jiraProjectKey,d.summary,(d.description||"(no description)")+C,d.asEpic?"Epic":"Task");d.files.length&&await g.jira.addAttachments(M,d.files.map(Q=>({name:Q.name,content:Buffer.from(Q.contentBase64,"base64")}))).then(()=>y.info(`Compose attached ${d.files.length} file(s) to ${M}`)).catch(Q=>y.warn(`Compose could not attach files to ${M}: ${Q instanceof Error?Q.message:Q}`));let V=[];if(d.asEpic){for(let Q of d.children){let W=await g.jira.createIssue(m.project.jiraProjectKey,Q.summary,Q.description||"(no description)","Task",M);V.push(W.key)}y.info(`Compose created epic ${M} with ${V.length} child ticket(s)`),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:M,childKeys:V});return}d.triggerComment.trim()&&await g.jira.addTriggerComment(M,`${d.triggerComment.trim()}`+(!g.authored&&d.requestedBy?`
945
+ _Created via Allwright Compose`+(!g.authored&&d.requestedBy?` by ${d.requestedBy}`:"")+", drafted with the project agent._";if(d.asEpic&&d.createAs!=="epic_with_children"&&d.children.length){let ee=d.createAs==="separate_epics"?"Epic":"Task",J=[];for(let D of d.children){let L=await g.jira.createIssue(m.project.jiraProjectKey,D.summary,(D.description||"(no description)")+C,ee);J.push(L.key)}y.info(`Compose created ${J.length} standalone ${ee.toLowerCase()}(s)`),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:J[0]??"",childKeys:J});return}let{key:M}=await g.jira.createIssue(m.project.jiraProjectKey,d.summary,(d.description||"(no description)")+C,d.asEpic?"Epic":"Task");d.files.length&&await g.jira.addAttachments(M,d.files.map(ee=>({name:ee.name,content:Buffer.from(ee.contentBase64,"base64")}))).then(()=>y.info(`Compose attached ${d.files.length} file(s) to ${M}`)).catch(ee=>y.warn(`Compose could not attach files to ${M}: ${ee instanceof Error?ee.message:ee}`));let W=[];if(d.asEpic){for(let ee of d.children){let J=await g.jira.createIssue(m.project.jiraProjectKey,ee.summary,ee.description||"(no description)","Task",M);W.push(J.key)}y.info(`Compose created epic ${M} with ${W.length} child ticket(s)`),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:M,childKeys:W});return}d.triggerComment.trim()&&await g.jira.addTriggerComment(M,`${d.triggerComment.trim()}`+(!g.authored&&d.requestedBy?`
946
946
 
947
- _(requested by ${d.requestedBy} via Allwright)_`:"")),y.info(`Compose created ${M}`+(d.requestedBy?` for ${d.requestedBy}`:"")+(d.triggerComment?` with trigger "${d.triggerComment.trim()}"`:"")),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:M})}catch(g){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:g instanceof Error?g.message:String(g)})}},onAuditStart:async d=>{let m=x(d.projectId);if(!m){v.sendAuditStartResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{y.info(`Audit (${d.role}) starting on ${m.project.repoName}`+(d.scope.kind!=="repo"?` scoped to ${d.scope.kind}:${d.scope.ref}`:""));let g=Ke(t,m.project,"assist");if("error"in g){v.sendAuditStartResult(d.requestId,{ok:!1,error:g.error});return}let C=await Yr({projectId:d.projectId,repoPath:m.repoPath,role:d.role,scope:d.scope,detailLevel:d.detailLevel,model:d.model,agent:g,jira:s(m.project.repoName)});if(!C.ok){v.sendAuditStartResult(d.requestId,{ok:!1,error:C.error});return}v.sendAuditStartResult(d.requestId,{ok:!0,audit:C.audit})}catch(g){v.sendAuditStartResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onAuditList:async d=>{try{v.sendAuditListResult(d.requestId,{ok:!0,audits:hu(d.projectId)})}catch(m){v.sendAuditListResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async d=>{try{let m=mu(d.projectId,d.auditId);if(!m){v.sendAuditGetResult(d.requestId,{ok:!1,error:"audit not found on this runner"});return}v.sendAuditGetResult(d.requestId,{ok:!0,audit:m})}catch(m){v.sendAuditGetResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async d=>{try{let m=pa(d.projectId,d.auditId,{selected:d.selected,ticketed:d.ticketed,verdicts:d.verdicts,verdictBy:d.verdictBy});if(!m){v.sendAuditReviewResult(d.requestId,{ok:!1,error:"audit not found on this runner"});return}let g=x(d.projectId);if(g&&d.verdicts.length){let C=[];for(let M of d.verdicts){if(M.verdict==="valid"||m.lessonsWritten.includes(M.findingId))continue;let V=m.findings.find(Q=>Q.id===M.findingId);V&&(va(g.repoPath,m.role,ku(V,M.verdict,M.note,d.verdictBy)),C.push(M.findingId),y.info(`Lesson written (${m.role}): ${M.verdict} - ${V.title.slice(0,60)}`))}C.length&&(m=pa(d.projectId,d.auditId,{markLessonsWritten:C})??m)}v.sendAuditReviewResult(d.requestId,{ok:!0,audit:m})}catch(m){v.sendAuditReviewResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async d=>{let m=x(d.projectId);if(!m){v.sendKnowledgeListResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{v.sendKnowledgeListResult(d.requestId,{ok:!0,files:Tu(m.repoPath)})}catch(g){v.sendKnowledgeListResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onKnowledgeSave:async d=>{let m=x(d.projectId);if(!m){v.sendKnowledgeSaveResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{d.append?va(m.repoPath,d.role,Su(d.content,d.by),d.level):xu(m.repoPath,d.role,d.level,d.source,d.name,d.content),y.info(`Knowledge ${d.append?"taught":"saved"}: ${d.role}/${d.level}/${d.name}`),v.sendKnowledgeSaveResult(d.requestId,{ok:!0})}catch(g){v.sendKnowledgeSaveResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onEpicList:async d=>{let m=x(d.projectId);if(!m){v.sendEpicListResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{let g=s(m.project.repoName);if(d.epicKey){let C=await g.epicChildren(d.epicKey);v.sendEpicListResult(d.requestId,{ok:!0,children:C})}else{let C=await g.searchEpics(m.project.jiraProjectKey);v.sendEpicListResult(d.requestId,{ok:!0,epics:C})}}catch(g){v.sendEpicListResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onEpicSuggest:async d=>{let m=x(d.projectId);if(!m){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:A(d.projectId)});return}try{let g=s(m.project.repoName),C=await g.epicChildren(d.epicKey),M=tu(C);if(!M.length){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:`every child of ${d.epicKey} is already done or in an agent's hands - nothing to sequence`});return}if(M.length===1){v.sendEpicSuggestResult(d.requestId,{ok:!0,issueKey:M[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let V=await Promise.all(M.slice(0,12).map(async ee=>{try{let le=await g.getIssue(ee.key);return{...ee,description:le.description}}catch{return{...ee,description:""}}})),Q=(await g.getIssue(d.epicKey).catch(()=>null))?.summary??"";y.info(`Epic suggest: weighing ${V.length} pending children of ${d.epicKey}`);let W=Ke(t,m.project,"assist");if("error"in W){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:W.error});return}let D=await W.adapter.run({repoPath:m.repoPath,prompt:nu(d.epicKey,Q,V),timeoutSeconds:150,bin:W.bin,mode:"read_only",maxTurns:20,sessionId:(0,Gs.randomUUID)(),model:d.model||"claude-sonnet-5",onLog:()=>{}}),L=ru(D.resultText,V.map(ee=>ee.key));if("error"in L){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:L.error});return}y.info(`Epic suggest: ${d.epicKey} -> do ${L.issueKey} first`),v.sendEpicSuggestResult(d.requestId,{ok:!0,issueKey:L.issueKey,reason:L.reason,considered:V.length})}catch(g){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onTeamCreds:async d=>{try{let m=ye()??t;if(m.github?.token&&!m.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(ct(),or));m.github.login=await new C(m.github.token).whoami(),ge(m)}catch{}let g=Wc(m,d.emails);v.sendTeamCredsResult(d.requestId,{ok:!0,...g})}catch(m){v.sendTeamCredsResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async d=>{try{let m=ye()??t,{buildSetupReport:g}=await Promise.resolve().then(()=>(bf(),yf)),C=await g(m,d.repoNames,t);v.sendSetupStatusResult(d.requestId,{ok:!0,...C})}catch(m){v.sendSetupStatusResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async d=>{try{let m=x(d.projectId);if(!m){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=d.kind==="deploy"?"DEPLOY.md":d.kind==="design"?"DESIGN.md":"CLAUDE.md";y.info(`Setup: drafting ${g} for ${m.project.repoName}`);let C="Explore this repository and draft the content of a CLAUDE.md file for its repo root - 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 - no preamble, no fences around the whole thing.",M=`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 - 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 - 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.
947
+ _(requested by ${d.requestedBy} via Allwright)_`:"")),y.info(`Compose created ${M}`+(d.requestedBy?` for ${d.requestedBy}`:"")+(d.triggerComment?` with trigger "${d.triggerComment.trim()}"`:"")),v.sendChatCreateTicketResult(d.requestId,{ok:!0,issueKey:M})}catch(g){v.sendChatCreateTicketResult(d.requestId,{ok:!1,issueKey:"",error:g instanceof Error?g.message:String(g)})}},onAuditStart:async d=>{let m=x(d.projectId);if(!m){v.sendAuditStartResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{y.info(`Audit (${d.role}) starting on ${m.project.repoName}`+(d.scope.kind!=="repo"?` scoped to ${d.scope.kind}:${d.scope.ref}`:""));let g=Ke(t,m.project,"assist");if("error"in g){v.sendAuditStartResult(d.requestId,{ok:!1,error:g.error});return}let C=await Yr({projectId:d.projectId,repoPath:m.repoPath,role:d.role,scope:d.scope,detailLevel:d.detailLevel,model:d.model,agent:g,jira:s(m.project.repoName)});if(!C.ok){v.sendAuditStartResult(d.requestId,{ok:!1,error:C.error});return}v.sendAuditStartResult(d.requestId,{ok:!0,audit:C.audit})}catch(g){v.sendAuditStartResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onAuditList:async d=>{try{v.sendAuditListResult(d.requestId,{ok:!0,audits:hu(d.projectId)})}catch(m){v.sendAuditListResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async d=>{try{let m=mu(d.projectId,d.auditId);if(!m){v.sendAuditGetResult(d.requestId,{ok:!1,error:"audit not found on this runner"});return}v.sendAuditGetResult(d.requestId,{ok:!0,audit:m})}catch(m){v.sendAuditGetResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async d=>{try{let m=pa(d.projectId,d.auditId,{selected:d.selected,ticketed:d.ticketed,verdicts:d.verdicts,verdictBy:d.verdictBy});if(!m){v.sendAuditReviewResult(d.requestId,{ok:!1,error:"audit not found on this runner"});return}let g=x(d.projectId);if(g&&d.verdicts.length){let C=[];for(let M of d.verdicts){if(M.verdict==="valid"||m.lessonsWritten.includes(M.findingId))continue;let W=m.findings.find(ee=>ee.id===M.findingId);W&&(va(g.repoPath,m.role,ku(W,M.verdict,M.note,d.verdictBy)),C.push(M.findingId),y.info(`Lesson written (${m.role}): ${M.verdict} - ${W.title.slice(0,60)}`))}C.length&&(m=pa(d.projectId,d.auditId,{markLessonsWritten:C})??m)}v.sendAuditReviewResult(d.requestId,{ok:!0,audit:m})}catch(m){v.sendAuditReviewResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async d=>{let m=x(d.projectId);if(!m){v.sendKnowledgeListResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{v.sendKnowledgeListResult(d.requestId,{ok:!0,files:Tu(m.repoPath)})}catch(g){v.sendKnowledgeListResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onKnowledgeSave:async d=>{let m=x(d.projectId);if(!m){v.sendKnowledgeSaveResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{d.append?va(m.repoPath,d.role,Su(d.content,d.by),d.level):xu(m.repoPath,d.role,d.level,d.source,d.name,d.content),y.info(`Knowledge ${d.append?"taught":"saved"}: ${d.role}/${d.level}/${d.name}`),v.sendKnowledgeSaveResult(d.requestId,{ok:!0})}catch(g){v.sendKnowledgeSaveResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onEpicList:async d=>{let m=x(d.projectId);if(!m){v.sendEpicListResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{let g=s(m.project.repoName);if(d.epicKey){let C=await g.epicChildren(d.epicKey);v.sendEpicListResult(d.requestId,{ok:!0,children:C})}else{let C=await g.searchEpics(m.project.jiraProjectKey);v.sendEpicListResult(d.requestId,{ok:!0,epics:C})}}catch(g){v.sendEpicListResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onEpicSuggest:async d=>{let m=x(d.projectId);if(!m){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:R(d.projectId)});return}try{let g=s(m.project.repoName),C=await g.epicChildren(d.epicKey),M=tu(C);if(!M.length){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:`every child of ${d.epicKey} is already done or in an agent's hands - nothing to sequence`});return}if(M.length===1){v.sendEpicSuggestResult(d.requestId,{ok:!0,issueKey:M[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let W=await Promise.all(M.slice(0,12).map(async B=>{try{let le=await g.getIssue(B.key);return{...B,description:le.description}}catch{return{...B,description:""}}})),ee=(await g.getIssue(d.epicKey).catch(()=>null))?.summary??"";y.info(`Epic suggest: weighing ${W.length} pending children of ${d.epicKey}`);let J=Ke(t,m.project,"assist");if("error"in J){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:J.error});return}let D=await J.adapter.run({repoPath:m.repoPath,prompt:nu(d.epicKey,ee,W),timeoutSeconds:150,bin:J.bin,mode:"read_only",maxTurns:20,sessionId:(0,Gs.randomUUID)(),model:d.model||"claude-sonnet-5",onLog:()=>{}}),L=ru(D.resultText,W.map(B=>B.key));if("error"in L){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:L.error});return}y.info(`Epic suggest: ${d.epicKey} -> do ${L.issueKey} first`),v.sendEpicSuggestResult(d.requestId,{ok:!0,issueKey:L.issueKey,reason:L.reason,considered:W.length})}catch(g){v.sendEpicSuggestResult(d.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onTeamCreds:async d=>{try{let m=ye()??t;if(m.github?.token&&!m.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(ct(),or));m.github.login=await new C(m.github.token).whoami(),ge(m)}catch{}let g=Wc(m,d.emails);v.sendTeamCredsResult(d.requestId,{ok:!0,...g})}catch(m){v.sendTeamCredsResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async d=>{try{let m=ye()??t,{buildSetupReport:g}=await Promise.resolve().then(()=>(bf(),yf)),C=await g(m,d.repoNames,t);v.sendSetupStatusResult(d.requestId,{ok:!0,...C})}catch(m){v.sendSetupStatusResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async d=>{try{let m=x(d.projectId);if(!m){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=d.kind==="deploy"?"DEPLOY.md":d.kind==="design"?"DESIGN.md":"CLAUDE.md";y.info(`Setup: drafting ${g} for ${m.project.repoName}`);let C="Explore this repository and draft the content of a CLAUDE.md file for its repo root - 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 - no preamble, no fences around the whole thing.",M=`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 - 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 - 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.
948
948
 
949
- Seven things decide whether this document can actually be run:
950
- 1. Open with a "## Blockers" section listing what STOPS an automated deploy today - no restart mechanism, no lockfile where the install command needs one, a secret with no home. Keep it separate from VERIFY: markers, which are questions. A blocker is "this cannot run"; a VERIFY: is "I could not confirm this". Every blocker MUST end with a sentence starting "Fix:" naming the smallest concrete action that closes it and who can do it - someone with shell on that machine, or a code change that can become a ticket. A blocker without a fix is just bad news, and it is read by someone who cannot open the document to go looking for the answer. If there are none, write "None" - do not pad it.
949
+ Eight things decide whether this document can actually be run:
950
+ 1. Open with TWO sections, and put every finding in the right one. "## Blockers" is only for things that make the deploy IMPOSSIBLE or produce a broken release: no restart mechanism, an install command that exits non-zero, a build that cannot run. "## Warnings" is for everything that leaves a WORKING release with something degraded - one feature returning an error, a check that is weaker than it should be, a reproducibility risk. Apply this test to each one and state the answer: if the deploy still produces a site that serves its pages, it is a WARNING, never a blocker. A secret that only one route needs is the standard example - the site deploys and works, one endpoint errors, so it is a warning. Blockers are also different from VERIFY: markers, which are questions. Every entry in BOTH sections MUST end with a sentence starting "Fix:" naming the smallest concrete action that closes it and who can do it - someone with shell on that machine, or a code change that can become a ticket. A blocker without a fix is just bad news, and it is read by someone who cannot open the document to go looking for the answer. Write "None" under either heading that has nothing - do not pad it, and do not promote a warning to a blocker to make the list look thorough.
951
951
  2. Put every assertion in the step where it is TRUE. A check that only holds after the code is pulled does not belong in pre-checks: written there it fails every single deploy, because being behind the remote is the reason a deploy is running.
952
952
  3. A check that cannot fail is not a check. Every verification must exit non-zero when it is wrong - a loop that prints "WARN" and moves on turns a broken release into a green one. If something genuinely should not block the deploy, say so explicitly and mark it a warning ON PURPOSE.
953
- 4. Behind a reverse proxy, HTTP 200 does not prove a page exists: a SPA fallback answers 200 for every path, including deleted ones. Check for something only the real page contains, and include one path that MUST 404 to prove 404s still work.
954
- 5. If the build writes into the SAME directory the running process serves from (Next's .next, a dist/ the app reads at runtime), say so plainly: the old process is serving files the build has already replaced, so visitors mid-session get missing-asset errors, and a build that fails half way has damaged the release BEFORE any restart. Never write "if the build fails, do not touch the running site" for a step that has already touched it - state the real mitigation the project can take (build elsewhere and swap, or restart immediately after the build) and its cost.
955
- 6. Health checks must fail CLOSED. A check that only fails when it matches one exact error string passes for every other failure - a different error, a timeout, an empty body. Assert the GOOD state and fail on anything else, rather than hunting for one known bad message.
956
- 7. Anchor checks to something stable - a health or version endpoint, an id, a data- attribute. Marketing copy is the worst possible anchor: an editor changing a headline turns a healthy deploy red. If only copy is available, use it AND say in the document that this check must be updated when the page text changes.
953
+ 4. When an environment's commands run in the MAPPED CHECKOUT (see the list above) and your document gives it a directory of its own, say in the same breath that the environment's "Working directory" must be set to that path in Allwright (Environments -> the environment -> Working directory). Without it the deploy still runs in the old directory and every other instruction quietly targets the wrong tree.
954
+ 5. Behind a reverse proxy, HTTP 200 does not prove a page exists: a SPA fallback answers 200 for every path, including deleted ones. Check for something only the real page contains, and include one path that MUST 404 to prove 404s still work.
955
+ 6. If the build writes into the SAME directory the running process serves from (Next's .next, a dist/ the app reads at runtime), say so plainly: the old process is serving files the build has already replaced, so visitors mid-session get missing-asset errors, and a build that fails half way has damaged the release BEFORE any restart. Never write "if the build fails, do not touch the running site" for a step that has already touched it - state the real mitigation the project can take (build elsewhere and swap, or restart immediately after the build) and its cost.
956
+ 7. Health checks must fail CLOSED. A check that only fails when it matches one exact error string passes for every other failure - a different error, a timeout, an empty body. Assert the GOOD state and fail on anything else, rather than hunting for one known bad message.
957
+ 8. Anchor checks to something stable - a health or version endpoint, an id, a data- attribute. Marketing copy is the worst possible anchor: an editor changing a headline turns a healthy deploy red. If only copy is available, use it AND say in the document that this check must be updated when the page text changes.
957
958
 
958
959
  Reply with ONLY the file content - no preamble, no fences around the whole thing.`+(d.environments.length?`
959
960
 
960
961
  THESE ENVIRONMENTS ARE ALREADY DECLARED for this project - write a section for EACH one, no more and no fewer, and target each one's own health checks at its own URL:
961
- `+d.environments.map(ee=>`- ${ee.name}`+(ee.branch?` (branch ${ee.branch})`:"")+(ee.publicUrl?` serves ${ee.publicUrl}`:" - no URL given")).join(`
962
+ `+d.environments.map(B=>`- ${B.name}`+(B.branch?` (branch ${B.branch})`:"")+(B.publicUrl?` serves ${B.publicUrl}`:" - no URL given")+", its deploy commands run in "+(B.workdir?`${B.workdir}`:B.dedicatedCheckout?"a checkout of its own, managed by the runner":"THE MAPPED CHECKOUT - the same directory as every other environment")).join(`
962
963
  `)+`
963
- If the repo shows no evidence of how one of them deploys, still write its section with VERIFY: markers rather than dropping it.`:"")+(d.kind==="deploy"?La({repoPath:m.repoPath,urls:d.environments.map(ee=>ee.publicUrl).filter(Boolean)})+Ns(m.repoPath):""),V=`Explore this repository's UI code and draft the content of a DESIGN.md file for its repo root - the design guidelines AI agents will follow for anything user-facing here. This is a SEED DRAFT: extract only what the code proves, and leave taste to the humans. Cover, from real evidence (tailwind/theme configs, design tokens, CSS, component libraries, existing screens): the color palette actually in use (names + hex), typography (families, the size scale), spacing and layout conventions, the component idiom (which library, how buttons/forms/cards are built, naming), dark mode, responsive breakpoints, and accessibility patterns already present. For everything code cannot prove - brand intent, tone of voice, look-and-feel references, what to never do - write a line starting with "VERIFY:" phrased as a question for the human to answer during review, instead of guessing. If the project has no UI at all, say exactly that in one line and stop. Under 120 lines, factual, no marketing language. Reply with ONLY the file content - no preamble, no fences around the whole thing.`,Q=`A deploy contract was drafted for this repository and it reported the blockers below - things that stop an automated deploy from running at all. Your job is to tell ONE person, sitting at a terminal on this machine, exactly how to close them.
964
+ If the repo shows no evidence of how one of them deploys, still write its section with VERIFY: markers rather than dropping it.`:"")+(d.kind==="deploy"?La({repoPath:m.repoPath,urls:d.environments.map(B=>B.publicUrl).filter(Boolean)})+Ns(m.repoPath):""),W=`Explore this repository's UI code and draft the content of a DESIGN.md file for its repo root - the design guidelines AI agents will follow for anything user-facing here. This is a SEED DRAFT: extract only what the code proves, and leave taste to the humans. Cover, from real evidence (tailwind/theme configs, design tokens, CSS, component libraries, existing screens): the color palette actually in use (names + hex), typography (families, the size scale), spacing and layout conventions, the component idiom (which library, how buttons/forms/cards are built, naming), dark mode, responsive breakpoints, and accessibility patterns already present. For everything code cannot prove - brand intent, tone of voice, look-and-feel references, what to never do - write a line starting with "VERIFY:" phrased as a question for the human to answer during review, instead of guessing. If the project has no UI at all, say exactly that in one line and stop. Under 120 lines, factual, no marketing language. Reply with ONLY the file content - no preamble, no fences around the whole thing.`,ee=`A deploy contract was drafted for this repository and it reported the blockers below - things that stop an automated deploy from running at all. Your job is to tell ONE person, sitting at a terminal on this machine, exactly how to close them.
964
965
 
965
966
  BLOCKERS AS REPORTED:
966
- `+d.blockers.map((ee,le)=>`${le+1}. ${ee}`).join(`
967
+ `+d.blockers.map((B,le)=>`${le+1}. ${B}`).join(`
967
968
  `)+`
968
969
 
969
- Write a short guide, in this shape, for EACH blocker you can actually close:
970
- ### <the blocker, in your own words>
971
- One line on what closes it. Then a fenced bash block with the exact commands, or the exact file content with the path above it. Then one line on how to verify it worked - a command whose output makes the answer obvious.
970
+ Write it for someone who wants to FINISH, not to understand. The commands carry the explanation; prose is what is left over when they do not. For each item:
971
+ ### <MUST-FIX or OPTIONAL> - <what is wrong, in your own words>
972
+ ONE line saying what closes it. Then the exact commands in a fenced bash block, or the exact file content with its path above it. Then a line starting "Verify:" with a command whose output settles it. That is the whole shape - no background, no rationale paragraphs, no restating the problem. A caveat that changes what someone types belongs in a comment inside the block, on the line it affects.
973
+
974
+ MUST-FIX means the deploy cannot run, or produces a broken release, without it. Everything that still leaves a WORKING release - one endpoint erroring because a key is missing, a weaker-than-ideal check, a reproducibility risk - is OPTIONAL. Put every MUST-FIX first, and for each OPTIONAL say in that one line what actually happens if it is skipped, so the reader can decide rather than obey.
972
975
 
973
976
  Rules, and they matter more than completeness:
974
977
  - Use the machine facts below. If a tool is not installed, do not build the answer on it. If a systemd unit or proxy file already exists, extend it rather than writing a second one.
@@ -976,4 +979,9 @@ Rules, and they matter more than completeness:
976
979
  - NEVER put a secret value in a command. Reference it as $NAME and say where the file holding it should live and what its permissions should be.
977
980
  - A blocker you cannot close from here (a decision only the owner can make, a change that belongs in the code) gets one honest line saying so and what the decision is. Do not invent a command for it.
978
981
  - Order them so the ones that unblock the most come first.
979
- Reply with ONLY the guide - no preamble.`+La({repoPath:m.repoPath,urls:[]})+Ns(m.repoPath),W=Ke(t,m.project,"assist");if("error"in W){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,content:"",error:W.error});return}let L=(await W.adapter.run({repoPath:m.repoPath,prompt:d.kind==="deploy"?M:d.kind==="design"?V:d.kind==="unblock"?Q:C,timeoutSeconds:240,bin:W.bin,mode:"read_only",maxTurns:40,sessionId:(0,Gs.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!L){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:"the agent returned no content - try again"});return}v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!0,content:L})}catch(m){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async d=>{try{let m=x(d.projectId);if(!m){v.sendSetupClaudeMdSaveResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=d.kind==="deploy"?"DEPLOY.md":d.kind==="design"?"DESIGN.md":"CLAUDE.md",C=await kl({repoPath:m.repoPath,relPath:g,content:d.content,overwrite:d.overwrite,commitMessage:`Add ${g} (agent-drafted, human-approved via Allwright)`});C.ok&&y.info(`Setup: wrote human-approved ${g} to ${m.repoPath}`),v.sendSetupClaudeMdSaveResult(d.requestId,C)}catch(m){v.sendSetupClaudeMdSaveResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRepoDocSave:async d=>{try{let m=x(d.projectId);if(!m){v.sendRepoDocSaveResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=await kl({repoPath:m.repoPath,relPath:d.relPath,content:d.content,overwrite:d.overwrite,commitMessage:`Add ${d.relPath.trim()} (written in Allwright Compose, human-approved)`});g.ok&&y.info(`Saved approved doc ${d.relPath} into ${m.repoPath}`),v.sendRepoDocSaveResult(d.requestId,g)}catch(m){v.sendRepoDocSaveResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditStats:d=>{try{v.sendAuditStatsResult(d.requestId,{ok:!0,byProject:fu(d.projectIds,d.since)})}catch(m){v.sendAuditStatsResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async d=>{if(!process.env.INVOCATION_ID){v.sendRunnerUpdateResult(d.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}let m=()=>{y.info("Installing allwright@latest");let C=ds.default.dirname(process.execPath),M=ft.default.existsSync(ds.default.join(C,"npm"))?ds.default.join(C,"npm"):"npm";(0,Gt.execFile)(M,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${C}:${process.env.PATH??""}`}},(V,Q,W)=>{if(V){v.sendRunnerUpdateResult(d.requestId,{ok:!1,error:`npm install failed: ${(W||V.message).slice(0,300)} - on the machine run: allwright update && sudo systemctl restart allwright`});return}v.sendRunnerUpdateResult(d.requestId,{ok:!0,note:"updated - restarting now, back in a few seconds"}),y.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})};if(p.idle){m();return}if(b){v.sendRunnerUpdateResult(d.requestId,{ok:!0,scheduled:!0,note:"an update is already scheduled and will install once the current work finishes"});return}let g=p.busyCount;v.sendRunnerUpdateResult(d.requestId,{ok:!0,scheduled:!0,note:`scheduled - ${g} run(s)/deploy(s) active right now. Nothing is refused meanwhile; the install runs automatically as soon as this machine goes idle.`}),y.info(`Update scheduled: waiting for ${g} active run(s)/deploy(s) to finish`),b=setInterval(()=>{p.idle&&(clearInterval(b),b=null,m())},5e3)},onTestFix:async d=>{let m=g=>v.sendTestFixResult(d.requestId,{ok:!1,note:g});try{let g=Qr(d.runId);if(!g){m("this runner no longer has that PR on file - it may have been decided already");return}let C=t.repos[g.repoName];if(!C){m(`no local checkout mapped for "${g.repoName}" on this machine`);return}let M=Ae(t,g.repoName);if(!M){m("no GitHub token on this runner for that repo");return}let V=await new $e(M).getPullRequest(g.owner,g.repo,g.prNumber);if(!V){m("that pull request no longer exists on GitHub");return}if(V.merged||V.state==="closed"){m("that pull request is already merged or closed - there is nothing left to fix");return}let Q=c.find(ee=>ee.repoName===g.repoName),W=g.nextDecisionSeq??1e5,D=(ee,le)=>{v.send({type:"run.log",runId:d.runId,seq:W++,ts:new Date().toISOString(),level:ee,message:le}),g.nextDecisionSeq=W,ut(g)},L=await Md({cfg:t,repoPath:C.path,branch:g.branch,baseBranch:V.baseRef||"main",issueKey:g.issueKey,agentId:Q?.defaultAgent||Ze.DEFAULT_AGENT_ID,configDir:g.agentConfigDir,failedTests:d.failedTests,timeoutSeconds:900,onLog:D});L.ok&&L.headSha&&(g.headSha=L.headSha,ut(g),v.send({type:"run.status",runId:d.runId,status:"awaiting_approval",headSha:L.headSha,failedTests:L.remaining??[],...L.testsPassed!==void 0?{testsPassed:L.testsPassed}:{},...L.testsTotal!==void 0?{testsTotal:L.testsTotal}:{},...L.costUsd!==void 0?{costUsd:L.costUsd}:{},...L.inputTokens!==void 0?{inputTokens:L.inputTokens}:{},...L.outputTokens!==void 0?{outputTokens:L.outputTokens}:{}})),lt(C.path,{issueKey:g.issueKey,runId:d.runId,title:L.ok?L.headSha?(L.remaining??[]).length?"dashboard test fix pushed, some commands still failing":"tests fixed from the dashboard":"dashboard test fix: agent changed nothing":"dashboard test fix failed",detail:L.note.slice(0,500)}),v.sendTestFixResult(d.requestId,L)}catch(g){m(g instanceof Error?g.message.slice(0,300):String(g))}},onRunAnswer:async d=>{try{let m=await p.answerPendingInput(d.runId,d.text,d.answeredBy);v.sendRunAnswerResult(d.requestId,m)}catch(m){v.sendRunAnswerResult(d.requestId,{ok:!1,error:m instanceof Error?m.message.slice(0,300):String(m)})}},onResolveConflict:async d=>{let m=g=>v.sendResolveConflictResult(d.requestId,{ok:!1,note:g});try{let g=Qr(d.runId);if(!g){m("this runner no longer has that PR on file - it may have been decided already");return}let C=t.repos[g.repoName];if(!C){m(`no local checkout mapped for "${g.repoName}" on this machine`);return}let M=Ae(t,g.repoName);if(!M){m("no GitHub token on this runner for that repo");return}let V=await new $e(M).getPullRequest(g.owner,g.repo,g.prNumber);if(!V){m("that pull request no longer exists on GitHub");return}if(!V.baseRef){m("GitHub did not report the PR's base branch, so there is nothing to merge in");return}let Q=c.find(ee=>ee.repoName===g.repoName),W=g.nextDecisionSeq??1e5,D=(ee,le)=>{v.send({type:"run.log",runId:d.runId,seq:W++,ts:new Date().toISOString(),level:ee,message:le}),g.nextDecisionSeq=W,ut(g)},L=await Od({cfg:t,repoPath:C.path,branch:g.branch,baseBranch:V.baseRef,issueKey:g.issueKey,agentId:Q?.defaultAgent||Ze.DEFAULT_AGENT_ID,configDir:g.agentConfigDir,timeoutSeconds:900,onLog:D});L.ok&&L.headSha&&(g.headSha=L.headSha,g.conflictNotified=!1,ut(g),v.send({type:"run.pr.conflict",runId:d.runId,conflicted:!1}),v.send({type:"run.status",runId:d.runId,status:"awaiting_approval",headSha:L.headSha,...L.costUsd!==void 0?{costUsd:L.costUsd}:{},...L.inputTokens!==void 0?{inputTokens:L.inputTokens}:{},...L.outputTokens!==void 0?{outputTokens:L.outputTokens}:{}})),v.sendResolveConflictResult(d.requestId,L)}catch(g){m(g instanceof Error?g.message.slice(0,300):String(g))}},onAgentProfiles:d=>{try{let m=C=>{try{return ft.default.existsSync(C)&&ft.default.readdirSync(C).length>0}catch{return!1}},g=Object.entries(t.claudeProfiles).map(([C,M])=>({agent:"claude-code",name:C,loggedIn:m(M.configDir)}));v.sendAgentProfilesResult(d.requestId,{ok:!0,profiles:g,defaultLoggedIn:m(ds.default.join(Tl.default.homedir(),".claude")),agentsWithoutProfiles:Ze.REGISTERED_AGENTS.filter(C=>!C.capabilities.loginProfiles).map(C=>C.id)})}catch(m){v.sendAgentProfilesResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onJiraUsers:async d=>{try{let m=await n.searchUsers(d.query);v.sendJiraUsersResult(d.requestId,{ok:!0,users:m})}catch(m){v.sendJiraUsersResult(d.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});w.transport=v,p=new Gi(t,s,v);let O=Object.values(lr()).filter(d=>d.kind==="implement").map(d=>d.repoPath);Yo(Object.values(t.repos).map(d=>d.path),O).catch(()=>{}),v.start(),p.start();let H=()=>{y.info("shutting down"),b&&clearInterval(b),v.stop(),cc(process.pid),Do(),process.exit(0)},z=!1,B=()=>{if(z){y.warn("second stop signal - exiting NOW; the interrupted run will be marked failed"),H();return}if(z=!0,p.stop(),p.idle){H();return}y.info(`stop requested - no new work will start; waiting for ${p.busyCount} active run(s)/deploy(s) to finish. Send the signal again to kill them immediately.`);let d=setInterval(()=>{p.idle&&(clearInterval(d),H())},3e3)};process.on("SIGINT",B),process.on("SIGTERM",B),process.on("SIGHUP",()=>{try{let d=ie();if(!d.jira)throw new Error("no Jira credentials in the reloaded config");for(let m of Object.keys(t))delete t[m];Object.assign(t,d),n=new Pe(d.jira),r.clear(),y.info("config reloaded live - new Jira tokens/repos/rules apply from the next poll. (Poll interval and control-plane URL still need a restart.)")}catch(d){y.error(`config reload failed - keeping the running config: ${d instanceof Error?d.message:String(d)}`)}})}Te.command("start").description("Start watching Jira. Runs in the background by default - 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 t=>{let e=ie();if(t.foreground){sw(e);return}let n=On();if(n&&Nn(n)){y.info(`already running in the background (pid ${n}). Use \`allwright status\` or \`stop\`.`);return}let r=bs();if(r){y.info(`a runner is already running on this machine (pid ${r}) - most likely the systemd service. One machine runs ONE runner; nothing to do. (Service controls: sudo systemctl status|stop|restart allwright)`);return}let s=ac(),i=(0,Gt.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),lc(i.pid),y.info(`Runner started in the background (pid ${i.pid}).`),y.info(`Logs: ${ci()}`),y.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});Te.command("stop").description("Stop the background runner started by `start`. Graceful by default: it stops taking new work and exits once active runs and deploys finish - safe to use while customers' tickets are running.").option("--force","kill immediately - anything executing is interrupted and marked failed").action(t=>{let e=On();if(!e||!Nn(e)){y.info("no background runner is running"),e&&ft.default.rmSync(zr(),{force:!0});return}if(t.force){process.kill(e,"SIGKILL"),ft.default.rmSync(zr(),{force:!0}),y.info(`killed (pid ${e}) - any interrupted run will show as failed on the dashboard`);return}process.kill(e,"SIGTERM"),y.info(`stop signal sent (pid ${e}) - it stops polling now and exits once active work finishes (watch \`allwright status\`). Use --force to kill immediately.`)});Te.command("status").description("Check whether the background runner is running").action(()=>{let t=On();t&&Nn(t)?y.info(`running in the background (pid ${t})`):y.info("not running")});Te.parseAsync().catch(t=>{y.error(t instanceof Error?t.message:String(t)),process.exit(1)});
982
+ - If a fix moves or adds a checkout, changes a port, or renames a service, the matching Allwright setting has to change too - the environment's Working directory, or the deploy steps that name the service. Say which setting and what to put in it, as its own step. A fix that lands only on the machine leaves the deploy pointing at the old one.
983
+ Reply with ONLY the guide - no preamble.`+(d.environments.length?`
984
+
985
+ THE ENVIRONMENTS AS ALLWRIGHT HAS THEM TODAY - your instructions have to end with these matching reality:
986
+ `+d.environments.map(B=>`- ${B.name}`+(B.branch?` (branch ${B.branch})`:"")+(B.publicUrl?` serves ${B.publicUrl}`:"")+", deploy commands run in "+(B.workdir?B.workdir:B.dedicatedCheckout?"a checkout of its own":"the MAPPED CHECKOUT, shared with every other environment")).join(`
987
+ `):"")+La({repoPath:m.repoPath,urls:d.environments.map(B=>B.publicUrl).filter(Boolean)})+Ns(m.repoPath),J=Ke(t,m.project,"assist");if("error"in J){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,content:"",error:J.error});return}let L=(await J.adapter.run({repoPath:m.repoPath,prompt:d.kind==="deploy"?M:d.kind==="design"?W:d.kind==="unblock"?ee:C,timeoutSeconds:240,bin:J.bin,mode:"read_only",maxTurns:40,sessionId:(0,Gs.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!L){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:"the agent returned no content - try again"});return}v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!0,content:L})}catch(m){v.sendSetupClaudeMdGenerateResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async d=>{try{let m=x(d.projectId);if(!m){v.sendSetupClaudeMdSaveResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=d.kind==="deploy"?"DEPLOY.md":d.kind==="design"?"DESIGN.md":"CLAUDE.md",C=await kl({repoPath:m.repoPath,relPath:g,content:d.content,overwrite:d.overwrite,commitMessage:`Add ${g} (agent-drafted, human-approved via Allwright)`});C.ok&&y.info(`Setup: wrote human-approved ${g} to ${m.repoPath}`),v.sendSetupClaudeMdSaveResult(d.requestId,C)}catch(m){v.sendSetupClaudeMdSaveResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRepoDocSave:async d=>{try{let m=x(d.projectId);if(!m){v.sendRepoDocSaveResult(d.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let g=await kl({repoPath:m.repoPath,relPath:d.relPath,content:d.content,overwrite:d.overwrite,commitMessage:`Add ${d.relPath.trim()} (written in Allwright Compose, human-approved)`});g.ok&&y.info(`Saved approved doc ${d.relPath} into ${m.repoPath}`),v.sendRepoDocSaveResult(d.requestId,g)}catch(m){v.sendRepoDocSaveResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditStats:d=>{try{v.sendAuditStatsResult(d.requestId,{ok:!0,byProject:fu(d.projectIds,d.since)})}catch(m){v.sendAuditStatsResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async d=>{if(!process.env.INVOCATION_ID){v.sendRunnerUpdateResult(d.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}let m=()=>{y.info("Installing allwright@latest");let C=ds.default.dirname(process.execPath),M=ft.default.existsSync(ds.default.join(C,"npm"))?ds.default.join(C,"npm"):"npm";(0,Gt.execFile)(M,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${C}:${process.env.PATH??""}`}},(W,ee,J)=>{if(W){v.sendRunnerUpdateResult(d.requestId,{ok:!1,error:`npm install failed: ${(J||W.message).slice(0,300)} - on the machine run: allwright update && sudo systemctl restart allwright`});return}v.sendRunnerUpdateResult(d.requestId,{ok:!0,note:"updated - restarting now, back in a few seconds"}),y.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})};if(p.idle){m();return}if(b){v.sendRunnerUpdateResult(d.requestId,{ok:!0,scheduled:!0,note:"an update is already scheduled and will install once the current work finishes"});return}let g=p.busyCount;v.sendRunnerUpdateResult(d.requestId,{ok:!0,scheduled:!0,note:`scheduled - ${g} run(s)/deploy(s) active right now. Nothing is refused meanwhile; the install runs automatically as soon as this machine goes idle.`}),y.info(`Update scheduled: waiting for ${g} active run(s)/deploy(s) to finish`),b=setInterval(()=>{p.idle&&(clearInterval(b),b=null,m())},5e3)},onTestFix:async d=>{let m=g=>v.sendTestFixResult(d.requestId,{ok:!1,note:g});try{let g=Qr(d.runId);if(!g){m("this runner no longer has that PR on file - it may have been decided already");return}let C=t.repos[g.repoName];if(!C){m(`no local checkout mapped for "${g.repoName}" on this machine`);return}let M=Re(t,g.repoName);if(!M){m("no GitHub token on this runner for that repo");return}let W=await new $e(M).getPullRequest(g.owner,g.repo,g.prNumber);if(!W){m("that pull request no longer exists on GitHub");return}if(W.merged||W.state==="closed"){m("that pull request is already merged or closed - there is nothing left to fix");return}let ee=c.find(B=>B.repoName===g.repoName),J=g.nextDecisionSeq??1e5,D=(B,le)=>{v.send({type:"run.log",runId:d.runId,seq:J++,ts:new Date().toISOString(),level:B,message:le}),g.nextDecisionSeq=J,ut(g)},L=await Md({cfg:t,repoPath:C.path,branch:g.branch,baseBranch:W.baseRef||"main",issueKey:g.issueKey,agentId:ee?.defaultAgent||Ze.DEFAULT_AGENT_ID,configDir:g.agentConfigDir,failedTests:d.failedTests,timeoutSeconds:900,onLog:D});L.ok&&L.headSha&&(g.headSha=L.headSha,ut(g),v.send({type:"run.status",runId:d.runId,status:"awaiting_approval",headSha:L.headSha,failedTests:L.remaining??[],...L.testsPassed!==void 0?{testsPassed:L.testsPassed}:{},...L.testsTotal!==void 0?{testsTotal:L.testsTotal}:{},...L.costUsd!==void 0?{costUsd:L.costUsd}:{},...L.inputTokens!==void 0?{inputTokens:L.inputTokens}:{},...L.outputTokens!==void 0?{outputTokens:L.outputTokens}:{}})),lt(C.path,{issueKey:g.issueKey,runId:d.runId,title:L.ok?L.headSha?(L.remaining??[]).length?"dashboard test fix pushed, some commands still failing":"tests fixed from the dashboard":"dashboard test fix: agent changed nothing":"dashboard test fix failed",detail:L.note.slice(0,500)}),v.sendTestFixResult(d.requestId,L)}catch(g){m(g instanceof Error?g.message.slice(0,300):String(g))}},onRunAnswer:async d=>{try{let m=await p.answerPendingInput(d.runId,d.text,d.answeredBy);v.sendRunAnswerResult(d.requestId,m)}catch(m){v.sendRunAnswerResult(d.requestId,{ok:!1,error:m instanceof Error?m.message.slice(0,300):String(m)})}},onResolveConflict:async d=>{let m=g=>v.sendResolveConflictResult(d.requestId,{ok:!1,note:g});try{let g=Qr(d.runId);if(!g){m("this runner no longer has that PR on file - it may have been decided already");return}let C=t.repos[g.repoName];if(!C){m(`no local checkout mapped for "${g.repoName}" on this machine`);return}let M=Re(t,g.repoName);if(!M){m("no GitHub token on this runner for that repo");return}let W=await new $e(M).getPullRequest(g.owner,g.repo,g.prNumber);if(!W){m("that pull request no longer exists on GitHub");return}if(!W.baseRef){m("GitHub did not report the PR's base branch, so there is nothing to merge in");return}let ee=c.find(B=>B.repoName===g.repoName),J=g.nextDecisionSeq??1e5,D=(B,le)=>{v.send({type:"run.log",runId:d.runId,seq:J++,ts:new Date().toISOString(),level:B,message:le}),g.nextDecisionSeq=J,ut(g)},L=await Od({cfg:t,repoPath:C.path,branch:g.branch,baseBranch:W.baseRef,issueKey:g.issueKey,agentId:ee?.defaultAgent||Ze.DEFAULT_AGENT_ID,configDir:g.agentConfigDir,timeoutSeconds:900,onLog:D});L.ok&&L.headSha&&(g.headSha=L.headSha,g.conflictNotified=!1,ut(g),v.send({type:"run.pr.conflict",runId:d.runId,conflicted:!1}),v.send({type:"run.status",runId:d.runId,status:"awaiting_approval",headSha:L.headSha,...L.costUsd!==void 0?{costUsd:L.costUsd}:{},...L.inputTokens!==void 0?{inputTokens:L.inputTokens}:{},...L.outputTokens!==void 0?{outputTokens:L.outputTokens}:{}})),v.sendResolveConflictResult(d.requestId,L)}catch(g){m(g instanceof Error?g.message.slice(0,300):String(g))}},onAgentProfiles:d=>{try{let m=C=>{try{return ft.default.existsSync(C)&&ft.default.readdirSync(C).length>0}catch{return!1}},g=Object.entries(t.claudeProfiles).map(([C,M])=>({agent:"claude-code",name:C,loggedIn:m(M.configDir)}));v.sendAgentProfilesResult(d.requestId,{ok:!0,profiles:g,defaultLoggedIn:m(ds.default.join(Tl.default.homedir(),".claude")),agentsWithoutProfiles:Ze.REGISTERED_AGENTS.filter(C=>!C.capabilities.loginProfiles).map(C=>C.id)})}catch(m){v.sendAgentProfilesResult(d.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onJiraUsers:async d=>{try{let m=await n.searchUsers(d.query);v.sendJiraUsersResult(d.requestId,{ok:!0,users:m})}catch(m){v.sendJiraUsersResult(d.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});w.transport=v,p=new Gi(t,s,v);let O=Object.values(lr()).filter(d=>d.kind==="implement").map(d=>d.repoPath);Yo(Object.values(t.repos).map(d=>d.path),O).catch(()=>{}),v.start(),p.start();let Z=()=>{y.info("shutting down"),b&&clearInterval(b),v.stop(),cc(process.pid),Do(),process.exit(0)},z=!1,K=()=>{if(z){y.warn("second stop signal - exiting NOW; the interrupted run will be marked failed"),Z();return}if(z=!0,p.stop(),p.idle){Z();return}y.info(`stop requested - no new work will start; waiting for ${p.busyCount} active run(s)/deploy(s) to finish. Send the signal again to kill them immediately.`);let d=setInterval(()=>{p.idle&&(clearInterval(d),Z())},3e3)};process.on("SIGINT",K),process.on("SIGTERM",K),process.on("SIGHUP",()=>{try{let d=ie();if(!d.jira)throw new Error("no Jira credentials in the reloaded config");for(let m of Object.keys(t))delete t[m];Object.assign(t,d),n=new Pe(d.jira),r.clear(),y.info("config reloaded live - new Jira tokens/repos/rules apply from the next poll. (Poll interval and control-plane URL still need a restart.)")}catch(d){y.error(`config reload failed - keeping the running config: ${d instanceof Error?d.message:String(d)}`)}})}Te.command("start").description("Start watching Jira. Runs in the background by default - 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 t=>{let e=ie();if(t.foreground){sw(e);return}let n=On();if(n&&Nn(n)){y.info(`already running in the background (pid ${n}). Use \`allwright status\` or \`stop\`.`);return}let r=bs();if(r){y.info(`a runner is already running on this machine (pid ${r}) - most likely the systemd service. One machine runs ONE runner; nothing to do. (Service controls: sudo systemctl status|stop|restart allwright)`);return}let s=ac(),i=(0,Gt.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),lc(i.pid),y.info(`Runner started in the background (pid ${i.pid}).`),y.info(`Logs: ${ci()}`),y.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});Te.command("stop").description("Stop the background runner started by `start`. Graceful by default: it stops taking new work and exits once active runs and deploys finish - safe to use while customers' tickets are running.").option("--force","kill immediately - anything executing is interrupted and marked failed").action(t=>{let e=On();if(!e||!Nn(e)){y.info("no background runner is running"),e&&ft.default.rmSync(zr(),{force:!0});return}if(t.force){process.kill(e,"SIGKILL"),ft.default.rmSync(zr(),{force:!0}),y.info(`killed (pid ${e}) - any interrupted run will show as failed on the dashboard`);return}process.kill(e,"SIGTERM"),y.info(`stop signal sent (pid ${e}) - it stops polling now and exits once active work finishes (watch \`allwright status\`). Use --force to kill immediately.`)});Te.command("status").description("Check whether the background runner is running").action(()=>{let t=On();t&&Nn(t)?y.info(`running in the background (pid ${t})`):y.info("not running")});Te.parseAsync().catch(t=>{y.error(t instanceof Error?t.message:String(t)),process.exit(1)});