allwright 1.21.5 → 1.21.6

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 +129 -129
  2. package/package.json +1 -1
package/bin/allwright.js CHANGED
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var _h=Object.create;var Fi=Object.defineProperty;var kh=Object.getOwnPropertyDescriptor;var Sh=Object.getOwnPropertyNames;var Th=Object.getPrototypeOf,xh=Object.prototype.hasOwnProperty;var _s=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var ee=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ks=(r,e)=>{for(var t in e)Fi(r,t,{get:e[t],enumerable:!0})},Ch=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Sh(e))!xh.call(r,s)&&s!==t&&Fi(r,s,{get:()=>e[s],enumerable:!(n=kh(e,s))||n.enumerable});return r};var E=(r,e,t)=>(t=r!=null?_h(Th(r)):{},Ch(e||!r||!r.__esModule?Fi(t,"default",{value:r,enumerable:!0}):t,r));var Bn=ee(Ki=>{var Ss=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},Bi=class extends Ss{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Ki.CommanderError=Ss;Ki.InvalidArgumentError=Bi});var Ts=ee(Gi=>{var{InvalidArgumentError:Ih}=Bn(),Zi=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Ih(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Rh(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}Gi.Argument=Zi;Gi.humanReadableArgName=Rh});var Vi=ee(Ja=>{var{humanReadableArgName:Eh}=Ts(),Hi=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!s&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>Eh(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function a(T,x){if(x){let P=`${T.padEnd(n+o)}${x}`;return t.wrap(P,s-i,n+o)}return T}function u(T){return T.join(`
3
- `).replace(/^/gm," ".repeat(i))}let c=[`Usage: ${t.commandUsage(e)}`,""],f=t.commandDescription(e);f.length>0&&(c=c.concat([t.wrap(f,s,0),""]));let p=t.visibleArguments(e).map(T=>a(t.argumentTerm(T),t.argumentDescription(T)));p.length>0&&(c=c.concat(["Arguments:",u(p),""]));let v=t.visibleOptions(e).map(T=>a(t.optionTerm(T),t.optionDescription(T)));if(v.length>0&&(c=c.concat(["Options:",u(v),""])),this.showGlobalOptions){let T=t.visibleGlobalOptions(e).map(x=>a(t.optionTerm(x),t.optionDescription(x)));T.length>0&&(c=c.concat(["Global Options:",u(T),""]))}let S=t.visibleCommands(e).map(T=>a(t.subcommandTerm(T),t.subcommandDescription(T)));return S.length>0&&(c=c.concat(["Commands:",u(S),""])),c.join(`
4
- `)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let a=t-n;if(a<s)return e;let u=e.slice(0,n),c=e.slice(n).replace(`\r
2
+ "use strict";var kh=Object.create;var Bi=Object.defineProperty;var Sh=Object.getOwnPropertyDescriptor;var Th=Object.getOwnPropertyNames;var xh=Object.getPrototypeOf,Ch=Object.prototype.hasOwnProperty;var _s=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var ee=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ks=(r,e)=>{for(var t in e)Bi(r,t,{get:e[t],enumerable:!0})},Ih=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Th(e))!Ch.call(r,s)&&s!==t&&Bi(r,s,{get:()=>e[s],enumerable:!(n=Sh(e,s))||n.enumerable});return r};var E=(r,e,t)=>(t=r!=null?kh(xh(r)):{},Ih(e||!r||!r.__esModule?Bi(t,"default",{value:r,enumerable:!0}):t,r));var Bn=ee(Zi=>{var Ss=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},Ki=class extends Ss{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Zi.CommanderError=Ss;Zi.InvalidArgumentError=Ki});var Ts=ee(Hi=>{var{InvalidArgumentError:Rh}=Bn(),Gi=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Rh(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Eh(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}Hi.Argument=Gi;Hi.humanReadableArgName=Eh});var Wi=ee(Ya=>{var{humanReadableArgName:Ah}=Ts(),Vi=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!s&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>Ah(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function a(T,x){if(x){let P=`${T.padEnd(n+o)}${x}`;return t.wrap(P,s-i,n+o)}return T}function c(T){return T.join(`
3
+ `).replace(/^/gm," ".repeat(i))}let u=[`Usage: ${t.commandUsage(e)}`,""],f=t.commandDescription(e);f.length>0&&(u=u.concat([t.wrap(f,s,0),""]));let p=t.visibleArguments(e).map(T=>a(t.argumentTerm(T),t.argumentDescription(T)));p.length>0&&(u=u.concat(["Arguments:",c(p),""]));let v=t.visibleOptions(e).map(T=>a(t.optionTerm(T),t.optionDescription(T)));if(v.length>0&&(u=u.concat(["Options:",c(v),""])),this.showGlobalOptions){let T=t.visibleGlobalOptions(e).map(x=>a(t.optionTerm(x),t.optionDescription(x)));T.length>0&&(u=u.concat(["Global Options:",c(T),""]))}let S=t.visibleCommands(e).map(T=>a(t.subcommandTerm(T),t.subcommandDescription(T)));return S.length>0&&(u=u.concat(["Commands:",c(S),""])),u.join(`
4
+ `)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let a=t-n;if(a<s)return e;let c=e.slice(0,n),u=e.slice(n).replace(`\r
5
5
  `,`
6
6
  `),f=" ".repeat(n),v="\\s\u200B",S=new RegExp(`
7
- |.{1,${a-1}}([${v}]|$)|[^${v}]+?([${v}]|$)`,"g"),T=c.match(S)||[];return u+T.map((x,P)=>x===`
7
+ |.{1,${a-1}}([${v}]|$)|[^${v}]+?([${v}]|$)`,"g"),T=u.match(S)||[];return c+T.map((x,P)=>x===`
8
8
  `?"":(P>0?f:"")+x.trimEnd()).join(`
9
- `)}};Ja.Help=Hi});var Xi=ee(Yi=>{var{InvalidArgumentError:Ah}=Bn(),Wi=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Ph(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Ah(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return $h(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Ji=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function $h(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ph(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}Yi.Option=Wi;Yi.DualOptions=Ji});var Xa=ee(Ya=>{function jh(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Oh(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(o=>o.slice(2)));let n=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=jh(r,o),u=Math.max(r.length,o.length);(u-a)/u>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
9
+ `)}};Ya.Help=Vi});var Qi=ee(Xi=>{var{InvalidArgumentError:$h}=Bn(),Ji=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=jh(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new $h(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ph(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Yi=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Ph(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function jh(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}Xi.Option=Ji;Xi.DualOptions=Yi});var Qa=ee(Xa=>{function Oh(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Nh(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(o=>o.slice(2)));let n=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=Oh(r,o),c=Math.max(r.length,o.length);(c-a)/c>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
10
10
  (Did you mean one of ${n.join(", ")}?)`:n.length===1?`
11
- (Did you mean ${n[0]}?)`:""}Ya.suggestSimilar=Oh});var nl=ee(rl=>{var Nh=require("node:events").EventEmitter,Qi=require("node:child_process"),ht=require("node:path"),eo=require("node:fs"),de=require("node:process"),{Argument:Mh,humanReadableArgName:zh}=Ts(),{CommanderError:to}=Bn(),{Help:Dh}=Vi(),{Option:Qa,DualOptions:Lh}=Xi(),{suggestSimilar:el}=Xa(),ro=class r extends Nh{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>de.stdout.write(t),writeErr:t=>de.stderr.write(t),getOutHelpWidth:()=>de.stdout.isTTY?de.stdout.columns:void 0,getErrHelpWidth:()=>de.stderr.isTTY?de.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),u=this.createCommand(o);return s&&(u.description(s),u._executableHandler=!0),i.isDefault&&(this._defaultCommandName=u._name),u._hidden=!!(i.noHelp||i.hidden),u._executableFile=i.executableFile||null,a&&u.arguments(a),this._registerCommand(u),u.parent=this,u.copyInheritedSettings(this),s?this:u}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Dh,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
- - specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Mh(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
- Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new to(e,t,n)),de.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new Qa(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
14
- - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let u=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,u,o):i!==null&&e.variadic&&(i=e._concatValue(i,u)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof Qa)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(u,c)=>{let f=a.exec(u);return f?f[0]:c},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){de.versions?.electron&&(t.from="electron");let s=de.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=de.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":de.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(f,p){let v=ht.resolve(f,p);if(eo.existsSync(v))return v;if(s.includes(ht.extname(p)))return;let S=s.find(T=>eo.existsSync(`${v}${T}`));if(S)return`${v}${S}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let f;try{f=eo.realpathSync(this._scriptPath)}catch{f=this._scriptPath}a=ht.resolve(ht.dirname(f),a)}if(a){let f=i(a,o);if(!f&&!e._executableFile&&this._scriptPath){let p=ht.basename(this._scriptPath,ht.extname(this._scriptPath));p!==this._name&&(f=i(a,`${p}-${e._name}`))}o=f||o}n=s.includes(ht.extname(o));let u;de.platform!=="win32"?n?(t.unshift(o),t=tl(de.execArgv).concat(t),u=Qi.spawn(de.argv[0],t,{stdio:"inherit"})):u=Qi.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=tl(de.execArgv).concat(t),u=Qi.spawn(de.execPath,t,{stdio:"inherit"})),u.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{de.on(p,()=>{u.killed===!1&&u.exitCode===null&&u.kill(p)})});let c=this._exitCallback;u.on("close",f=>{f=f??1,c?c(new to(f,"commander.executeSubCommandAsync","(close)")):de.exit(f)}),u.on("error",f=>{if(f.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",v=`'${o}' does not exist
11
+ (Did you mean ${n[0]}?)`:""}Xa.suggestSimilar=Nh});var sl=ee(nl=>{var Mh=require("node:events").EventEmitter,eo=require("node:child_process"),ht=require("node:path"),to=require("node:fs"),de=require("node:process"),{Argument:zh,humanReadableArgName:Dh}=Ts(),{CommanderError:ro}=Bn(),{Help:Lh}=Wi(),{Option:el,DualOptions:Uh}=Qi(),{suggestSimilar:tl}=Qa(),no=class r extends Mh{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>de.stdout.write(t),writeErr:t=>de.stderr.write(t),getOutHelpWidth:()=>de.stdout.isTTY?de.stdout.columns:void 0,getErrHelpWidth:()=>de.stderr.isTTY?de.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),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,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),s?this:c}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Lh,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
+ - specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new zh(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
+ Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new ro(e,t,n)),de.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new el(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
14
+ - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(n);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(n,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof el)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(c,u)=>{let f=a.exec(c);return f?f[0]:u},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){de.versions?.electron&&(t.from="electron");let s=de.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=de.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":de.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(f,p){let v=ht.resolve(f,p);if(to.existsSync(v))return v;if(s.includes(ht.extname(p)))return;let S=s.find(T=>to.existsSync(`${v}${T}`));if(S)return`${v}${S}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let f;try{f=to.realpathSync(this._scriptPath)}catch{f=this._scriptPath}a=ht.resolve(ht.dirname(f),a)}if(a){let f=i(a,o);if(!f&&!e._executableFile&&this._scriptPath){let p=ht.basename(this._scriptPath,ht.extname(this._scriptPath));p!==this._name&&(f=i(a,`${p}-${e._name}`))}o=f||o}n=s.includes(ht.extname(o));let c;de.platform!=="win32"?n?(t.unshift(o),t=rl(de.execArgv).concat(t),c=eo.spawn(de.argv[0],t,{stdio:"inherit"})):c=eo.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=rl(de.execArgv).concat(t),c=eo.spawn(de.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{de.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 ro(f,"commander.executeSubCommandAsync","(close)")):de.exit(f)}),c.on("error",f=>{if(f.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",v=`'${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(v)}else if(f.code==="EACCES")throw new Error(`'${o}' not executable`);if(!c)de.exit(1);else{let p=new to(1,"commander.executeSubCommandAsync","(error)");p.nestedError=f,c(p)}}),this.runningCommand=u}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(u){return u.length>1&&u[0]==="-"}let a=null;for(;i.length;){let u=i.shift();if(u==="--"){s===n&&s.push(u),s.push(...i);break}if(a&&!o(u)){this.emit(`option:${a.name()}`,u);continue}if(a=null,o(u)){let c=this._findOption(u);if(c){if(c.required){let f=i.shift();f===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,f)}else if(c.optional){let f=null;i.length>0&&!o(i[0])&&(f=i.shift()),this.emit(`option:${c.name()}`,f)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(u.length>2&&u[0]==="-"&&u[1]!=="-"){let c=this._findOption(`-${u[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,u.slice(2)):(this.emit(`option:${c.name()}`),i.unshift(`-${u.slice(2)}`));continue}}if(/^--[^=]+=/.test(u)){let c=u.indexOf("="),f=this._findOption(u.slice(0,c));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,u.slice(c+1));continue}}if(o(u)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(u)){t.push(u),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&u===this._getHelpCommand().name()){t.push(u),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(u),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(u),i.length>0&&s.push(...i);break}s.push(u)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
17
+ - ${p}`;throw new Error(v)}else if(f.code==="EACCES")throw new Error(`'${o}' not executable`);if(!u)de.exit(1);else{let p=new ro(1,"commander.executeSubCommandAsync","(error)");p.nestedError=f,u(p)}}),this.runningCommand=c}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(c){return c.length>1&&c[0]==="-"}let a=null;for(;i.length;){let c=i.shift();if(c==="--"){s===n&&s.push(c),s.push(...i);break}if(a&&!o(c)){this.emit(`option:${a.name()}`,c);continue}if(a=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()}`);a=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=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(c)){t.push(c),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){t.push(c),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(c),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(c),i.length>0&&s.push(...i);break}s.push(c)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
18
18
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
19
19
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
20
- `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in de.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,de.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Lh(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let a=o.attributeName(),u=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),f=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&u===!1||c.presetArg!==void 0&&u===c.presetArg)?c:f||o},s=o=>{let a=n(o),u=a.attributeName();return this.getOptionValueSource(u)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=el(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=el(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
- `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>zh(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=ht.basename(e,ht.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=de.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
20
+ `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in de.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,de.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Uh(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let a=o.attributeName(),c=this.getOptionValue(a),u=this.options.find(p=>p.negate&&a===p.attributeName()),f=this.options.find(p=>!p.negate&&a===p.attributeName());return u&&(u.presetArg===void 0&&c===!1||u.presetArg!==void 0&&c===u.presetArg)?u:f||o},s=o=>{let a=n(o),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=tl(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=tl(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
+ `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>Dh(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=ht.basename(e,ht.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=de.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
22
  Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function tl(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}rl.Command=ro});var al=ee(Me=>{var{Argument:sl}=Ts(),{Command:no}=nl(),{CommanderError:Uh,InvalidArgumentError:il}=Bn(),{Help:qh}=Vi(),{Option:ol}=Xi();Me.program=new no;Me.createCommand=r=>new no(r);Me.createOption=(r,e)=>new ol(r,e);Me.createArgument=(r,e)=>new sl(r,e);Me.Command=no;Me.Option=ol;Me.Argument=sl;Me.Help=qh;Me.CommanderError=Uh;Me.InvalidArgumentError=il;Me.InvalidOptionArgumentError=il});var Vn=ee(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.getParsedType=ae.ZodParsedType=ae.objectUtil=ae.util=void 0;var ho;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(ho||(ae.util=ho={}));var $l;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})($l||(ae.objectUtil=$l={}));ae.ZodParsedType=ho.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var op=r=>{switch(typeof r){case"undefined":return ae.ZodParsedType.undefined;case"string":return ae.ZodParsedType.string;case"number":return Number.isNaN(r)?ae.ZodParsedType.nan:ae.ZodParsedType.number;case"boolean":return ae.ZodParsedType.boolean;case"function":return ae.ZodParsedType.function;case"bigint":return ae.ZodParsedType.bigint;case"symbol":return ae.ZodParsedType.symbol;case"object":return Array.isArray(r)?ae.ZodParsedType.array:r===null?ae.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?ae.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?ae.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?ae.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?ae.ZodParsedType.date:ae.ZodParsedType.object;default:return ae.ZodParsedType.unknown}};ae.getParsedType=op});var Ds=ee(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.ZodError=Dt.quotelessJson=Dt.ZodIssueCode=void 0;var Pl=Vn();Dt.ZodIssueCode=Pl.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 ap=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");Dt.quotelessJson=ap;var Wn=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,u=0;for(;u<o.path.length;){let c=o.path[u];u===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],u++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Pl.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};Dt.ZodError=Wn;Wn.create=r=>new Wn(r)});var po=ee(fo=>{"use strict";Object.defineProperty(fo,"__esModule",{value:!0});var ke=Ds(),pr=Vn(),lp=(r,e)=>{let t;switch(r.code){case ke.ZodIssueCode.invalid_type:r.received===pr.ZodParsedType.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case ke.ZodIssueCode.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,pr.util.jsonStringifyReplacer)}`;break;case ke.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${pr.util.joinValues(r.keys,", ")}`;break;case ke.ZodIssueCode.invalid_union:t="Invalid input";break;case ke.ZodIssueCode.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${pr.util.joinValues(r.options)}`;break;case ke.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${pr.util.joinValues(r.options)}, received '${r.received}'`;break;case ke.ZodIssueCode.invalid_arguments:t="Invalid function arguments";break;case ke.ZodIssueCode.invalid_return_type:t="Invalid function return type";break;case ke.ZodIssueCode.invalid_date:t="Invalid date";break;case ke.ZodIssueCode.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:pr.util.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case ke.ZodIssueCode.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case ke.ZodIssueCode.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case ke.ZodIssueCode.custom:t="Invalid input";break;case ke.ZodIssueCode.invalid_intersection_types:t="Intersection results could not be merged";break;case ke.ZodIssueCode.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case ke.ZodIssueCode.not_finite:t="Number must be finite";break;default:t=e.defaultError,pr.util.assertNever(r)}return{message:t}};fo.default=lp});var Ls=ee(Lt=>{"use strict";var up=Lt&&Lt.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Lt,"__esModule",{value:!0});Lt.defaultErrorMap=void 0;Lt.setErrorMap=cp;Lt.getErrorMap=dp;var jl=up(po());Lt.defaultErrorMap=jl.default;var Ol=jl.default;function cp(r){Ol=r}function dp(){return Ol}});var go=ee(ie=>{"use strict";var hp=ie&&ie.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(ie,"__esModule",{value:!0});ie.isAsync=ie.isValid=ie.isDirty=ie.isAborted=ie.OK=ie.DIRTY=ie.INVALID=ie.ParseStatus=ie.EMPTY_PATH=ie.makeIssue=void 0;ie.addIssueToContext=mp;var fp=Ls(),Nl=hp(po()),pp=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",u=n.filter(c=>!!c).slice().reverse();for(let c of u)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};ie.makeIssue=pp;ie.EMPTY_PATH=[];function mp(r,e){let t=(0,fp.getErrorMap)(),n=(0,ie.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===Nl.default?void 0:Nl.default].filter(s=>!!s)});r.common.issues.push(n)}var mo=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return ie.INVALID;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return ie.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}};ie.ParseStatus=mo;ie.INVALID=Object.freeze({status:"aborted"});var gp=r=>({status:"dirty",value:r});ie.DIRTY=gp;var yp=r=>({status:"valid",value:r});ie.OK=yp;var vp=r=>r.status==="aborted";ie.isAborted=vp;var bp=r=>r.status==="dirty";ie.isDirty=bp;var wp=r=>r.status==="valid";ie.isValid=wp;var _p=r=>typeof Promise<"u"&&r instanceof Promise;ie.isAsync=_p});var zl=ee(Ml=>{"use strict";Object.defineProperty(Ml,"__esModule",{value:!0})});var Ll=ee(Us=>{"use strict";Object.defineProperty(Us,"__esModule",{value:!0});Us.errorUtil=void 0;var Dl;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(Dl||(Us.errorUtil=Dl={}))});var Yl=ee(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.discriminatedUnion=b.date=b.boolean=b.bigint=b.array=b.any=b.coerce=b.ZodFirstPartyTypeKind=b.late=b.ZodSchema=b.Schema=b.ZodReadonly=b.ZodPipeline=b.ZodBranded=b.BRAND=b.ZodNaN=b.ZodCatch=b.ZodDefault=b.ZodNullable=b.ZodOptional=b.ZodTransformer=b.ZodEffects=b.ZodPromise=b.ZodNativeEnum=b.ZodEnum=b.ZodLiteral=b.ZodLazy=b.ZodFunction=b.ZodSet=b.ZodMap=b.ZodRecord=b.ZodTuple=b.ZodIntersection=b.ZodDiscriminatedUnion=b.ZodUnion=b.ZodObject=b.ZodArray=b.ZodVoid=b.ZodNever=b.ZodUnknown=b.ZodAny=b.ZodNull=b.ZodUndefined=b.ZodSymbol=b.ZodDate=b.ZodBoolean=b.ZodBigInt=b.ZodNumber=b.ZodString=b.ZodType=void 0;b.NEVER=b.void=b.unknown=b.union=b.undefined=b.tuple=b.transformer=b.symbol=b.string=b.strictObject=b.set=b.record=b.promise=b.preprocess=b.pipeline=b.ostring=b.optional=b.onumber=b.oboolean=b.object=b.number=b.nullable=b.null=b.never=b.nativeEnum=b.nan=b.map=b.literal=b.lazy=b.intersection=b.instanceof=b.function=b.enum=b.effect=void 0;b.datetimeRegex=Kl;b.custom=Gl;var R=Ds(),qs=Ls(),z=Ll(),_=go(),A=Vn(),qe=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Ul=(r,e)=>{if((0,_.isValid)(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new R.ZodError(r.common.issues);return this._error=t,this._error}}};function G(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:u}=r;return o.code==="invalid_enum_value"?{message:u??a.defaultError}:typeof a.data>"u"?{message:u??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:u??t??a.defaultError}},description:s}}var H=class{get description(){return this._def.description}_getType(e){return(0,A.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,A.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new _.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,A.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if((0,_.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)},s=this._parseSync({data:e,path:n.path,parent:n});return Ul(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return(0,_.isValid)(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>(0,_.isValid)(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await((0,_.isAsync)(s)?s:Promise.resolve(s));return Ul(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:R.ZodIssueCode.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(u=>u?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new je({schema:this,typeName:B.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ue.create(this,this._def)}nullable(){return it.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return wt.create(this)}promise(){return Ft.create(this,this._def)}or(e){return _r.create([this,e],this._def)}and(e){return kr.create(this,e,this._def)}transform(e){return new je({...G(this._def),schema:this,typeName:B.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new Ir({...G(this._def),innerType:this,defaultValue:t,typeName:B.ZodDefault})}brand(){return new Jn({typeName:B.ZodBranded,type:this,...G(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new Rr({...G(this._def),innerType:this,catchValue:t,typeName:B.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Yn.create(this,e)}readonly(){return Er.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};b.ZodType=H;b.Schema=H;b.ZodSchema=H;var kp=/^c[^\s-]{8,}$/i,Sp=/^[0-9a-z]+$/,Tp=/^[0-9A-HJKMNP-TV-Z]{26}$/i,xp=/^[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,Cp=/^[a-z0-9_-]{21}$/i,Ip=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Rp=/^[-+]?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)?)??$/,Ep=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Ap="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",yo,$p=/^(?:(?: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])$/,Pp=/^(?:(?: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])$/,jp=/^(([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]))$/,Op=/^(([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])$/,Np=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Mp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Fl="((\\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])))",zp=new RegExp(`^${Fl}$`);function Bl(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Dp(r){return new RegExp(`^${Bl(r)}$`)}function Kl(r){let e=`${Fl}T${Bl(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Lp(r,e){return!!((e==="v4"||!e)&&$p.test(r)||(e==="v6"||!e)&&jp.test(r))}function Up(r,e){if(!Ip.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function qp(r,e){return!!((e==="v4"||!e)&&Pp.test(r)||(e==="v6"||!e)&&Op.test(r))}var Ut=class r extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==A.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.string,received:i.parsedType}),_.INVALID}let n=new _.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Ep.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"email",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")yo||(yo=new RegExp(Ap,"u")),yo.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"emoji",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")xp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"uuid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Cp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"nanoid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")kp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cuid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Sp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cuid2",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Tp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"ulid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"url",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"regex",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Kl(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?zp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Dp(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Rp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"duration",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Lp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"ip",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?Up(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"jwt",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?qp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cidr",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?Np.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"base64",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Mp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"base64url",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):A.util.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:R.ZodIssueCode.invalid_string,...z.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...z.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...z.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...z.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...z.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...z.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...z.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...z.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...z.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...z.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...z.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...z.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...z.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...z.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,...z.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,...z.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...z.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...z.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...z.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...z.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...z.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...z.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...z.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...z.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,z.errorUtil.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};b.ZodString=Ut;Ut.create=r=>new Ut({checks:[],typeName:B.ZodString,coerce:r?.coerce??!1,...G(r)});function Fp(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var mr=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==A.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.number,received:i.parsedType}),_.INVALID}let n,s=new _.ParseStatus;for(let i of this._def.checks)i.kind==="int"?A.util.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Fp(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.not_finite,message:i.message}),s.dirty()):A.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,z.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,z.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,z.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,z.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:z.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:z.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:z.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:z.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:z.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:z.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:z.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:z.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:z.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:z.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&A.util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};b.ZodNumber=mr;mr.create=r=>new mr({checks:[],typeName:B.ZodNumber,coerce:r?.coerce||!1,...G(r)});var gr=class r extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==A.ZodParsedType.bigint)return this._getInvalidInput(e);let n,s=new _.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):A.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.bigint,received:t.parsedType}),_.INVALID}gte(e,t){return this.setLimit("min",e,!0,z.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,z.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,z.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,z.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:z.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:z.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:z.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:z.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:z.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:z.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};b.ZodBigInt=gr;gr.create=r=>new gr({checks:[],typeName:B.ZodBigInt,coerce:r?.coerce??!1,...G(r)});var yr=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==A.ZodParsedType.boolean){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.boolean,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};b.ZodBoolean=yr;yr.create=r=>new yr({typeName:B.ZodBoolean,coerce:r?.coerce||!1,...G(r)});var vr=class r extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==A.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.date,received:i.parsedType}),_.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_date}),_.INVALID}let n=new _.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):A.util.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:z.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:z.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};b.ZodDate=vr;vr.create=r=>new vr({checks:[],coerce:r?.coerce||!1,typeName:B.ZodDate,...G(r)});var pn=class extends H{_parse(e){if(this._getType(e)!==A.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.symbol,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};b.ZodSymbol=pn;pn.create=r=>new pn({typeName:B.ZodSymbol,...G(r)});var br=class extends H{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.undefined,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};b.ZodUndefined=br;br.create=r=>new br({typeName:B.ZodUndefined,...G(r)});var wr=class extends H{_parse(e){if(this._getType(e)!==A.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.null,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};b.ZodNull=wr;wr.create=r=>new wr({typeName:B.ZodNull,...G(r)});var qt=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,_.OK)(e.data)}};b.ZodAny=qt;qt.create=r=>new qt({typeName:B.ZodAny,...G(r)});var bt=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,_.OK)(e.data)}};b.ZodUnknown=bt;bt.create=r=>new bt({typeName:B.ZodUnknown,...G(r)});var He=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.never,received:t.parsedType}),_.INVALID}};b.ZodNever=He;He.create=r=>new He({typeName:B.ZodNever,...G(r)});var mn=class extends H{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.void,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};b.ZodVoid=mn;mn.create=r=>new mn({typeName:B.ZodVoid,...G(r)});var wt=class r extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==A.ZodParsedType.array)return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:t.parsedType}),_.INVALID;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&((0,_.addIssueToContext)(t,{code:o?R.ZodIssueCode.too_big:R.ZodIssueCode.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&((0,_.addIssueToContext)(t,{code:R.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&((0,_.addIssueToContext)(t,{code:R.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new qe(t,o,t.path,a)))).then(o=>_.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new qe(t,o,t.path,a)));return _.ParseStatus.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:z.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:z.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:z.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};b.ZodArray=wt;wt.create=(r,e)=>new wt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:B.ZodArray,...G(e)});function fn(r){if(r instanceof Ie){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ue.create(fn(n))}return new Ie({...r._def,shape:()=>e})}else return r instanceof wt?new wt({...r._def,type:fn(r.element)}):r instanceof Ue?Ue.create(fn(r.unwrap())):r instanceof it?it.create(fn(r.unwrap())):r instanceof st?st.create(r.items.map(e=>fn(e))):r}var Ie=class r extends H{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=A.util.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==A.ZodParsedType.object){let c=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(c,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:c.parsedType}),_.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof He&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let u=[];for(let c of o){let f=i[c],p=s.data[c];u.push({key:{status:"valid",value:c},value:f._parse(new qe(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof He){let c=this._def.unknownKeys;if(c==="passthrough")for(let f of a)u.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(c==="strict")a.length>0&&((0,_.addIssueToContext)(s,{code:R.ZodIssueCode.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let f of a){let p=s.data[f];u.push({key:{status:"valid",value:f},value:c._parse(new qe(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let f of u){let p=await f.key,v=await f.value;c.push({key:p,value:v,alwaysSet:f.alwaysSet})}return c}).then(c=>_.ParseStatus.mergeObjectSync(n,c)):_.ParseStatus.mergeObjectSync(n,u)}get shape(){return this._def.shape()}strict(e){return z.errorUtil.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:z.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:B.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of A.util.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of A.util.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return fn(this)}partial(e){let t={};for(let n of A.util.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of A.util.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Ue;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Zl(A.util.objectKeys(this.shape))}};b.ZodObject=Ie;Ie.create=(r,e)=>new Ie({shape:()=>r,unknownKeys:"strip",catchall:He.create(),typeName:B.ZodObject,...G(e)});Ie.strictCreate=(r,e)=>new Ie({shape:()=>r,unknownKeys:"strict",catchall:He.create(),typeName:B.ZodObject,...G(e)});Ie.lazycreate=(r,e)=>new Ie({shape:r,unknownKeys:"strip",catchall:He.create(),typeName:B.ZodObject,...G(e)});var _r=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new R.ZodError(a.ctx.common.issues));return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union,unionErrors:o}),_.INVALID}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let u of n){let c={...t,common:{...t.common,issues:[]},parent:null},f=u._parseSync({data:t.data,path:t.path,parent:c});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(u=>new R.ZodError(u));return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union,unionErrors:a}),_.INVALID}}get options(){return this._def.options}};b.ZodUnion=_r;_r.create=(r,e)=>new _r({options:r,typeName:B.ZodUnion,...G(e)});var vt=r=>r instanceof Sr?vt(r.schema):r instanceof je?vt(r.innerType()):r instanceof Tr?[r.value]:r instanceof xr?r.options:r instanceof Cr?A.util.objectValues(r.enum):r instanceof Ir?vt(r._def.innerType):r instanceof br?[void 0]:r instanceof wr?[null]:r instanceof Ue?[void 0,...vt(r.unwrap())]:r instanceof it?[null,...vt(r.unwrap())]:r instanceof Jn||r instanceof Er?vt(r.unwrap()):r instanceof Rr?vt(r._def.innerType):[],Fs=class r extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.object)return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:t.parsedType}),_.INVALID;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):((0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),_.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=vt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:B.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...G(n)})}};b.ZodDiscriminatedUnion=Fs;function vo(r,e){let t=(0,A.getParsedType)(r),n=(0,A.getParsedType)(e);if(r===e)return{valid:!0,data:r};if(t===A.ZodParsedType.object&&n===A.ZodParsedType.object){let s=A.util.objectKeys(e),i=A.util.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let u=vo(r[a],e[a]);if(!u.valid)return{valid:!1};o[a]=u.data}return{valid:!0,data:o}}else if(t===A.ZodParsedType.array&&n===A.ZodParsedType.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],u=vo(o,a);if(!u.valid)return{valid:!1};s.push(u.data)}return{valid:!0,data:s}}else return t===A.ZodParsedType.date&&n===A.ZodParsedType.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var kr=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,_.isAborted)(i)||(0,_.isAborted)(o))return _.INVALID;let a=vo(i.value,o.value);return a.valid?(((0,_.isDirty)(i)||(0,_.isDirty)(o))&&t.dirty(),{status:t.value,value:a.data}):((0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_intersection_types}),_.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};b.ZodIntersection=kr;kr.create=(r,e,t)=>new kr({left:r,right:e,typeName:B.ZodIntersection,...G(t)});var st=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.array)return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:n.parsedType}),_.INVALID;if(n.data.length<this._def.items.length)return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),_.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let u=this._def.items[a]||this._def.rest;return u?u._parse(new qe(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>_.ParseStatus.mergeArray(t,o)):_.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};b.ZodTuple=st;st.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new st({items:r,typeName:B.ZodTuple,rest:null,...G(e)})};var Bs=class r extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.object)return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:n.parsedType}),_.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new qe(n,a,n.path,a)),value:o._parse(new qe(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?_.ParseStatus.mergeObjectAsync(t,s):_.ParseStatus.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof H?new r({keyType:e,valueType:t,typeName:B.ZodRecord,...G(n)}):new r({keyType:Ut.create(),valueType:e,typeName:B.ZodRecord,...G(t)})}};b.ZodRecord=Bs;var gn=class extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.map)return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.map,received:n.parsedType}),_.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,u],c)=>({key:s._parse(new qe(n,a,n.path,[c,"key"])),value:i._parse(new qe(n,u,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let u of o){let c=await u.key,f=await u.value;if(c.status==="aborted"||f.status==="aborted")return _.INVALID;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let u of o){let c=u.key,f=u.value;if(c.status==="aborted"||f.status==="aborted")return _.INVALID;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}}}};b.ZodMap=gn;gn.create=(r,e,t)=>new gn({valueType:e,keyType:r,typeName:B.ZodMap,...G(t)});var yn=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.set)return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.set,received:n.parsedType}),_.INVALID;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&((0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&((0,_.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(u){let c=new Set;for(let f of u){if(f.status==="aborted")return _.INVALID;f.status==="dirty"&&t.dirty(),c.add(f.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((u,c)=>i._parse(new qe(n,u,n.path,c)));return n.common.async?Promise.all(a).then(u=>o(u)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:z.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:z.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};b.ZodSet=yn;yn.create=(r,e)=>new yn({valueType:r,minSize:null,maxSize:null,typeName:B.ZodSet,...G(e)});var Ks=class r extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.function)return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.function,received:t.parsedType}),_.INVALID;function n(a,u){return(0,_.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,qs.getErrorMap)(),qs.defaultErrorMap].filter(c=>!!c),issueData:{code:R.ZodIssueCode.invalid_arguments,argumentsError:u}})}function s(a,u){return(0,_.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,qs.getErrorMap)(),qs.defaultErrorMap].filter(c=>!!c),issueData:{code:R.ZodIssueCode.invalid_return_type,returnTypeError:u}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Ft){let a=this;return(0,_.OK)(async function(...u){let c=new R.ZodError([]),f=await a._def.args.parseAsync(u,i).catch(S=>{throw c.addIssue(n(u,S)),c}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return(0,_.OK)(function(...u){let c=a._def.args.safeParse(u,i);if(!c.success)throw new R.ZodError([n(u,c.error)]);let f=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new R.ZodError([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:st.create(e).rest(bt.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||st.create([]).rest(bt.create()),returns:t||bt.create(),typeName:B.ZodFunction,...G(n)})}};b.ZodFunction=Ks;var Sr=class extends H{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};b.ZodLazy=Sr;Sr.create=(r,e)=>new Sr({getter:r,typeName:B.ZodLazy,...G(e)});var Tr=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(t,{received:t.data,code:R.ZodIssueCode.invalid_literal,expected:this._def.value}),_.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};b.ZodLiteral=Tr;Tr.create=(r,e)=>new Tr({value:r,typeName:B.ZodLiteral,...G(e)});function Zl(r,e){return new xr({values:r,typeName:B.ZodEnum,...G(e)})}var xr=class r extends H{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,_.addIssueToContext)(t,{expected:A.util.joinValues(n),received:t.parsedType,code:R.ZodIssueCode.invalid_type}),_.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,_.addIssueToContext)(t,{received:t.data,code:R.ZodIssueCode.invalid_enum_value,options:n}),_.INVALID}return(0,_.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};b.ZodEnum=xr;xr.create=Zl;var Cr=class extends H{_parse(e){let t=A.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==A.ZodParsedType.string&&n.parsedType!==A.ZodParsedType.number){let s=A.util.objectValues(t);return(0,_.addIssueToContext)(n,{expected:A.util.joinValues(s),received:n.parsedType,code:R.ZodIssueCode.invalid_type}),_.INVALID}if(this._cache||(this._cache=new Set(A.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=A.util.objectValues(t);return(0,_.addIssueToContext)(n,{received:n.data,code:R.ZodIssueCode.invalid_enum_value,options:s}),_.INVALID}return(0,_.OK)(e.data)}get enum(){return this._def.values}};b.ZodNativeEnum=Cr;Cr.create=(r,e)=>new Cr({values:r,typeName:B.ZodNativeEnum,...G(e)});var Ft=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.promise&&t.common.async===!1)return(0,_.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.promise,received:t.parsedType}),_.INVALID;let n=t.parsedType===A.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,_.OK)(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};b.ZodPromise=Ft;Ft.create=(r,e)=>new Ft({type:r,typeName:B.ZodPromise,...G(e)});var je=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===B.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,_.addIssueToContext)(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return _.INVALID;let u=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return u.status==="aborted"?_.INVALID:u.status==="dirty"||t.value==="dirty"?(0,_.DIRTY)(u.value):u});{if(t.value==="aborted")return _.INVALID;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?_.INVALID:a.status==="dirty"||t.value==="dirty"?(0,_.DIRTY)(a.value):a}}if(s.type==="refinement"){let o=a=>{let u=s.refinement(a,i);if(n.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?_.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?_.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,_.isValid)(o))return _.INVALID;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>(0,_.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):_.INVALID);A.util.assertNever(s)}};b.ZodEffects=je;b.ZodTransformer=je;je.create=(r,e,t)=>new je({schema:r,typeName:B.ZodEffects,effect:e,...G(t)});je.createWithPreprocess=(r,e,t)=>new je({schema:e,effect:{type:"preprocess",transform:r},typeName:B.ZodEffects,...G(t)});var Ue=class extends H{_parse(e){return this._getType(e)===A.ZodParsedType.undefined?(0,_.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};b.ZodOptional=Ue;Ue.create=(r,e)=>new Ue({innerType:r,typeName:B.ZodOptional,...G(e)});var it=class extends H{_parse(e){return this._getType(e)===A.ZodParsedType.null?(0,_.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};b.ZodNullable=it;it.create=(r,e)=>new it({innerType:r,typeName:B.ZodNullable,...G(e)});var Ir=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===A.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};b.ZodDefault=Ir;Ir.create=(r,e)=>new Ir({innerType:r,typeName:B.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...G(e)});var Rr=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,_.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new R.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new R.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};b.ZodCatch=Rr;Rr.create=(r,e)=>new Rr({innerType:r,typeName:B.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...G(e)});var vn=class extends H{_parse(e){if(this._getType(e)!==A.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.nan,received:n.parsedType}),_.INVALID}return{status:"valid",value:e.data}}};b.ZodNaN=vn;vn.create=r=>new vn({typeName:B.ZodNaN,...G(r)});b.BRAND=Symbol("zod_brand");var Jn=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};b.ZodBranded=Jn;var Yn=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?_.INVALID:i.status==="dirty"?(t.dirty(),(0,_.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?_.INVALID:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:B.ZodPipeline})}};b.ZodPipeline=Yn;var Er=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=s=>((0,_.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,_.isAsync)(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};b.ZodReadonly=Er;Er.create=(r,e)=>new Er({innerType:r,typeName:B.ZodReadonly,...G(e)});function ql(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Gl(r,e={},t){return r?qt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=ql(e,n),u=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:u})}});if(!i){let o=ql(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):qt.create()}b.late={object:Ie.lazycreate};var B;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(B||(b.ZodFirstPartyTypeKind=B={}));var Bp=(r,e={message:`Input not instance of ${r.name}`})=>Gl(t=>t instanceof r,e);b.instanceof=Bp;var Hl=Ut.create;b.string=Hl;var Vl=mr.create;b.number=Vl;var Kp=vn.create;b.nan=Kp;var Zp=gr.create;b.bigint=Zp;var Wl=yr.create;b.boolean=Wl;var Gp=vr.create;b.date=Gp;var Hp=pn.create;b.symbol=Hp;var Vp=br.create;b.undefined=Vp;var Wp=wr.create;b.null=Wp;var Jp=qt.create;b.any=Jp;var Yp=bt.create;b.unknown=Yp;var Xp=He.create;b.never=Xp;var Qp=mn.create;b.void=Qp;var em=wt.create;b.array=em;var tm=Ie.create;b.object=tm;var rm=Ie.strictCreate;b.strictObject=rm;var nm=_r.create;b.union=nm;var sm=Fs.create;b.discriminatedUnion=sm;var im=kr.create;b.intersection=im;var om=st.create;b.tuple=om;var am=Bs.create;b.record=am;var lm=gn.create;b.map=lm;var um=yn.create;b.set=um;var cm=Ks.create;b.function=cm;var dm=Sr.create;b.lazy=dm;var hm=Tr.create;b.literal=hm;var fm=xr.create;b.enum=fm;var pm=Cr.create;b.nativeEnum=pm;var mm=Ft.create;b.promise=mm;var Jl=je.create;b.effect=Jl;b.transformer=Jl;var gm=Ue.create;b.optional=gm;var ym=it.create;b.nullable=ym;var vm=je.createWithPreprocess;b.preprocess=vm;var bm=Yn.create;b.pipeline=bm;var wm=()=>Hl().optional();b.ostring=wm;var _m=()=>Vl().optional();b.onumber=_m;var km=()=>Wl().optional();b.oboolean=km;b.coerce={string:(r=>Ut.create({...r,coerce:!0})),number:(r=>mr.create({...r,coerce:!0})),boolean:(r=>yr.create({...r,coerce:!0})),bigint:(r=>gr.create({...r,coerce:!0})),date:(r=>vr.create({...r,coerce:!0}))};b.NEVER=_.INVALID});var bo=ee(Fe=>{"use strict";var Sm=Fe&&Fe.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),bn=Fe&&Fe.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Sm(e,r,t)};Object.defineProperty(Fe,"__esModule",{value:!0});bn(Ls(),Fe);bn(go(),Fe);bn(zl(),Fe);bn(Vn(),Fe);bn(Yl(),Fe);bn(Ds(),Fe)});var eu=ee(Re=>{"use strict";var Xl=Re&&Re.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Tm=Re&&Re.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),xm=Re&&Re.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&Xl(e,r,t);return Tm(e,r),e},Cm=Re&&Re.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Xl(e,r,t)};Object.defineProperty(Re,"__esModule",{value:!0});Re.z=void 0;var Ql=xm(bo());Re.z=Ql;Cm(bo(),Re);Re.default=Ql});var be=ee(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.RepoDocReadResultMsg=d.RepoDocReadMsg=d.RepoDocsResultMsg=d.RepoDocsMsg=d.ChatLoadResultMsg=d.ChatLoadMsg=d.ChatListResultMsg=d.ChatListMsg=d.ChatUsageMsg=d.ChatStreamMsg=d.JiraUsersResultMsg=d.DeployClaimResultMsg=d.DeployClaimMsg=d.RuleDiagnoseResultMsg=d.ProjectTestResultMsg=d.RunStatusMsg=d.RunUsageMsg=d.RunLogMsg=d.RunClaimMsg=d.HeartbeatMsg=d.HelloMsg=d.RuleConfig=d.ProjectConfig=d.ActionConfig=d.DeployAction=d.EnvironmentConfig=d.PromotionMode=d.DeployStep=d.RespondAction=d.ImplementAction=d.PlanOnlyAction=d.TriggerConfig=d.StatusChangedTrigger=d.CommentKeywordTrigger=d.LabelAddedTrigger=d.ActionType=d.TriggerType=d.ACTIVE_RUN_STATUSES=d.RunStatus=d.needsInputMarkerIn=d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=d.NEEDS_INPUT_COMMENT_MARKER=d.NEEDS_INPUT_LABEL=d.NEEDS_INPUT_MARKER=d.BRANCH_DEPLOY_ISSUE_KEY=d.REQUIRED_AGENT_CAPABILITIES=d.DEFAULT_AGENT_ID=d.REGISTERED_AGENTS=d.PROTOCOL_VERSION=d.GITHUB_TOKEN_PERMISSIONS=void 0;d.RunResolveConflictResultMsg=d.RunResolveConflictMsg=d.RunnerUpdateMsg=d.RepoDocSaveResultMsg=d.RepoDocSaveMsg=d.SetupClaudeMdSaveResultMsg=d.SetupClaudeMdSaveMsg=d.SetupClaudeMdGenerateResultMsg=d.SetupClaudeMdGenerateMsg=d.SetupStatusResultMsg=d.SetupStatusMsg=d.DeploySuggestResultMsg=d.EnvPreflightResultMsg=d.EnvPreflightMsg=d.ChatCreateTicketResultMsg=d.ChatCreateTicketMsg=d.ChatTurnResultMsg=d.ChatTurnMsg=d.ChatFile=d.TeamCredsResultMsg=d.TeamCredsMsg=d.KnowledgeSaveResultMsg=d.KnowledgeSaveMsg=d.KnowledgeListResultMsg=d.KnowledgeFile=d.KnowledgeListMsg=d.AuditReviewResultMsg=d.AuditReviewMsg=d.AuditGetResultMsg=d.AuditGetMsg=d.AuditListResultMsg=d.AuditStatsResultMsg=d.AuditStatsMsg=d.AuditListMsg=d.AuditStartResultMsg=d.AuditStartMsg=d.AuditRecord=d.AuditFinding=d.AuditScope=d.AuditSeverity=d.AuditRole=d.EpicSuggestResultMsg=d.EpicSuggestMsg=d.EpicListResultMsg=d.EpicChild=d.EpicListMsg=d.BoardTriggerResultMsg=d.BoardTriggerMsg=d.BoardFetchResultMsg=d.BoardFetchMsg=void 0;d.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=d.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=d.DEPLOY_FIX_PROMPT_TEMPLATE=d.PROMPT_PRESETS=d.DEFAULT_RESPOND_PROMPT_TEMPLATE=d.BUGFIX_IMPLEMENT_PROMPT_TEMPLATE=d.BUG_INVESTIGATION_PROMPT_TEMPLATE=d.TECHNICAL_PLAN_PROMPT_TEMPLATE=d.MEMORY_UPDATE_PROMPT=d.DEFAULT_IMPLEMENT_PROMPT_TEMPLATE=d.WRITE_TESTS_PROMPT=d.DEFAULT_PLAN_PROMPT_TEMPLATE=d.EnrollResponse=d.EnrollRequest=d.ServerToRunnerMsg=d.JiraUsersMsg=d.DeploySuggestMsg=d.DeployFixMsg=d.DeployStartMsg=d.RunRetryPushMsg=d.RunRejectedMsg=d.RunApprovedMsg=d.RunCancelMsg=d.RuleDiagnoseMsg=d.ProjectTestMsg=d.RunClaimResultMsg=d.ConfigMsg=d.HelloAckMsg=d.RunnerToServerMsg=d.AutopilotReportMsg=d.AutopilotNextResultMsg=d.AutopilotNextMsg=d.RunnerUpdateResultMsg=d.AgentProfilesResultMsg=d.AgentProfilesMsg=d.RunPrConflictMsg=void 0;d.missingAgentCapabilities=Im;d.parseRunnerMsg=Em;d.parseServerMsg=Am;var l=eu();d.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."};d.PROTOCOL_VERSION="1.40";d.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}];d.DEFAULT_AGENT_ID="claude-code";d.REQUIRED_AGENT_CAPABILITIES={plan_only:["readOnlyJail","sessionResume"],respond:["readOnlyJail"],implement:["editNoShellJail","sessionResume"],deploy:[],chat:["readOnlyJail","sessionResume"],assist:["readOnlyJail"]};function Im(r,e){let t=d.REGISTERED_AGENTS.find(n=>n.id===r);return t?(d.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(n=>!t.capabilities[n]):null}d.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";d.NEEDS_INPUT_MARKER="NEEDS-INPUT";d.NEEDS_INPUT_LABEL="agent-needs-input";d.NEEDS_INPUT_COMMENT_MARKER="Allwright needs your input";d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=["TicketPilot needs your input"];var Rm=r=>r.includes(d.NEEDS_INPUT_COMMENT_MARKER)||d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));d.needsInputMarkerIn=Rm;d.RunStatus=l.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);d.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];d.TriggerType=l.z.enum(["label_added","comment_keyword","status_changed"]);d.ActionType=l.z.enum(["plan_only","implement","respond","deploy"]);d.LabelAddedTrigger=l.z.object({type:l.z.literal("label_added"),label:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-planned"),failedLabel:l.z.string().min(1).default("agent-failed")});d.CommentKeywordTrigger=l.z.object({type:l.z.literal("comment_keyword"),keyword:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-implemented"),failedLabel:l.z.string().min(1).default("agent-failed")});d.StatusChangedTrigger=l.z.object({type:l.z.literal("status_changed"),status:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-deployed"),failedLabel:l.z.string().min(1).default("agent-failed")});d.TriggerConfig=l.z.discriminatedUnion("type",[d.LabelAddedTrigger,d.CommentKeywordTrigger,d.StatusChangedTrigger]);d.PlanOnlyAction=l.z.object({type:l.z.literal("plan_only"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(3600).default(900),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default("")});d.ImplementAction=l.z.object({type:l.z.literal("implement"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(7200).default(1800),maxTurns:l.z.number().int().positive().max(500).default(120),requireApproval:l.z.boolean().default(!0),branchTemplate:l.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:l.z.string().min(1).default("main"),jiraTransition:l.z.string().optional(),jiraTransitionOnStart:l.z.string().optional(),jiraTransitionOnMerge:l.z.string().optional(),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default(""),updateMemory:l.z.boolean().default(!1),writeTests:l.z.boolean().default(!0),runTests:l.z.boolean().default(!0),mergeOnApprove:l.z.boolean().default(!0),mergeMethod:l.z.enum(["squash","merge","rebase"]).default("squash")});d.RespondAction=l.z.object({type:l.z.literal("respond"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(3600).default(600),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default("")});d.DeployStep=l.z.object({name:l.z.string().min(1).max(120),run:l.z.string().min(1).max(4e3),continueOnError:l.z.boolean().default(!1)});d.PromotionMode=l.z.enum(["deploy_only","merge_and_deploy"]);d.EnvironmentConfig=l.z.object({id:l.z.string(),projectId:l.z.string(),name:l.z.string(),rank:l.z.number().int().nonnegative(),auditBeforeDeploy:l.z.enum(["","security","testing"]).default(""),branch:l.z.string().default(""),publicUrl:l.z.string().default(""),useDedicatedCheckout:l.z.boolean().default(!1),promotionMode:d.PromotionMode.default("deploy_only"),ticketBranchTemplate:l.z.string().default("agent/{{issueKey}}"),steps:l.z.array(d.DeployStep).default([]),workdir:l.z.string().default(""),timeoutSeconds:l.z.number().int().positive().max(21600).default(1800),requiredSecrets:l.z.array(l.z.string()).default([]),requireApproval:l.z.boolean().default(!1),requireSyncCheck:l.z.boolean().default(!1),previousEnvBranch:l.z.string().optional(),deployFromColumn:l.z.string().default(""),deployToColumn:l.z.string().default("")});d.DeployAction=l.z.object({type:l.z.literal("deploy"),envSelection:l.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:l.z.string().optional(),requireStatus:l.z.string().optional()});d.ActionConfig=l.z.discriminatedUnion("type",[d.PlanOnlyAction,d.ImplementAction,d.RespondAction,d.DeployAction]);d.ProjectConfig=l.z.object({id:l.z.string(),name:l.z.string(),jiraProjectKey:l.z.string(),repoName:l.z.string(),jiraSiteUrl:l.z.string().default(""),defaultAgent:l.z.string().default("claude-code"),componentRoutes:l.z.array(l.z.object({component:l.z.string().min(1),repoName:l.z.string().min(1)})).default([])});d.RuleConfig=l.z.object({id:l.z.string(),projectId:l.z.string(),name:l.z.string(),enabled:l.z.boolean(),trigger:d.TriggerConfig,action:d.ActionConfig});d.HelloMsg=l.z.object({type:l.z.literal("hello"),protocolVersion:l.z.string(),runnerVersion:l.z.string(),platform:l.z.string(),justBooted:l.z.boolean().optional()});d.HeartbeatMsg=l.z.object({type:l.z.literal("heartbeat"),ts:l.z.string()});d.RunClaimMsg=l.z.object({type:l.z.literal("run.claim"),requestId:l.z.string(),ruleId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),triggerFingerprint:l.z.string(),dedupKey:l.z.string().optional(),triggeredByAccountId:l.z.string().optional()});d.RunLogMsg=l.z.object({type:l.z.literal("run.log"),runId:l.z.string(),seq:l.z.number().int().nonnegative(),ts:l.z.string(),level:l.z.enum(["info","warn","error","agent"]),message:l.z.string().max(16384)});d.RunUsageMsg=l.z.object({type:l.z.literal("run.usage"),runId:l.z.string(),inputTokens:l.z.number().int().nonnegative(),outputTokens:l.z.number().int().nonnegative(),cacheReadTokens:l.z.number().int().nonnegative().optional(),costUsd:l.z.number().nonnegative().optional(),turns:l.z.number().int().nonnegative().optional()});d.RunStatusMsg=l.z.object({type:l.z.literal("run.status"),runId:l.z.string(),status:d.RunStatus,error:l.z.string().optional(),errorKind:l.z.enum(["guard"]).optional(),costUsd:l.z.number().nonnegative().optional(),inputTokens:l.z.number().int().nonnegative().optional(),outputTokens:l.z.number().int().nonnegative().optional(),resultSummary:l.z.string().max(2e3).optional(),billingMode:l.z.enum(["subscription","api","unknown"]).optional(),model:l.z.string().max(200).optional(),prUrl:l.z.string().optional(),headSha:l.z.string().optional(),deployedRef:l.z.string().optional(),retryAvailable:l.z.boolean().optional()});d.ProjectTestResultMsg=l.z.object({type:l.z.literal("project.test.result"),requestId:l.z.string(),ok:l.z.boolean(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string(),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")}))});d.RuleDiagnoseResultMsg=l.z.object({type:l.z.literal("rule.diagnose.result"),requestId:l.z.string(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string(),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")})),matchedCount:l.z.number().int().nonnegative(),excludedCount:l.z.number().int().nonnegative(),excludedSample:l.z.array(l.z.string()).max(5)});d.DeployClaimMsg=l.z.object({type:l.z.literal("deploy.claim"),requestId:l.z.string(),projectId:l.z.string(),ruleId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),environmentName:l.z.string(),requestedByAccountId:l.z.string().optional(),requestedByDisplayName:l.z.string().default(""),dedupKey:l.z.string(),triggerFingerprint:l.z.string()});d.DeployClaimResultMsg=l.z.object({type:l.z.literal("deploy.claim.result"),requestId:l.z.string(),accepted:l.z.boolean(),runId:l.z.string().optional(),environment:d.EnvironmentConfig.optional(),reason:l.z.string().optional(),code:l.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});d.JiraUsersResultMsg=l.z.object({type:l.z.literal("jira.users.result"),requestId:l.z.string(),ok:l.z.boolean(),users:l.z.array(l.z.object({accountId:l.z.string(),displayName:l.z.string(),email:l.z.string().default(""),active:l.z.boolean().default(!0)})).default([]),error:l.z.string().optional()});d.ChatStreamMsg=l.z.object({type:l.z.literal("chat.stream"),requestId:l.z.string(),seq:l.z.number().int().nonnegative(),text:l.z.string().max(8e3)});d.ChatUsageMsg=l.z.object({type:l.z.literal("chat.usage"),requestId:l.z.string(),inputTokens:l.z.number().int().nonnegative(),outputTokens:l.z.number().int().nonnegative(),cacheReadTokens:l.z.number().int().nonnegative().optional(),turns:l.z.number().int().nonnegative().optional()});d.ChatListMsg=l.z.object({type:l.z.literal("chat.list"),requestId:l.z.string(),projectId:l.z.string()});d.ChatListResultMsg=l.z.object({type:l.z.literal("chat.list.result"),requestId:l.z.string(),sessions:l.z.array(l.z.object({sessionId:l.z.string(),title:l.z.string().default(""),updatedAt:l.z.string().default(""),messageCount:l.z.number().int().nonnegative().default(0)})).default([])});d.ChatLoadMsg=l.z.object({type:l.z.literal("chat.load"),requestId:l.z.string(),sessionId:l.z.string()});d.ChatLoadResultMsg=l.z.object({type:l.z.literal("chat.load.result"),requestId:l.z.string(),ok:l.z.boolean(),projectId:l.z.string().default(""),messages:l.z.array(l.z.object({role:l.z.enum(["user","agent"]),text:l.z.string()})).default([]),error:l.z.string().optional()});d.RepoDocsMsg=l.z.object({type:l.z.literal("repo.docs"),requestId:l.z.string(),projectId:l.z.string()});d.RepoDocsResultMsg=l.z.object({type:l.z.literal("repo.docs.result"),requestId:l.z.string(),ok:l.z.boolean(),docs:l.z.array(l.z.object({path:l.z.string(),sizeBytes:l.z.number().int().nonnegative().default(0),updatedAt:l.z.string().default("")})).default([]),error:l.z.string().optional()});d.RepoDocReadMsg=l.z.object({type:l.z.literal("repo.doc.read"),requestId:l.z.string(),projectId:l.z.string(),path:l.z.string().max(400)});d.RepoDocReadResultMsg=l.z.object({type:l.z.literal("repo.doc.read.result"),requestId:l.z.string(),ok:l.z.boolean(),path:l.z.string().default(""),content:l.z.string().default(""),truncated:l.z.boolean().default(!1),error:l.z.string().optional()});d.BoardFetchMsg=l.z.object({type:l.z.literal("board.fetch"),requestId:l.z.string(),projectId:l.z.string()});d.BoardFetchResultMsg=l.z.object({type:l.z.literal("board.fetch.result"),requestId:l.z.string(),ok:l.z.boolean(),browseBaseUrl:l.z.string().default(""),columns:l.z.array(l.z.object({name:l.z.string(),issues:l.z.array(l.z.object({key:l.z.string(),summary:l.z.string(),labels:l.z.array(l.z.string()).default([])})).default([])})).default([]),error:l.z.string().optional()});d.BoardTriggerMsg=l.z.object({type:l.z.literal("board.trigger"),requestId:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),comment:l.z.string().max(2e3).default(""),removeLabel:l.z.string().default(""),requestedBy:l.z.string().default(""),requestedByEmail:l.z.string().default(""),reimplement:l.z.boolean().default(!1)});d.BoardTriggerResultMsg=l.z.object({type:l.z.literal("board.trigger.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional()});d.EpicListMsg=l.z.object({type:l.z.literal("epic.list"),requestId:l.z.string(),projectId:l.z.string(),epicKey:l.z.string().default("")});d.EpicChild=l.z.object({key:l.z.string(),summary:l.z.string(),status:l.z.string(),statusCategory:l.z.string(),labels:l.z.array(l.z.string()).default([])});d.EpicListResultMsg=l.z.object({type:l.z.literal("epic.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),epics:l.z.array(l.z.object({key:l.z.string(),summary:l.z.string(),status:l.z.string()})).default([]),children:l.z.array(d.EpicChild).default([])});d.EpicSuggestMsg=l.z.object({type:l.z.literal("epic.suggest"),requestId:l.z.string(),projectId:l.z.string(),epicKey:l.z.string().min(1),model:l.z.string().default("")});d.EpicSuggestResultMsg=l.z.object({type:l.z.literal("epic.suggest.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),issueKey:l.z.string().default(""),reason:l.z.string().default(""),considered:l.z.number().int().default(0)});d.AuditRole=l.z.enum(["security","testing","architecture"]);d.AuditSeverity=l.z.enum(["critical","high","medium","low","info"]);d.AuditScope=l.z.object({kind:l.z.enum(["repo","ticket","branch"]).default("repo"),ref:l.z.string().default("")});d.AuditFinding=l.z.object({id:l.z.string().min(1),title:l.z.string().min(1),ruleId:l.z.string().max(20).default(""),severity:d.AuditSeverity,area:l.z.string().default(""),evidence:l.z.array(l.z.object({file:l.z.string().min(1),line:l.z.number().int().positive().optional(),note:l.z.string().default("")})).min(1),fix:l.z.string().default("")});d.AuditRecord=l.z.object({id:l.z.string(),role:d.AuditRole,createdAt:l.z.string(),model:l.z.string().default(""),summary:l.z.string().default(""),packNames:l.z.array(l.z.string()).default([]),findings:l.z.array(d.AuditFinding).default([]),costUsd:l.z.number().default(0),review:l.z.object({selected:l.z.array(l.z.string()),updatedAt:l.z.string()}).optional(),verdicts:l.z.record(l.z.object({verdict:l.z.enum(["valid","false-positive","wont-fix"]),note:l.z.string().default(""),by:l.z.string().default(""),at:l.z.string().default("")})).default({}),lessonsWritten:l.z.array(l.z.string()).default([]),ticketed:l.z.record(l.z.string()).default({}),scope:d.AuditScope.default({kind:"repo",ref:""}),testRun:l.z.array(l.z.object({command:l.z.string(),exitCode:l.z.number().int(),durationMs:l.z.number().int().default(0),tail:l.z.string().default("")})).optional()});d.AuditStartMsg=l.z.object({type:l.z.literal("audit.start"),requestId:l.z.string(),projectId:l.z.string(),role:d.AuditRole,model:l.z.string().default(""),scope:d.AuditScope.default({kind:"repo",ref:""})});d.AuditStartResultMsg=l.z.object({type:l.z.literal("audit.start.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditListMsg=l.z.object({type:l.z.literal("audit.list"),requestId:l.z.string(),projectId:l.z.string()});d.AuditStatsMsg=l.z.object({type:l.z.literal("audit.stats"),requestId:l.z.string(),projectIds:l.z.array(l.z.string()).max(200).default([]),since:l.z.string().default("")});d.AuditStatsResultMsg=l.z.object({type:l.z.literal("audit.stats.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),byProject:l.z.record(l.z.object({audits:l.z.number().int().default(0),findings:l.z.number().int().default(0),valid:l.z.number().int().default(0),falsePositive:l.z.number().int().default(0),wontFix:l.z.number().int().default(0),unreviewed:l.z.number().int().default(0)})).default({})});d.AuditListResultMsg=l.z.object({type:l.z.literal("audit.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audits:l.z.array(l.z.object({id:l.z.string(),role:d.AuditRole,createdAt:l.z.string(),findingCount:l.z.number().int(),bySeverity:l.z.record(l.z.number().int()).default({})})).default([])});d.AuditGetMsg=l.z.object({type:l.z.literal("audit.get"),requestId:l.z.string(),projectId:l.z.string(),auditId:l.z.string()});d.AuditGetResultMsg=l.z.object({type:l.z.literal("audit.get.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditReviewMsg=l.z.object({type:l.z.literal("audit.review"),requestId:l.z.string(),projectId:l.z.string(),auditId:l.z.string(),selected:l.z.array(l.z.string()).optional(),ticketed:l.z.array(l.z.object({findingId:l.z.string(),issueKey:l.z.string()})).default([]),verdicts:l.z.array(l.z.object({findingId:l.z.string(),verdict:l.z.enum(["valid","false-positive","wont-fix"]),note:l.z.string().max(2e3).default("")})).default([]),verdictBy:l.z.string().default("")});d.AuditReviewResultMsg=l.z.object({type:l.z.literal("audit.review.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.KnowledgeListMsg=l.z.object({type:l.z.literal("knowledge.list"),requestId:l.z.string(),projectId:l.z.string()});d.KnowledgeFile=l.z.object({role:d.AuditRole,level:l.z.enum(["global","org","project"]),source:l.z.enum(["pack","lessons"]),name:l.z.string(),content:l.z.string(),editable:l.z.boolean().default(!1)});d.KnowledgeListResultMsg=l.z.object({type:l.z.literal("knowledge.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),files:l.z.array(d.KnowledgeFile).default([])});d.KnowledgeSaveMsg=l.z.object({type:l.z.literal("knowledge.save"),requestId:l.z.string(),projectId:l.z.string(),role:d.AuditRole,level:l.z.enum(["org","project"]),source:l.z.enum(["pack","lessons"]),name:l.z.string().min(1).max(100),content:l.z.string().max(6e4),append:l.z.boolean().default(!1),by:l.z.string().default("")});d.KnowledgeSaveResultMsg=l.z.object({type:l.z.literal("knowledge.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional()});d.TeamCredsMsg=l.z.object({type:l.z.literal("team.creds"),requestId:l.z.string(),emails:l.z.array(l.z.string()).max(200)});d.TeamCredsResultMsg=l.z.object({type:l.z.literal("team.creds.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),githubShared:l.z.boolean().default(!1),sharedGithubLogin:l.z.string().default(""),entries:l.z.array(l.z.object({email:l.z.string(),jira:l.z.enum(["own","runner-account","missing"]),jiraAs:l.z.string().default(""),github:l.z.enum(["own","shared","missing"]),githubAs:l.z.string().default("")})).default([])});d.ChatFile=l.z.object({name:l.z.string().min(1).max(255),contentBase64:l.z.string().min(1).max(6e6)});d.ChatTurnMsg=l.z.object({type:l.z.literal("chat.turn"),requestId:l.z.string(),projectId:l.z.string(),sessionId:l.z.string().optional(),message:l.z.string().min(1).max(2e4),userName:l.z.string().default(""),model:l.z.string().default(""),files:l.z.array(d.ChatFile).max(8).default([])});d.ChatTurnResultMsg=l.z.object({type:l.z.literal("chat.turn.result"),requestId:l.z.string(),ok:l.z.boolean(),sessionId:l.z.string().default(""),reply:l.z.string().default(""),error:l.z.string().optional(),inputTokens:l.z.number().int().nonnegative().default(0),outputTokens:l.z.number().int().nonnegative().default(0),cacheReadTokens:l.z.number().int().nonnegative().default(0),costUsd:l.z.number().nonnegative().default(0),model:l.z.string().max(200).default("")});d.ChatCreateTicketMsg=l.z.object({type:l.z.literal("chat.create.ticket"),requestId:l.z.string(),projectId:l.z.string(),summary:l.z.string().min(1).max(250),description:l.z.string().default(""),triggerComment:l.z.string().default(""),requestedBy:l.z.string().default(""),requestedByEmail:l.z.string().default(""),asEpic:l.z.boolean().default(!1),children:l.z.array(l.z.object({summary:l.z.string().min(1),description:l.z.string().default("")})).max(20).default([]),files:l.z.array(d.ChatFile).max(8).default([])});d.ChatCreateTicketResultMsg=l.z.object({type:l.z.literal("chat.create.ticket.result"),requestId:l.z.string(),ok:l.z.boolean(),issueKey:l.z.string().default(""),error:l.z.string().optional(),childKeys:l.z.array(l.z.string()).default([])});d.EnvPreflightMsg=l.z.object({type:l.z.literal("env.preflight"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string().default(""),steps:l.z.array(d.DeployStep).default([]),requiredSecrets:l.z.array(l.z.string()).default([]),workdir:l.z.string().default(""),branch:l.z.string().default(""),publicUrl:l.z.string().default("")});d.EnvPreflightResultMsg=l.z.object({type:l.z.literal("env.preflight.result"),requestId:l.z.string(),ok:l.z.boolean(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string().default(""),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")})).default([])});d.DeploySuggestResultMsg=l.z.object({type:l.z.literal("deploy.suggest.result"),requestId:l.z.string(),ok:l.z.boolean(),steps:l.z.array(d.DeployStep).default([]),requiredSecrets:l.z.array(l.z.string()).default([]),notes:l.z.string().default(""),error:l.z.string().optional(),docPath:l.z.string().default(""),docContent:l.z.string().max(1e5).default("")});d.SetupStatusMsg=l.z.object({type:l.z.literal("setup.status"),requestId:l.z.string(),repoNames:l.z.array(l.z.string()).max(100).default([])});d.SetupStatusResultMsg=l.z.object({type:l.z.literal("setup.status.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),jiraConfigured:l.z.boolean().default(!1),jiraEmail:l.z.string().default(""),claude:l.z.object({installed:l.z.boolean(),version:l.z.string().default(""),loggedIn:l.z.boolean()}).optional(),githubTokenSet:l.z.boolean().default(!1),githubLogin:l.z.string().default(""),deploysEnabled:l.z.boolean().default(!1),jiraUserCount:l.z.number().int().default(0),repos:l.z.array(l.z.object({repoName:l.z.string(),mapped:l.z.boolean(),pathExists:l.z.boolean().default(!1),isGit:l.z.boolean().default(!1),claudeMd:l.z.boolean().default(!1),deployMd:l.z.boolean().default(!1),testMd:l.z.boolean().default(!1),defaultBranch:l.z.string().default(""),githubToken:l.z.boolean().default(!1),githubTokenOwn:l.z.boolean().default(!1)})).default([])});d.SetupClaudeMdGenerateMsg=l.z.object({type:l.z.literal("setup.claudemd.generate"),requestId:l.z.string(),projectId:l.z.string(),kind:l.z.enum(["claude","deploy","design"]).default("claude"),streamId:l.z.string().default("")});d.SetupClaudeMdGenerateResultMsg=l.z.object({type:l.z.literal("setup.claudemd.generate.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),content:l.z.string().default("")});d.SetupClaudeMdSaveMsg=l.z.object({type:l.z.literal("setup.claudemd.save"),requestId:l.z.string(),projectId:l.z.string(),kind:l.z.enum(["claude","deploy","design"]).default("claude"),overwrite:l.z.boolean().default(!1),content:l.z.string().max(1e5)});d.SetupClaudeMdSaveResultMsg=l.z.object({type:l.z.literal("setup.claudemd.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default("")});d.RepoDocSaveMsg=l.z.object({type:l.z.literal("repo.doc.save"),requestId:l.z.string(),projectId:l.z.string(),relPath:l.z.string().min(1).max(200),overwrite:l.z.boolean().default(!1),content:l.z.string().max(2e5)});d.RepoDocSaveResultMsg=l.z.object({type:l.z.literal("repo.doc.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default("")});d.RunnerUpdateMsg=l.z.object({type:l.z.literal("runner.update"),requestId:l.z.string()});d.RunResolveConflictMsg=l.z.object({type:l.z.literal("run.resolve.conflict"),requestId:l.z.string(),runId:l.z.string()});d.RunResolveConflictResultMsg=l.z.object({type:l.z.literal("run.resolve.conflict.result"),requestId:l.z.string(),ok:l.z.boolean(),note:l.z.string().default(""),freeOfCharge:l.z.boolean().default(!1),headSha:l.z.string().default(""),costUsd:l.z.number().nonnegative().optional(),inputTokens:l.z.number().int().nonnegative().optional(),outputTokens:l.z.number().int().nonnegative().optional()});d.RunPrConflictMsg=l.z.object({type:l.z.literal("run.pr.conflict"),runId:l.z.string(),conflicted:l.z.boolean()});d.AgentProfilesMsg=l.z.object({type:l.z.literal("agent.profiles"),requestId:l.z.string()});d.AgentProfilesResultMsg=l.z.object({type:l.z.literal("agent.profiles.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),profiles:l.z.array(l.z.object({agent:l.z.string(),name:l.z.string(),loggedIn:l.z.boolean()})).max(200).default([]),defaultLoggedIn:l.z.boolean().default(!1),agentsWithoutProfiles:l.z.array(l.z.string()).max(20).default([])});d.RunnerUpdateResultMsg=l.z.object({type:l.z.literal("runner.update.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default(""),scheduled:l.z.boolean().default(!1)});d.AutopilotNextMsg=l.z.object({type:l.z.literal("autopilot.next"),requestId:l.z.string()});d.AutopilotNextResultMsg=l.z.object({type:l.z.literal("autopilot.next.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),item:l.z.object({id:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),ruleId:l.z.string(),baseOverride:l.z.string().default(""),branchOverride:l.z.string().default(""),continueBranch:l.z.boolean().default(!1)}).nullable().default(null),pausedUntil:l.z.string().default("")});d.AutopilotReportMsg=l.z.object({type:l.z.literal("autopilot.report"),requestId:l.z.string(),itemId:l.z.string(),outcome:l.z.enum(["claimed","failed","paused"]),runId:l.z.string().default(""),error:l.z.string().default("")});d.RunnerToServerMsg=l.z.discriminatedUnion("type",[d.HelloMsg,d.HeartbeatMsg,d.RunClaimMsg,d.RunLogMsg,d.RunUsageMsg,d.RunStatusMsg,d.ProjectTestResultMsg,d.RuleDiagnoseResultMsg,d.DeployClaimMsg,d.DeploySuggestResultMsg,d.EnvPreflightResultMsg,d.ChatTurnResultMsg,d.ChatStreamMsg,d.ChatUsageMsg,d.ChatCreateTicketResultMsg,d.ChatListResultMsg,d.RepoDocsResultMsg,d.RepoDocReadResultMsg,d.ChatLoadResultMsg,d.BoardFetchResultMsg,d.BoardTriggerResultMsg,d.TeamCredsResultMsg,d.AuditStartResultMsg,d.AuditListResultMsg,d.AuditGetResultMsg,d.AuditReviewResultMsg,d.KnowledgeListResultMsg,d.KnowledgeSaveResultMsg,d.EpicListResultMsg,d.EpicSuggestResultMsg,d.JiraUsersResultMsg,d.SetupStatusResultMsg,d.SetupClaudeMdGenerateResultMsg,d.SetupClaudeMdSaveResultMsg,d.RepoDocSaveResultMsg,d.RunnerUpdateResultMsg,d.AgentProfilesResultMsg,d.RunPrConflictMsg,d.RunResolveConflictResultMsg,d.AuditStatsResultMsg,d.AutopilotNextMsg,d.AutopilotReportMsg]);d.HelloAckMsg=l.z.object({type:l.z.literal("hello.ack"),runnerId:l.z.string(),runnerName:l.z.string(),serverTime:l.z.string()});d.ConfigMsg=l.z.object({type:l.z.literal("config"),projects:l.z.array(d.ProjectConfig),rules:l.z.array(d.RuleConfig),environments:l.z.array(d.EnvironmentConfig).default([]),pollingPaused:l.z.boolean().default(!1)});d.RunClaimResultMsg=l.z.object({type:l.z.literal("run.claim.result"),requestId:l.z.string(),accepted:l.z.boolean(),runId:l.z.string().optional(),reason:l.z.string().optional(),claudeProfile:l.z.string().optional(),actorEmail:l.z.string().optional()});d.ProjectTestMsg=l.z.object({type:l.z.literal("project.test"),requestId:l.z.string(),projectId:l.z.string()});d.RuleDiagnoseMsg=l.z.object({type:l.z.literal("rule.diagnose"),requestId:l.z.string(),ruleId:l.z.string()});d.RunCancelMsg=l.z.object({type:l.z.literal("run.cancel"),runId:l.z.string()});d.RunApprovedMsg=l.z.object({type:l.z.literal("run.approved"),runId:l.z.string(),headSha:l.z.string().optional()});d.RunRejectedMsg=l.z.object({type:l.z.literal("run.rejected"),runId:l.z.string()});d.RunRetryPushMsg=l.z.object({type:l.z.literal("run.retryPush"),runId:l.z.string()});d.DeployStartMsg=l.z.object({type:l.z.literal("deploy.start"),runId:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),environment:d.EnvironmentConfig,requestedBy:l.z.string().default(""),attempt:l.z.number().int().positive().default(1)});d.DeployFixMsg=l.z.object({type:l.z.literal("deploy.fix"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string(),steps:l.z.array(l.z.object({name:l.z.string(),run:l.z.string(),continueOnError:l.z.boolean().default(!1)})),failedStep:l.z.string().default(""),errorText:l.z.string().max(8e3).default("")});d.DeploySuggestMsg=l.z.object({type:l.z.literal("deploy.suggest"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string(),notes:l.z.string().default(""),timeoutSeconds:l.z.number().int().positive().max(1800).default(300)});d.JiraUsersMsg=l.z.object({type:l.z.literal("jira.users"),requestId:l.z.string(),query:l.z.string().default("")});d.ServerToRunnerMsg=l.z.discriminatedUnion("type",[d.HelloAckMsg,d.ConfigMsg,d.RunClaimResultMsg,d.ProjectTestMsg,d.RuleDiagnoseMsg,d.RunCancelMsg,d.RunApprovedMsg,d.RunRejectedMsg,d.RunRetryPushMsg,d.DeployClaimResultMsg,d.DeployStartMsg,d.DeploySuggestMsg,d.DeployFixMsg,d.EnvPreflightMsg,d.ChatTurnMsg,d.ChatCreateTicketMsg,d.ChatListMsg,d.RepoDocsMsg,d.RepoDocReadMsg,d.ChatLoadMsg,d.BoardFetchMsg,d.BoardTriggerMsg,d.TeamCredsMsg,d.AuditStartMsg,d.AuditListMsg,d.AuditGetMsg,d.AuditReviewMsg,d.KnowledgeListMsg,d.KnowledgeSaveMsg,d.EpicListMsg,d.EpicSuggestMsg,d.JiraUsersMsg,d.SetupStatusMsg,d.SetupClaudeMdGenerateMsg,d.SetupClaudeMdSaveMsg,d.RepoDocSaveMsg,d.RunnerUpdateMsg,d.AgentProfilesMsg,d.RunResolveConflictMsg,d.AuditStatsMsg,d.AutopilotNextResultMsg]);d.EnrollRequest=l.z.object({enrollToken:l.z.string().min(10),name:l.z.string().min(1).max(100),platform:l.z.string(),runnerVersion:l.z.string()});d.EnrollResponse=l.z.object({runnerId:l.z.string(),runnerToken:l.z.string(),controlPlaneWsUrl:l.z.string()});function Em(r){return d.RunnerToServerMsg.parse(r)}function Am(r){return d.ServerToRunnerMsg.parse(r)}d.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.
23
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function rl(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}nl.Command=no});var ll=ee(Me=>{var{Argument:il}=Ts(),{Command:so}=sl(),{CommanderError:qh,InvalidArgumentError:ol}=Bn(),{Help:Fh}=Wi(),{Option:al}=Qi();Me.program=new so;Me.createCommand=r=>new so(r);Me.createOption=(r,e)=>new al(r,e);Me.createArgument=(r,e)=>new il(r,e);Me.Command=so;Me.Option=al;Me.Argument=il;Me.Help=Fh;Me.CommanderError=qh;Me.InvalidArgumentError=ol;Me.InvalidOptionArgumentError=ol});var Vn=ee(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.getParsedType=ae.ZodParsedType=ae.objectUtil=ae.util=void 0;var fo;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(fo||(ae.util=fo={}));var Pl;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Pl||(ae.objectUtil=Pl={}));ae.ZodParsedType=fo.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var ap=r=>{switch(typeof r){case"undefined":return ae.ZodParsedType.undefined;case"string":return ae.ZodParsedType.string;case"number":return Number.isNaN(r)?ae.ZodParsedType.nan:ae.ZodParsedType.number;case"boolean":return ae.ZodParsedType.boolean;case"function":return ae.ZodParsedType.function;case"bigint":return ae.ZodParsedType.bigint;case"symbol":return ae.ZodParsedType.symbol;case"object":return Array.isArray(r)?ae.ZodParsedType.array:r===null?ae.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?ae.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?ae.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?ae.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?ae.ZodParsedType.date:ae.ZodParsedType.object;default:return ae.ZodParsedType.unknown}};ae.getParsedType=ap});var Ds=ee(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.ZodError=Dt.quotelessJson=Dt.ZodIssueCode=void 0;var jl=Vn();Dt.ZodIssueCode=jl.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 lp=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");Dt.quotelessJson=lp;var Wn=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(a[u]=a[u]||{_errors:[]},a[u]._errors.push(t(o))):a[u]=a[u]||{_errors:[]},a=a[u],c++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,jl.util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};Dt.ZodError=Wn;Wn.create=r=>new Wn(r)});var mo=ee(po=>{"use strict";Object.defineProperty(po,"__esModule",{value:!0});var ke=Ds(),pr=Vn(),cp=(r,e)=>{let t;switch(r.code){case ke.ZodIssueCode.invalid_type:r.received===pr.ZodParsedType.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case ke.ZodIssueCode.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,pr.util.jsonStringifyReplacer)}`;break;case ke.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${pr.util.joinValues(r.keys,", ")}`;break;case ke.ZodIssueCode.invalid_union:t="Invalid input";break;case ke.ZodIssueCode.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${pr.util.joinValues(r.options)}`;break;case ke.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${pr.util.joinValues(r.options)}, received '${r.received}'`;break;case ke.ZodIssueCode.invalid_arguments:t="Invalid function arguments";break;case ke.ZodIssueCode.invalid_return_type:t="Invalid function return type";break;case ke.ZodIssueCode.invalid_date:t="Invalid date";break;case ke.ZodIssueCode.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:pr.util.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case ke.ZodIssueCode.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case ke.ZodIssueCode.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case ke.ZodIssueCode.custom:t="Invalid input";break;case ke.ZodIssueCode.invalid_intersection_types:t="Intersection results could not be merged";break;case ke.ZodIssueCode.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case ke.ZodIssueCode.not_finite:t="Number must be finite";break;default:t=e.defaultError,pr.util.assertNever(r)}return{message:t}};po.default=cp});var Ls=ee(Lt=>{"use strict";var up=Lt&&Lt.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Lt,"__esModule",{value:!0});Lt.defaultErrorMap=void 0;Lt.setErrorMap=dp;Lt.getErrorMap=hp;var Ol=up(mo());Lt.defaultErrorMap=Ol.default;var Nl=Ol.default;function dp(r){Nl=r}function hp(){return Nl}});var yo=ee(ie=>{"use strict";var fp=ie&&ie.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(ie,"__esModule",{value:!0});ie.isAsync=ie.isValid=ie.isDirty=ie.isAborted=ie.OK=ie.DIRTY=ie.INVALID=ie.ParseStatus=ie.EMPTY_PATH=ie.makeIssue=void 0;ie.addIssueToContext=gp;var pp=Ls(),Ml=fp(mo()),mp=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",c=n.filter(u=>!!u).slice().reverse();for(let u of c)a=u(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};ie.makeIssue=mp;ie.EMPTY_PATH=[];function gp(r,e){let t=(0,pp.getErrorMap)(),n=(0,ie.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===Ml.default?void 0:Ml.default].filter(s=>!!s)});r.common.issues.push(n)}var go=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return ie.INVALID;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return ie.INVALID;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}};ie.ParseStatus=go;ie.INVALID=Object.freeze({status:"aborted"});var yp=r=>({status:"dirty",value:r});ie.DIRTY=yp;var vp=r=>({status:"valid",value:r});ie.OK=vp;var bp=r=>r.status==="aborted";ie.isAborted=bp;var wp=r=>r.status==="dirty";ie.isDirty=wp;var _p=r=>r.status==="valid";ie.isValid=_p;var kp=r=>typeof Promise<"u"&&r instanceof Promise;ie.isAsync=kp});var Dl=ee(zl=>{"use strict";Object.defineProperty(zl,"__esModule",{value:!0})});var Ul=ee(Us=>{"use strict";Object.defineProperty(Us,"__esModule",{value:!0});Us.errorUtil=void 0;var Ll;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(Ll||(Us.errorUtil=Ll={}))});var Xl=ee(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.discriminatedUnion=b.date=b.boolean=b.bigint=b.array=b.any=b.coerce=b.ZodFirstPartyTypeKind=b.late=b.ZodSchema=b.Schema=b.ZodReadonly=b.ZodPipeline=b.ZodBranded=b.BRAND=b.ZodNaN=b.ZodCatch=b.ZodDefault=b.ZodNullable=b.ZodOptional=b.ZodTransformer=b.ZodEffects=b.ZodPromise=b.ZodNativeEnum=b.ZodEnum=b.ZodLiteral=b.ZodLazy=b.ZodFunction=b.ZodSet=b.ZodMap=b.ZodRecord=b.ZodTuple=b.ZodIntersection=b.ZodDiscriminatedUnion=b.ZodUnion=b.ZodObject=b.ZodArray=b.ZodVoid=b.ZodNever=b.ZodUnknown=b.ZodAny=b.ZodNull=b.ZodUndefined=b.ZodSymbol=b.ZodDate=b.ZodBoolean=b.ZodBigInt=b.ZodNumber=b.ZodString=b.ZodType=void 0;b.NEVER=b.void=b.unknown=b.union=b.undefined=b.tuple=b.transformer=b.symbol=b.string=b.strictObject=b.set=b.record=b.promise=b.preprocess=b.pipeline=b.ostring=b.optional=b.onumber=b.oboolean=b.object=b.number=b.nullable=b.null=b.never=b.nativeEnum=b.nan=b.map=b.literal=b.lazy=b.intersection=b.instanceof=b.function=b.enum=b.effect=void 0;b.datetimeRegex=Zl;b.custom=Hl;var R=Ds(),qs=Ls(),z=Ul(),w=yo(),A=Vn(),qe=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},ql=(r,e)=>{if((0,w.isValid)(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new R.ZodError(r.common.issues);return this._error=t,this._error}}};function H(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:c}=r;return o.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:c??t??a.defaultError}},description:s}}var V=class{get description(){return this._def.description}_getType(e){return(0,A.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,A.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new w.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,A.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if((0,w.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)},s=this._parseSync({data:e,path:n.path,parent:n});return ql(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return(0,w.isValid)(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>(0,w.isValid)(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,A.getParsedType)(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await((0,w.isAsync)(s)?s:Promise.resolve(s));return ql(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:R.ZodIssueCode.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new je({schema:this,typeName:B.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ue.create(this,this._def)}nullable(){return it.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return wt.create(this)}promise(){return Ft.create(this,this._def)}or(e){return _r.create([this,e],this._def)}and(e){return kr.create(this,e,this._def)}transform(e){return new je({...H(this._def),schema:this,typeName:B.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new Ir({...H(this._def),innerType:this,defaultValue:t,typeName:B.ZodDefault})}brand(){return new Jn({typeName:B.ZodBranded,type:this,...H(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new Rr({...H(this._def),innerType:this,catchValue:t,typeName:B.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Yn.create(this,e)}readonly(){return Er.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};b.ZodType=V;b.Schema=V;b.ZodSchema=V;var Sp=/^c[^\s-]{8,}$/i,Tp=/^[0-9a-z]+$/,xp=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Cp=/^[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,Ip=/^[a-z0-9_-]{21}$/i,Rp=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ep=/^[-+]?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)?)??$/,Ap=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,$p="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",vo,Pp=/^(?:(?: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])$/,jp=/^(?:(?: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])$/,Op=/^(([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]))$/,Np=/^(([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])$/,Mp=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,zp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Bl="((\\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])))",Dp=new RegExp(`^${Bl}$`);function Kl(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Lp(r){return new RegExp(`^${Kl(r)}$`)}function Zl(r){let e=`${Bl}T${Kl(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Up(r,e){return!!((e==="v4"||!e)&&Pp.test(r)||(e==="v6"||!e)&&Op.test(r))}function qp(r,e){if(!Rp.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function Fp(r,e){return!!((e==="v4"||!e)&&jp.test(r)||(e==="v6"||!e)&&Np.test(r))}var Ut=class r extends V{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==A.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.string,received:i.parsedType}),w.INVALID}let n=new w.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Ap.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"email",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")vo||(vo=new RegExp($p,"u")),vo.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"emoji",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Cp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"uuid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Ip.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"nanoid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Sp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"cuid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Tp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"cuid2",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")xp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"ulid",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"url",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"regex",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Zl(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?Dp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Lp(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Ep.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"duration",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Up(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"ip",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?qp(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"jwt",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?Fp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"cidr",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?Mp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"base64",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?zp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{validation:"base64url",code:R.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):A.util.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:R.ZodIssueCode.invalid_string,...z.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...z.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...z.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...z.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...z.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...z.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...z.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...z.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...z.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...z.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...z.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...z.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...z.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...z.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,...z.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,...z.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...z.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...z.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...z.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...z.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...z.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...z.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...z.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...z.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,z.errorUtil.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};b.ZodString=Ut;Ut.create=r=>new Ut({checks:[],typeName:B.ZodString,coerce:r?.coerce??!1,...H(r)});function Bp(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var mr=class r extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==A.ZodParsedType.number){let i=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.number,received:i.parsedType}),w.INVALID}let n,s=new w.ParseStatus;for(let i of this._def.checks)i.kind==="int"?A.util.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Bp(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.not_finite,message:i.message}),s.dirty()):A.util.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,z.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,z.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,z.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,z.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:z.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:z.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:z.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:z.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:z.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:z.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:z.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:z.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:z.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:z.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&A.util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};b.ZodNumber=mr;mr.create=r=>new mr({checks:[],typeName:B.ZodNumber,coerce:r?.coerce||!1,...H(r)});var gr=class r extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==A.ZodParsedType.bigint)return this._getInvalidInput(e);let n,s=new w.ParseStatus;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):A.util.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.bigint,received:t.parsedType}),w.INVALID}gte(e,t){return this.setLimit("min",e,!0,z.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,z.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,z.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,z.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:z.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:z.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:z.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:z.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:z.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:z.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};b.ZodBigInt=gr;gr.create=r=>new gr({checks:[],typeName:B.ZodBigInt,coerce:r?.coerce??!1,...H(r)});var yr=class extends V{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==A.ZodParsedType.boolean){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.boolean,received:n.parsedType}),w.INVALID}return(0,w.OK)(e.data)}};b.ZodBoolean=yr;yr.create=r=>new yr({typeName:B.ZodBoolean,coerce:r?.coerce||!1,...H(r)});var vr=class r extends V{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==A.ZodParsedType.date){let i=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.date,received:i.parsedType}),w.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(i,{code:R.ZodIssueCode.invalid_date}),w.INVALID}let n=new w.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),(0,w.addIssueToContext)(s,{code:R.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):A.util.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:z.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:z.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};b.ZodDate=vr;vr.create=r=>new vr({checks:[],coerce:r?.coerce||!1,typeName:B.ZodDate,...H(r)});var pn=class extends V{_parse(e){if(this._getType(e)!==A.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.symbol,received:n.parsedType}),w.INVALID}return(0,w.OK)(e.data)}};b.ZodSymbol=pn;pn.create=r=>new pn({typeName:B.ZodSymbol,...H(r)});var br=class extends V{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.undefined,received:n.parsedType}),w.INVALID}return(0,w.OK)(e.data)}};b.ZodUndefined=br;br.create=r=>new br({typeName:B.ZodUndefined,...H(r)});var wr=class extends V{_parse(e){if(this._getType(e)!==A.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.null,received:n.parsedType}),w.INVALID}return(0,w.OK)(e.data)}};b.ZodNull=wr;wr.create=r=>new wr({typeName:B.ZodNull,...H(r)});var qt=class extends V{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,w.OK)(e.data)}};b.ZodAny=qt;qt.create=r=>new qt({typeName:B.ZodAny,...H(r)});var bt=class extends V{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,w.OK)(e.data)}};b.ZodUnknown=bt;bt.create=r=>new bt({typeName:B.ZodUnknown,...H(r)});var He=class extends V{_parse(e){let t=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.never,received:t.parsedType}),w.INVALID}};b.ZodNever=He;He.create=r=>new He({typeName:B.ZodNever,...H(r)});var mn=class extends V{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.void,received:n.parsedType}),w.INVALID}return(0,w.OK)(e.data)}};b.ZodVoid=mn;mn.create=r=>new mn({typeName:B.ZodVoid,...H(r)});var wt=class r extends V{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==A.ZodParsedType.array)return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:t.parsedType}),w.INVALID;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&((0,w.addIssueToContext)(t,{code:o?R.ZodIssueCode.too_big:R.ZodIssueCode.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&((0,w.addIssueToContext)(t,{code:R.ZodIssueCode.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&((0,w.addIssueToContext)(t,{code:R.ZodIssueCode.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new qe(t,o,t.path,a)))).then(o=>w.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new qe(t,o,t.path,a)));return w.ParseStatus.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:z.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:z.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:z.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};b.ZodArray=wt;wt.create=(r,e)=>new wt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:B.ZodArray,...H(e)});function fn(r){if(r instanceof Ie){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ue.create(fn(n))}return new Ie({...r._def,shape:()=>e})}else return r instanceof wt?new wt({...r._def,type:fn(r.element)}):r instanceof Ue?Ue.create(fn(r.unwrap())):r instanceof it?it.create(fn(r.unwrap())):r instanceof st?st.create(r.items.map(e=>fn(e))):r}var Ie=class r extends V{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=A.util.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==A.ZodParsedType.object){let u=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(u,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:u.parsedType}),w.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof He&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||a.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 He){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of a)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")a.length>0&&((0,w.addIssueToContext)(s,{code:R.ZodIssueCode.unrecognized_keys,keys:a}),n.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of a){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,v=await f.value;u.push({key:p,value:v,alwaysSet:f.alwaysSet})}return u}).then(u=>w.ParseStatus.mergeObjectSync(n,u)):w.ParseStatus.mergeObjectSync(n,c)}get shape(){return this._def.shape()}strict(e){return z.errorUtil.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:z.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:B.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of A.util.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of A.util.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return fn(this)}partial(e){let t={};for(let n of A.util.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of A.util.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Ue;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Gl(A.util.objectKeys(this.shape))}};b.ZodObject=Ie;Ie.create=(r,e)=>new Ie({shape:()=>r,unknownKeys:"strip",catchall:He.create(),typeName:B.ZodObject,...H(e)});Ie.strictCreate=(r,e)=>new Ie({shape:()=>r,unknownKeys:"strict",catchall:He.create(),typeName:B.ZodObject,...H(e)});Ie.lazycreate=(r,e)=>new Ie({shape:r,unknownKeys:"strip",catchall:He.create(),typeName:B.ZodObject,...H(e)});var _r=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new R.ZodError(a.ctx.common.issues));return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union,unionErrors:o}),w.INVALID}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of n){let u={...t,common:{...t.common,issues:[]},parent:null},f=c._parseSync({data:t.data,path:t.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 t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new R.ZodError(c));return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union,unionErrors:a}),w.INVALID}}get options(){return this._def.options}};b.ZodUnion=_r;_r.create=(r,e)=>new _r({options:r,typeName:B.ZodUnion,...H(e)});var vt=r=>r instanceof Sr?vt(r.schema):r instanceof je?vt(r.innerType()):r instanceof Tr?[r.value]:r instanceof xr?r.options:r instanceof Cr?A.util.objectValues(r.enum):r instanceof Ir?vt(r._def.innerType):r instanceof br?[void 0]:r instanceof wr?[null]:r instanceof Ue?[void 0,...vt(r.unwrap())]:r instanceof it?[null,...vt(r.unwrap())]:r instanceof Jn||r instanceof Er?vt(r.unwrap()):r instanceof Rr?vt(r._def.innerType):[],Fs=class r extends V{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.object)return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:t.parsedType}),w.INVALID;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):((0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),w.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=vt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:B.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...H(n)})}};b.ZodDiscriminatedUnion=Fs;function bo(r,e){let t=(0,A.getParsedType)(r),n=(0,A.getParsedType)(e);if(r===e)return{valid:!0,data:r};if(t===A.ZodParsedType.object&&n===A.ZodParsedType.object){let s=A.util.objectKeys(e),i=A.util.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let c=bo(r[a],e[a]);if(!c.valid)return{valid:!1};o[a]=c.data}return{valid:!0,data:o}}else if(t===A.ZodParsedType.array&&n===A.ZodParsedType.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],c=bo(o,a);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return t===A.ZodParsedType.date&&n===A.ZodParsedType.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var kr=class extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,w.isAborted)(i)||(0,w.isAborted)(o))return w.INVALID;let a=bo(i.value,o.value);return a.valid?(((0,w.isDirty)(i)||(0,w.isDirty)(o))&&t.dirty(),{status:t.value,value:a.data}):((0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_intersection_types}),w.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};b.ZodIntersection=kr;kr.create=(r,e,t)=>new kr({left:r,right:e,typeName:B.ZodIntersection,...H(t)});var st=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.array)return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:n.parsedType}),w.INVALID;if(n.data.length<this._def.items.length)return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),w.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new qe(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>w.ParseStatus.mergeArray(t,o)):w.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};b.ZodTuple=st;st.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new st({items:r,typeName:B.ZodTuple,rest:null,...H(e)})};var Bs=class r extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.object)return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:n.parsedType}),w.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new qe(n,a,n.path,a)),value:o._parse(new qe(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?w.ParseStatus.mergeObjectAsync(t,s):w.ParseStatus.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof V?new r({keyType:e,valueType:t,typeName:B.ZodRecord,...H(n)}):new r({keyType:Ut.create(),valueType:e,typeName:B.ZodRecord,...H(t)})}};b.ZodRecord=Bs;var gn=class extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.map)return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.map,received:n.parsedType}),w.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,c],u)=>({key:s._parse(new qe(n,a,n.path,[u,"key"])),value:i._parse(new qe(n,c,n.path,[u,"value"]))}));if(n.common.async){let a=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 w.INVALID;(u.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(u.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return w.INVALID;(u.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(u.value,f.value)}return{status:t.value,value:a}}}};b.ZodMap=gn;gn.create=(r,e,t)=>new gn({valueType:e,keyType:r,typeName:B.ZodMap,...H(t)});var yn=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.set)return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.set,received:n.parsedType}),w.INVALID;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&((0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&((0,w.addIssueToContext)(n,{code:R.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return w.INVALID;f.status==="dirty"&&t.dirty(),u.add(f.value)}return{status:t.value,value:u}}let a=[...n.data.values()].map((c,u)=>i._parse(new qe(n,c,n.path,u)));return n.common.async?Promise.all(a).then(c=>o(c)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:z.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:z.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};b.ZodSet=yn;yn.create=(r,e)=>new yn({valueType:r,minSize:null,maxSize:null,typeName:B.ZodSet,...H(e)});var Ks=class r extends V{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.function)return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.function,received:t.parsedType}),w.INVALID;function n(a,c){return(0,w.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,qs.getErrorMap)(),qs.defaultErrorMap].filter(u=>!!u),issueData:{code:R.ZodIssueCode.invalid_arguments,argumentsError:c}})}function s(a,c){return(0,w.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,qs.getErrorMap)(),qs.defaultErrorMap].filter(u=>!!u),issueData:{code:R.ZodIssueCode.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Ft){let a=this;return(0,w.OK)(async function(...c){let u=new R.ZodError([]),f=await a._def.args.parseAsync(c,i).catch(S=>{throw u.addIssue(n(c,S)),u}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw u.addIssue(s(p,S)),u})})}else{let a=this;return(0,w.OK)(function(...c){let u=a._def.args.safeParse(c,i);if(!u.success)throw new R.ZodError([n(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new R.ZodError([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:st.create(e).rest(bt.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||st.create([]).rest(bt.create()),returns:t||bt.create(),typeName:B.ZodFunction,...H(n)})}};b.ZodFunction=Ks;var Sr=class extends V{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};b.ZodLazy=Sr;Sr.create=(r,e)=>new Sr({getter:r,typeName:B.ZodLazy,...H(e)});var Tr=class extends V{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(t,{received:t.data,code:R.ZodIssueCode.invalid_literal,expected:this._def.value}),w.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};b.ZodLiteral=Tr;Tr.create=(r,e)=>new Tr({value:r,typeName:B.ZodLiteral,...H(e)});function Gl(r,e){return new xr({values:r,typeName:B.ZodEnum,...H(e)})}var xr=class r extends V{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,w.addIssueToContext)(t,{expected:A.util.joinValues(n),received:t.parsedType,code:R.ZodIssueCode.invalid_type}),w.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,w.addIssueToContext)(t,{received:t.data,code:R.ZodIssueCode.invalid_enum_value,options:n}),w.INVALID}return(0,w.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};b.ZodEnum=xr;xr.create=Gl;var Cr=class extends V{_parse(e){let t=A.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==A.ZodParsedType.string&&n.parsedType!==A.ZodParsedType.number){let s=A.util.objectValues(t);return(0,w.addIssueToContext)(n,{expected:A.util.joinValues(s),received:n.parsedType,code:R.ZodIssueCode.invalid_type}),w.INVALID}if(this._cache||(this._cache=new Set(A.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=A.util.objectValues(t);return(0,w.addIssueToContext)(n,{received:n.data,code:R.ZodIssueCode.invalid_enum_value,options:s}),w.INVALID}return(0,w.OK)(e.data)}get enum(){return this._def.values}};b.ZodNativeEnum=Cr;Cr.create=(r,e)=>new Cr({values:r,typeName:B.ZodNativeEnum,...H(e)});var Ft=class extends V{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.promise&&t.common.async===!1)return(0,w.addIssueToContext)(t,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.promise,received:t.parsedType}),w.INVALID;let n=t.parsedType===A.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,w.OK)(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};b.ZodPromise=Ft;Ft.create=(r,e)=>new Ft({type:r,typeName:B.ZodPromise,...H(e)});var je=class extends V{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===B.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{(0,w.addIssueToContext)(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return w.INVALID;let c=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return c.status==="aborted"?w.INVALID:c.status==="dirty"||t.value==="dirty"?(0,w.DIRTY)(c.value):c});{if(t.value==="aborted")return w.INVALID;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?w.INVALID:a.status==="dirty"||t.value==="dirty"?(0,w.DIRTY)(a.value):a}}if(s.type==="refinement"){let o=a=>{let c=s.refinement(a,i);if(n.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?w.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?w.INVALID:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,w.isValid)(o))return w.INVALID;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>(0,w.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):w.INVALID);A.util.assertNever(s)}};b.ZodEffects=je;b.ZodTransformer=je;je.create=(r,e,t)=>new je({schema:r,typeName:B.ZodEffects,effect:e,...H(t)});je.createWithPreprocess=(r,e,t)=>new je({schema:e,effect:{type:"preprocess",transform:r},typeName:B.ZodEffects,...H(t)});var Ue=class extends V{_parse(e){return this._getType(e)===A.ZodParsedType.undefined?(0,w.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};b.ZodOptional=Ue;Ue.create=(r,e)=>new Ue({innerType:r,typeName:B.ZodOptional,...H(e)});var it=class extends V{_parse(e){return this._getType(e)===A.ZodParsedType.null?(0,w.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};b.ZodNullable=it;it.create=(r,e)=>new it({innerType:r,typeName:B.ZodNullable,...H(e)});var Ir=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===A.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};b.ZodDefault=Ir;Ir.create=(r,e)=>new Ir({innerType:r,typeName:B.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...H(e)});var Rr=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,w.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new R.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new R.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};b.ZodCatch=Rr;Rr.create=(r,e)=>new Rr({innerType:r,typeName:B.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...H(e)});var vn=class extends V{_parse(e){if(this._getType(e)!==A.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,w.addIssueToContext)(n,{code:R.ZodIssueCode.invalid_type,expected:A.ZodParsedType.nan,received:n.parsedType}),w.INVALID}return{status:"valid",value:e.data}}};b.ZodNaN=vn;vn.create=r=>new vn({typeName:B.ZodNaN,...H(r)});b.BRAND=Symbol("zod_brand");var Jn=class extends V{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};b.ZodBranded=Jn;var Yn=class r extends V{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?w.INVALID:i.status==="dirty"?(t.dirty(),(0,w.DIRTY)(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?w.INVALID:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:B.ZodPipeline})}};b.ZodPipeline=Yn;var Er=class extends V{_parse(e){let t=this._def.innerType._parse(e),n=s=>((0,w.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,w.isAsync)(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};b.ZodReadonly=Er;Er.create=(r,e)=>new Er({innerType:r,typeName:B.ZodReadonly,...H(e)});function Fl(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Hl(r,e={},t){return r?qt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Fl(e,n),c=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:c})}});if(!i){let o=Fl(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):qt.create()}b.late={object:Ie.lazycreate};var B;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(B||(b.ZodFirstPartyTypeKind=B={}));var Kp=(r,e={message:`Input not instance of ${r.name}`})=>Hl(t=>t instanceof r,e);b.instanceof=Kp;var Vl=Ut.create;b.string=Vl;var Wl=mr.create;b.number=Wl;var Zp=vn.create;b.nan=Zp;var Gp=gr.create;b.bigint=Gp;var Jl=yr.create;b.boolean=Jl;var Hp=vr.create;b.date=Hp;var Vp=pn.create;b.symbol=Vp;var Wp=br.create;b.undefined=Wp;var Jp=wr.create;b.null=Jp;var Yp=qt.create;b.any=Yp;var Xp=bt.create;b.unknown=Xp;var Qp=He.create;b.never=Qp;var em=mn.create;b.void=em;var tm=wt.create;b.array=tm;var rm=Ie.create;b.object=rm;var nm=Ie.strictCreate;b.strictObject=nm;var sm=_r.create;b.union=sm;var im=Fs.create;b.discriminatedUnion=im;var om=kr.create;b.intersection=om;var am=st.create;b.tuple=am;var lm=Bs.create;b.record=lm;var cm=gn.create;b.map=cm;var um=yn.create;b.set=um;var dm=Ks.create;b.function=dm;var hm=Sr.create;b.lazy=hm;var fm=Tr.create;b.literal=fm;var pm=xr.create;b.enum=pm;var mm=Cr.create;b.nativeEnum=mm;var gm=Ft.create;b.promise=gm;var Yl=je.create;b.effect=Yl;b.transformer=Yl;var ym=Ue.create;b.optional=ym;var vm=it.create;b.nullable=vm;var bm=je.createWithPreprocess;b.preprocess=bm;var wm=Yn.create;b.pipeline=wm;var _m=()=>Vl().optional();b.ostring=_m;var km=()=>Wl().optional();b.onumber=km;var Sm=()=>Jl().optional();b.oboolean=Sm;b.coerce={string:(r=>Ut.create({...r,coerce:!0})),number:(r=>mr.create({...r,coerce:!0})),boolean:(r=>yr.create({...r,coerce:!0})),bigint:(r=>gr.create({...r,coerce:!0})),date:(r=>vr.create({...r,coerce:!0}))};b.NEVER=w.INVALID});var wo=ee(Fe=>{"use strict";var Tm=Fe&&Fe.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),bn=Fe&&Fe.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Tm(e,r,t)};Object.defineProperty(Fe,"__esModule",{value:!0});bn(Ls(),Fe);bn(yo(),Fe);bn(Dl(),Fe);bn(Vn(),Fe);bn(Xl(),Fe);bn(Ds(),Fe)});var tc=ee(Re=>{"use strict";var Ql=Re&&Re.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),xm=Re&&Re.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Cm=Re&&Re.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&Ql(e,r,t);return xm(e,r),e},Im=Re&&Re.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Ql(e,r,t)};Object.defineProperty(Re,"__esModule",{value:!0});Re.z=void 0;var ec=Cm(wo());Re.z=ec;Im(wo(),Re);Re.default=ec});var be=ee(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.RepoDocReadResultMsg=d.RepoDocReadMsg=d.RepoDocsResultMsg=d.RepoDocsMsg=d.ChatLoadResultMsg=d.ChatLoadMsg=d.ChatListResultMsg=d.ChatListMsg=d.ChatUsageMsg=d.ChatStreamMsg=d.JiraUsersResultMsg=d.DeployClaimResultMsg=d.DeployClaimMsg=d.RuleDiagnoseResultMsg=d.ProjectTestResultMsg=d.RunStatusMsg=d.RunUsageMsg=d.RunLogMsg=d.RunClaimMsg=d.HeartbeatMsg=d.HelloMsg=d.RuleConfig=d.ProjectConfig=d.ActionConfig=d.DeployAction=d.EnvironmentConfig=d.PromotionMode=d.DeployStep=d.RespondAction=d.ImplementAction=d.PlanOnlyAction=d.TriggerConfig=d.StatusChangedTrigger=d.CommentKeywordTrigger=d.LabelAddedTrigger=d.ActionType=d.TriggerType=d.ACTIVE_RUN_STATUSES=d.RunStatus=d.needsInputMarkerIn=d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=d.NEEDS_INPUT_COMMENT_MARKER=d.NEEDS_INPUT_LABEL=d.NEEDS_INPUT_MARKER=d.BRANCH_DEPLOY_ISSUE_KEY=d.REQUIRED_AGENT_CAPABILITIES=d.DEFAULT_AGENT_ID=d.REGISTERED_AGENTS=d.PROTOCOL_VERSION=d.GITHUB_TOKEN_PERMISSIONS=void 0;d.RunResolveConflictResultMsg=d.RunResolveConflictMsg=d.RunnerUpdateMsg=d.RepoDocSaveResultMsg=d.RepoDocSaveMsg=d.SetupClaudeMdSaveResultMsg=d.SetupClaudeMdSaveMsg=d.SetupClaudeMdGenerateResultMsg=d.SetupClaudeMdGenerateMsg=d.SetupStatusResultMsg=d.SetupStatusMsg=d.DeploySuggestResultMsg=d.EnvPreflightResultMsg=d.EnvPreflightMsg=d.ChatCreateTicketResultMsg=d.ChatCreateTicketMsg=d.ChatTurnResultMsg=d.ChatTurnMsg=d.ChatFile=d.TeamCredsResultMsg=d.TeamCredsMsg=d.KnowledgeSaveResultMsg=d.KnowledgeSaveMsg=d.KnowledgeListResultMsg=d.KnowledgeFile=d.KnowledgeListMsg=d.AuditReviewResultMsg=d.AuditReviewMsg=d.AuditGetResultMsg=d.AuditGetMsg=d.AuditListResultMsg=d.AuditStatsResultMsg=d.AuditStatsMsg=d.AuditListMsg=d.AuditStartResultMsg=d.AuditStartMsg=d.AuditRecord=d.AuditFinding=d.AuditScope=d.AuditSeverity=d.AuditRole=d.EpicSuggestResultMsg=d.EpicSuggestMsg=d.EpicListResultMsg=d.EpicChild=d.EpicListMsg=d.BoardTriggerResultMsg=d.BoardTriggerMsg=d.BoardFetchResultMsg=d.BoardFetchMsg=void 0;d.DEFAULT_DEPLOY_SUGGEST_PROMPT_TEMPLATE=d.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=d.DEPLOY_FIX_PROMPT_TEMPLATE=d.PROMPT_PRESETS=d.DEFAULT_RESPOND_PROMPT_TEMPLATE=d.BUGFIX_IMPLEMENT_PROMPT_TEMPLATE=d.BUG_INVESTIGATION_PROMPT_TEMPLATE=d.TECHNICAL_PLAN_PROMPT_TEMPLATE=d.MEMORY_UPDATE_PROMPT=d.DEFAULT_IMPLEMENT_PROMPT_TEMPLATE=d.WRITE_TESTS_PROMPT=d.DEFAULT_PLAN_PROMPT_TEMPLATE=d.EnrollResponse=d.EnrollRequest=d.ServerToRunnerMsg=d.JiraUsersMsg=d.DeploySuggestMsg=d.DeployFixMsg=d.DeployStartMsg=d.RunRetryPushMsg=d.RunRejectedMsg=d.RunApprovedMsg=d.RunCancelMsg=d.RuleDiagnoseMsg=d.ProjectTestMsg=d.RunClaimResultMsg=d.ConfigMsg=d.HelloAckMsg=d.RunnerToServerMsg=d.AutopilotReportMsg=d.AutopilotNextResultMsg=d.AutopilotNextMsg=d.RunnerUpdateResultMsg=d.AgentProfilesResultMsg=d.AgentProfilesMsg=d.RunPrConflictMsg=void 0;d.missingAgentCapabilities=Rm;d.parseRunnerMsg=Am;d.parseServerMsg=$m;var l=tc();d.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."};d.PROTOCOL_VERSION="1.40";d.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}];d.DEFAULT_AGENT_ID="claude-code";d.REQUIRED_AGENT_CAPABILITIES={plan_only:["readOnlyJail","sessionResume"],respond:["readOnlyJail"],implement:["editNoShellJail","sessionResume"],deploy:[],chat:["readOnlyJail","sessionResume"],assist:["readOnlyJail"]};function Rm(r,e){let t=d.REGISTERED_AGENTS.find(n=>n.id===r);return t?(d.REQUIRED_AGENT_CAPABILITIES[e]??[]).filter(n=>!t.capabilities[n]):null}d.BRANCH_DEPLOY_ISSUE_KEY="(branch deploy)";d.NEEDS_INPUT_MARKER="NEEDS-INPUT";d.NEEDS_INPUT_LABEL="agent-needs-input";d.NEEDS_INPUT_COMMENT_MARKER="Allwright needs your input";d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS=["TicketPilot needs your input"];var Em=r=>r.includes(d.NEEDS_INPUT_COMMENT_MARKER)||d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));d.needsInputMarkerIn=Em;d.RunStatus=l.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);d.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];d.TriggerType=l.z.enum(["label_added","comment_keyword","status_changed"]);d.ActionType=l.z.enum(["plan_only","implement","respond","deploy"]);d.LabelAddedTrigger=l.z.object({type:l.z.literal("label_added"),label:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-planned"),failedLabel:l.z.string().min(1).default("agent-failed")});d.CommentKeywordTrigger=l.z.object({type:l.z.literal("comment_keyword"),keyword:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-implemented"),failedLabel:l.z.string().min(1).default("agent-failed")});d.StatusChangedTrigger=l.z.object({type:l.z.literal("status_changed"),status:l.z.string().min(1),doneLabel:l.z.string().min(1).default("agent-deployed"),failedLabel:l.z.string().min(1).default("agent-failed")});d.TriggerConfig=l.z.discriminatedUnion("type",[d.LabelAddedTrigger,d.CommentKeywordTrigger,d.StatusChangedTrigger]);d.PlanOnlyAction=l.z.object({type:l.z.literal("plan_only"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(3600).default(900),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default("")});d.ImplementAction=l.z.object({type:l.z.literal("implement"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(7200).default(1800),maxTurns:l.z.number().int().positive().max(500).default(120),requireApproval:l.z.boolean().default(!0),branchTemplate:l.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:l.z.string().min(1).default("main"),jiraTransition:l.z.string().optional(),jiraTransitionOnStart:l.z.string().optional(),jiraTransitionOnMerge:l.z.string().optional(),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default(""),updateMemory:l.z.boolean().default(!1),writeTests:l.z.boolean().default(!0),runTests:l.z.boolean().default(!0),mergeOnApprove:l.z.boolean().default(!0),mergeMethod:l.z.enum(["squash","merge","rebase"]).default("squash")});d.RespondAction=l.z.object({type:l.z.literal("respond"),promptTemplate:l.z.string().min(1),timeoutSeconds:l.z.number().int().positive().max(3600).default(600),agent:l.z.string().default(d.DEFAULT_AGENT_ID),model:l.z.string().default("")});d.DeployStep=l.z.object({name:l.z.string().min(1).max(120),run:l.z.string().min(1).max(4e3),continueOnError:l.z.boolean().default(!1)});d.PromotionMode=l.z.enum(["deploy_only","merge_and_deploy"]);d.EnvironmentConfig=l.z.object({id:l.z.string(),projectId:l.z.string(),name:l.z.string(),rank:l.z.number().int().nonnegative(),auditBeforeDeploy:l.z.enum(["","security","testing"]).default(""),branch:l.z.string().default(""),publicUrl:l.z.string().default(""),useDedicatedCheckout:l.z.boolean().default(!1),promotionMode:d.PromotionMode.default("deploy_only"),ticketBranchTemplate:l.z.string().default("agent/{{issueKey}}"),steps:l.z.array(d.DeployStep).default([]),workdir:l.z.string().default(""),timeoutSeconds:l.z.number().int().positive().max(21600).default(1800),requiredSecrets:l.z.array(l.z.string()).default([]),requireApproval:l.z.boolean().default(!1),requireSyncCheck:l.z.boolean().default(!1),previousEnvBranch:l.z.string().optional(),deployFromColumn:l.z.string().default(""),deployToColumn:l.z.string().default("")});d.DeployAction=l.z.object({type:l.z.literal("deploy"),envSelection:l.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:l.z.string().optional(),requireStatus:l.z.string().optional()});d.ActionConfig=l.z.discriminatedUnion("type",[d.PlanOnlyAction,d.ImplementAction,d.RespondAction,d.DeployAction]);d.ProjectConfig=l.z.object({id:l.z.string(),name:l.z.string(),jiraProjectKey:l.z.string(),repoName:l.z.string(),jiraSiteUrl:l.z.string().default(""),defaultAgent:l.z.string().default("claude-code"),componentRoutes:l.z.array(l.z.object({component:l.z.string().min(1),repoName:l.z.string().min(1)})).default([])});d.RuleConfig=l.z.object({id:l.z.string(),projectId:l.z.string(),name:l.z.string(),enabled:l.z.boolean(),trigger:d.TriggerConfig,action:d.ActionConfig});d.HelloMsg=l.z.object({type:l.z.literal("hello"),protocolVersion:l.z.string(),runnerVersion:l.z.string(),platform:l.z.string(),justBooted:l.z.boolean().optional()});d.HeartbeatMsg=l.z.object({type:l.z.literal("heartbeat"),ts:l.z.string()});d.RunClaimMsg=l.z.object({type:l.z.literal("run.claim"),requestId:l.z.string(),ruleId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),triggerFingerprint:l.z.string(),dedupKey:l.z.string().optional(),triggeredByAccountId:l.z.string().optional()});d.RunLogMsg=l.z.object({type:l.z.literal("run.log"),runId:l.z.string(),seq:l.z.number().int().nonnegative(),ts:l.z.string(),level:l.z.enum(["info","warn","error","agent"]),message:l.z.string().max(16384)});d.RunUsageMsg=l.z.object({type:l.z.literal("run.usage"),runId:l.z.string(),inputTokens:l.z.number().int().nonnegative(),outputTokens:l.z.number().int().nonnegative(),cacheReadTokens:l.z.number().int().nonnegative().optional(),costUsd:l.z.number().nonnegative().optional(),turns:l.z.number().int().nonnegative().optional()});d.RunStatusMsg=l.z.object({type:l.z.literal("run.status"),runId:l.z.string(),status:d.RunStatus,error:l.z.string().optional(),errorKind:l.z.enum(["guard"]).optional(),costUsd:l.z.number().nonnegative().optional(),inputTokens:l.z.number().int().nonnegative().optional(),outputTokens:l.z.number().int().nonnegative().optional(),resultSummary:l.z.string().max(2e3).optional(),billingMode:l.z.enum(["subscription","api","unknown"]).optional(),model:l.z.string().max(200).optional(),prUrl:l.z.string().optional(),headSha:l.z.string().optional(),deployedRef:l.z.string().optional(),retryAvailable:l.z.boolean().optional()});d.ProjectTestResultMsg=l.z.object({type:l.z.literal("project.test.result"),requestId:l.z.string(),ok:l.z.boolean(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string(),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")}))});d.RuleDiagnoseResultMsg=l.z.object({type:l.z.literal("rule.diagnose.result"),requestId:l.z.string(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string(),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")})),matchedCount:l.z.number().int().nonnegative(),excludedCount:l.z.number().int().nonnegative(),excludedSample:l.z.array(l.z.string()).max(5)});d.DeployClaimMsg=l.z.object({type:l.z.literal("deploy.claim"),requestId:l.z.string(),projectId:l.z.string(),ruleId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),environmentName:l.z.string(),requestedByAccountId:l.z.string().optional(),requestedByDisplayName:l.z.string().default(""),dedupKey:l.z.string(),triggerFingerprint:l.z.string()});d.DeployClaimResultMsg=l.z.object({type:l.z.literal("deploy.claim.result"),requestId:l.z.string(),accepted:l.z.boolean(),runId:l.z.string().optional(),environment:d.EnvironmentConfig.optional(),reason:l.z.string().optional(),code:l.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});d.JiraUsersResultMsg=l.z.object({type:l.z.literal("jira.users.result"),requestId:l.z.string(),ok:l.z.boolean(),users:l.z.array(l.z.object({accountId:l.z.string(),displayName:l.z.string(),email:l.z.string().default(""),active:l.z.boolean().default(!0)})).default([]),error:l.z.string().optional()});d.ChatStreamMsg=l.z.object({type:l.z.literal("chat.stream"),requestId:l.z.string(),seq:l.z.number().int().nonnegative(),text:l.z.string().max(8e3)});d.ChatUsageMsg=l.z.object({type:l.z.literal("chat.usage"),requestId:l.z.string(),inputTokens:l.z.number().int().nonnegative(),outputTokens:l.z.number().int().nonnegative(),cacheReadTokens:l.z.number().int().nonnegative().optional(),turns:l.z.number().int().nonnegative().optional()});d.ChatListMsg=l.z.object({type:l.z.literal("chat.list"),requestId:l.z.string(),projectId:l.z.string()});d.ChatListResultMsg=l.z.object({type:l.z.literal("chat.list.result"),requestId:l.z.string(),sessions:l.z.array(l.z.object({sessionId:l.z.string(),title:l.z.string().default(""),updatedAt:l.z.string().default(""),messageCount:l.z.number().int().nonnegative().default(0)})).default([])});d.ChatLoadMsg=l.z.object({type:l.z.literal("chat.load"),requestId:l.z.string(),sessionId:l.z.string()});d.ChatLoadResultMsg=l.z.object({type:l.z.literal("chat.load.result"),requestId:l.z.string(),ok:l.z.boolean(),projectId:l.z.string().default(""),messages:l.z.array(l.z.object({role:l.z.enum(["user","agent"]),text:l.z.string()})).default([]),error:l.z.string().optional()});d.RepoDocsMsg=l.z.object({type:l.z.literal("repo.docs"),requestId:l.z.string(),projectId:l.z.string()});d.RepoDocsResultMsg=l.z.object({type:l.z.literal("repo.docs.result"),requestId:l.z.string(),ok:l.z.boolean(),docs:l.z.array(l.z.object({path:l.z.string(),sizeBytes:l.z.number().int().nonnegative().default(0),updatedAt:l.z.string().default("")})).default([]),error:l.z.string().optional()});d.RepoDocReadMsg=l.z.object({type:l.z.literal("repo.doc.read"),requestId:l.z.string(),projectId:l.z.string(),path:l.z.string().max(400)});d.RepoDocReadResultMsg=l.z.object({type:l.z.literal("repo.doc.read.result"),requestId:l.z.string(),ok:l.z.boolean(),path:l.z.string().default(""),content:l.z.string().default(""),truncated:l.z.boolean().default(!1),error:l.z.string().optional()});d.BoardFetchMsg=l.z.object({type:l.z.literal("board.fetch"),requestId:l.z.string(),projectId:l.z.string()});d.BoardFetchResultMsg=l.z.object({type:l.z.literal("board.fetch.result"),requestId:l.z.string(),ok:l.z.boolean(),browseBaseUrl:l.z.string().default(""),columns:l.z.array(l.z.object({name:l.z.string(),issues:l.z.array(l.z.object({key:l.z.string(),summary:l.z.string(),labels:l.z.array(l.z.string()).default([])})).default([])})).default([]),error:l.z.string().optional()});d.BoardTriggerMsg=l.z.object({type:l.z.literal("board.trigger"),requestId:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),comment:l.z.string().max(2e3).default(""),removeLabel:l.z.string().default(""),requestedBy:l.z.string().default(""),requestedByEmail:l.z.string().default(""),reimplement:l.z.boolean().default(!1)});d.BoardTriggerResultMsg=l.z.object({type:l.z.literal("board.trigger.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional()});d.EpicListMsg=l.z.object({type:l.z.literal("epic.list"),requestId:l.z.string(),projectId:l.z.string(),epicKey:l.z.string().default("")});d.EpicChild=l.z.object({key:l.z.string(),summary:l.z.string(),status:l.z.string(),statusCategory:l.z.string(),labels:l.z.array(l.z.string()).default([])});d.EpicListResultMsg=l.z.object({type:l.z.literal("epic.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),epics:l.z.array(l.z.object({key:l.z.string(),summary:l.z.string(),status:l.z.string()})).default([]),children:l.z.array(d.EpicChild).default([])});d.EpicSuggestMsg=l.z.object({type:l.z.literal("epic.suggest"),requestId:l.z.string(),projectId:l.z.string(),epicKey:l.z.string().min(1),model:l.z.string().default("")});d.EpicSuggestResultMsg=l.z.object({type:l.z.literal("epic.suggest.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),issueKey:l.z.string().default(""),reason:l.z.string().default(""),considered:l.z.number().int().default(0)});d.AuditRole=l.z.enum(["security","testing","architecture"]);d.AuditSeverity=l.z.enum(["critical","high","medium","low","info"]);d.AuditScope=l.z.object({kind:l.z.enum(["repo","ticket","branch"]).default("repo"),ref:l.z.string().default("")});d.AuditFinding=l.z.object({id:l.z.string().min(1),title:l.z.string().min(1),ruleId:l.z.string().max(20).default(""),severity:d.AuditSeverity,area:l.z.string().default(""),evidence:l.z.array(l.z.object({file:l.z.string().min(1),line:l.z.number().int().positive().optional(),note:l.z.string().default("")})).min(1),fix:l.z.string().default("")});d.AuditRecord=l.z.object({id:l.z.string(),role:d.AuditRole,createdAt:l.z.string(),model:l.z.string().default(""),summary:l.z.string().default(""),packNames:l.z.array(l.z.string()).default([]),findings:l.z.array(d.AuditFinding).default([]),costUsd:l.z.number().default(0),review:l.z.object({selected:l.z.array(l.z.string()),updatedAt:l.z.string()}).optional(),verdicts:l.z.record(l.z.object({verdict:l.z.enum(["valid","false-positive","wont-fix"]),note:l.z.string().default(""),by:l.z.string().default(""),at:l.z.string().default("")})).default({}),lessonsWritten:l.z.array(l.z.string()).default([]),ticketed:l.z.record(l.z.string()).default({}),scope:d.AuditScope.default({kind:"repo",ref:""}),testRun:l.z.array(l.z.object({command:l.z.string(),exitCode:l.z.number().int(),durationMs:l.z.number().int().default(0),tail:l.z.string().default("")})).optional()});d.AuditStartMsg=l.z.object({type:l.z.literal("audit.start"),requestId:l.z.string(),projectId:l.z.string(),role:d.AuditRole,model:l.z.string().default(""),scope:d.AuditScope.default({kind:"repo",ref:""})});d.AuditStartResultMsg=l.z.object({type:l.z.literal("audit.start.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditListMsg=l.z.object({type:l.z.literal("audit.list"),requestId:l.z.string(),projectId:l.z.string()});d.AuditStatsMsg=l.z.object({type:l.z.literal("audit.stats"),requestId:l.z.string(),projectIds:l.z.array(l.z.string()).max(200).default([]),since:l.z.string().default("")});d.AuditStatsResultMsg=l.z.object({type:l.z.literal("audit.stats.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),byProject:l.z.record(l.z.object({audits:l.z.number().int().default(0),findings:l.z.number().int().default(0),valid:l.z.number().int().default(0),falsePositive:l.z.number().int().default(0),wontFix:l.z.number().int().default(0),unreviewed:l.z.number().int().default(0)})).default({})});d.AuditListResultMsg=l.z.object({type:l.z.literal("audit.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audits:l.z.array(l.z.object({id:l.z.string(),role:d.AuditRole,createdAt:l.z.string(),findingCount:l.z.number().int(),bySeverity:l.z.record(l.z.number().int()).default({})})).default([])});d.AuditGetMsg=l.z.object({type:l.z.literal("audit.get"),requestId:l.z.string(),projectId:l.z.string(),auditId:l.z.string()});d.AuditGetResultMsg=l.z.object({type:l.z.literal("audit.get.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditReviewMsg=l.z.object({type:l.z.literal("audit.review"),requestId:l.z.string(),projectId:l.z.string(),auditId:l.z.string(),selected:l.z.array(l.z.string()).optional(),ticketed:l.z.array(l.z.object({findingId:l.z.string(),issueKey:l.z.string()})).default([]),verdicts:l.z.array(l.z.object({findingId:l.z.string(),verdict:l.z.enum(["valid","false-positive","wont-fix"]),note:l.z.string().max(2e3).default("")})).default([]),verdictBy:l.z.string().default("")});d.AuditReviewResultMsg=l.z.object({type:l.z.literal("audit.review.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),audit:d.AuditRecord.optional()});d.KnowledgeListMsg=l.z.object({type:l.z.literal("knowledge.list"),requestId:l.z.string(),projectId:l.z.string()});d.KnowledgeFile=l.z.object({role:d.AuditRole,level:l.z.enum(["global","org","project"]),source:l.z.enum(["pack","lessons"]),name:l.z.string(),content:l.z.string(),editable:l.z.boolean().default(!1)});d.KnowledgeListResultMsg=l.z.object({type:l.z.literal("knowledge.list.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),files:l.z.array(d.KnowledgeFile).default([])});d.KnowledgeSaveMsg=l.z.object({type:l.z.literal("knowledge.save"),requestId:l.z.string(),projectId:l.z.string(),role:d.AuditRole,level:l.z.enum(["org","project"]),source:l.z.enum(["pack","lessons"]),name:l.z.string().min(1).max(100),content:l.z.string().max(6e4),append:l.z.boolean().default(!1),by:l.z.string().default("")});d.KnowledgeSaveResultMsg=l.z.object({type:l.z.literal("knowledge.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional()});d.TeamCredsMsg=l.z.object({type:l.z.literal("team.creds"),requestId:l.z.string(),emails:l.z.array(l.z.string()).max(200)});d.TeamCredsResultMsg=l.z.object({type:l.z.literal("team.creds.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),githubShared:l.z.boolean().default(!1),sharedGithubLogin:l.z.string().default(""),entries:l.z.array(l.z.object({email:l.z.string(),jira:l.z.enum(["own","runner-account","missing"]),jiraAs:l.z.string().default(""),github:l.z.enum(["own","shared","missing"]),githubAs:l.z.string().default("")})).default([])});d.ChatFile=l.z.object({name:l.z.string().min(1).max(255),contentBase64:l.z.string().min(1).max(6e6)});d.ChatTurnMsg=l.z.object({type:l.z.literal("chat.turn"),requestId:l.z.string(),projectId:l.z.string(),sessionId:l.z.string().optional(),message:l.z.string().min(1).max(2e4),userName:l.z.string().default(""),model:l.z.string().default(""),files:l.z.array(d.ChatFile).max(8).default([])});d.ChatTurnResultMsg=l.z.object({type:l.z.literal("chat.turn.result"),requestId:l.z.string(),ok:l.z.boolean(),sessionId:l.z.string().default(""),reply:l.z.string().default(""),error:l.z.string().optional(),inputTokens:l.z.number().int().nonnegative().default(0),outputTokens:l.z.number().int().nonnegative().default(0),cacheReadTokens:l.z.number().int().nonnegative().default(0),costUsd:l.z.number().nonnegative().default(0),model:l.z.string().max(200).default("")});d.ChatCreateTicketMsg=l.z.object({type:l.z.literal("chat.create.ticket"),requestId:l.z.string(),projectId:l.z.string(),summary:l.z.string().min(1).max(250),description:l.z.string().default(""),triggerComment:l.z.string().default(""),requestedBy:l.z.string().default(""),requestedByEmail:l.z.string().default(""),asEpic:l.z.boolean().default(!1),children:l.z.array(l.z.object({summary:l.z.string().min(1),description:l.z.string().default("")})).max(20).default([]),files:l.z.array(d.ChatFile).max(8).default([])});d.ChatCreateTicketResultMsg=l.z.object({type:l.z.literal("chat.create.ticket.result"),requestId:l.z.string(),ok:l.z.boolean(),issueKey:l.z.string().default(""),error:l.z.string().optional(),childKeys:l.z.array(l.z.string()).default([])});d.EnvPreflightMsg=l.z.object({type:l.z.literal("env.preflight"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string().default(""),steps:l.z.array(d.DeployStep).default([]),requiredSecrets:l.z.array(l.z.string()).default([]),workdir:l.z.string().default(""),branch:l.z.string().default(""),publicUrl:l.z.string().default("")});d.EnvPreflightResultMsg=l.z.object({type:l.z.literal("env.preflight.result"),requestId:l.z.string(),ok:l.z.boolean(),checks:l.z.array(l.z.object({name:l.z.string(),ok:l.z.boolean(),detail:l.z.string().default(""),kind:l.z.enum(["connection","content"]).default("connection"),fix:l.z.array(l.z.string()).default([]),fixNote:l.z.string().default("")})).default([])});d.DeploySuggestResultMsg=l.z.object({type:l.z.literal("deploy.suggest.result"),requestId:l.z.string(),ok:l.z.boolean(),steps:l.z.array(d.DeployStep).default([]),requiredSecrets:l.z.array(l.z.string()).default([]),notes:l.z.string().default(""),error:l.z.string().optional(),docPath:l.z.string().default(""),docContent:l.z.string().max(1e5).default("")});d.SetupStatusMsg=l.z.object({type:l.z.literal("setup.status"),requestId:l.z.string(),repoNames:l.z.array(l.z.string()).max(100).default([])});d.SetupStatusResultMsg=l.z.object({type:l.z.literal("setup.status.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),jiraConfigured:l.z.boolean().default(!1),jiraEmail:l.z.string().default(""),claude:l.z.object({installed:l.z.boolean(),version:l.z.string().default(""),loggedIn:l.z.boolean()}).optional(),githubTokenSet:l.z.boolean().default(!1),githubLogin:l.z.string().default(""),deploysEnabled:l.z.boolean().default(!1),jiraUserCount:l.z.number().int().default(0),repos:l.z.array(l.z.object({repoName:l.z.string(),mapped:l.z.boolean(),pathExists:l.z.boolean().default(!1),isGit:l.z.boolean().default(!1),claudeMd:l.z.boolean().default(!1),deployMd:l.z.boolean().default(!1),testMd:l.z.boolean().default(!1),defaultBranch:l.z.string().default(""),githubToken:l.z.boolean().default(!1),githubTokenOwn:l.z.boolean().default(!1)})).default([])});d.SetupClaudeMdGenerateMsg=l.z.object({type:l.z.literal("setup.claudemd.generate"),requestId:l.z.string(),projectId:l.z.string(),kind:l.z.enum(["claude","deploy","design"]).default("claude"),streamId:l.z.string().default("")});d.SetupClaudeMdGenerateResultMsg=l.z.object({type:l.z.literal("setup.claudemd.generate.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),content:l.z.string().default("")});d.SetupClaudeMdSaveMsg=l.z.object({type:l.z.literal("setup.claudemd.save"),requestId:l.z.string(),projectId:l.z.string(),kind:l.z.enum(["claude","deploy","design"]).default("claude"),overwrite:l.z.boolean().default(!1),content:l.z.string().max(1e5)});d.SetupClaudeMdSaveResultMsg=l.z.object({type:l.z.literal("setup.claudemd.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default("")});d.RepoDocSaveMsg=l.z.object({type:l.z.literal("repo.doc.save"),requestId:l.z.string(),projectId:l.z.string(),relPath:l.z.string().min(1).max(200),overwrite:l.z.boolean().default(!1),content:l.z.string().max(2e5)});d.RepoDocSaveResultMsg=l.z.object({type:l.z.literal("repo.doc.save.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default("")});d.RunnerUpdateMsg=l.z.object({type:l.z.literal("runner.update"),requestId:l.z.string()});d.RunResolveConflictMsg=l.z.object({type:l.z.literal("run.resolve.conflict"),requestId:l.z.string(),runId:l.z.string()});d.RunResolveConflictResultMsg=l.z.object({type:l.z.literal("run.resolve.conflict.result"),requestId:l.z.string(),ok:l.z.boolean(),note:l.z.string().default(""),freeOfCharge:l.z.boolean().default(!1),headSha:l.z.string().default(""),costUsd:l.z.number().nonnegative().optional(),inputTokens:l.z.number().int().nonnegative().optional(),outputTokens:l.z.number().int().nonnegative().optional()});d.RunPrConflictMsg=l.z.object({type:l.z.literal("run.pr.conflict"),runId:l.z.string(),conflicted:l.z.boolean()});d.AgentProfilesMsg=l.z.object({type:l.z.literal("agent.profiles"),requestId:l.z.string()});d.AgentProfilesResultMsg=l.z.object({type:l.z.literal("agent.profiles.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),profiles:l.z.array(l.z.object({agent:l.z.string(),name:l.z.string(),loggedIn:l.z.boolean()})).max(200).default([]),defaultLoggedIn:l.z.boolean().default(!1),agentsWithoutProfiles:l.z.array(l.z.string()).max(20).default([])});d.RunnerUpdateResultMsg=l.z.object({type:l.z.literal("runner.update.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),note:l.z.string().default(""),scheduled:l.z.boolean().default(!1)});d.AutopilotNextMsg=l.z.object({type:l.z.literal("autopilot.next"),requestId:l.z.string()});d.AutopilotNextResultMsg=l.z.object({type:l.z.literal("autopilot.next.result"),requestId:l.z.string(),ok:l.z.boolean(),error:l.z.string().optional(),item:l.z.object({id:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),ruleId:l.z.string(),baseOverride:l.z.string().default(""),branchOverride:l.z.string().default(""),continueBranch:l.z.boolean().default(!1)}).nullable().default(null),pausedUntil:l.z.string().default("")});d.AutopilotReportMsg=l.z.object({type:l.z.literal("autopilot.report"),requestId:l.z.string(),itemId:l.z.string(),outcome:l.z.enum(["claimed","failed","paused"]),runId:l.z.string().default(""),error:l.z.string().default("")});d.RunnerToServerMsg=l.z.discriminatedUnion("type",[d.HelloMsg,d.HeartbeatMsg,d.RunClaimMsg,d.RunLogMsg,d.RunUsageMsg,d.RunStatusMsg,d.ProjectTestResultMsg,d.RuleDiagnoseResultMsg,d.DeployClaimMsg,d.DeploySuggestResultMsg,d.EnvPreflightResultMsg,d.ChatTurnResultMsg,d.ChatStreamMsg,d.ChatUsageMsg,d.ChatCreateTicketResultMsg,d.ChatListResultMsg,d.RepoDocsResultMsg,d.RepoDocReadResultMsg,d.ChatLoadResultMsg,d.BoardFetchResultMsg,d.BoardTriggerResultMsg,d.TeamCredsResultMsg,d.AuditStartResultMsg,d.AuditListResultMsg,d.AuditGetResultMsg,d.AuditReviewResultMsg,d.KnowledgeListResultMsg,d.KnowledgeSaveResultMsg,d.EpicListResultMsg,d.EpicSuggestResultMsg,d.JiraUsersResultMsg,d.SetupStatusResultMsg,d.SetupClaudeMdGenerateResultMsg,d.SetupClaudeMdSaveResultMsg,d.RepoDocSaveResultMsg,d.RunnerUpdateResultMsg,d.AgentProfilesResultMsg,d.RunPrConflictMsg,d.RunResolveConflictResultMsg,d.AuditStatsResultMsg,d.AutopilotNextMsg,d.AutopilotReportMsg]);d.HelloAckMsg=l.z.object({type:l.z.literal("hello.ack"),runnerId:l.z.string(),runnerName:l.z.string(),serverTime:l.z.string()});d.ConfigMsg=l.z.object({type:l.z.literal("config"),projects:l.z.array(d.ProjectConfig),rules:l.z.array(d.RuleConfig),environments:l.z.array(d.EnvironmentConfig).default([]),pollingPaused:l.z.boolean().default(!1)});d.RunClaimResultMsg=l.z.object({type:l.z.literal("run.claim.result"),requestId:l.z.string(),accepted:l.z.boolean(),runId:l.z.string().optional(),reason:l.z.string().optional(),claudeProfile:l.z.string().optional(),actorEmail:l.z.string().optional()});d.ProjectTestMsg=l.z.object({type:l.z.literal("project.test"),requestId:l.z.string(),projectId:l.z.string()});d.RuleDiagnoseMsg=l.z.object({type:l.z.literal("rule.diagnose"),requestId:l.z.string(),ruleId:l.z.string()});d.RunCancelMsg=l.z.object({type:l.z.literal("run.cancel"),runId:l.z.string()});d.RunApprovedMsg=l.z.object({type:l.z.literal("run.approved"),runId:l.z.string(),headSha:l.z.string().optional()});d.RunRejectedMsg=l.z.object({type:l.z.literal("run.rejected"),runId:l.z.string()});d.RunRetryPushMsg=l.z.object({type:l.z.literal("run.retryPush"),runId:l.z.string()});d.DeployStartMsg=l.z.object({type:l.z.literal("deploy.start"),runId:l.z.string(),projectId:l.z.string(),issueKey:l.z.string(),issueSummary:l.z.string().default(""),environment:d.EnvironmentConfig,requestedBy:l.z.string().default(""),attempt:l.z.number().int().positive().default(1)});d.DeployFixMsg=l.z.object({type:l.z.literal("deploy.fix"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string(),steps:l.z.array(l.z.object({name:l.z.string(),run:l.z.string(),continueOnError:l.z.boolean().default(!1)})),failedStep:l.z.string().default(""),errorText:l.z.string().max(8e3).default("")});d.DeploySuggestMsg=l.z.object({type:l.z.literal("deploy.suggest"),requestId:l.z.string(),projectId:l.z.string(),environmentName:l.z.string(),notes:l.z.string().default(""),timeoutSeconds:l.z.number().int().positive().max(1800).default(300)});d.JiraUsersMsg=l.z.object({type:l.z.literal("jira.users"),requestId:l.z.string(),query:l.z.string().default("")});d.ServerToRunnerMsg=l.z.discriminatedUnion("type",[d.HelloAckMsg,d.ConfigMsg,d.RunClaimResultMsg,d.ProjectTestMsg,d.RuleDiagnoseMsg,d.RunCancelMsg,d.RunApprovedMsg,d.RunRejectedMsg,d.RunRetryPushMsg,d.DeployClaimResultMsg,d.DeployStartMsg,d.DeploySuggestMsg,d.DeployFixMsg,d.EnvPreflightMsg,d.ChatTurnMsg,d.ChatCreateTicketMsg,d.ChatListMsg,d.RepoDocsMsg,d.RepoDocReadMsg,d.ChatLoadMsg,d.BoardFetchMsg,d.BoardTriggerMsg,d.TeamCredsMsg,d.AuditStartMsg,d.AuditListMsg,d.AuditGetMsg,d.AuditReviewMsg,d.KnowledgeListMsg,d.KnowledgeSaveMsg,d.EpicListMsg,d.EpicSuggestMsg,d.JiraUsersMsg,d.SetupStatusMsg,d.SetupClaudeMdGenerateMsg,d.SetupClaudeMdSaveMsg,d.RepoDocSaveMsg,d.RunnerUpdateMsg,d.AgentProfilesMsg,d.RunResolveConflictMsg,d.AuditStatsMsg,d.AutopilotNextResultMsg]);d.EnrollRequest=l.z.object({enrollToken:l.z.string().min(10),name:l.z.string().min(1).max(100),platform:l.z.string(),runnerVersion:l.z.string()});d.EnrollResponse=l.z.object({runnerId:l.z.string(),runnerToken:l.z.string(),controlPlaneWsUrl:l.z.string()});function Am(r){return d.RunnerToServerMsg.parse(r)}function $m(r){return d.ServerToRunnerMsg.parse(r)}d.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.
24
24
 
25
25
  Ticket {{issueKey}}: {{summary}}
26
26
 
@@ -234,57 +234,57 @@ Rules for the steps:
234
234
  - Reference secrets as environment variables ($DEPLOY_HOST), never literal values, and list every variable you use in "requiredSecrets".
235
235
  - Prefer commands that are safe to re-run; a deploy may be retried.
236
236
  - Order matters: install, build, test (if cheap), then release.
237
- - If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var cu={};ks(cu,{DELETE_MANIFEST_FILE:()=>wn,MAX_CHANGED_FILES:()=>_n,MAX_CHANGED_LINES:()=>kn,abortMerge:()=>Kt,applyDeleteManifest:()=>wo,branchForIssue:()=>Co,branchSha:()=>Ys,branchesDiffer:()=>Oo,checkDiffSafety:()=>Qn,commitAll:()=>Js,commitMergeResolution:()=>Ao,deleteStaleBranch:()=>So,diffAgainstDefault:()=>Xs,envCheckoutPath:()=>uu,envCheckoutsRoot:()=>lu,fetchBase:()=>Sn,findConflictMarkers:()=>$o,headSha:()=>Pr,mergeBaseIntoWorktree:()=>Eo,mergeTicketBranch:()=>Ro,originUrl:()=>jr,parseOwnerRepo:()=>Ve,prepareEnvCheckout:()=>Io,pruneWorktrees:()=>xo,pushBranch:()=>es,pushEnvBranch:()=>jo,pushWipBranch:()=>_o,removeWorktree:()=>Bt,statusSnapshot:()=>ko,worktreeAdd:()=>To,worktreeAddExisting:()=>Po,worktreeFingerprint:()=>Ws,worktreesRoot:()=>$r});async function U(r,e,t={}){try{let{stdout:n}=await ou("git",["-C",r,...e],{timeout:t.timeoutMs??12e4,maxBuffer:16777216,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}});return n}catch(n){let s=n;throw new Error(`git ${e[0]} failed: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function wo(r){let e={deleted:[],refused:[]},t=le.default.join(r,wn);if(!me.default.existsSync(t))return e;let n=le.default.resolve(r),s=me.default.readFileSync(t,"utf8").split(`
238
- `).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(le.default.isAbsolute(i)){e.refused.push(`${i} - absolute paths are not allowed`);continue}let o=le.default.resolve(n,i);if(o!==n&&!o.startsWith(n+le.default.sep)){e.refused.push(`${i} - escapes the worktree`);continue}let a=le.default.relative(n,o).split(le.default.sep).join("/");if(a===wn)continue;if(au.some(c=>c.test(a))){e.refused.push(`${i} - protected path (CI/hook files are never touched)`);continue}let u;try{u=me.default.lstatSync(o)}catch{e.refused.push(`${i} - no such file`);continue}if(u.isDirectory()){e.refused.push(`${i} - is a directory (list the files inside it instead)`);continue}try{me.default.rmSync(o),e.deleted.push(a)}catch(c){e.refused.push(`${i} - ${c instanceof Error?c.message:"delete failed"}`)}}return me.default.rmSync(t,{force:!0}),e}async function _o(r,e){await U(r,["push","--force","origin",`HEAD:refs/heads/${e}`],{timeoutMs:3e5})}async function Ws(r){let e=await U(r,["status","--porcelain"]),t=await U(r,["diff","--numstat"]),n=e.split(`
237
+ - If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var dc={};ks(dc,{DELETE_MANIFEST_FILE:()=>wn,MAX_CHANGED_FILES:()=>_n,MAX_CHANGED_LINES:()=>kn,abortMerge:()=>Kt,applyDeleteManifest:()=>_o,branchForIssue:()=>Io,branchSha:()=>Ys,branchesDiffer:()=>No,checkDiffSafety:()=>Qn,commitAll:()=>Js,commitMergeResolution:()=>$o,deleteStaleBranch:()=>To,diffAgainstDefault:()=>Xs,envCheckoutPath:()=>uc,envCheckoutsRoot:()=>cc,fetchBase:()=>Sn,findConflictMarkers:()=>Qs,headSha:()=>Pr,mergeBaseIntoWorktree:()=>Ao,mergeTicketBranch:()=>Eo,originUrl:()=>jr,parseOwnerRepo:()=>Ve,prepareEnvCheckout:()=>Ro,pruneWorktrees:()=>Co,pushBranch:()=>es,pushEnvBranch:()=>Oo,pushWipBranch:()=>ko,removeWorktree:()=>Bt,statusSnapshot:()=>So,unresolvedAmong:()=>Po,worktreeAdd:()=>xo,worktreeAddExisting:()=>jo,worktreeFingerprint:()=>Ws,worktreesRoot:()=>$r});async function U(r,e,t={}){try{let{stdout:n}=await ac("git",["-C",r,...e],{timeout:t.timeoutMs??12e4,maxBuffer:16777216,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}});return n}catch(n){let s=n;throw new Error(`git ${e[0]} failed: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function _o(r){let e={deleted:[],refused:[]},t=le.default.join(r,wn);if(!me.default.existsSync(t))return e;let n=le.default.resolve(r),s=me.default.readFileSync(t,"utf8").split(`
238
+ `).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(le.default.isAbsolute(i)){e.refused.push(`${i} - absolute paths are not allowed`);continue}let o=le.default.resolve(n,i);if(o!==n&&!o.startsWith(n+le.default.sep)){e.refused.push(`${i} - escapes the worktree`);continue}let a=le.default.relative(n,o).split(le.default.sep).join("/");if(a===wn)continue;if(lc.some(u=>u.test(a))){e.refused.push(`${i} - protected path (CI/hook files are never touched)`);continue}let c;try{c=me.default.lstatSync(o)}catch{e.refused.push(`${i} - no such file`);continue}if(c.isDirectory()){e.refused.push(`${i} - is a directory (list the files inside it instead)`);continue}try{me.default.rmSync(o),e.deleted.push(a)}catch(u){e.refused.push(`${i} - ${u instanceof Error?u.message:"delete failed"}`)}}return me.default.rmSync(t,{force:!0}),e}async function ko(r,e){await U(r,["push","--force","origin",`HEAD:refs/heads/${e}`],{timeoutMs:3e5})}async function Ws(r){let e=await U(r,["status","--porcelain"]),t=await U(r,["diff","--numstat"]),n=e.split(`
239
239
  `).filter(s=>s.startsWith("??")).map(s=>s.slice(3).trim()).slice(0,500).map(s=>{try{let i=me.default.statSync(le.default.join(r,s));return`${s}:${i.size}:${i.mtimeMs}`}catch{return s}}).join(`
240
240
  `);return`${e}
241
241
  --
242
242
  ${t}
243
243
  --
244
- ${n}`}async function ko(r){let e=(await U(r,["rev-parse","--abbrev-ref","HEAD"])).trim(),t=(await U(r,["log","--oneline","-1"])).trim(),n=(await U(r,["status","--porcelain"])).trim(),s=n?n.split(`
244
+ ${n}`}async function So(r){let e=(await U(r,["rev-parse","--abbrev-ref","HEAD"])).trim(),t=(await U(r,["log","--oneline","-1"])).trim(),n=(await U(r,["status","--porcelain"])).trim(),s=n?n.split(`
245
245
  `):[],i=s.slice(0,15).join(`
246
246
  `),o=s.length>15?`
247
247
  (\u2026 ${s.length-15} more)`:"";return`branch ${e} @ ${t}
248
248
  working tree: ${s.length?`
249
- ${i}${o}`:"clean"}`}function $r(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(me.default.existsSync(le.default.join(Ar.default.homedir(),".cache","ticketpilot"))?le.default.join(Ar.default.homedir(),".cache","ticketpilot"):le.default.join(Ar.default.homedir(),".cache","allwright"));return le.default.join(r,"worktrees")}async function Sn(r,e){try{await U(r,["fetch","origin",e])}catch(t){throw new Error(`could not fetch base branch "${e}" from origin - check the rule's base branch and that this machine can reach the remote (${t instanceof Error?t.message:t})`)}}async function So(r,e){try{let t=await U(r,["worktree","list","--porcelain"]),n=$r(),s=null;for(let i of t.split(`
250
- `))i.startsWith("worktree ")&&(s=i.slice(9).trim()),i===`branch refs/heads/${e}`&&s&&s.startsWith(n)&&await U(r,["worktree","remove","--force",s]);await U(r,["worktree","prune"])}catch{}try{await U(r,["branch","-D",e])}catch{}}async function To(r,e,t,n){me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r,["worktree","add","-b",t,e,`origin/${n}`])}async function Js(r,e){if(await U(r,["add","-A"]),!(await U(r,["status","--porcelain"])).trim())throw new Error("Claude wrote no changes - nothing to commit");await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"commit","-m",e])}async function Qn(r,e){let n=(await U(r,["diff","--name-only",`origin/${e}...HEAD`])).split(`
251
- `).filter(Boolean),s=n.filter(c=>au.some(f=>f.test(c))),i=await U(r,["diff","--shortstat",`origin/${e}...HEAD`]),o=Number(/(\d+) insertion/.exec(i)?.[1]??0),a=Number(/(\d+) deletion/.exec(i)?.[1]??0);return{ok:s.length===0&&n.length<=_n&&o+a<=kn,files:n.length,insertions:o,deletions:a,forbidden:s}}async function es(r,e){await U(r,["fetch","--prune","origin",`+refs/heads/${e}:refs/remotes/origin/${e}`],{timeoutMs:12e4}).catch(()=>U(r,["update-ref","-d",`refs/remotes/origin/${e}`]).catch(()=>{})),await U(r,["push","--force-with-lease","-u","origin",e],{timeoutMs:3e5})}async function Pr(r){return(await U(r,["rev-parse","HEAD"])).trim()}async function Ys(r,e){try{return(await U(r,["rev-parse","--verify",`refs/heads/${e}`])).trim()}catch{return null}}async function Bt(r,e){try{await U(r,["worktree","remove","--force",e])}catch{me.default.rmSync(e,{recursive:!0,force:!0})}}async function xo(r,e=[]){let t=new Set(e.map(s=>le.default.basename(le.default.resolve(s))).filter(s=>s.length>0)),n=$r();if(me.default.existsSync(n))for(let s of me.default.readdirSync(n))t.has(s)||me.default.rmSync(le.default.join(n,s),{recursive:!0,force:!0});for(let s of r)try{await U(s,["worktree","prune"])}catch{}}async function Co(r,e){return await U(r,["fetch","origin","--prune"]).catch(()=>{}),(await U(r,["branch","-r","--list",`*${e}*`])).split(`
252
- `).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Xs(r,e,t=6e4){let s=(await U(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await U(r,["diff","--stat",`${s}...${e}`]),o=await U(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function lu(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(me.default.existsSync(le.default.join(Ar.default.homedir(),".cache","ticketpilot"))?le.default.join(Ar.default.homedir(),".cache","ticketpilot"):le.default.join(Ar.default.homedir(),".cache","allwright"));return le.default.join(r,"env-checkouts")}function nu(r){return r.replace(/[^\w.-]+/g,"_")}function uu(r,e){return le.default.join(lu(),nu(r),nu(e))}async function Io(r){let e=uu(r.repoName,r.envName);return await U(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),me.default.existsSync(le.default.join(e,".git"))?await U(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(me.default.rmSync(e,{recursive:!0,force:!0}),me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r.repoPath,["worktree","prune"]).catch(()=>{}),await U(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await U(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await U(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function Ro(r,e,t){try{await U(r,["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 U(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await U(r,["merge","--abort"]).catch(()=>{}),{ok:!1,reason:`could not merge "${e}" into the environment branch - ${n instanceof Error?n.message:n}. Resolve it manually and deploy again.`}}}async function Eo(r,e){await U(r,["fetch","origin",e],{timeoutMs:3e5});try{return await U(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyUpToDate:!0}}catch{}try{return await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"merge","--no-edit",`origin/${e}`]),{ok:!0,alreadyUpToDate:!1}}catch(t){let s=(await U(r,["diff","--name-only","--diff-filter=U"]).catch(()=>"")).split(`
253
- `).filter(Boolean);return s.length?{ok:!1,conflicts:s}:(await U(r,["merge","--abort"]).catch(()=>{}),{ok:!1,conflicts:null,reason:t instanceof Error?t.message.slice(0,300):String(t)})}}async function Kt(r){await U(r,["merge","--abort"]).catch(()=>{})}async function Ao(r,e){await U(r,["add","-A"]),await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"commit","--no-edit","-m",e])}async function $o(r){let e=new Set;try{let n=await U(r,["grep","-l","-I","-E","^(<{7}|>{7})( |$)"]);for(let s of n.split(`
249
+ ${i}${o}`:"clean"}`}function $r(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(me.default.existsSync(le.default.join(Ar.default.homedir(),".cache","ticketpilot"))?le.default.join(Ar.default.homedir(),".cache","ticketpilot"):le.default.join(Ar.default.homedir(),".cache","allwright"));return le.default.join(r,"worktrees")}async function Sn(r,e){try{await U(r,["fetch","origin",e])}catch(t){throw new Error(`could not fetch base branch "${e}" from origin - check the rule's base branch and that this machine can reach the remote (${t instanceof Error?t.message:t})`)}}async function To(r,e){try{let t=await U(r,["worktree","list","--porcelain"]),n=$r(),s=null;for(let i of t.split(`
250
+ `))i.startsWith("worktree ")&&(s=i.slice(9).trim()),i===`branch refs/heads/${e}`&&s&&s.startsWith(n)&&await U(r,["worktree","remove","--force",s]);await U(r,["worktree","prune"])}catch{}try{await U(r,["branch","-D",e])}catch{}}async function xo(r,e,t,n){me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r,["worktree","add","-b",t,e,`origin/${n}`])}async function Js(r,e){if(await U(r,["add","-A"]),!(await U(r,["status","--porcelain"])).trim())throw new Error("Claude wrote no changes - nothing to commit");await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"commit","-m",e])}async function Qn(r,e){let n=(await U(r,["diff","--name-only",`origin/${e}...HEAD`])).split(`
251
+ `).filter(Boolean),s=n.filter(u=>lc.some(f=>f.test(u))),i=await U(r,["diff","--shortstat",`origin/${e}...HEAD`]),o=Number(/(\d+) insertion/.exec(i)?.[1]??0),a=Number(/(\d+) deletion/.exec(i)?.[1]??0);return{ok:s.length===0&&n.length<=_n&&o+a<=kn,files:n.length,insertions:o,deletions:a,forbidden:s}}async function es(r,e){await U(r,["fetch","--prune","origin",`+refs/heads/${e}:refs/remotes/origin/${e}`],{timeoutMs:12e4}).catch(()=>U(r,["update-ref","-d",`refs/remotes/origin/${e}`]).catch(()=>{})),await U(r,["push","--force-with-lease","-u","origin",e],{timeoutMs:3e5})}async function Pr(r){return(await U(r,["rev-parse","HEAD"])).trim()}async function Ys(r,e){try{return(await U(r,["rev-parse","--verify",`refs/heads/${e}`])).trim()}catch{return null}}async function Bt(r,e){try{await U(r,["worktree","remove","--force",e])}catch{me.default.rmSync(e,{recursive:!0,force:!0})}}async function Co(r,e=[]){let t=new Set(e.map(s=>le.default.basename(le.default.resolve(s))).filter(s=>s.length>0)),n=$r();if(me.default.existsSync(n))for(let s of me.default.readdirSync(n))t.has(s)||me.default.rmSync(le.default.join(n,s),{recursive:!0,force:!0});for(let s of r)try{await U(s,["worktree","prune"])}catch{}}async function Io(r,e){return await U(r,["fetch","origin","--prune"]).catch(()=>{}),(await U(r,["branch","-r","--list",`*${e}*`])).split(`
252
+ `).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Xs(r,e,t=6e4){let s=(await U(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await U(r,["diff","--stat",`${s}...${e}`]),o=await U(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function cc(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(me.default.existsSync(le.default.join(Ar.default.homedir(),".cache","ticketpilot"))?le.default.join(Ar.default.homedir(),".cache","ticketpilot"):le.default.join(Ar.default.homedir(),".cache","allwright"));return le.default.join(r,"env-checkouts")}function sc(r){return r.replace(/[^\w.-]+/g,"_")}function uc(r,e){return le.default.join(cc(),sc(r),sc(e))}async function Ro(r){let e=uc(r.repoName,r.envName);return await U(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),me.default.existsSync(le.default.join(e,".git"))?await U(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(me.default.rmSync(e,{recursive:!0,force:!0}),me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r.repoPath,["worktree","prune"]).catch(()=>{}),await U(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await U(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await U(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function Eo(r,e,t){try{await U(r,["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 U(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await U(r,["merge","--abort"]).catch(()=>{}),{ok:!1,reason:`could not merge "${e}" into the environment branch - ${n instanceof Error?n.message:n}. Resolve it manually and deploy again.`}}}async function Ao(r,e){await U(r,["fetch","origin",e],{timeoutMs:3e5});try{return await U(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyUpToDate:!0}}catch{}try{return await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"merge","--no-edit",`origin/${e}`]),{ok:!0,alreadyUpToDate:!1}}catch(t){let s=(await U(r,["diff","--name-only","--diff-filter=U"]).catch(()=>"")).split(`
253
+ `).filter(Boolean);return s.length?{ok:!1,conflicts:s}:(await U(r,["merge","--abort"]).catch(()=>{}),{ok:!1,conflicts:null,reason:t instanceof Error?t.message.slice(0,300):String(t)})}}async function Kt(r){await U(r,["merge","--abort"]).catch(()=>{})}async function $o(r,e){await U(r,["add","-A"]),await U(r,["-c",`user.name=${Hs}`,"-c",`user.email=${Vs}`,"commit","--no-edit","-m",e])}async function Po(r,e){let t=new Set(await Qs(r));return e.filter(n=>t.has(n))}async function Qs(r){let e=new Set;try{let n=await U(r,["grep","-l","-I","-E","^(<{7}|>{7})( |$)"]);for(let s of n.split(`
254
254
  `).filter(Boolean))e.add(s)}catch{}let t=[];try{t=(await U(r,["grep","-l","-I","-E","^={7}$"])).split(`
255
- `).filter(Boolean).filter(s=>!e.has(s))}catch{}for(let n of t)try{let s=await U(r,["show",`HEAD:${n}`]);/^={7}$/m.test(s)||e.add(n)}catch{e.add(n)}return[...e]}async function Po(r,e,t){me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r,["fetch","origin",t],{timeoutMs:3e5}),await U(r,["worktree","add","--detach",e,`origin/${t}`]),await U(e,["checkout","-B",t,`origin/${t}`])}async function jo(r,e){try{await U(r,["push","origin",e],{timeoutMs:3e5})}catch(t){throw new Error(`could not push "${e}" - ${t instanceof Error?t.message:t}. Someone may have pushed to it since this deploy started; retry.`)}}async function Oo(r,e,t){try{return await ou("git",["-C",r,"diff","--quiet",e,t,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(n){let s=n;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${t}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function jr(r){return(await U(r,["config","--get","remote.origin.url"])).trim()}function Ve(r){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(r)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(r)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(r);return e?{owner:e[1],repo:e[2]}:null}var me,Ar,le,su,iu,ou,Hs,Vs,_n,kn,au,wn,_t=_s(()=>{"use strict";me=E(require("node:fs"),1),Ar=E(require("node:os"),1),le=E(require("node:path"),1),su=require("node:child_process"),iu=require("node:util"),ou=(0,iu.promisify)(su.execFile),Hs="Allwright Agent",Vs="agent@ticketpilot.local",_n=200,kn=2e4,au=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];wn=".ticketpilot-delete"});function Qs(r,e,t){let n=(t??"").trim().toLowerCase(),s=n?r.githubUsers[n]?.token:void 0;if(s)return{token:s,source:"user"};let i=r.repos[e]?.github?.token;return i?{token:i,source:"repo"}:r.github?.token?{token:r.github.token,source:"global"}:null}function Ae(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function pu(r,e){let t=[r.jira,...Object.values(r.repos).map(a=>a.jira)].filter(a=>!!a),n=new Set(t.map(a=>a.email.toLowerCase())),s=!!r.github?.token||Object.values(r.repos).some(a=>a.github?.token),i=r.github?.login??Object.values(r.repos).find(a=>a.github?.login)?.github?.login??"",o=e.map(a=>{let u=a.trim().toLowerCase(),c=r.jiraUsers[u]?"own":n.has(u)?"runner-account":"missing",f=c==="own"?r.jiraUsers[u].email:c==="runner-account"?u:"",p=r.githubUsers[u]?"own":s?"shared":"missing",v=p==="own"?r.githubUsers[u].login??"":p==="shared"?i:"";return{email:u,jira:c,jiraAs:f,github:p,githubAs:v}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var Or=_s(()=>{"use strict"});var zr={};ks(zr,{GitHubClient:()=>$e});var Wm,$e,Ye=_s(()=>{"use strict";Wm=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",$e=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${Wm}${t}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...n!==void 0?{"Content-Type":"application/json"}:{}},body:n===void 0?void 0:JSON.stringify(n)}),i=await s.text(),o=null;try{o=i?JSON.parse(i):null}catch{}if(s.status===401)throw new Error("GitHub rejected the token (401) - expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let a=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${t} -> ${s.status}: ${a}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,t,n){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${t}/pulls`,n);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${t}/pulls?head=${encodeURIComponent(`${e}:${n.head}`)}&state=open`);if(o?.length){let a=o[0];return{number:a.number,url:a.html_url,state:a.state,merged:a.merged??!1,headSha:a.head.sha,mergeableState:null,baseRef:a.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:n.base}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null,baseRef:s.base?.ref??""}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async mergePullRequest(e,t,n,s,i={}){try{return await this.request("PUT",`/repos/${e}/${t}/pulls/${n}/merge`,{merge_method:s,...i.sha?{sha:i.sha}:{},...i.title?{commit_title:i.title}:{}}),{merged:!0}}catch(o){let a=o instanceof Error?o.message:String(o);return a.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.`}:a.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."}:a.includes("-> 403")?{merged:!1,reason:`this runner's GitHub token is not allowed to merge in ${e}/${t}. It needs write access to the repository - or merge the PR yourself.`}:{merged:!1,reason:a}}}async repoAccess(e,t){try{let{data:n}=await this.request("GET",`/repos/${e}/${t}`);return{ok:!0,canPush:!!(n.permissions?.push||n.permissions?.admin)}}catch(n){let s=n instanceof Error?n.message:String(n);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,t,n){await this.request("PATCH",`/repos/${e}/${t}/pulls/${n}`,{state:"closed"})}async deleteBranch(e,t,n){try{await this.request("DELETE",`/repos/${e}/${t}/git/refs/heads/${encodeURIComponent(n)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var Ct=ee((h_,od)=>{"use strict";var sd=["nodebuffer","arraybuffer","fragments"],id=typeof Blob<"u";id&&sd.push("blob");od.exports={BINARY_TYPES:sd,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:id,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var cs=ee((f_,ki)=>{"use strict";var{EMPTY_BUFFER:Fg}=Ct(),va=Buffer[Symbol.species];function Bg(r,e){if(r.length===0)return Fg;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new va(t.buffer,t.byteOffset,n):t}function ad(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function ld(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Kg(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function ba(r){if(ba.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new va(r):ArrayBuffer.isView(r)?e=new va(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),ba.readOnly=!1),e}ki.exports={concat:Bg,mask:ad,toArrayBuffer:Kg,toBuffer:ba,unmask:ld};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");ki.exports.mask=function(e,t,n,s,i){i<48?ad(e,t,n,s,i):r.mask(e,t,n,s,i)},ki.exports.unmask=function(e,t){e.length<32?ld(e,t):r.unmask(e,t)}}catch{}});var dd=ee((p_,cd)=>{"use strict";var ud=Symbol("kDone"),wa=Symbol("kRun"),_a=class{constructor(e){this[ud]=()=>{this.pending--,this[wa]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[wa]()}[wa](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[ud])}}};cd.exports=_a});var jn=ee((m_,md)=>{"use strict";var ds=require("zlib"),hd=cs(),Zg=dd(),{kStatusCode:fd}=Ct(),Gg=Buffer[Symbol.species],Hg=Buffer.from([0,0,255,255]),Ti=Symbol("permessage-deflate"),It=Symbol("total-length"),$n=Symbol("callback"),Zt=Symbol("buffers"),Pn=Symbol("error"),Si,ka=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,!Si){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Si=new Zg(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[$n];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Si.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Si.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=ds.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Ti]=this,this._inflate[It]=0,this._inflate[Zt]=[],this._inflate.on("error",Wg),this._inflate.on("data",pd)}this._inflate[$n]=n,this._inflate.write(e),t&&this._inflate.write(Hg),this._inflate.flush(()=>{let i=this._inflate[Pn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=hd.concat(this._inflate[Zt],this._inflate[It]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[It]=0,this._inflate[Zt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=ds.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[It]=0,this._deflate[Zt]=[],this._deflate.on("data",Vg)}this._deflate[$n]=n,this._deflate.write(e),this._deflate.flush(ds.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=hd.concat(this._deflate[Zt],this._deflate[It]);t&&(i=new Gg(i.buffer,i.byteOffset,i.length-4)),this._deflate[$n]=null,this._deflate[It]=0,this._deflate[Zt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};md.exports=ka;function Vg(r){this[Zt].push(r),this[It]+=r.length}function pd(r){if(this[It]+=r.length,this[Ti]._maxPayload<1||this[It]<=this[Ti]._maxPayload){this[Zt].push(r);return}this[Pn]=new RangeError("Max payload size exceeded"),this[Pn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Pn][fd]=1009,this.removeListener("data",pd),this.reset()}function Wg(r){if(this[Ti]._inflate=null,this[Pn]){this[$n](this[Pn]);return}r[fd]=1007,this[$n](r)}});var On=ee((g_,xi)=>{"use strict";var{isUtf8:gd}=require("buffer"),{hasBlob:Jg}=Ct(),Yg=[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 Xg(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Sa(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Qg(r){return Jg&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}xi.exports={isBlob:Qg,isValidStatusCode:Xg,isValidUTF8:Sa,tokenChars:Yg};if(gd)xi.exports.isValidUTF8=function(r){return r.length<24?Sa(r):gd(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");xi.exports.isValidUTF8=function(e){return e.length<32?Sa(e):r(e)}}catch{}});var Ra=ee((y_,Sd)=>{"use strict";var{Writable:ey}=require("stream"),yd=jn(),{BINARY_TYPES:ty,EMPTY_BUFFER:vd,kStatusCode:ry,kWebSocket:ny}=Ct(),{concat:Ta,toArrayBuffer:sy,unmask:iy}=cs(),{isValidStatusCode:oy,isValidUTF8:bd}=On(),Ci=Buffer[Symbol.species],Ke=0,wd=1,_d=2,kd=3,xa=4,Ca=5,Ii=6,Ia=class extends ey{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||ty[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[ny]=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=Ke}_write(e,t,n){if(this._opcode===8&&this._state==Ke)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new Ci(n.buffer,n.byteOffset+e,n.length-e),new Ci(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new Ci(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case Ke:this.getInfo(e);break;case wd:this.getPayloadLength16(e);break;case _d:this.getPayloadLength64(e);break;case kd:this.getMask();break;case xa:this.getData(e);break;case Ca:case Ii:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[yd.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=wd:this._payloadLength===127?this._state=_d:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=kd:this._state=xa}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=xa}getData(e){let t=vd;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&iy(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let n=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(n);return}if(this._compressed){this._state=Ca,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[yd.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===Ke&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=Ke;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Ta(n,t):this._binaryType==="arraybuffer"?s=sy(Ta(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Ke):(this._state=Ii,setImmediate(()=>{this.emit("message",s,!0),this._state=Ke,this.startLoop(e)}))}else{let s=Ta(n,t);if(!this._skipUTF8Validation&&!bd(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ca||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Ke):(this._state=Ii,setImmediate(()=>{this.emit("message",s,!1),this._state=Ke,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,vd),this.end();else{let n=e.readUInt16BE(0);if(!oy(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new Ci(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!bd(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=Ke;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Ke):(this._state=Ii,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Ke,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[ry]=s,o}};Sd.exports=Ia});var $a=ee((b_,Cd)=>{"use strict";var{Duplex:v_}=require("stream"),{randomFillSync:ay}=require("crypto"),{types:{isUint8Array:ly}}=require("util"),Td=jn(),{EMPTY_BUFFER:uy,kWebSocket:cy,NOOP:dy}=Ct(),{isBlob:Nn,isValidStatusCode:hy}=On(),{mask:xd,toBuffer:Hr}=cs(),Ze=Symbol("kByteLength"),fy=Buffer.alloc(4),Ri=8*1024,Vr,Mn=Ri,Qe=0,py=1,my=2,Ea=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Qe,this.onerror=dy,this[cy]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||fy,t.generateMask?t.generateMask(n):(Mn===Ri&&(Vr===void 0&&(Vr=Buffer.alloc(Ri)),ay(Vr,0,Ri),Mn=0),n[0]=Vr[Mn++],n[1]=Vr[Mn++],n[2]=Vr[Mn++],n[3]=Vr[Mn++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[Ze]!==void 0?a=t[Ze]:(e=Buffer.from(e),a=e.length):(a=e.length,s=t.mask&&t.readOnly&&!o);let u=a;a>=65536?(i+=8,u=127):a>125&&(i+=2,u=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=u,u===126?c.writeUInt16BE(a,2):u===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(xd(e,n,c,i,a),[c]):(xd(e,n,e,0,a),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=uy;else{if(typeof e!="number"||!hy(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string")i.write(t,2);else if(ly(t))i.set(t,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[Ze]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Qe?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Nn(e)?(s=e.size,i=!1):(e=Hr(e),s=e.length,i=Hr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Ze]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Qe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Nn(e)?(s=e.size,i=!1):(e=Hr(e),s=e.length,i=Hr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Ze]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Qe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Td.extensionName],i=t.binary?2:1,o=t.compress,a,u;typeof e=="string"?(a=Buffer.byteLength(e),u=!1):Nn(e)?(a=e.size,u=!1):(e=Hr(e),a=e.length,u=Hr.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[Ze]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:u,rsv1:o};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==Qe?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[Ze],this._state=my,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Aa,this,a,s);return}this._bufferedBytes-=n[Ze];let o=Hr(i);t?this.dispatch(o,t,n,s):(this._state=Qe,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(gy,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Td.extensionName];this._bufferedBytes+=n[Ze],this._state=py,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let u=new Error("The socket was closed while data was being compressed");Aa(this,u,s);return}this._bufferedBytes-=n[Ze],this._state=Qe,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===Qe&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Ze],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Ze],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Cd.exports=Ea;function Aa(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function gy(r,e,t){Aa(r,e,t),r.onerror(e)}});var Nd=ee((w_,Od)=>{"use strict";var{kForOnEventAttribute:hs,kListener:Pa}=Ct(),Id=Symbol("kCode"),Rd=Symbol("kData"),Ed=Symbol("kError"),Ad=Symbol("kMessage"),$d=Symbol("kReason"),zn=Symbol("kTarget"),Pd=Symbol("kType"),jd=Symbol("kWasClean"),Rt=class{constructor(e){this[zn]=null,this[Pd]=e}get target(){return this[zn]}get type(){return this[Pd]}};Object.defineProperty(Rt.prototype,"target",{enumerable:!0});Object.defineProperty(Rt.prototype,"type",{enumerable:!0});var Wr=class extends Rt{constructor(e,t={}){super(e),this[Id]=t.code===void 0?0:t.code,this[$d]=t.reason===void 0?"":t.reason,this[jd]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Id]}get reason(){return this[$d]}get wasClean(){return this[jd]}};Object.defineProperty(Wr.prototype,"code",{enumerable:!0});Object.defineProperty(Wr.prototype,"reason",{enumerable:!0});Object.defineProperty(Wr.prototype,"wasClean",{enumerable:!0});var Dn=class extends Rt{constructor(e,t={}){super(e),this[Ed]=t.error===void 0?null:t.error,this[Ad]=t.message===void 0?"":t.message}get error(){return this[Ed]}get message(){return this[Ad]}};Object.defineProperty(Dn.prototype,"error",{enumerable:!0});Object.defineProperty(Dn.prototype,"message",{enumerable:!0});var fs=class extends Rt{constructor(e,t={}){super(e),this[Rd]=t.data===void 0?null:t.data}get data(){return this[Rd]}};Object.defineProperty(fs.prototype,"data",{enumerable:!0});var yy={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[hs]&&s[Pa]===e&&!s[hs])return;let n;if(r==="message")n=function(i,o){let a=new fs("message",{data:o?i:i.toString()});a[zn]=this,Ei(e,this,a)};else if(r==="close")n=function(i,o){let a=new Wr("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[zn]=this,Ei(e,this,a)};else if(r==="error")n=function(i){let o=new Dn("error",{error:i,message:i.message});o[zn]=this,Ei(e,this,o)};else if(r==="open")n=function(){let i=new Rt("open");i[zn]=this,Ei(e,this,i)};else return;n[hs]=!!t[hs],n[Pa]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Pa]===e&&!t[hs]){this.removeListener(r,t);break}}};Od.exports={CloseEvent:Wr,ErrorEvent:Dn,Event:Rt,EventTarget:yy,MessageEvent:fs};function Ei(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var Ai=ee((__,Md)=>{"use strict";var{tokenChars:ps}=On();function ct(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function vy(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,u=-1,c=-1,f=-1,p=0;for(;p<r.length;p++)if(c=r.charCodeAt(p),o===void 0)if(f===-1&&ps[c]===1)u===-1&&(u=p);else if(p!==0&&(c===32||c===9))f===-1&&u!==-1&&(f=p);else if(c===59||c===44){if(u===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let S=r.slice(u,f);c===44?(ct(e,S,t),t=Object.create(null)):o=S,u=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(f===-1&&ps[c]===1)u===-1&&(u=p);else if(c===32||c===9)f===-1&&u!==-1&&(f=p);else if(c===59||c===44){if(u===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),ct(t,r.slice(u,f),!0),c===44&&(ct(e,o,t),t=Object.create(null),o=void 0),u=f=-1}else if(c===61&&u!==-1&&f===-1)a=r.slice(u,p),u=f=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(ps[c]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);u===-1?u=p:n||(n=!0),s=!1}else if(i)if(ps[c]===1)u===-1&&(u=p);else if(c===34&&u!==-1)i=!1,f=p;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(c===34&&r.charCodeAt(p-1)===61)i=!0;else if(f===-1&&ps[c]===1)u===-1&&(u=p);else if(u!==-1&&(c===32||c===9))f===-1&&(f=p);else if(c===59||c===44){if(u===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let S=r.slice(u,f);n&&(S=S.replace(/\\/g,""),n=!1),ct(t,a,S),c===44&&(ct(e,o,t),t=Object.create(null),o=void 0),a=void 0,u=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(u===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=p);let v=r.slice(u,f);return o===void 0?ct(e,v,t):(a===void 0?ct(t,v,!0):n?ct(t,a,v.replace(/\\/g,"")):ct(t,a,v),ct(e,o,t)),e}function by(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Md.exports={format:by,parse:vy}});var Oi=ee((T_,Vd)=>{"use strict";var wy=require("events"),_y=require("https"),ky=require("http"),Ld=require("net"),Sy=require("tls"),{randomBytes:Ty,createHash:xy}=require("crypto"),{Duplex:k_,Readable:S_}=require("stream"),{URL:ja}=require("url"),Gt=jn(),Cy=Ra(),Iy=$a(),{isBlob:Ry}=On(),{BINARY_TYPES:zd,CLOSE_TIMEOUT:Ey,EMPTY_BUFFER:$i,GUID:Ay,kForOnEventAttribute:Oa,kListener:$y,kStatusCode:Py,kWebSocket:ge,NOOP:Ud}=Ct(),{EventTarget:{addEventListener:jy,removeEventListener:Oy}}=Nd(),{format:Ny,parse:My}=Ai(),{toBuffer:zy}=cs(),qd=Symbol("kAborted"),Na=[8,13],Et=["CONNECTING","OPEN","CLOSING","CLOSED"],Dy=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,ue=class r extends wy{constructor(e,t,n){super(),this._binaryType=zd[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=$i,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Fd(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){zd.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new Cy({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:n.maxBufferedChunks,maxFragments:n.maxFragments,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Iy(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[ge]=this,i[ge]=this,e[ge]=this,s.on("conclude",qy),s.on("drain",Fy),s.on("error",By),s.on("message",Ky),s.on("ping",Zy),s.on("pong",Gy),i.onerror=Hy,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Zd),e.on("data",ji),e.on("end",Gd),e.on("error",Hd),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Gt.extensionName]&&this._extensions[Gt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ne(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Kd(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ma(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||$i,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ma(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||$i,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Ma(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Gt.extensionName]||(s.compress=!1),this._sender.send(e||$i,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ne(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(ue,"CONNECTING",{enumerable:!0,value:Et.indexOf("CONNECTING")});Object.defineProperty(ue.prototype,"CONNECTING",{enumerable:!0,value:Et.indexOf("CONNECTING")});Object.defineProperty(ue,"OPEN",{enumerable:!0,value:Et.indexOf("OPEN")});Object.defineProperty(ue.prototype,"OPEN",{enumerable:!0,value:Et.indexOf("OPEN")});Object.defineProperty(ue,"CLOSING",{enumerable:!0,value:Et.indexOf("CLOSING")});Object.defineProperty(ue.prototype,"CLOSING",{enumerable:!0,value:Et.indexOf("CLOSING")});Object.defineProperty(ue,"CLOSED",{enumerable:!0,value:Et.indexOf("CLOSED")});Object.defineProperty(ue.prototype,"CLOSED",{enumerable:!0,value:Et.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(ue.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(ue.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Oa])return e[$y];return null},set(e){for(let t of this.listeners(r))if(t[Oa]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Oa]:!0})}})});ue.prototype.addEventListener=jy;ue.prototype.removeEventListener=Oy;Vd.exports=ue;function Fd(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Ey,protocolVersion:Na[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Na.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Na.join(", ")})`);let i;if(e instanceof ja)i=e;else try{i=new ja(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",u;if(i.protocol!=="ws:"&&!o&&!a?u=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?u="The URL's pathname is empty":i.hash&&(u="The URL contains a fragment identifier"),u){let x=new SyntaxError(u);if(r._redirects===0)throw x;Pi(r,x);return}let c=o?443:80,f=Ty(16).toString("base64"),p=o?_y.request:ky.request,v=new Set,S;if(s.createConnection=s.createConnection||(o?Uy:Ly),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":f,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(S=new Gt({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Ny({[Gt.extensionName]:S.offer()})),t.length){for(let x of t){if(typeof x!="string"||!Dy.test(x)||v.has(x))throw new SyntaxError("An invalid or duplicated subprotocol was specified");v.add(x)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let x=s.path.split(":");s.socketPath=x[0],s.path=x[1]}let T;if(s.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?s.socketPath:i.host;let x=n&&n.headers;if(n={...n,headers:{}},x)for(let[P,w]of Object.entries(x))n.headers[P.toLowerCase()]=w}else if(r.listenerCount("redirect")===0){let x=a?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!x||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,x||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),T=r._req=p(s),r._redirects&&r.emit("redirect",r.url,T)}else T=r._req=p(s);s.timeout&&T.on("timeout",()=>{Ne(r,T,"Opening handshake has timed out")}),T.on("error",x=>{T===null||T[qd]||(T=r._req=null,Pi(r,x))}),T.on("response",x=>{let P=x.headers.location,w=x.statusCode;if(P&&s.followRedirects&&w>=300&&w<400){if(++r._redirects>s.maxRedirects){Ne(r,T,"Maximum redirects exceeded");return}T.abort();let J;try{J=new ja(P,e)}catch{let D=new SyntaxError(`Invalid URL: ${P}`);Pi(r,D);return}Fd(r,J,t,n)}else r.emit("unexpected-response",T,x)||Ne(r,T,`Unexpected server response: ${x.statusCode}`)}),T.on("upgrade",(x,P,w)=>{if(r.emit("upgrade",x),r.readyState!==ue.CONNECTING)return;T=r._req=null;let J=x.headers.upgrade;if(J===void 0||J.toLowerCase()!=="websocket"){Ne(r,P,"Invalid Upgrade header");return}let O=xy("sha1").update(f+Ay).digest("base64");if(x.headers["sec-websocket-accept"]!==O){Ne(r,P,"Invalid Sec-WebSocket-Accept header");return}let D=x.headers["sec-websocket-protocol"],Q;if(D!==void 0?v.size?v.has(D)||(Q="Server sent an invalid subprotocol"):Q="Server sent a subprotocol but none was requested":v.size&&(Q="Server sent no subprotocol"),Q){Ne(r,P,Q);return}D&&(r._protocol=D);let h=x.headers["sec-websocket-extensions"];if(h!==void 0){if(!S){Ne(r,P,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let m;try{m=My(h)}catch{Ne(r,P,"Invalid Sec-WebSocket-Extensions header");return}let y=Object.keys(m);if(y.length!==1||y[0]!==Gt.extensionName){Ne(r,P,"Server indicated an extension that was not requested");return}try{S.accept(m[Gt.extensionName])}catch{Ne(r,P,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Gt.extensionName]=S}r.setSocket(P,w,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(T,r):T.end()}function Pi(r,e){r._readyState=ue.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Ly(r){return r.path=r.socketPath,Ld.connect(r)}function Uy(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Ld.isIP(r.host)?"":r.host),Sy.connect(r)}function Ne(r,e,t){r._readyState=ue.CLOSING;let n=new Error(t);Error.captureStackTrace(n,Ne),e.setHeader?(e[qd]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(Pi,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Ma(r,e,t){if(e){let n=Ry(e)?e.size:zy(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${Et[r.readyState]})`);process.nextTick(t,n)}}function qy(r,e){let t=this[ge];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[ge]!==void 0&&(t._socket.removeListener("data",ji),process.nextTick(Bd,t._socket),r===1005?t.close():t.close(r,e))}function Fy(){let r=this[ge];r.isPaused||r._socket.resume()}function By(r){let e=this[ge];e._socket[ge]!==void 0&&(e._socket.removeListener("data",ji),process.nextTick(Bd,e._socket),e.close(r[Py])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Dd(){this[ge].emitClose()}function Ky(r,e){this[ge].emit("message",r,e)}function Zy(r){let e=this[ge];e._autoPong&&e.pong(r,!this._isServer,Ud),e.emit("ping",r)}function Gy(r){this[ge].emit("pong",r)}function Bd(r){r.resume()}function Hy(r){let e=this[ge];e.readyState!==ue.CLOSED&&(e.readyState===ue.OPEN&&(e._readyState=ue.CLOSING,Kd(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Kd(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Zd(){let r=this[ge];if(this.removeListener("close",Zd),this.removeListener("data",ji),this.removeListener("end",Gd),r._readyState=ue.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[ge]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Dd),r._receiver.on("finish",Dd))}function ji(r){this[ge]._receiver.write(r)||this.pause()}function Gd(){let r=this[ge];r._readyState=ue.CLOSING,r._receiver.end(),this.end()}function Hd(){let r=this[ge];this.removeListener("error",Hd),this.on("error",Ud),r&&(r._readyState=ue.CLOSING,this.destroy())}});var Xd=ee((C_,Yd)=>{"use strict";var x_=Oi(),{Duplex:Vy}=require("stream");function Wd(r){r.emit("close")}function Wy(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Jd(r){this.removeListener("error",Jd),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Jy(r,e){let t=!0,n=new Vy({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(Wd,n);return}let o=!1;r.once("error",function(u){o=!0,i(u)}),r.once("close",function(){o||i(s),process.nextTick(Wd,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Wy),n.on("error",Jd),n}Yd.exports=Jy});var za=ee((I_,Qd)=>{"use strict";var{tokenChars:Yy}=On();function Xy(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Yy[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=r.slice(t,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Qd.exports={parse:Xy}});var oh=ee((E_,ih)=>{"use strict";var Qy=require("events"),Ni=require("http"),{Duplex:R_}=require("stream"),{createHash:ev}=require("crypto"),eh=Ai(),Jr=jn(),tv=za(),rv=Oi(),{CLOSE_TIMEOUT:nv,GUID:sv,kWebSocket:iv}=Ct(),ov=/^[+/0-9A-Za-z]{22}==$/,th=0,rh=1,sh=2,Da=class extends Qy{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:256*1024,maxFragments:16*1024,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:nv,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:rv,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=Ni.createServer((n,s)=>{let i=Ni.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=av(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=th}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===sh){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(ms,this);return}if(e&&this.once("close",e),this._state!==rh)if(this._state=rh,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(ms,this):process.nextTick(ms,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{ms(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",nh);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Yr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Yr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!ov.test(i)){Yr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Yr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){gs(t,400);return}let u=e.headers["sec-websocket-protocol"],c=new Set;if(u!==void 0)try{c=tv.parse(u)}catch{Yr(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let f=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&f!==void 0){let v=new Jr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S=eh.parse(f);S[Jr.extensionName]&&(v.accept(S[Jr.extensionName]),p[Jr.extensionName]=v)}catch{Yr(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let v={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(v,(S,T,x,P)=>{if(!S)return gs(t,T||401,x,P);this.completeUpgrade(p,i,c,e,t,n,s)});return}if(!this.options.verifyClient(v))return gs(t,401)}this.completeUpgrade(p,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[iv])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>th)return gs(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ev("sha1").update(t+sv).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(n.size){let p=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;p&&(c.push(`Sec-WebSocket-Protocol: ${p}`),f._protocol=p)}if(e[Jr.extensionName]){let p=e[Jr.extensionName].params,v=eh.format({[Jr.extensionName]:[p]});c.push(`Sec-WebSocket-Extensions: ${v}`),f._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
255
+ `).filter(Boolean).filter(s=>!e.has(s))}catch{}for(let n of t)try{let s=await U(r,["show",`HEAD:${n}`]);/^={7}$/m.test(s)||e.add(n)}catch{e.add(n)}return[...e]}async function jo(r,e,t){me.default.mkdirSync(le.default.dirname(e),{recursive:!0,mode:448}),await U(r,["fetch","origin",t],{timeoutMs:3e5}),await U(r,["worktree","add","--detach",e,`origin/${t}`]),await U(e,["checkout","-B",t,`origin/${t}`])}async function Oo(r,e){try{await U(r,["push","origin",e],{timeoutMs:3e5})}catch(t){throw new Error(`could not push "${e}" - ${t instanceof Error?t.message:t}. Someone may have pushed to it since this deploy started; retry.`)}}async function No(r,e,t){try{return await ac("git",["-C",r,"diff","--quiet",e,t,"--"],{timeout:12e4,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),!1}catch(n){let s=n;if(s.code===1)return!0;throw new Error(`git diff failed comparing ${e}..${t}: ${(s.stderr||s.message||"").trim().slice(0,500)}`)}}async function jr(r){return(await U(r,["config","--get","remote.origin.url"])).trim()}function Ve(r){let e=/^git@github\.com(?:-[\w.-]+)?:([^/]+)\/(.+?)(\.git)?$/.exec(r)??/^https:\/\/github\.com\/([^/]+)\/(.+?)(\.git)?\/?$/.exec(r)??/^ssh:\/\/git@github\.com(?:-[\w.-]+)?\/([^/]+)\/(.+?)(\.git)?$/.exec(r);return e?{owner:e[1],repo:e[2]}:null}var me,Ar,le,ic,oc,ac,Hs,Vs,_n,kn,lc,wn,_t=_s(()=>{"use strict";me=E(require("node:fs"),1),Ar=E(require("node:os"),1),le=E(require("node:path"),1),ic=require("node:child_process"),oc=require("node:util"),ac=(0,oc.promisify)(ic.execFile),Hs="Allwright Agent",Vs="agent@ticketpilot.local",_n=200,kn=2e4,lc=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];wn=".ticketpilot-delete"});function ei(r,e,t){let n=(t??"").trim().toLowerCase(),s=n?r.githubUsers[n]?.token:void 0;if(s)return{token:s,source:"user"};let i=r.repos[e]?.github?.token;return i?{token:i,source:"repo"}:r.github?.token?{token:r.github.token,source:"global"}:null}function Ae(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function mc(r,e){let t=[r.jira,...Object.values(r.repos).map(a=>a.jira)].filter(a=>!!a),n=new Set(t.map(a=>a.email.toLowerCase())),s=!!r.github?.token||Object.values(r.repos).some(a=>a.github?.token),i=r.github?.login??Object.values(r.repos).find(a=>a.github?.login)?.github?.login??"",o=e.map(a=>{let c=a.trim().toLowerCase(),u=r.jiraUsers[c]?"own":n.has(c)?"runner-account":"missing",f=u==="own"?r.jiraUsers[c].email:u==="runner-account"?c:"",p=r.githubUsers[c]?"own":s?"shared":"missing",v=p==="own"?r.githubUsers[c].login??"":p==="shared"?i:"";return{email:c,jira:u,jiraAs:f,github:p,githubAs:v}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var Or=_s(()=>{"use strict"});var zr={};ks(zr,{GitHubClient:()=>$e});var Jm,$e,Ye=_s(()=>{"use strict";Jm=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",$e=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${Jm}${t}`,{method:e,headers:{Authorization:`Bearer ${this.token}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"allwright",...n!==void 0?{"Content-Type":"application/json"}:{}},body:n===void 0?void 0:JSON.stringify(n)}),i=await s.text(),o=null;try{o=i?JSON.parse(i):null}catch{}if(s.status===401)throw new Error("GitHub rejected the token (401) - expired or revoked? Run `allwright github set-token`");if(!s.ok&&s.status!==422){let a=o?.message??i.slice(0,300);throw new Error(`GitHub ${e} ${t} -> ${s.status}: ${a}`)}return{status:s.status,data:o}}async whoami(){let{data:e}=await this.request("GET","/user");return e.login}async createPullRequest(e,t,n){let{status:s,data:i}=await this.request("POST",`/repos/${e}/${t}/pulls`,n);if(s===422){let{data:o}=await this.request("GET",`/repos/${e}/${t}/pulls?head=${encodeURIComponent(`${e}:${n.head}`)}&state=open`);if(o?.length){let a=o[0];return{number:a.number,url:a.html_url,state:a.state,merged:a.merged??!1,headSha:a.head.sha,mergeableState:null,baseRef:a.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:n.base}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null,baseRef:s.base?.ref??""}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async mergePullRequest(e,t,n,s,i={}){try{return await this.request("PUT",`/repos/${e}/${t}/pulls/${n}/merge`,{merge_method:s,...i.sha?{sha:i.sha}:{},...i.title?{commit_title:i.title}:{}}),{merged:!0}}catch(o){let a=o instanceof Error?o.message:String(o);return a.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.`}:a.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."}:a.includes("-> 403")?{merged:!1,reason:`this runner's GitHub token is not allowed to merge in ${e}/${t}. It needs write access to the repository - or merge the PR yourself.`}:{merged:!1,reason:a}}}async repoAccess(e,t){try{let{data:n}=await this.request("GET",`/repos/${e}/${t}`);return{ok:!0,canPush:!!(n.permissions?.push||n.permissions?.admin)}}catch(n){let s=n instanceof Error?n.message:String(n);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,t,n){await this.request("PATCH",`/repos/${e}/${t}/pulls/${n}`,{state:"closed"})}async deleteBranch(e,t,n){try{await this.request("DELETE",`/repos/${e}/${t}/git/refs/heads/${encodeURIComponent(n)}`)}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return;throw s}}}});var Ct=ee((f_,ad)=>{"use strict";var id=["nodebuffer","arraybuffer","fragments"],od=typeof Blob<"u";od&&id.push("blob");ad.exports={BINARY_TYPES:id,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:od,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var us=ee((p_,Si)=>{"use strict";var{EMPTY_BUFFER:Bg}=Ct(),ba=Buffer[Symbol.species];function Kg(r,e){if(r.length===0)return Bg;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new ba(t.buffer,t.byteOffset,n):t}function ld(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function cd(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Zg(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function wa(r){if(wa.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new ba(r):ArrayBuffer.isView(r)?e=new ba(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),wa.readOnly=!1),e}Si.exports={concat:Kg,mask:ld,toArrayBuffer:Zg,toBuffer:wa,unmask:cd};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Si.exports.mask=function(e,t,n,s,i){i<48?ld(e,t,n,s,i):r.mask(e,t,n,s,i)},Si.exports.unmask=function(e,t){e.length<32?cd(e,t):r.unmask(e,t)}}catch{}});var hd=ee((m_,dd)=>{"use strict";var ud=Symbol("kDone"),_a=Symbol("kRun"),ka=class{constructor(e){this[ud]=()=>{this.pending--,this[_a]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[_a]()}[_a](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[ud])}}};dd.exports=ka});var jn=ee((g_,gd)=>{"use strict";var ds=require("zlib"),fd=us(),Gg=hd(),{kStatusCode:pd}=Ct(),Hg=Buffer[Symbol.species],Vg=Buffer.from([0,0,255,255]),xi=Symbol("permessage-deflate"),It=Symbol("total-length"),$n=Symbol("callback"),Zt=Symbol("buffers"),Pn=Symbol("error"),Ti,Sa=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,!Ti){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ti=new Gg(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[$n];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ti.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ti.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=ds.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[xi]=this,this._inflate[It]=0,this._inflate[Zt]=[],this._inflate.on("error",Jg),this._inflate.on("data",md)}this._inflate[$n]=n,this._inflate.write(e),t&&this._inflate.write(Vg),this._inflate.flush(()=>{let i=this._inflate[Pn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=fd.concat(this._inflate[Zt],this._inflate[It]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[It]=0,this._inflate[Zt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?ds.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=ds.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[It]=0,this._deflate[Zt]=[],this._deflate.on("data",Wg)}this._deflate[$n]=n,this._deflate.write(e),this._deflate.flush(ds.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=fd.concat(this._deflate[Zt],this._deflate[It]);t&&(i=new Hg(i.buffer,i.byteOffset,i.length-4)),this._deflate[$n]=null,this._deflate[It]=0,this._deflate[Zt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};gd.exports=Sa;function Wg(r){this[Zt].push(r),this[It]+=r.length}function md(r){if(this[It]+=r.length,this[xi]._maxPayload<1||this[It]<=this[xi]._maxPayload){this[Zt].push(r);return}this[Pn]=new RangeError("Max payload size exceeded"),this[Pn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Pn][pd]=1009,this.removeListener("data",md),this.reset()}function Jg(r){if(this[xi]._inflate=null,this[Pn]){this[$n](this[Pn]);return}r[pd]=1007,this[$n](r)}});var On=ee((y_,Ci)=>{"use strict";var{isUtf8:yd}=require("buffer"),{hasBlob:Yg}=Ct(),Xg=[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 Qg(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Ta(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function ey(r){return Yg&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Ci.exports={isBlob:ey,isValidStatusCode:Qg,isValidUTF8:Ta,tokenChars:Xg};if(yd)Ci.exports.isValidUTF8=function(r){return r.length<24?Ta(r):yd(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Ci.exports.isValidUTF8=function(e){return e.length<32?Ta(e):r(e)}}catch{}});var Ea=ee((v_,Td)=>{"use strict";var{Writable:ty}=require("stream"),vd=jn(),{BINARY_TYPES:ry,EMPTY_BUFFER:bd,kStatusCode:ny,kWebSocket:sy}=Ct(),{concat:xa,toArrayBuffer:iy,unmask:oy}=us(),{isValidStatusCode:ay,isValidUTF8:wd}=On(),Ii=Buffer[Symbol.species],Ke=0,_d=1,kd=2,Sd=3,Ca=4,Ia=5,Ri=6,Ra=class extends ty{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||ry[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[sy]=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=Ke}_write(e,t,n){if(this._opcode===8&&this._state==Ke)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new Ii(n.buffer,n.byteOffset+e,n.length-e),new Ii(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new Ii(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case Ke:this.getInfo(e);break;case _d:this.getPayloadLength16(e);break;case kd:this.getPayloadLength64(e);break;case Sd:this.getMask();break;case Ca:this.getData(e);break;case Ia:case Ri:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[vd.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=_d:this._payloadLength===127?this._state=kd:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=Sd:this._state=Ca}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ca}getData(e){let t=bd;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&oy(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){let n=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(n);return}if(this._compressed){this._state=Ia,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[vd.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===Ke&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=Ke;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=xa(n,t):this._binaryType==="arraybuffer"?s=iy(xa(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Ke):(this._state=Ri,setImmediate(()=>{this.emit("message",s,!0),this._state=Ke,this.startLoop(e)}))}else{let s=xa(n,t);if(!this._skipUTF8Validation&&!wd(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ia||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Ke):(this._state=Ri,setImmediate(()=>{this.emit("message",s,!1),this._state=Ke,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,bd),this.end();else{let n=e.readUInt16BE(0);if(!ay(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new Ii(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!wd(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=Ke;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Ke):(this._state=Ri,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Ke,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[ny]=s,o}};Td.exports=Ra});var Pa=ee((w_,Id)=>{"use strict";var{Duplex:b_}=require("stream"),{randomFillSync:ly}=require("crypto"),{types:{isUint8Array:cy}}=require("util"),xd=jn(),{EMPTY_BUFFER:uy,kWebSocket:dy,NOOP:hy}=Ct(),{isBlob:Nn,isValidStatusCode:fy}=On(),{mask:Cd,toBuffer:Hr}=us(),Ze=Symbol("kByteLength"),py=Buffer.alloc(4),Ei=8*1024,Vr,Mn=Ei,Qe=0,my=1,gy=2,Aa=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Qe,this.onerror=hy,this[dy]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||py,t.generateMask?t.generateMask(n):(Mn===Ei&&(Vr===void 0&&(Vr=Buffer.alloc(Ei)),ly(Vr,0,Ei),Mn=0),n[0]=Vr[Mn++],n[1]=Vr[Mn++],n[2]=Vr[Mn++],n[3]=Vr[Mn++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[Ze]!==void 0?a=t[Ze]:(e=Buffer.from(e),a=e.length):(a=e.length,s=t.mask&&t.readOnly&&!o);let c=a;a>=65536?(i+=8,c=127):a>125&&(i+=2,c=126);let u=Buffer.allocUnsafe(s?a+i:i);return u[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(u[0]|=64),u[1]=c,c===126?u.writeUInt16BE(a,2):c===127&&(u[2]=u[3]=0,u.writeUIntBE(a,4,6)),t.mask?(u[1]|=128,u[i-4]=n[0],u[i-3]=n[1],u[i-2]=n[2],u[i-1]=n[3],o?[u,e]:s?(Cd(e,n,u,i,a),[u]):(Cd(e,n,e,0,a),[u,e])):[u,e]}close(e,t,n,s){let i;if(e===void 0)i=uy;else{if(typeof e!="number"||!fy(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");if(i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string")i.write(t,2);else if(cy(t))i.set(t,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[Ze]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Qe?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Nn(e)?(s=e.size,i=!1):(e=Hr(e),s=e.length,i=Hr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Ze]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Qe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Nn(e)?(s=e.size,i=!1):(e=Hr(e),s=e.length,i=Hr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Ze]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Qe?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[xd.extensionName],i=t.binary?2:1,o=t.compress,a,c;typeof e=="string"?(a=Buffer.byteLength(e),c=!1):Nn(e)?(a=e.size,c=!1):(e=Hr(e),a=e.length,c=Hr.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let u={[Ze]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};Nn(e)?this._state!==Qe?this.enqueue([this.getBlobData,e,this._compress,u,n]):this.getBlobData(e,this._compress,u,n):this._state!==Qe?this.enqueue([this.dispatch,e,this._compress,u,n]):this.dispatch(e,this._compress,u,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[Ze],this._state=gy,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick($a,this,a,s);return}this._bufferedBytes-=n[Ze];let o=Hr(i);t?this.dispatch(o,t,n,s):(this._state=Qe,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(yy,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[xd.extensionName];this._bufferedBytes+=n[Ze],this._state=my,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");$a(this,c,s);return}this._bufferedBytes-=n[Ze],this._state=Qe,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===Qe&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Ze],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Ze],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Id.exports=Aa;function $a(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function yy(r,e,t){$a(r,e,t),r.onerror(e)}});var Md=ee((__,Nd)=>{"use strict";var{kForOnEventAttribute:hs,kListener:ja}=Ct(),Rd=Symbol("kCode"),Ed=Symbol("kData"),Ad=Symbol("kError"),$d=Symbol("kMessage"),Pd=Symbol("kReason"),zn=Symbol("kTarget"),jd=Symbol("kType"),Od=Symbol("kWasClean"),Rt=class{constructor(e){this[zn]=null,this[jd]=e}get target(){return this[zn]}get type(){return this[jd]}};Object.defineProperty(Rt.prototype,"target",{enumerable:!0});Object.defineProperty(Rt.prototype,"type",{enumerable:!0});var Wr=class extends Rt{constructor(e,t={}){super(e),this[Rd]=t.code===void 0?0:t.code,this[Pd]=t.reason===void 0?"":t.reason,this[Od]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Rd]}get reason(){return this[Pd]}get wasClean(){return this[Od]}};Object.defineProperty(Wr.prototype,"code",{enumerable:!0});Object.defineProperty(Wr.prototype,"reason",{enumerable:!0});Object.defineProperty(Wr.prototype,"wasClean",{enumerable:!0});var Dn=class extends Rt{constructor(e,t={}){super(e),this[Ad]=t.error===void 0?null:t.error,this[$d]=t.message===void 0?"":t.message}get error(){return this[Ad]}get message(){return this[$d]}};Object.defineProperty(Dn.prototype,"error",{enumerable:!0});Object.defineProperty(Dn.prototype,"message",{enumerable:!0});var fs=class extends Rt{constructor(e,t={}){super(e),this[Ed]=t.data===void 0?null:t.data}get data(){return this[Ed]}};Object.defineProperty(fs.prototype,"data",{enumerable:!0});var vy={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[hs]&&s[ja]===e&&!s[hs])return;let n;if(r==="message")n=function(i,o){let a=new fs("message",{data:o?i:i.toString()});a[zn]=this,Ai(e,this,a)};else if(r==="close")n=function(i,o){let a=new Wr("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[zn]=this,Ai(e,this,a)};else if(r==="error")n=function(i){let o=new Dn("error",{error:i,message:i.message});o[zn]=this,Ai(e,this,o)};else if(r==="open")n=function(){let i=new Rt("open");i[zn]=this,Ai(e,this,i)};else return;n[hs]=!!t[hs],n[ja]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[ja]===e&&!t[hs]){this.removeListener(r,t);break}}};Nd.exports={CloseEvent:Wr,ErrorEvent:Dn,Event:Rt,EventTarget:vy,MessageEvent:fs};function Ai(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var $i=ee((k_,zd)=>{"use strict";var{tokenChars:ps}=On();function ut(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function by(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,c=-1,u=-1,f=-1,p=0;for(;p<r.length;p++)if(u=r.charCodeAt(p),o===void 0)if(f===-1&&ps[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 S=r.slice(c,f);u===44?(ut(e,S,t),t=Object.create(null)):o=S,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(f===-1&&ps[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),ut(t,r.slice(c,f),!0),u===44&&(ut(e,o,t),t=Object.create(null),o=void 0),c=f=-1}else if(u===61&&c!==-1&&f===-1)a=r.slice(c,p),c=f=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(ps[u]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);c===-1?c=p:n||(n=!0),s=!1}else if(i)if(ps[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&&r.charCodeAt(p-1)===61)i=!0;else if(f===-1&&ps[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 S=r.slice(c,f);n&&(S=S.replace(/\\/g,""),n=!1),ut(t,a,S),u===44&&(ut(e,o,t),t=Object.create(null),o=void 0),a=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 v=r.slice(c,f);return o===void 0?ut(e,v,t):(a===void 0?ut(t,v,!0):n?ut(t,a,v.replace(/\\/g,"")):ut(t,a,v),ut(e,o,t)),e}function wy(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}zd.exports={format:wy,parse:by}});var Ni=ee((x_,Wd)=>{"use strict";var _y=require("events"),ky=require("https"),Sy=require("http"),Ud=require("net"),Ty=require("tls"),{randomBytes:xy,createHash:Cy}=require("crypto"),{Duplex:S_,Readable:T_}=require("stream"),{URL:Oa}=require("url"),Gt=jn(),Iy=Ea(),Ry=Pa(),{isBlob:Ey}=On(),{BINARY_TYPES:Dd,CLOSE_TIMEOUT:Ay,EMPTY_BUFFER:Pi,GUID:$y,kForOnEventAttribute:Na,kListener:Py,kStatusCode:jy,kWebSocket:ge,NOOP:qd}=Ct(),{EventTarget:{addEventListener:Oy,removeEventListener:Ny}}=Md(),{format:My,parse:zy}=$i(),{toBuffer:Dy}=us(),Fd=Symbol("kAborted"),Ma=[8,13],Et=["CONNECTING","OPEN","CLOSING","CLOSED"],Ly=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,ce=class r extends _y{constructor(e,t,n){super(),this._binaryType=Dd[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Pi,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Bd(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Dd.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new Iy({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:n.maxBufferedChunks,maxFragments:n.maxFragments,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Ry(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[ge]=this,i[ge]=this,e[ge]=this,s.on("conclude",Fy),s.on("drain",By),s.on("error",Ky),s.on("message",Zy),s.on("ping",Gy),s.on("pong",Hy),i.onerror=Vy,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Gd),e.on("data",Oi),e.on("end",Hd),e.on("error",Vd),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Gt.extensionName]&&this._extensions[Gt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ne(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Zd(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){za(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||Pi,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){za(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||Pi,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){za(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Gt.extensionName]||(s.compress=!1),this._sender.send(e||Pi,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ne(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(ce,"CONNECTING",{enumerable:!0,value:Et.indexOf("CONNECTING")});Object.defineProperty(ce.prototype,"CONNECTING",{enumerable:!0,value:Et.indexOf("CONNECTING")});Object.defineProperty(ce,"OPEN",{enumerable:!0,value:Et.indexOf("OPEN")});Object.defineProperty(ce.prototype,"OPEN",{enumerable:!0,value:Et.indexOf("OPEN")});Object.defineProperty(ce,"CLOSING",{enumerable:!0,value:Et.indexOf("CLOSING")});Object.defineProperty(ce.prototype,"CLOSING",{enumerable:!0,value:Et.indexOf("CLOSING")});Object.defineProperty(ce,"CLOSED",{enumerable:!0,value:Et.indexOf("CLOSED")});Object.defineProperty(ce.prototype,"CLOSED",{enumerable:!0,value:Et.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(ce.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(ce.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Na])return e[Py];return null},set(e){for(let t of this.listeners(r))if(t[Na]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Na]:!0})}})});ce.prototype.addEventListener=Oy;ce.prototype.removeEventListener=Ny;Wd.exports=ce;function Bd(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Ay,protocolVersion:Ma[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Ma.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Ma.join(", ")})`);let i;if(e instanceof Oa)i=e;else try{i=new Oa(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",c;if(i.protocol!=="ws:"&&!o&&!a?c=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!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(r._redirects===0)throw x;ji(r,x);return}let u=o?443:80,f=xy(16).toString("base64"),p=o?ky.request:Sy.request,v=new Set,S;if(s.createConnection=s.createConnection||(o?qy:Uy),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&&(S=new Gt({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=My({[Gt.extensionName]:S.offer()})),t.length){for(let x of t){if(typeof x!="string"||!Ly.test(x)||v.has(x))throw new SyntaxError("An invalid or duplicated subprotocol was specified");v.add(x)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let x=s.path.split(":");s.socketPath=x[0],s.path=x[1]}let T;if(s.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?s.socketPath:i.host;let x=n&&n.headers;if(n={...n,headers:{}},x)for(let[P,k]of Object.entries(x))n.headers[P.toLowerCase()]=k}else if(r.listenerCount("redirect")===0){let x=a?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!x||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,x||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),T=r._req=p(s),r._redirects&&r.emit("redirect",r.url,T)}else T=r._req=p(s);s.timeout&&T.on("timeout",()=>{Ne(r,T,"Opening handshake has timed out")}),T.on("error",x=>{T===null||T[Fd]||(T=r._req=null,ji(r,x))}),T.on("response",x=>{let P=x.headers.location,k=x.statusCode;if(P&&s.followRedirects&&k>=300&&k<400){if(++r._redirects>s.maxRedirects){Ne(r,T,"Maximum redirects exceeded");return}T.abort();let X;try{X=new Oa(P,e)}catch{let L=new SyntaxError(`Invalid URL: ${P}`);ji(r,L);return}Bd(r,X,t,n)}else r.emit("unexpected-response",T,x)||Ne(r,T,`Unexpected server response: ${x.statusCode}`)}),T.on("upgrade",(x,P,k)=>{if(r.emit("upgrade",x),r.readyState!==ce.CONNECTING)return;T=r._req=null;let X=x.headers.upgrade;if(X===void 0||X.toLowerCase()!=="websocket"){Ne(r,P,"Invalid Upgrade header");return}let O=Cy("sha1").update(f+$y).digest("base64");if(x.headers["sec-websocket-accept"]!==O){Ne(r,P,"Invalid Sec-WebSocket-Accept header");return}let L=x.headers["sec-websocket-protocol"],K;if(L!==void 0?v.size?v.has(L)||(K="Server sent an invalid subprotocol"):K="Server sent a subprotocol but none was requested":v.size&&(K="Server sent no subprotocol"),K){Ne(r,P,K);return}L&&(r._protocol=L);let h=x.headers["sec-websocket-extensions"];if(h!==void 0){if(!S){Ne(r,P,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let m;try{m=zy(h)}catch{Ne(r,P,"Invalid Sec-WebSocket-Extensions header");return}let y=Object.keys(m);if(y.length!==1||y[0]!==Gt.extensionName){Ne(r,P,"Server indicated an extension that was not requested");return}try{S.accept(m[Gt.extensionName])}catch{Ne(r,P,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Gt.extensionName]=S}r.setSocket(P,k,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(T,r):T.end()}function ji(r,e){r._readyState=ce.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Uy(r){return r.path=r.socketPath,Ud.connect(r)}function qy(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Ud.isIP(r.host)?"":r.host),Ty.connect(r)}function Ne(r,e,t){r._readyState=ce.CLOSING;let n=new Error(t);Error.captureStackTrace(n,Ne),e.setHeader?(e[Fd]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ji,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function za(r,e,t){if(e){let n=Ey(e)?e.size:Dy(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${Et[r.readyState]})`);process.nextTick(t,n)}}function Fy(r,e){let t=this[ge];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[ge]!==void 0&&(t._socket.removeListener("data",Oi),process.nextTick(Kd,t._socket),r===1005?t.close():t.close(r,e))}function By(){let r=this[ge];r.isPaused||r._socket.resume()}function Ky(r){let e=this[ge];e._socket[ge]!==void 0&&(e._socket.removeListener("data",Oi),process.nextTick(Kd,e._socket),e.close(r[jy])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Ld(){this[ge].emitClose()}function Zy(r,e){this[ge].emit("message",r,e)}function Gy(r){let e=this[ge];e._autoPong&&e.pong(r,!this._isServer,qd),e.emit("ping",r)}function Hy(r){this[ge].emit("pong",r)}function Kd(r){r.resume()}function Vy(r){let e=this[ge];e.readyState!==ce.CLOSED&&(e.readyState===ce.OPEN&&(e._readyState=ce.CLOSING,Zd(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Zd(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Gd(){let r=this[ge];if(this.removeListener("close",Gd),this.removeListener("data",Oi),this.removeListener("end",Hd),r._readyState=ce.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[ge]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Ld),r._receiver.on("finish",Ld))}function Oi(r){this[ge]._receiver.write(r)||this.pause()}function Hd(){let r=this[ge];r._readyState=ce.CLOSING,r._receiver.end(),this.end()}function Vd(){let r=this[ge];this.removeListener("error",Vd),this.on("error",qd),r&&(r._readyState=ce.CLOSING,this.destroy())}});var Qd=ee((I_,Xd)=>{"use strict";var C_=Ni(),{Duplex:Wy}=require("stream");function Jd(r){r.emit("close")}function Jy(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Yd(r){this.removeListener("error",Yd),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Yy(r,e){let t=!0,n=new Wy({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(Jd,n);return}let o=!1;r.once("error",function(c){o=!0,i(c)}),r.once("close",function(){o||i(s),process.nextTick(Jd,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Jy),n.on("error",Yd),n}Xd.exports=Yy});var Da=ee((R_,eh)=>{"use strict";var{tokenChars:Xy}=On();function Qy(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Xy[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=r.slice(t,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}eh.exports={parse:Qy}});var ah=ee((A_,oh)=>{"use strict";var ev=require("events"),Mi=require("http"),{Duplex:E_}=require("stream"),{createHash:tv}=require("crypto"),th=$i(),Jr=jn(),rv=Da(),nv=Ni(),{CLOSE_TIMEOUT:sv,GUID:iv,kWebSocket:ov}=Ct(),av=/^[+/0-9A-Za-z]{22}==$/,rh=0,nh=1,ih=2,La=class extends ev{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:256*1024,maxFragments:16*1024,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:sv,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:nv,...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=Mi.createServer((n,s)=>{let i=Mi.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=lv(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=rh}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===ih){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(ms,this);return}if(e&&this.once("close",e),this._state!==nh)if(this._state=nh,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(ms,this):process.nextTick(ms,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{ms(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",sh);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Yr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Yr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!av.test(i)){Yr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Yr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){gs(t,400);return}let c=e.headers["sec-websocket-protocol"],u=new Set;if(c!==void 0)try{u=rv.parse(c)}catch{Yr(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let f=e.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&f!==void 0){let v=new Jr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S=th.parse(f);S[Jr.extensionName]&&(v.accept(S[Jr.extensionName]),p[Jr.extensionName]=v)}catch{Yr(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let v={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(v,(S,T,x,P)=>{if(!S)return gs(t,T||401,x,P);this.completeUpgrade(p,i,u,e,t,n,s)});return}if(!this.options.verifyClient(v))return gs(t,401)}this.completeUpgrade(p,i,u,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[ov])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>rh)return gs(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${tv("sha1").update(t+iv).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(n.size){let p=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;p&&(u.push(`Sec-WebSocket-Protocol: ${p}`),f._protocol=p)}if(e[Jr.extensionName]){let p=e[Jr.extensionName].params,v=th.format({[Jr.extensionName]:[p]});u.push(`Sec-WebSocket-Extensions: ${v}`),f._extensions=e}this.emit("headers",u,s),i.write(u.concat(`\r
256
256
  `).join(`\r
257
- `)),i.removeListener("error",nh),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(ms,this)})),a(f,s)}};ih.exports=Da;function av(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function ms(r){r._state=sh,r.emit("close")}function nh(){this.destroy()}function gs(r,e,t,n){t=t||Ni.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${Ni.STATUS_CODES[e]}\r
257
+ `)),i.removeListener("error",sh),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(ms,this)})),a(f,s)}};oh.exports=La;function lv(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function ms(r){r._state=ih,r.emit("close")}function sh(){this.destroy()}function gs(r,e,t,n){t=t||Mi.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${Mi.STATUS_CODES[e]}\r
258
258
  `+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
259
259
  `)+`\r
260
260
  \r
261
- `+t)}function Yr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Yr),r.emit("wsClientError",o,t,e)}else gs(t,n,s,i)}});var yh={};ks(yh,{buildSetupReport:()=>Cv,claudeLoggedIn:()=>gh,repoDefaultBranch:()=>mh});function mh(r){let e=(...s)=>{try{return(0,Ui.execFileSync)("git",["-C",r,...s],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}},t=e("symbolic-ref","--short","refs/remotes/origin/HEAD");if(t?.startsWith("origin/"))return t.slice(7);let n=e("rev-parse","--abbrev-ref","HEAD");return n&&n!=="HEAD"?n:""}function gh(r=fh.default.homedir()){if(Ht.default.existsSync(Qr.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Ht.default.readFileSync(Qr.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function Cv(r,e){let t=!1,n="";if(bs&&Date.now()-bs.at<6e4)t=bs.installed,n=bs.version;else{try{let{stdout:o}=await xv(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}bs={at:Date.now(),installed:t,version:n}}let s=e.map(o=>{let a=r.repos[o];if(!a)return{repoName:o,mapped:!1,pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1,githubToken:!1,githubTokenOwn:!1,defaultBranch:""};let u=Ht.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:u,isGit:u&&Ht.default.existsSync(Qr.default.join(a.path,".git")),claudeMd:u&&Ht.default.existsSync(Qr.default.join(a.path,"CLAUDE.md")),deployMd:u&&Ht.default.existsSync(Qr.default.join(a.path,"DEPLOY.md")),testMd:u&&Ht.default.existsSync(Qr.default.join(a.path,"TEST.md")),githubToken:!!Ae(r,o),githubTokenOwn:!!a.github?.token,defaultBranch:u?mh(a.path):""}}),i=Object.values(r.repos).find(o=>o.github?.token);return{jiraConfigured:!!r.jira,jiraEmail:r.jira?.email??"",claude:{installed:t,version:n,loggedIn:gh()},githubTokenSet:!!(r.github?.token||i),githubLogin:r.github?.login??i?.github?.login??"",deploysEnabled:r.deploy.enabled,jiraUserCount:Object.keys(r.jiraUsers).length,repos:s}}var Ui,Ht,fh,Qr,ph,xv,bs,vh=_s(()=>{"use strict";Ui=require("node:child_process"),Ht=E(require("node:fs"),1),fh=E(require("node:os"),1),Qr=E(require("node:path"),1),ph=require("node:util");Or();xv=(0,ph.promisify)(Ui.execFile);bs=null});var et=E(require("node:fs"),1),Ba=E(require("node:os"),1),Un=E(require("node:path"),1),At=require("node:child_process"),qi=require("node:crypto"),en=E(require("node:readline/promises"),1);var ll=E(al(),1),{program:Mv,createCommand:zv,createArgument:Dv,createOption:Lv,CommanderError:Uv,InvalidArgumentError:qv,InvalidOptionArgumentError:Fv,Command:ul,Argument:Bv,Option:Kv,Help:Zv}=ll.default;var yt=E(require("node:fs"),1),As=E(require("node:os"),1),$s=E(require("node:path"),1);var k={};ks(k,{BRAND:()=>pf,DIRTY:()=>Wt,EMPTY_PATH:()=>Zh,INVALID:()=>q,NEVER:()=>Xf,OK:()=>we,ParseStatus:()=>ve,Schema:()=>Y,ZodAny:()=>jt,ZodArray:()=>gt,ZodBigInt:()=>Yt,ZodBoolean:()=>Xt,ZodBranded:()=>Zn,ZodCatch:()=>ur,ZodDate:()=>Qt,ZodDefault:()=>lr,ZodDiscriminatedUnion:()=>Is,ZodEffects:()=>Le,ZodEnum:()=>or,ZodError:()=>xe,ZodFirstPartyTypeKind:()=>F,ZodFunction:()=>Es,ZodIntersection:()=>nr,ZodIssueCode:()=>I,ZodLazy:()=>sr,ZodLiteral:()=>ir,ZodMap:()=>an,ZodNaN:()=>un,ZodNativeEnum:()=>ar,ZodNever:()=>Ge,ZodNull:()=>tr,ZodNullable:()=>nt,ZodNumber:()=>Jt,ZodObject:()=>Ce,ZodOptional:()=>ze,ZodParsedType:()=>j,ZodPipeline:()=>Gn,ZodPromise:()=>Ot,ZodReadonly:()=>cr,ZodRecord:()=>Rs,ZodSchema:()=>Y,ZodSet:()=>ln,ZodString:()=>Pt,ZodSymbol:()=>sn,ZodTransformer:()=>Le,ZodTuple:()=>rt,ZodType:()=>Y,ZodUndefined:()=>er,ZodUnion:()=>rr,ZodUnknown:()=>mt,ZodVoid:()=>on,addIssueToContext:()=>$,any:()=>Sf,array:()=>If,bigint:()=>vf,boolean:()=>wl,coerce:()=>Yf,custom:()=>yl,date:()=>bf,datetimeRegex:()=>ml,defaultErrorMap:()=>ft,discriminatedUnion:()=>$f,effect:()=>Bf,enum:()=>Uf,function:()=>zf,getErrorMap:()=>tn,getParsedType:()=>tt,instanceof:()=>gf,intersection:()=>Pf,isAborted:()=>xs,isAsync:()=>rn,isDirty:()=>Cs,isValid:()=>$t,late:()=>mf,lazy:()=>Df,literal:()=>Lf,makeIssue:()=>Kn,map:()=>Nf,nan:()=>yf,nativeEnum:()=>qf,never:()=>xf,null:()=>kf,nullable:()=>Zf,number:()=>bl,object:()=>Rf,objectUtil:()=>so,oboolean:()=>Jf,onumber:()=>Wf,optional:()=>Kf,ostring:()=>Vf,pipeline:()=>Hf,preprocess:()=>Gf,promise:()=>Ff,quotelessJson:()=>Fh,record:()=>Of,set:()=>Mf,setErrorMap:()=>Kh,strictObject:()=>Ef,string:()=>vl,symbol:()=>wf,transformer:()=>Bf,tuple:()=>jf,undefined:()=>_f,union:()=>Af,unknown:()=>Tf,util:()=>X,void:()=>Cf});var X;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(X||(X={}));var so;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(so||(so={}));var j=X.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),tt=r=>{switch(typeof r){case"undefined":return j.undefined;case"string":return j.string;case"number":return Number.isNaN(r)?j.nan:j.number;case"boolean":return j.boolean;case"function":return j.function;case"bigint":return j.bigint;case"symbol":return j.symbol;case"object":return Array.isArray(r)?j.array:r===null?j.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?j.promise:typeof Map<"u"&&r instanceof Map?j.map:typeof Set<"u"&&r instanceof Set?j.set:typeof Date<"u"&&r instanceof Date?j.date:j.object;default:return j.unknown}};var I=X.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"]),Fh=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),xe=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,u=0;for(;u<o.path.length;){let c=o.path[u];u===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],u++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,X.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};xe.create=r=>new xe(r);var Bh=(r,e)=>{let t;switch(r.code){case I.invalid_type:r.received===j.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case I.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,X.jsonStringifyReplacer)}`;break;case I.unrecognized_keys:t=`Unrecognized key(s) in object: ${X.joinValues(r.keys,", ")}`;break;case I.invalid_union:t="Invalid input";break;case I.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${X.joinValues(r.options)}`;break;case I.invalid_enum_value:t=`Invalid enum value. Expected ${X.joinValues(r.options)}, received '${r.received}'`;break;case I.invalid_arguments:t="Invalid function arguments";break;case I.invalid_return_type:t="Invalid function return type";break;case I.invalid_date:t="Invalid date";break;case I.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:X.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case I.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case I.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case I.custom:t="Invalid input";break;case I.invalid_intersection_types:t="Intersection results could not be merged";break;case I.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case I.not_finite:t="Number must be finite";break;default:t=e.defaultError,X.assertNever(r)}return{message:t}},ft=Bh;var cl=ft;function Kh(r){cl=r}function tn(){return cl}var Kn=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",u=n.filter(c=>!!c).slice().reverse();for(let c of u)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},Zh=[];function $(r,e){let t=tn(),n=Kn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===ft?void 0:ft].filter(s=>!!s)});r.common.issues.push(n)}var ve=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return q;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return q;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}},q=Object.freeze({status:"aborted"}),Wt=r=>({status:"dirty",value:r}),we=r=>({status:"valid",value:r}),xs=r=>r.status==="aborted",Cs=r=>r.status==="dirty",$t=r=>r.status==="valid",rn=r=>typeof Promise<"u"&&r instanceof Promise;var N;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(N||(N={}));var De=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},dl=(r,e)=>{if($t(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new xe(r.common.issues);return this._error=t,this._error}}};function Z(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:u}=r;return o.code==="invalid_enum_value"?{message:u??a.defaultError}:typeof a.data>"u"?{message:u??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:u??t??a.defaultError}},description:s}}var Y=class{get description(){return this._def.description}_getType(e){return tt(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:tt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ve,ctx:{common:e.parent.common,data:e.data,parsedType:tt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(rn(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)},s=this._parseSync({data:e,path:n.path,parent:n});return dl(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return $t(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>$t(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(rn(s)?s:Promise.resolve(s));return dl(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:I.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(u=>u?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new Le({schema:this,typeName:F.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return ze.create(this,this._def)}nullable(){return nt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return gt.create(this)}promise(){return Ot.create(this,this._def)}or(e){return rr.create([this,e],this._def)}and(e){return nr.create(this,e,this._def)}transform(e){return new Le({...Z(this._def),schema:this,typeName:F.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new lr({...Z(this._def),innerType:this,defaultValue:t,typeName:F.ZodDefault})}brand(){return new Zn({typeName:F.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new ur({...Z(this._def),innerType:this,catchValue:t,typeName:F.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Gn.create(this,e)}readonly(){return cr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Gh=/^c[^\s-]{8,}$/i,Hh=/^[0-9a-z]+$/,Vh=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Wh=/^[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,Jh=/^[a-z0-9_-]{21}$/i,Yh=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Xh=/^[-+]?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)?)??$/,Qh=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ef="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",io,tf=/^(?:(?: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])$/,rf=/^(?:(?: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])$/,nf=/^(([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]))$/,sf=/^(([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])$/,of=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,af=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,fl="((\\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])))",lf=new RegExp(`^${fl}$`);function pl(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function uf(r){return new RegExp(`^${pl(r)}$`)}function ml(r){let e=`${fl}T${pl(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function cf(r,e){return!!((e==="v4"||!e)&&tf.test(r)||(e==="v6"||!e)&&nf.test(r))}function df(r,e){if(!Yh.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function hf(r,e){return!!((e==="v4"||!e)&&rf.test(r)||(e==="v6"||!e)&&sf.test(r))}var Pt=class r extends Y{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==j.string){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.string,received:i.parsedType}),q}let n=new ve,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?$(s,{code:I.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&$(s,{code:I.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Qh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"email",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")io||(io=new RegExp(ef,"u")),io.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"emoji",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Wh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"uuid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Jh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"nanoid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Gh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Hh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid2",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Vh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ulid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),$(s,{validation:"url",code:I.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"regex",code:I.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?ml(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?lf.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?uf(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Xh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"duration",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?cf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ip",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?df(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"jwt",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?hf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cidr",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?of.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?af.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64url",code:I.invalid_string,message:i.message}),n.dirty()):X.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:I.invalid_string,...N.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...N.errToObj(e)})}url(e){return this._addCheck({kind:"url",...N.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...N.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...N.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...N.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...N.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...N.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...N.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...N.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...N.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...N.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...N.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...N.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...N.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...N.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...N.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...N.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...N.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...N.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...N.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...N.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...N.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...N.errToObj(t)})}nonempty(e){return this.min(1,N.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Pt.create=r=>new Pt({checks:[],typeName:F.ZodString,coerce:r?.coerce??!1,...Z(r)});function ff(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Jt=class r extends Y{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)!==j.number){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.number,received:i.parsedType}),q}let n,s=new ve;for(let i of this._def.checks)i.kind==="int"?X.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:I.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?ff(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_finite,message:i.message}),s.dirty()):X.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,N.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:N.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:N.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:N.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:N.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:N.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:N.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:N.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:N.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&X.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Jt.create=r=>new Jt({checks:[],typeName:F.ZodNumber,coerce:r?.coerce||!1,...Z(r)});var Yt=class r extends Y{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)!==j.bigint)return this._getInvalidInput(e);let n,s=new ve;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):X.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return $(t,{code:I.invalid_type,expected:j.bigint,received:t.parsedType}),q}gte(e,t){return this.setLimit("min",e,!0,N.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:N.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:N.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:N.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:N.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Yt.create=r=>new Yt({checks:[],typeName:F.ZodBigInt,coerce:r?.coerce??!1,...Z(r)});var Xt=class extends Y{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==j.boolean){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.boolean,received:n.parsedType}),q}return we(e.data)}};Xt.create=r=>new Xt({typeName:F.ZodBoolean,coerce:r?.coerce||!1,...Z(r)});var Qt=class r extends Y{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==j.date){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.date,received:i.parsedType}),q}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_date}),q}let n=new ve,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):X.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:N.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:N.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};Qt.create=r=>new Qt({checks:[],coerce:r?.coerce||!1,typeName:F.ZodDate,...Z(r)});var sn=class extends Y{_parse(e){if(this._getType(e)!==j.symbol){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.symbol,received:n.parsedType}),q}return we(e.data)}};sn.create=r=>new sn({typeName:F.ZodSymbol,...Z(r)});var er=class extends Y{_parse(e){if(this._getType(e)!==j.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.undefined,received:n.parsedType}),q}return we(e.data)}};er.create=r=>new er({typeName:F.ZodUndefined,...Z(r)});var tr=class extends Y{_parse(e){if(this._getType(e)!==j.null){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.null,received:n.parsedType}),q}return we(e.data)}};tr.create=r=>new tr({typeName:F.ZodNull,...Z(r)});var jt=class extends Y{constructor(){super(...arguments),this._any=!0}_parse(e){return we(e.data)}};jt.create=r=>new jt({typeName:F.ZodAny,...Z(r)});var mt=class extends Y{constructor(){super(...arguments),this._unknown=!0}_parse(e){return we(e.data)}};mt.create=r=>new mt({typeName:F.ZodUnknown,...Z(r)});var Ge=class extends Y{_parse(e){let t=this._getOrReturnCtx(e);return $(t,{code:I.invalid_type,expected:j.never,received:t.parsedType}),q}};Ge.create=r=>new Ge({typeName:F.ZodNever,...Z(r)});var on=class extends Y{_parse(e){if(this._getType(e)!==j.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.void,received:n.parsedType}),q}return we(e.data)}};on.create=r=>new on({typeName:F.ZodVoid,...Z(r)});var gt=class r extends Y{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==j.array)return $(t,{code:I.invalid_type,expected:j.array,received:t.parsedType}),q;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&($(t,{code:o?I.too_big:I.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&($(t,{code:I.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&($(t,{code:I.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new De(t,o,t.path,a)))).then(o=>ve.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new De(t,o,t.path,a)));return ve.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:N.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:N.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:N.toString(t)}})}nonempty(e){return this.min(1,e)}};gt.create=(r,e)=>new gt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:F.ZodArray,...Z(e)});function nn(r){if(r instanceof Ce){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=ze.create(nn(n))}return new Ce({...r._def,shape:()=>e})}else return r instanceof gt?new gt({...r._def,type:nn(r.element)}):r instanceof ze?ze.create(nn(r.unwrap())):r instanceof nt?nt.create(nn(r.unwrap())):r instanceof rt?rt.create(r.items.map(e=>nn(e))):r}var Ce=class r extends Y{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=X.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==j.object){let c=this._getOrReturnCtx(e);return $(c,{code:I.invalid_type,expected:j.object,received:c.parsedType}),q}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ge&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let u=[];for(let c of o){let f=i[c],p=s.data[c];u.push({key:{status:"valid",value:c},value:f._parse(new De(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof Ge){let c=this._def.unknownKeys;if(c==="passthrough")for(let f of a)u.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(c==="strict")a.length>0&&($(s,{code:I.unrecognized_keys,keys:a}),n.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let f of a){let p=s.data[f];u.push({key:{status:"valid",value:f},value:c._parse(new De(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let f of u){let p=await f.key,v=await f.value;c.push({key:p,value:v,alwaysSet:f.alwaysSet})}return c}).then(c=>ve.mergeObjectSync(n,c)):ve.mergeObjectSync(n,u)}get shape(){return this._def.shape()}strict(e){return N.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:N.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:F.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of X.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of X.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return nn(this)}partial(e){let t={};for(let n of X.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of X.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof ze;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return gl(X.objectKeys(this.shape))}};Ce.create=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strip",catchall:Ge.create(),typeName:F.ZodObject,...Z(e)});Ce.strictCreate=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strict",catchall:Ge.create(),typeName:F.ZodObject,...Z(e)});Ce.lazycreate=(r,e)=>new Ce({shape:r,unknownKeys:"strip",catchall:Ge.create(),typeName:F.ZodObject,...Z(e)});var rr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new xe(a.ctx.common.issues));return $(t,{code:I.invalid_union,unionErrors:o}),q}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let u of n){let c={...t,common:{...t.common,issues:[]},parent:null},f=u._parseSync({data:t.data,path:t.path,parent:c});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(u=>new xe(u));return $(t,{code:I.invalid_union,unionErrors:a}),q}}get options(){return this._def.options}};rr.create=(r,e)=>new rr({options:r,typeName:F.ZodUnion,...Z(e)});var pt=r=>r instanceof sr?pt(r.schema):r instanceof Le?pt(r.innerType()):r instanceof ir?[r.value]:r instanceof or?r.options:r instanceof ar?X.objectValues(r.enum):r instanceof lr?pt(r._def.innerType):r instanceof er?[void 0]:r instanceof tr?[null]:r instanceof ze?[void 0,...pt(r.unwrap())]:r instanceof nt?[null,...pt(r.unwrap())]:r instanceof Zn||r instanceof cr?pt(r.unwrap()):r instanceof ur?pt(r._def.innerType):[],Is=class r extends Y{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.object)return $(t,{code:I.invalid_type,expected:j.object,received:t.parsedType}),q;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):($(t,{code:I.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),q)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=pt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:F.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...Z(n)})}};function oo(r,e){let t=tt(r),n=tt(e);if(r===e)return{valid:!0,data:r};if(t===j.object&&n===j.object){let s=X.objectKeys(e),i=X.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let u=oo(r[a],e[a]);if(!u.valid)return{valid:!1};o[a]=u.data}return{valid:!0,data:o}}else if(t===j.array&&n===j.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],u=oo(o,a);if(!u.valid)return{valid:!1};s.push(u.data)}return{valid:!0,data:s}}else return t===j.date&&n===j.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var nr=class extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(xs(i)||xs(o))return q;let a=oo(i.value,o.value);return a.valid?((Cs(i)||Cs(o))&&t.dirty(),{status:t.value,value:a.data}):($(n,{code:I.invalid_intersection_types}),q)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};nr.create=(r,e,t)=>new nr({left:r,right:e,typeName:F.ZodIntersection,...Z(t)});var rt=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.array)return $(n,{code:I.invalid_type,expected:j.array,received:n.parsedType}),q;if(n.data.length<this._def.items.length)return $(n,{code:I.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),q;!this._def.rest&&n.data.length>this._def.items.length&&($(n,{code:I.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let u=this._def.items[a]||this._def.rest;return u?u._parse(new De(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>ve.mergeArray(t,o)):ve.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};rt.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new rt({items:r,typeName:F.ZodTuple,rest:null,...Z(e)})};var Rs=class r extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.object)return $(n,{code:I.invalid_type,expected:j.object,received:n.parsedType}),q;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new De(n,a,n.path,a)),value:o._parse(new De(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?ve.mergeObjectAsync(t,s):ve.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof Y?new r({keyType:e,valueType:t,typeName:F.ZodRecord,...Z(n)}):new r({keyType:Pt.create(),valueType:e,typeName:F.ZodRecord,...Z(t)})}},an=class extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.map)return $(n,{code:I.invalid_type,expected:j.map,received:n.parsedType}),q;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,u],c)=>({key:s._parse(new De(n,a,n.path,[c,"key"])),value:i._parse(new De(n,u,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let u of o){let c=await u.key,f=await u.value;if(c.status==="aborted"||f.status==="aborted")return q;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let u of o){let c=u.key,f=u.value;if(c.status==="aborted"||f.status==="aborted")return q;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}}}};an.create=(r,e,t)=>new an({valueType:e,keyType:r,typeName:F.ZodMap,...Z(t)});var ln=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.set)return $(n,{code:I.invalid_type,expected:j.set,received:n.parsedType}),q;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&($(n,{code:I.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&($(n,{code:I.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(u){let c=new Set;for(let f of u){if(f.status==="aborted")return q;f.status==="dirty"&&t.dirty(),c.add(f.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((u,c)=>i._parse(new De(n,u,n.path,c)));return n.common.async?Promise.all(a).then(u=>o(u)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:N.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:N.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};ln.create=(r,e)=>new ln({valueType:r,minSize:null,maxSize:null,typeName:F.ZodSet,...Z(e)});var Es=class r extends Y{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.function)return $(t,{code:I.invalid_type,expected:j.function,received:t.parsedType}),q;function n(a,u){return Kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,tn(),ft].filter(c=>!!c),issueData:{code:I.invalid_arguments,argumentsError:u}})}function s(a,u){return Kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,tn(),ft].filter(c=>!!c),issueData:{code:I.invalid_return_type,returnTypeError:u}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Ot){let a=this;return we(async function(...u){let c=new xe([]),f=await a._def.args.parseAsync(u,i).catch(S=>{throw c.addIssue(n(u,S)),c}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw c.addIssue(s(p,S)),c})})}else{let a=this;return we(function(...u){let c=a._def.args.safeParse(u,i);if(!c.success)throw new xe([n(u,c.error)]);let f=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new xe([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:rt.create(e).rest(mt.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||rt.create([]).rest(mt.create()),returns:t||mt.create(),typeName:F.ZodFunction,...Z(n)})}},sr=class extends Y{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};sr.create=(r,e)=>new sr({getter:r,typeName:F.ZodLazy,...Z(e)});var ir=class extends Y{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return $(t,{received:t.data,code:I.invalid_literal,expected:this._def.value}),q}return{status:"valid",value:e.data}}get value(){return this._def.value}};ir.create=(r,e)=>new ir({value:r,typeName:F.ZodLiteral,...Z(e)});function gl(r,e){return new or({values:r,typeName:F.ZodEnum,...Z(e)})}var or=class r extends Y{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return $(t,{expected:X.joinValues(n),received:t.parsedType,code:I.invalid_type}),q}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return $(t,{received:t.data,code:I.invalid_enum_value,options:n}),q}return we(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};or.create=gl;var ar=class extends Y{_parse(e){let t=X.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==j.string&&n.parsedType!==j.number){let s=X.objectValues(t);return $(n,{expected:X.joinValues(s),received:n.parsedType,code:I.invalid_type}),q}if(this._cache||(this._cache=new Set(X.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=X.objectValues(t);return $(n,{received:n.data,code:I.invalid_enum_value,options:s}),q}return we(e.data)}get enum(){return this._def.values}};ar.create=(r,e)=>new ar({values:r,typeName:F.ZodNativeEnum,...Z(e)});var Ot=class extends Y{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.promise&&t.common.async===!1)return $(t,{code:I.invalid_type,expected:j.promise,received:t.parsedType}),q;let n=t.parsedType===j.promise?t.data:Promise.resolve(t.data);return we(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Ot.create=(r,e)=>new Ot({type:r,typeName:F.ZodPromise,...Z(e)});var Le=class extends Y{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===F.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{$(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return q;let u=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return u.status==="aborted"?q:u.status==="dirty"?Wt(u.value):t.value==="dirty"?Wt(u.value):u});{if(t.value==="aborted")return q;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?q:a.status==="dirty"?Wt(a.value):t.value==="dirty"?Wt(a.value):a}}if(s.type==="refinement"){let o=a=>{let u=s.refinement(a,i);if(n.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?q:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?q:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!$t(o))return q;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>$t(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):q);X.assertNever(s)}};Le.create=(r,e,t)=>new Le({schema:r,typeName:F.ZodEffects,effect:e,...Z(t)});Le.createWithPreprocess=(r,e,t)=>new Le({schema:e,effect:{type:"preprocess",transform:r},typeName:F.ZodEffects,...Z(t)});var ze=class extends Y{_parse(e){return this._getType(e)===j.undefined?we(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ze.create=(r,e)=>new ze({innerType:r,typeName:F.ZodOptional,...Z(e)});var nt=class extends Y{_parse(e){return this._getType(e)===j.null?we(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};nt.create=(r,e)=>new nt({innerType:r,typeName:F.ZodNullable,...Z(e)});var lr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===j.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};lr.create=(r,e)=>new lr({innerType:r,typeName:F.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Z(e)});var ur=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return rn(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new xe(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new xe(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};ur.create=(r,e)=>new ur({innerType:r,typeName:F.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Z(e)});var un=class extends Y{_parse(e){if(this._getType(e)!==j.nan){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.nan,received:n.parsedType}),q}return{status:"valid",value:e.data}}};un.create=r=>new un({typeName:F.ZodNaN,...Z(r)});var pf=Symbol("zod_brand"),Zn=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Gn=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?q:i.status==="dirty"?(t.dirty(),Wt(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?q:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:F.ZodPipeline})}},cr=class extends Y{_parse(e){let t=this._def.innerType._parse(e),n=s=>($t(s)&&(s.value=Object.freeze(s.value)),s);return rn(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};cr.create=(r,e)=>new cr({innerType:r,typeName:F.ZodReadonly,...Z(e)});function hl(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function yl(r,e={},t){return r?jt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=hl(e,n),u=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:u})}});if(!i){let o=hl(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):jt.create()}var mf={object:Ce.lazycreate},F;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(F||(F={}));var gf=(r,e={message:`Input not instance of ${r.name}`})=>yl(t=>t instanceof r,e),vl=Pt.create,bl=Jt.create,yf=un.create,vf=Yt.create,wl=Xt.create,bf=Qt.create,wf=sn.create,_f=er.create,kf=tr.create,Sf=jt.create,Tf=mt.create,xf=Ge.create,Cf=on.create,If=gt.create,Rf=Ce.create,Ef=Ce.strictCreate,Af=rr.create,$f=Is.create,Pf=nr.create,jf=rt.create,Of=Rs.create,Nf=an.create,Mf=ln.create,zf=Es.create,Df=sr.create,Lf=ir.create,Uf=or.create,qf=ar.create,Ff=Ot.create,Bf=Le.create,Kf=ze.create,Zf=nt.create,Gf=Le.createWithPreprocess,Hf=Gn.create,Vf=()=>vl().optional(),Wf=()=>bl().optional(),Jf=()=>wl().optional(),Yf={string:(r=>Pt.create({...r,coerce:!0})),number:(r=>Jt.create({...r,coerce:!0})),boolean:(r=>Xt.create({...r,coerce:!0})),bigint:(r=>Yt.create({...r,coerce:!0})),date:(r=>Qt.create({...r,coerce:!0}))};var Xf=q;var _l=k.object({baseUrl:k.string().url(),email:k.string().email(),apiToken:k.string().min(1)}),ao=k.object({controlPlaneUrl:k.string().url(),runnerId:k.string().optional(),runnerToken:k.string().optional(),runnerName:k.string().default(As.default.hostname()),jira:_l.optional(),repos:k.record(k.object({path:k.string(),jira:_l.optional(),github:k.object({token:k.string().min(1),login:k.string().optional()}).optional()})).default({}),github:k.object({token:k.string().min(1),login:k.string().optional()}).optional(),githubUsers:k.record(k.object({token:k.string().min(1),login:k.string().optional()})).default({}),deploy:k.object({enabled:k.boolean().default(!1)}).default({enabled:!1}),environments:k.record(k.object({secrets:k.record(k.string()).default({})})).default({}),claudeProfiles:k.record(k.object({configDir:k.string()})).default({}),claudeBin:k.string().default("claude"),agents:k.record(k.object({bin:k.string()})).default({}),jiraUsers:k.record(k.object({email:k.string().email(),apiToken:k.string().min(1)})).default({}),auditSchedules:k.array(k.object({repoName:k.string(),role:k.enum(["security","testing"]),intervalHours:k.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:k.number().int().min(10).max(600).default(30)});function te(){let r=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(r)return r;let e=$s.default.join(As.default.homedir(),".config","allwright"),t=$s.default.join(As.default.homedir(),".config","ticketpilot");return!yt.default.existsSync(e)&&yt.default.existsSync(t)?t:e}function Nt(){return $s.default.join(te(),"runner.json")}function pe(){let r=Nt();if(!yt.default.existsSync(r))return null;let e=JSON.parse(yt.default.readFileSync(r,"utf8"));return ao.parse(e)}function he(r){let e=te();yt.default.mkdirSync(e,{recursive:!0,mode:448});let t=Nt(),n=t+".tmp";yt.default.writeFileSync(n,JSON.stringify(r,null,2)+`
262
- `,{mode:384}),yt.default.renameSync(n,t),yt.default.chmodSync(t,384)}function Ps(r,e){return`${r}:${e}`}function dr(r,e,t){return r.environments[Ps(e,t)]?.secrets??{}}function se(){let r=pe();if(!r)throw new Error(`No runner config found at ${Nt()}. Run \`allwright init\` first.`);return r}var js=require("node:child_process"),Pe=E(require("node:fs"),1),Os=E(require("node:path"),1);var Qf=new Set(["runner.log","runner.pid"]);function ep(r){return Pe.default.readdirSync(r).filter(e=>!Qf.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function kl(r){let e=te();if(!Pe.default.existsSync(e))throw new Error(`nothing to export - ${e} does not exist`);let t=ep(e);if(!t.length)throw new Error(`nothing to export - ${e} is empty`);let n=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-"),s=Os.default.resolve(r||`ticketpilot-backup-${n}.tgz`);return Pe.default.writeFileSync(s,"",{mode:384}),(0,js.execFileSync)("tar",["-czf",s,"-C",e,...t]),Pe.default.chmodSync(s,384),{file:s,entries:t}}function Sl(r){let e=Os.default.resolve(r);if(!Pe.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let t=(0,js.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
263
- `).filter(Boolean);for(let i of t)if(i.startsWith("/")||i.split("/").includes(".."))throw new Error(`refusing to import - unsafe path in archive: ${i}`);let n=te(),s;Pe.default.existsSync(n)&&Pe.default.readdirSync(n).length&&(s=`${n}.bak-${Date.now()}`,Pe.default.renameSync(n,s)),Pe.default.mkdirSync(n,{recursive:!0,mode:448}),(0,js.execFileSync)("tar",["-xzf",e,"-C",n]);for(let i of Pe.default.readdirSync(n)){let o=Os.default.join(n,i);Pe.default.statSync(o).isFile()&&Pe.default.chmodSync(o,384)}return{restored:t.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var cn=E(require("node:fs"),1),Mt=E(require("node:path"),1),Ns=".ticketpilot-attachments",tp=15*1024*1024,rp=50*1024*1024,Tl=20;function xl(r,e){let t=Mt.default.basename(r).replace(/[^\w.\- ()]/g,"_").replace(/^\.+/,"").slice(-100)||"file",n=t,s=1;for(;e.has(n);)n=`${s++}-${t}`;return e.add(n),n}async function dn(r,e,t,n){if(!e.length)return"";let s=Mt.default.join(t,Ns);cn.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],a=0;for(let u of e){if(o.length>=Tl){n("warn",`attachment cap reached (${Tl} files) - skipping the rest`);break}if(u.size>tp){n("warn",`skipping attachment "${u.filename}" - ${ip(u.size)} MB exceeds the 15 MB limit`);continue}if(a+u.size>rp){n("warn",`attachment size budget reached - skipping "${u.filename}" and the rest`);break}try{let c=await r.downloadAttachment(u.contentUrl),f=xl(u.filename,i);cn.default.writeFileSync(Mt.default.join(s,f),c),a+=c.length,o.push(`- ${Ns}/${f} (${u.mimeType||"unknown type"}, ${lo(c.length)} KB)`),n("info",`Downloaded attachment "${u.filename}" (${lo(c.length)} KB)`)}catch(c){n("warn",`could not download attachment "${u.filename}": ${c instanceof Error?c.message:c}`)}}return o.length?`
261
+ `+t)}function Yr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Yr),r.emit("wsClientError",o,t,e)}else gs(t,n,s,i)}});var vh={};ks(vh,{buildSetupReport:()=>Iv,claudeLoggedIn:()=>yh,repoDefaultBranch:()=>gh});function gh(r){let e=(...s)=>{try{return(0,qi.execFileSync)("git",["-C",r,...s],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}},t=e("symbolic-ref","--short","refs/remotes/origin/HEAD");if(t?.startsWith("origin/"))return t.slice(7);let n=e("rev-parse","--abbrev-ref","HEAD");return n&&n!=="HEAD"?n:""}function yh(r=ph.default.homedir()){if(Ht.default.existsSync(Qr.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Ht.default.readFileSync(Qr.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function Iv(r,e){let t=!1,n="";if(bs&&Date.now()-bs.at<6e4)t=bs.installed,n=bs.version;else{try{let{stdout:o}=await Cv(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}bs={at:Date.now(),installed:t,version:n}}let s=e.map(o=>{let a=r.repos[o];if(!a)return{repoName:o,mapped:!1,pathExists:!1,isGit:!1,claudeMd:!1,deployMd:!1,testMd:!1,githubToken:!1,githubTokenOwn:!1,defaultBranch:""};let c=Ht.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:c,isGit:c&&Ht.default.existsSync(Qr.default.join(a.path,".git")),claudeMd:c&&Ht.default.existsSync(Qr.default.join(a.path,"CLAUDE.md")),deployMd:c&&Ht.default.existsSync(Qr.default.join(a.path,"DEPLOY.md")),testMd:c&&Ht.default.existsSync(Qr.default.join(a.path,"TEST.md")),githubToken:!!Ae(r,o),githubTokenOwn:!!a.github?.token,defaultBranch:c?gh(a.path):""}}),i=Object.values(r.repos).find(o=>o.github?.token);return{jiraConfigured:!!r.jira,jiraEmail:r.jira?.email??"",claude:{installed:t,version:n,loggedIn:yh()},githubTokenSet:!!(r.github?.token||i),githubLogin:r.github?.login??i?.github?.login??"",deploysEnabled:r.deploy.enabled,jiraUserCount:Object.keys(r.jiraUsers).length,repos:s}}var qi,Ht,ph,Qr,mh,Cv,bs,bh=_s(()=>{"use strict";qi=require("node:child_process"),Ht=E(require("node:fs"),1),ph=E(require("node:os"),1),Qr=E(require("node:path"),1),mh=require("node:util");Or();Cv=(0,mh.promisify)(qi.execFile);bs=null});var et=E(require("node:fs"),1),Ka=E(require("node:os"),1),Un=E(require("node:path"),1),At=require("node:child_process"),Fi=require("node:crypto"),en=E(require("node:readline/promises"),1);var cl=E(ll(),1),{program:zv,createCommand:Dv,createArgument:Lv,createOption:Uv,CommanderError:qv,InvalidArgumentError:Fv,InvalidOptionArgumentError:Bv,Command:ul,Argument:Kv,Option:Zv,Help:Gv}=cl.default;var yt=E(require("node:fs"),1),As=E(require("node:os"),1),$s=E(require("node:path"),1);var _={};ks(_,{BRAND:()=>mf,DIRTY:()=>Wt,EMPTY_PATH:()=>Gh,INVALID:()=>q,NEVER:()=>Qf,OK:()=>we,ParseStatus:()=>ve,Schema:()=>Y,ZodAny:()=>jt,ZodArray:()=>gt,ZodBigInt:()=>Yt,ZodBoolean:()=>Xt,ZodBranded:()=>Zn,ZodCatch:()=>cr,ZodDate:()=>Qt,ZodDefault:()=>lr,ZodDiscriminatedUnion:()=>Is,ZodEffects:()=>Le,ZodEnum:()=>or,ZodError:()=>xe,ZodFirstPartyTypeKind:()=>F,ZodFunction:()=>Es,ZodIntersection:()=>nr,ZodIssueCode:()=>I,ZodLazy:()=>sr,ZodLiteral:()=>ir,ZodMap:()=>an,ZodNaN:()=>cn,ZodNativeEnum:()=>ar,ZodNever:()=>Ge,ZodNull:()=>tr,ZodNullable:()=>nt,ZodNumber:()=>Jt,ZodObject:()=>Ce,ZodOptional:()=>ze,ZodParsedType:()=>j,ZodPipeline:()=>Gn,ZodPromise:()=>Ot,ZodReadonly:()=>ur,ZodRecord:()=>Rs,ZodSchema:()=>Y,ZodSet:()=>ln,ZodString:()=>Pt,ZodSymbol:()=>sn,ZodTransformer:()=>Le,ZodTuple:()=>rt,ZodType:()=>Y,ZodUndefined:()=>er,ZodUnion:()=>rr,ZodUnknown:()=>mt,ZodVoid:()=>on,addIssueToContext:()=>$,any:()=>Tf,array:()=>Rf,bigint:()=>bf,boolean:()=>_l,coerce:()=>Xf,custom:()=>vl,date:()=>wf,datetimeRegex:()=>gl,defaultErrorMap:()=>ft,discriminatedUnion:()=>Pf,effect:()=>Kf,enum:()=>qf,function:()=>Df,getErrorMap:()=>tn,getParsedType:()=>tt,instanceof:()=>yf,intersection:()=>jf,isAborted:()=>xs,isAsync:()=>rn,isDirty:()=>Cs,isValid:()=>$t,late:()=>gf,lazy:()=>Lf,literal:()=>Uf,makeIssue:()=>Kn,map:()=>Mf,nan:()=>vf,nativeEnum:()=>Ff,never:()=>Cf,null:()=>Sf,nullable:()=>Gf,number:()=>wl,object:()=>Ef,objectUtil:()=>io,oboolean:()=>Yf,onumber:()=>Jf,optional:()=>Zf,ostring:()=>Wf,pipeline:()=>Vf,preprocess:()=>Hf,promise:()=>Bf,quotelessJson:()=>Bh,record:()=>Nf,set:()=>zf,setErrorMap:()=>Zh,strictObject:()=>Af,string:()=>bl,symbol:()=>_f,transformer:()=>Kf,tuple:()=>Of,undefined:()=>kf,union:()=>$f,unknown:()=>xf,util:()=>Q,void:()=>If});var Q;(function(r){r.assertEqual=s=>{};function e(s){}r.assertIs=e;function t(s){throw new Error}r.assertNever=t,r.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},r.getValidEnumValues=s=>{let i=r.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return r.objectValues(o)},r.objectValues=s=>r.objectKeys(s).map(function(i){return s[i]}),r.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},r.find=(s,i)=>{for(let o of s)if(i(o))return o},r.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function n(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}r.joinValues=n,r.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Q||(Q={}));var io;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(io||(io={}));var j=Q.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),tt=r=>{switch(typeof r){case"undefined":return j.undefined;case"string":return j.string;case"number":return Number.isNaN(r)?j.nan:j.number;case"boolean":return j.boolean;case"function":return j.function;case"bigint":return j.bigint;case"symbol":return j.symbol;case"object":return Array.isArray(r)?j.array:r===null?j.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?j.promise:typeof Map<"u"&&r instanceof Map?j.map:typeof Set<"u"&&r instanceof Set?j.set:typeof Date<"u"&&r instanceof Date?j.date:j.object;default:return j.unknown}};var I=Q.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"]),Bh=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),xe=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(a[u]=a[u]||{_errors:[]},a[u]._errors.push(t(o))):a[u]=a[u]||{_errors:[]},a=a[u],c++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Q.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},n=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};xe.create=r=>new xe(r);var Kh=(r,e)=>{let t;switch(r.code){case I.invalid_type:r.received===j.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case I.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,Q.jsonStringifyReplacer)}`;break;case I.unrecognized_keys:t=`Unrecognized key(s) in object: ${Q.joinValues(r.keys,", ")}`;break;case I.invalid_union:t="Invalid input";break;case I.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${Q.joinValues(r.options)}`;break;case I.invalid_enum_value:t=`Invalid enum value. Expected ${Q.joinValues(r.options)}, received '${r.received}'`;break;case I.invalid_arguments:t="Invalid function arguments";break;case I.invalid_return_type:t="Invalid function return type";break;case I.invalid_date:t="Invalid date";break;case I.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:Q.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case I.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case I.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case I.custom:t="Invalid input";break;case I.invalid_intersection_types:t="Intersection results could not be merged";break;case I.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case I.not_finite:t="Number must be finite";break;default:t=e.defaultError,Q.assertNever(r)}return{message:t}},ft=Kh;var dl=ft;function Zh(r){dl=r}function tn(){return dl}var Kn=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",c=n.filter(u=>!!u).slice().reverse();for(let u of c)a=u(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},Gh=[];function $(r,e){let t=tn(),n=Kn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===ft?void 0:ft].filter(s=>!!s)});r.common.issues.push(n)}var ve=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let n=[];for(let s of t){if(s.status==="aborted")return q;s.status==="dirty"&&e.dirty(),n.push(s.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let s of t){let i=await s.key,o=await s.value;n.push({key:i,value:o})}return r.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return q;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(n[i.value]=o.value)}return{status:e.value,value:n}}},q=Object.freeze({status:"aborted"}),Wt=r=>({status:"dirty",value:r}),we=r=>({status:"valid",value:r}),xs=r=>r.status==="aborted",Cs=r=>r.status==="dirty",$t=r=>r.status==="valid",rn=r=>typeof Promise<"u"&&r instanceof Promise;var N;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(N||(N={}));var De=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},hl=(r,e)=>{if($t(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new xe(r.common.issues);return this._error=t,this._error}}};function G(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:c}=r;return o.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:c??t??a.defaultError}},description:s}}var Y=class{get description(){return this._def.description}_getType(e){return tt(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:tt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ve,ctx:{common:e.parent.common,data:e.data,parsedType:tt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(rn(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)},s=this._parseSync({data:e,path:n.path,parent:n});return hl(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return $t(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(n=>$t(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tt(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(rn(s)?s:Promise.resolve(s));return hl(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:I.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new Le({schema:this,typeName:F.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return ze.create(this,this._def)}nullable(){return nt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return gt.create(this)}promise(){return Ot.create(this,this._def)}or(e){return rr.create([this,e],this._def)}and(e){return nr.create(this,e,this._def)}transform(e){return new Le({...G(this._def),schema:this,typeName:F.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new lr({...G(this._def),innerType:this,defaultValue:t,typeName:F.ZodDefault})}brand(){return new Zn({typeName:F.ZodBranded,type:this,...G(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new cr({...G(this._def),innerType:this,catchValue:t,typeName:F.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Gn.create(this,e)}readonly(){return ur.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Hh=/^c[^\s-]{8,}$/i,Vh=/^[0-9a-z]+$/,Wh=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Jh=/^[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,Yh=/^[a-z0-9_-]{21}$/i,Xh=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Qh=/^[-+]?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)?)??$/,ef=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,tf="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",oo,rf=/^(?:(?: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])$/,nf=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,sf=/^(([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]))$/,of=/^(([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])$/,af=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,lf=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,pl="((\\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])))",cf=new RegExp(`^${pl}$`);function ml(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function uf(r){return new RegExp(`^${ml(r)}$`)}function gl(r){let e=`${pl}T${ml(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function df(r,e){return!!((e==="v4"||!e)&&rf.test(r)||(e==="v6"||!e)&&sf.test(r))}function hf(r,e){if(!Xh.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let n=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(n));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function ff(r,e){return!!((e==="v4"||!e)&&nf.test(r)||(e==="v6"||!e)&&of.test(r))}var Pt=class r extends Y{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==j.string){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.string,received:i.parsedType}),q}let n=new ve,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?$(s,{code:I.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&$(s,{code:I.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")ef.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"email",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")oo||(oo=new RegExp(tf,"u")),oo.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"emoji",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Jh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"uuid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Yh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"nanoid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Hh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Vh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid2",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Wh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ulid",code:I.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),$(s,{validation:"url",code:I.invalid_string,message:i.message}),n.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"regex",code:I.invalid_string,message:i.message}),n.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?gl(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?cf.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?uf(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:I.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Qh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"duration",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?df(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ip",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?hf(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"jwt",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?ff(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cidr",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?af.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64",code:I.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?lf.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64url",code:I.invalid_string,message:i.message}),n.dirty()):Q.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:I.invalid_string,...N.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...N.errToObj(e)})}url(e){return this._addCheck({kind:"url",...N.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...N.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...N.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...N.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...N.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...N.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...N.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...N.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...N.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...N.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...N.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...N.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...N.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...N.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...N.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...N.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...N.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...N.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...N.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...N.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...N.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...N.errToObj(t)})}nonempty(e){return this.min(1,N.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Pt.create=r=>new Pt({checks:[],typeName:F.ZodString,coerce:r?.coerce??!1,...G(r)});function pf(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Jt=class r extends Y{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)!==j.number){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.number,received:i.parsedType}),q}let n,s=new ve;for(let i of this._def.checks)i.kind==="int"?Q.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:I.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?pf(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_finite,message:i.message}),s.dirty()):Q.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,N.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:N.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:N.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:N.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:N.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:N.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:N.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:N.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:N.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Q.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks){if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;n.kind==="min"?(t===null||n.value>t)&&(t=n.value):n.kind==="max"&&(e===null||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Jt.create=r=>new Jt({checks:[],typeName:F.ZodNumber,coerce:r?.coerce||!1,...G(r)});var Yt=class r extends Y{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)!==j.bigint)return this._getInvalidInput(e);let n,s=new ve;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),$(n,{code:I.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):Q.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return $(t,{code:I.invalid_type,expected:j.bigint,received:t.parsedType}),q}gte(e,t){return this.setLimit("min",e,!0,N.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:N.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:N.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:N.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:N.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Yt.create=r=>new Yt({checks:[],typeName:F.ZodBigInt,coerce:r?.coerce??!1,...G(r)});var Xt=class extends Y{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==j.boolean){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.boolean,received:n.parsedType}),q}return we(e.data)}};Xt.create=r=>new Xt({typeName:F.ZodBoolean,coerce:r?.coerce||!1,...G(r)});var Qt=class r extends Y{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==j.date){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_type,expected:j.date,received:i.parsedType}),q}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return $(i,{code:I.invalid_date}),q}let n=new ve,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:I.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):Q.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:N.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:N.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};Qt.create=r=>new Qt({checks:[],coerce:r?.coerce||!1,typeName:F.ZodDate,...G(r)});var sn=class extends Y{_parse(e){if(this._getType(e)!==j.symbol){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.symbol,received:n.parsedType}),q}return we(e.data)}};sn.create=r=>new sn({typeName:F.ZodSymbol,...G(r)});var er=class extends Y{_parse(e){if(this._getType(e)!==j.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.undefined,received:n.parsedType}),q}return we(e.data)}};er.create=r=>new er({typeName:F.ZodUndefined,...G(r)});var tr=class extends Y{_parse(e){if(this._getType(e)!==j.null){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.null,received:n.parsedType}),q}return we(e.data)}};tr.create=r=>new tr({typeName:F.ZodNull,...G(r)});var jt=class extends Y{constructor(){super(...arguments),this._any=!0}_parse(e){return we(e.data)}};jt.create=r=>new jt({typeName:F.ZodAny,...G(r)});var mt=class extends Y{constructor(){super(...arguments),this._unknown=!0}_parse(e){return we(e.data)}};mt.create=r=>new mt({typeName:F.ZodUnknown,...G(r)});var Ge=class extends Y{_parse(e){let t=this._getOrReturnCtx(e);return $(t,{code:I.invalid_type,expected:j.never,received:t.parsedType}),q}};Ge.create=r=>new Ge({typeName:F.ZodNever,...G(r)});var on=class extends Y{_parse(e){if(this._getType(e)!==j.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.void,received:n.parsedType}),q}return we(e.data)}};on.create=r=>new on({typeName:F.ZodVoid,...G(r)});var gt=class r extends Y{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==j.array)return $(t,{code:I.invalid_type,expected:j.array,received:t.parsedType}),q;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&($(t,{code:o?I.too_big:I.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),n.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&($(t,{code:I.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),n.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&($(t,{code:I.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new De(t,o,t.path,a)))).then(o=>ve.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new De(t,o,t.path,a)));return ve.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:N.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:N.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:N.toString(t)}})}nonempty(e){return this.min(1,e)}};gt.create=(r,e)=>new gt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:F.ZodArray,...G(e)});function nn(r){if(r instanceof Ce){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=ze.create(nn(n))}return new Ce({...r._def,shape:()=>e})}else return r instanceof gt?new gt({...r._def,type:nn(r.element)}):r instanceof ze?ze.create(nn(r.unwrap())):r instanceof nt?nt.create(nn(r.unwrap())):r instanceof rt?rt.create(r.items.map(e=>nn(e))):r}var Ce=class r extends Y{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=Q.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==j.object){let u=this._getOrReturnCtx(e);return $(u,{code:I.invalid_type,expected:j.object,received:u.parsedType}),q}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ge&&this._def.unknownKeys==="strip"))for(let u in s.data)o.includes(u)||a.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 De(s,p,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof Ge){let u=this._def.unknownKeys;if(u==="passthrough")for(let f of a)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(u==="strict")a.length>0&&($(s,{code:I.unrecognized_keys,keys:a}),n.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let f of a){let p=s.data[f];c.push({key:{status:"valid",value:f},value:u._parse(new De(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,v=await f.value;u.push({key:p,value:v,alwaysSet:f.alwaysSet})}return u}).then(u=>ve.mergeObjectSync(n,u)):ve.mergeObjectSync(n,c)}get shape(){return this._def.shape()}strict(e){return N.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:N.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:F.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of Q.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let n of Q.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return nn(this)}partial(e){let t={};for(let n of Q.objectKeys(this.shape)){let s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let n of Q.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof ze;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return yl(Q.objectKeys(this.shape))}};Ce.create=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strip",catchall:Ge.create(),typeName:F.ZodObject,...G(e)});Ce.strictCreate=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strict",catchall:Ge.create(),typeName:F.ZodObject,...G(e)});Ce.lazycreate=(r,e)=>new Ce({shape:r,unknownKeys:"strip",catchall:Ge.create(),typeName:F.ZodObject,...G(e)});var rr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new xe(a.ctx.common.issues));return $(t,{code:I.invalid_union,unionErrors:o}),q}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of n){let u={...t,common:{...t.common,issues:[]},parent:null},f=c._parseSync({data:t.data,path:t.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 t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new xe(c));return $(t,{code:I.invalid_union,unionErrors:a}),q}}get options(){return this._def.options}};rr.create=(r,e)=>new rr({options:r,typeName:F.ZodUnion,...G(e)});var pt=r=>r instanceof sr?pt(r.schema):r instanceof Le?pt(r.innerType()):r instanceof ir?[r.value]:r instanceof or?r.options:r instanceof ar?Q.objectValues(r.enum):r instanceof lr?pt(r._def.innerType):r instanceof er?[void 0]:r instanceof tr?[null]:r instanceof ze?[void 0,...pt(r.unwrap())]:r instanceof nt?[null,...pt(r.unwrap())]:r instanceof Zn||r instanceof ur?pt(r.unwrap()):r instanceof cr?pt(r._def.innerType):[],Is=class r extends Y{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.object)return $(t,{code:I.invalid_type,expected:j.object,received:t.parsedType}),q;let n=this.discriminator,s=t.data[n],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):($(t,{code:I.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),q)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let s=new Map;for(let i of t){let o=pt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:F.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...G(n)})}};function ao(r,e){let t=tt(r),n=tt(e);if(r===e)return{valid:!0,data:r};if(t===j.object&&n===j.object){let s=Q.objectKeys(e),i=Q.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let c=ao(r[a],e[a]);if(!c.valid)return{valid:!1};o[a]=c.data}return{valid:!0,data:o}}else if(t===j.array&&n===j.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],c=ao(o,a);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return t===j.date&&n===j.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var nr=class extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(xs(i)||xs(o))return q;let a=ao(i.value,o.value);return a.valid?((Cs(i)||Cs(o))&&t.dirty(),{status:t.value,value:a.data}):($(n,{code:I.invalid_intersection_types}),q)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};nr.create=(r,e,t)=>new nr({left:r,right:e,typeName:F.ZodIntersection,...G(t)});var rt=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.array)return $(n,{code:I.invalid_type,expected:j.array,received:n.parsedType}),q;if(n.data.length<this._def.items.length)return $(n,{code:I.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),q;!this._def.rest&&n.data.length>this._def.items.length&&($(n,{code:I.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new De(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>ve.mergeArray(t,o)):ve.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};rt.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new rt({items:r,typeName:F.ZodTuple,rest:null,...G(e)})};var Rs=class r extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.object)return $(n,{code:I.invalid_type,expected:j.object,received:n.parsedType}),q;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new De(n,a,n.path,a)),value:o._parse(new De(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?ve.mergeObjectAsync(t,s):ve.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof Y?new r({keyType:e,valueType:t,typeName:F.ZodRecord,...G(n)}):new r({keyType:Pt.create(),valueType:e,typeName:F.ZodRecord,...G(t)})}},an=class extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.map)return $(n,{code:I.invalid_type,expected:j.map,received:n.parsedType}),q;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,c],u)=>({key:s._parse(new De(n,a,n.path,[u,"key"])),value:i._parse(new De(n,c,n.path,[u,"value"]))}));if(n.common.async){let a=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 q;(u.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(u.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let u=c.key,f=c.value;if(u.status==="aborted"||f.status==="aborted")return q;(u.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(u.value,f.value)}return{status:t.value,value:a}}}};an.create=(r,e,t)=>new an({valueType:e,keyType:r,typeName:F.ZodMap,...G(t)});var ln=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==j.set)return $(n,{code:I.invalid_type,expected:j.set,received:n.parsedType}),q;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&($(n,{code:I.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&n.data.size>s.maxSize.value&&($(n,{code:I.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(c){let u=new Set;for(let f of c){if(f.status==="aborted")return q;f.status==="dirty"&&t.dirty(),u.add(f.value)}return{status:t.value,value:u}}let a=[...n.data.values()].map((c,u)=>i._parse(new De(n,c,n.path,u)));return n.common.async?Promise.all(a).then(c=>o(c)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:N.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:N.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};ln.create=(r,e)=>new ln({valueType:r,minSize:null,maxSize:null,typeName:F.ZodSet,...G(e)});var Es=class r extends Y{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.function)return $(t,{code:I.invalid_type,expected:j.function,received:t.parsedType}),q;function n(a,c){return Kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,tn(),ft].filter(u=>!!u),issueData:{code:I.invalid_arguments,argumentsError:c}})}function s(a,c){return Kn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,tn(),ft].filter(u=>!!u),issueData:{code:I.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Ot){let a=this;return we(async function(...c){let u=new xe([]),f=await a._def.args.parseAsync(c,i).catch(S=>{throw u.addIssue(n(c,S)),u}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(S=>{throw u.addIssue(s(p,S)),u})})}else{let a=this;return we(function(...c){let u=a._def.args.safeParse(c,i);if(!u.success)throw new xe([n(c,u.error)]);let f=Reflect.apply(o,this,u.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new xe([s(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:rt.create(e).rest(mt.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new r({args:e||rt.create([]).rest(mt.create()),returns:t||mt.create(),typeName:F.ZodFunction,...G(n)})}},sr=class extends Y{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};sr.create=(r,e)=>new sr({getter:r,typeName:F.ZodLazy,...G(e)});var ir=class extends Y{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return $(t,{received:t.data,code:I.invalid_literal,expected:this._def.value}),q}return{status:"valid",value:e.data}}get value(){return this._def.value}};ir.create=(r,e)=>new ir({value:r,typeName:F.ZodLiteral,...G(e)});function yl(r,e){return new or({values:r,typeName:F.ZodEnum,...G(e)})}var or=class r extends Y{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return $(t,{expected:Q.joinValues(n),received:t.parsedType,code:I.invalid_type}),q}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return $(t,{received:t.data,code:I.invalid_enum_value,options:n}),q}return we(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};or.create=yl;var ar=class extends Y{_parse(e){let t=Q.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==j.string&&n.parsedType!==j.number){let s=Q.objectValues(t);return $(n,{expected:Q.joinValues(s),received:n.parsedType,code:I.invalid_type}),q}if(this._cache||(this._cache=new Set(Q.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=Q.objectValues(t);return $(n,{received:n.data,code:I.invalid_enum_value,options:s}),q}return we(e.data)}get enum(){return this._def.values}};ar.create=(r,e)=>new ar({values:r,typeName:F.ZodNativeEnum,...G(e)});var Ot=class extends Y{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==j.promise&&t.common.async===!1)return $(t,{code:I.invalid_type,expected:j.promise,received:t.parsedType}),q;let n=t.parsedType===j.promise?t.data:Promise.resolve(t.data);return we(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Ot.create=(r,e)=>new Ot({type:r,typeName:F.ZodPromise,...G(e)});var Le=class extends Y{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===F.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{$(n,o),o.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(n.data,i);if(n.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return q;let c=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return c.status==="aborted"?q:c.status==="dirty"?Wt(c.value):t.value==="dirty"?Wt(c.value):c});{if(t.value==="aborted")return q;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?q:a.status==="dirty"?Wt(a.value):t.value==="dirty"?Wt(a.value):a}}if(s.type==="refinement"){let o=a=>{let c=s.refinement(a,i);if(n.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?q:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(a=>a.status==="aborted"?q:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(n.common.async===!1){let o=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!$t(o))return q;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(o=>$t(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):q);Q.assertNever(s)}};Le.create=(r,e,t)=>new Le({schema:r,typeName:F.ZodEffects,effect:e,...G(t)});Le.createWithPreprocess=(r,e,t)=>new Le({schema:e,effect:{type:"preprocess",transform:r},typeName:F.ZodEffects,...G(t)});var ze=class extends Y{_parse(e){return this._getType(e)===j.undefined?we(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ze.create=(r,e)=>new ze({innerType:r,typeName:F.ZodOptional,...G(e)});var nt=class extends Y{_parse(e){return this._getType(e)===j.null?we(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};nt.create=(r,e)=>new nt({innerType:r,typeName:F.ZodNullable,...G(e)});var lr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===j.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};lr.create=(r,e)=>new lr({innerType:r,typeName:F.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...G(e)});var cr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return rn(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new xe(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new xe(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};cr.create=(r,e)=>new cr({innerType:r,typeName:F.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...G(e)});var cn=class extends Y{_parse(e){if(this._getType(e)!==j.nan){let n=this._getOrReturnCtx(e);return $(n,{code:I.invalid_type,expected:j.nan,received:n.parsedType}),q}return{status:"valid",value:e.data}}};cn.create=r=>new cn({typeName:F.ZodNaN,...G(r)});var mf=Symbol("zod_brand"),Zn=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Gn=class r extends Y{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return i.status==="aborted"?q:i.status==="dirty"?(t.dirty(),Wt(i.value)):this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();{let s=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?q:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:F.ZodPipeline})}},ur=class extends Y{_parse(e){let t=this._def.innerType._parse(e),n=s=>($t(s)&&(s.value=Object.freeze(s.value)),s);return rn(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};ur.create=(r,e)=>new ur({innerType:r,typeName:F.ZodReadonly,...G(e)});function fl(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function vl(r,e={},t){return r?jt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=fl(e,n),c=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:c})}});if(!i){let o=fl(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):jt.create()}var gf={object:Ce.lazycreate},F;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(F||(F={}));var yf=(r,e={message:`Input not instance of ${r.name}`})=>vl(t=>t instanceof r,e),bl=Pt.create,wl=Jt.create,vf=cn.create,bf=Yt.create,_l=Xt.create,wf=Qt.create,_f=sn.create,kf=er.create,Sf=tr.create,Tf=jt.create,xf=mt.create,Cf=Ge.create,If=on.create,Rf=gt.create,Ef=Ce.create,Af=Ce.strictCreate,$f=rr.create,Pf=Is.create,jf=nr.create,Of=rt.create,Nf=Rs.create,Mf=an.create,zf=ln.create,Df=Es.create,Lf=sr.create,Uf=ir.create,qf=or.create,Ff=ar.create,Bf=Ot.create,Kf=Le.create,Zf=ze.create,Gf=nt.create,Hf=Le.createWithPreprocess,Vf=Gn.create,Wf=()=>bl().optional(),Jf=()=>wl().optional(),Yf=()=>_l().optional(),Xf={string:(r=>Pt.create({...r,coerce:!0})),number:(r=>Jt.create({...r,coerce:!0})),boolean:(r=>Xt.create({...r,coerce:!0})),bigint:(r=>Yt.create({...r,coerce:!0})),date:(r=>Qt.create({...r,coerce:!0}))};var Qf=q;var kl=_.object({baseUrl:_.string().url(),email:_.string().email(),apiToken:_.string().min(1)}),lo=_.object({controlPlaneUrl:_.string().url(),runnerId:_.string().optional(),runnerToken:_.string().optional(),runnerName:_.string().default(As.default.hostname()),jira:kl.optional(),repos:_.record(_.object({path:_.string(),jira:kl.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 te(){let r=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(r)return r;let e=$s.default.join(As.default.homedir(),".config","allwright"),t=$s.default.join(As.default.homedir(),".config","ticketpilot");return!yt.default.existsSync(e)&&yt.default.existsSync(t)?t:e}function Nt(){return $s.default.join(te(),"runner.json")}function pe(){let r=Nt();if(!yt.default.existsSync(r))return null;let e=JSON.parse(yt.default.readFileSync(r,"utf8"));return lo.parse(e)}function he(r){let e=te();yt.default.mkdirSync(e,{recursive:!0,mode:448});let t=Nt(),n=t+".tmp";yt.default.writeFileSync(n,JSON.stringify(r,null,2)+`
262
+ `,{mode:384}),yt.default.renameSync(n,t),yt.default.chmodSync(t,384)}function Ps(r,e){return`${r}:${e}`}function dr(r,e,t){return r.environments[Ps(e,t)]?.secrets??{}}function se(){let r=pe();if(!r)throw new Error(`No runner config found at ${Nt()}. Run \`allwright init\` first.`);return r}var js=require("node:child_process"),Pe=E(require("node:fs"),1),Os=E(require("node:path"),1);var ep=new Set(["runner.log","runner.pid"]);function tp(r){return Pe.default.readdirSync(r).filter(e=>!ep.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function Sl(r){let e=te();if(!Pe.default.existsSync(e))throw new Error(`nothing to export - ${e} does not exist`);let t=tp(e);if(!t.length)throw new Error(`nothing to export - ${e} is empty`);let n=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-"),s=Os.default.resolve(r||`ticketpilot-backup-${n}.tgz`);return Pe.default.writeFileSync(s,"",{mode:384}),(0,js.execFileSync)("tar",["-czf",s,"-C",e,...t]),Pe.default.chmodSync(s,384),{file:s,entries:t}}function Tl(r){let e=Os.default.resolve(r);if(!Pe.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let t=(0,js.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
263
+ `).filter(Boolean);for(let i of t)if(i.startsWith("/")||i.split("/").includes(".."))throw new Error(`refusing to import - unsafe path in archive: ${i}`);let n=te(),s;Pe.default.existsSync(n)&&Pe.default.readdirSync(n).length&&(s=`${n}.bak-${Date.now()}`,Pe.default.renameSync(n,s)),Pe.default.mkdirSync(n,{recursive:!0,mode:448}),(0,js.execFileSync)("tar",["-xzf",e,"-C",n]);for(let i of Pe.default.readdirSync(n)){let o=Os.default.join(n,i);Pe.default.statSync(o).isFile()&&Pe.default.chmodSync(o,384)}return{restored:t.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var un=E(require("node:fs"),1),Mt=E(require("node:path"),1),Ns=".ticketpilot-attachments",rp=15*1024*1024,np=50*1024*1024,xl=20;function Cl(r,e){let t=Mt.default.basename(r).replace(/[^\w.\- ()]/g,"_").replace(/^\.+/,"").slice(-100)||"file",n=t,s=1;for(;e.has(n);)n=`${s++}-${t}`;return e.add(n),n}async function dn(r,e,t,n){if(!e.length)return"";let s=Mt.default.join(t,Ns);un.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],a=0;for(let c of e){if(o.length>=xl){n("warn",`attachment cap reached (${xl} files) - skipping the rest`);break}if(c.size>rp){n("warn",`skipping attachment "${c.filename}" - ${op(c.size)} MB exceeds the 15 MB limit`);continue}if(a+c.size>np){n("warn",`attachment size budget reached - skipping "${c.filename}" and the rest`);break}try{let u=await r.downloadAttachment(c.contentUrl),f=Cl(c.filename,i);un.default.writeFileSync(Mt.default.join(s,f),u),a+=u.length,o.push(`- ${Ns}/${f} (${c.mimeType||"unknown type"}, ${co(u.length)} KB)`),n("info",`Downloaded attachment "${c.filename}" (${co(u.length)} KB)`)}catch(u){n("warn",`could not download attachment "${c.filename}": ${u instanceof Error?u.message:u}`)}}return o.length?`
264
264
 
265
265
  Files attached to the Jira ticket, downloaded locally for this run. They are reference material and NOT part of the repository - never commit, copy, or edit them:
266
266
  ${o.join(`
267
267
  `)}
268
- Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(zt(t),"")}function zt(r){cn.default.rmSync(Mt.default.join(r,Ns),{recursive:!0,force:!0})}var np=4*1024*1024,sp=16*1024*1024;function Cl(r,e,t){let n=Mt.default.join(r,Ns,`chat-${e.replace(/[^\w-]/g,"")}`);if(!t.length)return{section:"",dir:n};cn.default.mkdirSync(n,{recursive:!0});let s=new Set,i=[],o=0,a=Mt.default.relative(r,n);for(let c of t){let f=Buffer.from(c.contentBase64,"base64");if(f.length>np||o+f.length>sp){i.push(`- (skipped "${c.name}" - over the upload size budget)`);continue}let p=xl(c.name,s);cn.default.writeFileSync(Mt.default.join(n,p),f),o+=f.length,i.push(`- ${a}/${p} (${lo(f.length)} KB)`)}return{section:`
268
+ Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(zt(t),"")}function zt(r){un.default.rmSync(Mt.default.join(r,Ns),{recursive:!0,force:!0})}var sp=4*1024*1024,ip=16*1024*1024;function Il(r,e,t){let n=Mt.default.join(r,Ns,`chat-${e.replace(/[^\w-]/g,"")}`);if(!t.length)return{section:"",dir:n};un.default.mkdirSync(n,{recursive:!0});let s=new Set,i=[],o=0,a=Mt.default.relative(r,n);for(let u of t){let f=Buffer.from(u.contentBase64,"base64");if(f.length>sp||o+f.length>ip){i.push(`- (skipped "${u.name}" - over the upload size budget)`);continue}let p=Cl(u.name,s);un.default.writeFileSync(Mt.default.join(n,p),f),o+=f.length,i.push(`- ${a}/${p} (${co(f.length)} KB)`)}return{section:`
269
269
 
270
270
  The user attached file(s) with this message, staged locally for you. They are reference material and NOT part of the repository - never commit, copy, or edit them. If a ticket is created from this chat, these files are attached to it automatically, so reference them by filename instead of pasting their content:
271
271
  ${i.join(`
272
272
  `)}
273
- Read them with the Read tool; images can be viewed directly.`,dir:n}}var lo=r=>Math.max(1,Math.round(r/1024)),ip=r=>Math.round(r/(1024*1024)*10)/10;var _e=E(require("node:fs"),1),zs=E(require("node:path"),1);function hn(){return zs.default.join(te(),"runner.pid")}function Ms(){return zs.default.join(te(),"runner.log")}function Il(){_e.default.mkdirSync(te(),{recursive:!0,mode:448});let r=_e.default.openSync(Ms(),"a",384);try{_e.default.chmodSync(Ms(),384)}catch{}return r}function hr(){let r=hn();if(!_e.default.existsSync(r))return null;let e=Number(_e.default.readFileSync(r,"utf8").trim());return Number.isFinite(e)&&e>0?e:null}function fr(r){try{return process.kill(r,0),!0}catch{return!1}}function Rl(r){_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(hn(),String(r),{mode:384})}function El(r){hr()===r&&_e.default.rmSync(hn(),{force:!0})}function uo(){return zs.default.join(te(),"runner.lock")}function Hn(){let r=uo();if(!_e.default.existsSync(r))return null;let e=Number(_e.default.readFileSync(r,"utf8").trim());return!Number.isFinite(e)||e<=0||e===process.pid?null:fr(e)?e:null}function Al(){let r=Hn();return r?{ok:!1,pid:r}:(_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(uo(),String(process.pid),{mode:384}),{ok:!0})}function co(){try{let r=uo();_e.default.existsSync(r)&&Number(_e.default.readFileSync(r,"utf8").trim())===process.pid&&_e.default.rmSync(r,{force:!0})}catch{}}var Zs=E(require("node:fs"),1),Xn=E(require("node:path"),1),tu=E(be(),1);async function ru(r,e){let t=await fetch(new URL("/api/runners/enroll",r.controlPlaneUrl),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enrollToken:e,name:r.runnerName,platform:`${process.platform}/${process.arch}`,runnerVersion:Gs})});if(!t.ok){let i=await t.text().catch(()=>"");throw new Error(`enrollment failed (${t.status}): ${i.slice(0,300)}`)}let n=tu.EnrollResponse.parse(await t.json()),s={...r,runnerId:n.runnerId,runnerToken:n.runnerToken};return he(s),s}function $m(){try{let r=process.argv[1]?Zs.default.realpathSync(process.argv[1]):"";for(let e of[Xn.default.dirname(r),Xn.default.dirname(Xn.default.dirname(r))]){let t=Xn.default.join(e,"package.json");if(!Zs.default.existsSync(t))continue;let n=JSON.parse(Zs.default.readFileSync(t,"utf8")).version;if(typeof n=="string"&&n)return n}}catch{}return"0.0.0"}var Gs=$m();_t();var hu="Posted automatically by Allwright",Pm=["Posted automatically by TicketPilot"],ot=r=>r.includes(hu)||Pm.some(e=>r.includes(e));var Ee=class{constructor(e){this.auth=e}auth;headers(){return{Authorization:`Basic ${Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64")}`,Accept:"application/json","Content-Type":"application/json"}}async request(e,t,n){let s=new URL(t,this.auth.baseUrl).toString(),i=await fetch(s,{method:e,headers:this.headers(),body:n===void 0?void 0:JSON.stringify(n)});if(!i.ok){let o=await i.text().catch(()=>"");throw new Error(`Jira ${e} ${t} -> ${i.status}: ${o.slice(0,500)}`)}if(i.status!==204)return await i.json()}async myself(){return this.request("GET","/rest/api/3/myself")}async searchUsers(e,t=20){let n=await this.userSearch(e,t);return n.length||!e.includes("@")?n:this.userSearch(e.slice(0,e.indexOf("@")),t)}async userSearch(e,t){return e.trim()?(await this.request("GET",`/rest/api/3/user/search?query=${encodeURIComponent(e)}&maxResults=${t}`)??[]).filter(s=>s.accountId&&(s.accountType??"atlassian")==="atlassian").map(s=>({accountId:s.accountId,displayName:s.displayName??"(no name)",email:s.emailAddress??"",active:s.active??!0})):[]}async search(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","components"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",components:(s.fields?.components??[]).map(i=>i.name??"").filter(Boolean)}))}async projectStatuses(e){let t=await this.request("GET",`/rest/api/3/project/${encodeURIComponent(e)}/statuses`),n=new Map;for(let i of t??[])for(let o of i.statuses??[])o.name&&!n.has(o.name)&&n.set(o.name,o.statusCategory?.key??"indeterminate");let s=i=>i==="new"?0:i==="done"?2:1;return[...n.entries()].sort((i,o)=>s(i[1])-s(o[1])).map(([i])=>i)}async searchEpics(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:`project = "${e}" AND issuetype = Epic AND statusCategory != Done ORDER BY created DESC`,maxResults:t,fields:["summary","status"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??""}))}async epicChildren(e,t=50){return((await this.request("POST","/rest/api/3/search/jql",{jql:`parent = "${e}" ORDER BY created ASC`,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"",statusCategory:s.fields?.status?.statusCategory?.key??"indeterminate",labels:s.fields?.labels??[]}))}async searchBoard(e,t=100){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"(no status)",statusId:s.fields?.status?.id??"",labels:s.fields?.labels??[]}))}async boardColumns(e){try{let n=(await this.request("GET",`/rest/agile/1.0/board?projectKeyOrId=${encodeURIComponent(e)}`)).values?.[0]?.id;if(!n)return null;let i=((await this.request("GET",`/rest/agile/1.0/board/${n}/configuration`)).columnConfig?.columns??[]).filter(o=>(o.statuses??[]).length>0&&o.name).map(o=>({name:o.name,statusIds:(o.statuses??[]).map(a=>a.id??"").filter(Boolean)}));return i.length?i:null}catch{return null}}async getIssue(e){let t=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?fields=summary,description,labels,comment,status,attachment`),n;try{n=await this.listAllComments(e)}catch{n=t.fields.comment?.comments??[]}let s=n.map(o=>({id:o.id??"",author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null,created:o.created,body:du(o.body)})),i=(t.fields.attachment??[]).filter(o=>o.id&&o.filename&&o.content).map(o=>({id:o.id,filename:o.filename,mimeType:o.mimeType??"",size:o.size??0,contentUrl:o.content}));return{key:t.key,summary:t.fields.summary??"",description:du(t.fields.description),labels:t.fields.labels??[],status:t.fields.status?.name??"",comments:s,attachments:i}}async listAllComments(e){let t=await this.fetchCommentPage(e,0),n=t.total??t.comments.length;if(n<=t.comments.length)return t.comments;let s=Math.max(0,n-200),i=s===0?[...t.comments]:[];for(;i.length<Math.min(n,200);){let o=await this.fetchCommentPage(e,s+i.length);if(!o.comments.length)break;i.push(...o.comments)}return i.slice(-200)}async fetchCommentPage(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/comment?startAt=${t}&maxResults=100`);return{comments:n.comments??[],total:n.total}}async downloadAttachment(e){let t=await fetch(e,{headers:this.headers()});if(!t.ok)throw new Error(`attachment download failed: ${t.status}`);return Buffer.from(await t.arrayBuffer())}async lastEnteredStatus(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?expand=changelog&fields=status`),s=t.toLowerCase(),i=null;for(let o of n.changelog?.histories??[])(o.items??[]).some(u=>(u.field==="status"||u.fieldId==="status")&&(u.toString??"").toLowerCase()===s)&&(!i||new Date(o.created)>new Date(i.at))&&(i={at:o.created,author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null});return i}async createIssue(e,t,n,s="Task",i){return{key:(await this.request("POST","/rest/api/3/issue",{fields:{project:{key:e},issuetype:{name:s},summary:t.slice(0,250),description:No(n),...i?{parent:{key:i}}:{}}})).key}}async addAttachments(e,t){if(!t.length)return;let n=new FormData;for(let a of t)n.append("file",new Blob([new Uint8Array(a.content)]),a.name.slice(0,255));let s=new URL(`/rest/api/3/issue/${encodeURIComponent(e)}/attachments`,this.auth.baseUrl).toString(),i=Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64"),o=await fetch(s,{method:"POST",headers:{Authorization:`Basic ${i}`,Accept:"application/json","X-Atlassian-Token":"no-check"},body:n});if(!o.ok)throw new Error(`Jira attachment upload failed: HTTP ${o.status}`)}async addTriggerComment(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:No(t)})}async addComment(e,t){let n=`${t}
273
+ Read them with the Read tool; images can be viewed directly.`,dir:n}}var co=r=>Math.max(1,Math.round(r/1024)),op=r=>Math.round(r/(1024*1024)*10)/10;var _e=E(require("node:fs"),1),zs=E(require("node:path"),1);function hn(){return zs.default.join(te(),"runner.pid")}function Ms(){return zs.default.join(te(),"runner.log")}function Rl(){_e.default.mkdirSync(te(),{recursive:!0,mode:448});let r=_e.default.openSync(Ms(),"a",384);try{_e.default.chmodSync(Ms(),384)}catch{}return r}function hr(){let r=hn();if(!_e.default.existsSync(r))return null;let e=Number(_e.default.readFileSync(r,"utf8").trim());return Number.isFinite(e)&&e>0?e:null}function fr(r){try{return process.kill(r,0),!0}catch{return!1}}function El(r){_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(hn(),String(r),{mode:384})}function Al(r){hr()===r&&_e.default.rmSync(hn(),{force:!0})}function uo(){return zs.default.join(te(),"runner.lock")}function Hn(){let r=uo();if(!_e.default.existsSync(r))return null;let e=Number(_e.default.readFileSync(r,"utf8").trim());return!Number.isFinite(e)||e<=0||e===process.pid?null:fr(e)?e:null}function $l(){let r=Hn();return r?{ok:!1,pid:r}:(_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(uo(),String(process.pid),{mode:384}),{ok:!0})}function ho(){try{let r=uo();_e.default.existsSync(r)&&Number(_e.default.readFileSync(r,"utf8").trim())===process.pid&&_e.default.rmSync(r,{force:!0})}catch{}}var Zs=E(require("node:fs"),1),Xn=E(require("node:path"),1),rc=E(be(),1);async function nc(r,e){let t=await fetch(new URL("/api/runners/enroll",r.controlPlaneUrl),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enrollToken:e,name:r.runnerName,platform:`${process.platform}/${process.arch}`,runnerVersion:Gs})});if(!t.ok){let i=await t.text().catch(()=>"");throw new Error(`enrollment failed (${t.status}): ${i.slice(0,300)}`)}let n=rc.EnrollResponse.parse(await t.json()),s={...r,runnerId:n.runnerId,runnerToken:n.runnerToken};return he(s),s}function Pm(){try{let r=process.argv[1]?Zs.default.realpathSync(process.argv[1]):"";for(let e of[Xn.default.dirname(r),Xn.default.dirname(Xn.default.dirname(r))]){let t=Xn.default.join(e,"package.json");if(!Zs.default.existsSync(t))continue;let n=JSON.parse(Zs.default.readFileSync(t,"utf8")).version;if(typeof n=="string"&&n)return n}}catch{}return"0.0.0"}var Gs=Pm();_t();var fc="Posted automatically by Allwright",jm=["Posted automatically by TicketPilot"],ot=r=>r.includes(fc)||jm.some(e=>r.includes(e));var Ee=class{constructor(e){this.auth=e}auth;headers(){return{Authorization:`Basic ${Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64")}`,Accept:"application/json","Content-Type":"application/json"}}async request(e,t,n){let s=new URL(t,this.auth.baseUrl).toString(),i=await fetch(s,{method:e,headers:this.headers(),body:n===void 0?void 0:JSON.stringify(n)});if(!i.ok){let o=await i.text().catch(()=>"");throw new Error(`Jira ${e} ${t} -> ${i.status}: ${o.slice(0,500)}`)}if(i.status!==204)return await i.json()}async myself(){return this.request("GET","/rest/api/3/myself")}async searchUsers(e,t=20){let n=await this.userSearch(e,t);return n.length||!e.includes("@")?n:this.userSearch(e.slice(0,e.indexOf("@")),t)}async userSearch(e,t){return e.trim()?(await this.request("GET",`/rest/api/3/user/search?query=${encodeURIComponent(e)}&maxResults=${t}`)??[]).filter(s=>s.accountId&&(s.accountType??"atlassian")==="atlassian").map(s=>({accountId:s.accountId,displayName:s.displayName??"(no name)",email:s.emailAddress??"",active:s.active??!0})):[]}async search(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","components"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",components:(s.fields?.components??[]).map(i=>i.name??"").filter(Boolean)}))}async projectStatuses(e){let t=await this.request("GET",`/rest/api/3/project/${encodeURIComponent(e)}/statuses`),n=new Map;for(let i of t??[])for(let o of i.statuses??[])o.name&&!n.has(o.name)&&n.set(o.name,o.statusCategory?.key??"indeterminate");let s=i=>i==="new"?0:i==="done"?2:1;return[...n.entries()].sort((i,o)=>s(i[1])-s(o[1])).map(([i])=>i)}async searchEpics(e,t=20){return((await this.request("POST","/rest/api/3/search/jql",{jql:`project = "${e}" AND issuetype = Epic AND statusCategory != Done ORDER BY created DESC`,maxResults:t,fields:["summary","status"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??""}))}async epicChildren(e,t=50){return((await this.request("POST","/rest/api/3/search/jql",{jql:`parent = "${e}" ORDER BY created ASC`,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"",statusCategory:s.fields?.status?.statusCategory?.key??"indeterminate",labels:s.fields?.labels??[]}))}async searchBoard(e,t=100){return((await this.request("POST","/rest/api/3/search/jql",{jql:e,maxResults:t,fields:["summary","status","labels"]})).issues??[]).map(s=>({key:s.key,summary:s.fields?.summary??"",status:s.fields?.status?.name??"(no status)",statusId:s.fields?.status?.id??"",labels:s.fields?.labels??[]}))}async boardColumns(e){try{let n=(await this.request("GET",`/rest/agile/1.0/board?projectKeyOrId=${encodeURIComponent(e)}`)).values?.[0]?.id;if(!n)return null;let i=((await this.request("GET",`/rest/agile/1.0/board/${n}/configuration`)).columnConfig?.columns??[]).filter(o=>(o.statuses??[]).length>0&&o.name).map(o=>({name:o.name,statusIds:(o.statuses??[]).map(a=>a.id??"").filter(Boolean)}));return i.length?i:null}catch{return null}}async getIssue(e){let t=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?fields=summary,description,labels,comment,status,attachment`),n;try{n=await this.listAllComments(e)}catch{n=t.fields.comment?.comments??[]}let s=n.map(o=>({id:o.id??"",author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null,created:o.created,body:hc(o.body)})),i=(t.fields.attachment??[]).filter(o=>o.id&&o.filename&&o.content).map(o=>({id:o.id,filename:o.filename,mimeType:o.mimeType??"",size:o.size??0,contentUrl:o.content}));return{key:t.key,summary:t.fields.summary??"",description:hc(t.fields.description),labels:t.fields.labels??[],status:t.fields.status?.name??"",comments:s,attachments:i}}async listAllComments(e){let t=await this.fetchCommentPage(e,0),n=t.total??t.comments.length;if(n<=t.comments.length)return t.comments;let s=Math.max(0,n-200),i=s===0?[...t.comments]:[];for(;i.length<Math.min(n,200);){let o=await this.fetchCommentPage(e,s+i.length);if(!o.comments.length)break;i.push(...o.comments)}return i.slice(-200)}async fetchCommentPage(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/comment?startAt=${t}&maxResults=100`);return{comments:n.comments??[],total:n.total}}async downloadAttachment(e){let t=await fetch(e,{headers:this.headers()});if(!t.ok)throw new Error(`attachment download failed: ${t.status}`);return Buffer.from(await t.arrayBuffer())}async lastEnteredStatus(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?expand=changelog&fields=status`),s=t.toLowerCase(),i=null;for(let o of n.changelog?.histories??[])(o.items??[]).some(c=>(c.field==="status"||c.fieldId==="status")&&(c.toString??"").toLowerCase()===s)&&(!i||new Date(o.created)>new Date(i.at))&&(i={at:o.created,author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null});return i}async createIssue(e,t,n,s="Task",i){return{key:(await this.request("POST","/rest/api/3/issue",{fields:{project:{key:e},issuetype:{name:s},summary:t.slice(0,250),description:Mo(n),...i?{parent:{key:i}}:{}}})).key}}async addAttachments(e,t){if(!t.length)return;let n=new FormData;for(let a of t)n.append("file",new Blob([new Uint8Array(a.content)]),a.name.slice(0,255));let s=new URL(`/rest/api/3/issue/${encodeURIComponent(e)}/attachments`,this.auth.baseUrl).toString(),i=Buffer.from(`${this.auth.email}:${this.auth.apiToken}`).toString("base64"),o=await fetch(s,{method:"POST",headers:{Authorization:`Basic ${i}`,Accept:"application/json","X-Atlassian-Token":"no-check"},body:n});if(!o.ok)throw new Error(`Jira attachment upload failed: HTTP ${o.status}`)}async addTriggerComment(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:Mo(t)})}async addComment(e,t){let n=`${t}
274
274
 
275
275
  ---
276
- _${hu} - never treated as a trigger._`;await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:No(n)})}async editLabels(e,t){let n=[...(t.add??[]).map(s=>({add:s})),...(t.remove??[]).map(s=>({remove:s}))];await this.request("PUT",`/rest/api/3/issue/${encodeURIComponent(e)}`,{update:{labels:n}})}async getTransitions(e){return((await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`)).transitions??[]).map(n=>({id:n.id,name:n.name}))}async transition(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`,{transition:{id:t}})}async transitionByName(e,t){let s=(await this.getTransitions(e)).find(i=>i.name.toLowerCase()===t.toLowerCase());return s?(await this.transition(e,s.id),!0):!1}};function du(r){if(!r)return"";let e=[],t=n=>{n.text&&e.push(n.text),n.type==="hardBreak"&&e.push(`
276
+ _${fc} - never treated as a trigger._`;await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:Mo(n)})}async editLabels(e,t){let n=[...(t.add??[]).map(s=>({add:s})),...(t.remove??[]).map(s=>({remove:s}))];await this.request("PUT",`/rest/api/3/issue/${encodeURIComponent(e)}`,{update:{labels:n}})}async getTransitions(e){return((await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`)).transitions??[]).map(n=>({id:n.id,name:n.name}))}async transition(e,t){await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/transitions`,{transition:{id:t}})}async transitionByName(e,t){let s=(await this.getTransitions(e)).find(i=>i.name.toLowerCase()===t.toLowerCase());return s?(await this.transition(e,s.id),!0):!1}};function hc(r){if(!r)return"";let e=[],t=n=>{n.text&&e.push(n.text),n.type==="hardBreak"&&e.push(`
277
277
  `);for(let s of n.content??[])t(s);n.type&&["paragraph","heading","listItem","codeBlock","blockquote"].includes(n.type)&&e.push(`
278
278
  `)};return t(r),e.join("").replace(/\n{3,}/g,`
279
279
 
280
- `).trim()}function No(r){let e=r.replace(/\r\n/g,`
280
+ `).trim()}function Mo(r){let e=r.replace(/\r\n/g,`
281
281
  `).split(`
282
- `),t=[],n=0,s=i=>{let o=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g,u=0,c;for(;(c=a.exec(i))!==null;){c.index>u&&o.push({type:"text",text:i.slice(u,c.index)});let f=c[0];f.startsWith("**")?o.push({type:"text",text:f.slice(2,-2),marks:[{type:"strong"}]}):o.push({type:"text",text:f.slice(1,-1),marks:[{type:"code"}]}),u=c.index+f.length}return u<i.length&&o.push({type:"text",text:i.slice(u)}),o.length?o:[{type:"text",text:" "}]};for(;n<e.length;){let i=e[n];if(i.trim()===""){n++;continue}let o=i.match(/^```(\w*)\s*$/);if(o){let p=[];for(n++;n<e.length&&!/^```\s*$/.test(e[n]);)p.push(e[n]),n++;n++,t.push({type:"codeBlock",attrs:o[1]?{language:o[1]}:{},content:[{type:"text",text:p.join(`
283
- `)||" "}]});continue}let a=i.match(/^(#{1,6})\s+(.*)$/);if(a){t.push({type:"heading",attrs:{level:a[1].length},content:s(a[2])}),n++;continue}if(i.match(/^\s*[-*]\s+(.*)$/)){let p=[];for(;n<e.length;){let v=e[n].match(/^\s*[-*]\s+(.*)$/);if(!v)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(v[1])}]}),n++}t.push({type:"bulletList",content:p});continue}if(i.match(/^\s*\d+[.)]\s+(.*)$/)){let p=[];for(;n<e.length;){let v=e[n].match(/^\s*\d+[.)]\s+(.*)$/);if(!v)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(v[1])}]}),n++}t.push({type:"orderedList",content:p});continue}let f=[i];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6}\s|```|\s*[-*]\s|\s*\d+[.)]\s)/.test(e[n]);)f.push(e[n]),n++;t.push({type:"paragraph",content:s(f.join(" "))})}return{type:"doc",version:1,content:t}}function fu(r,e,t){let n=r.repos[e]?.jira??r.jira;if(!n)return{kind:"legacy"};let s=t.trim().toLowerCase();if(!s)return{kind:"legacy"};if(s===n.email.toLowerCase())return{kind:"self"};let i=r.jiraUsers[s];return i?{kind:"user",creds:{baseUrl:n.baseUrl,email:i.email,apiToken:i.apiToken}}:{kind:"missing",error:`Jira actions from Allwright post under YOUR OWN Atlassian identity, and no Jira credential is set up for ${s} on the runner yet. Ask your admin to run this on the runner machine:
282
+ `),t=[],n=0,s=i=>{let o=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g,c=0,u;for(;(u=a.exec(i))!==null;){u.index>c&&o.push({type:"text",text:i.slice(c,u.index)});let f=u[0];f.startsWith("**")?o.push({type:"text",text:f.slice(2,-2),marks:[{type:"strong"}]}):o.push({type:"text",text:f.slice(1,-1),marks:[{type:"code"}]}),c=u.index+f.length}return c<i.length&&o.push({type:"text",text:i.slice(c)}),o.length?o:[{type:"text",text:" "}]};for(;n<e.length;){let i=e[n];if(i.trim()===""){n++;continue}let o=i.match(/^```(\w*)\s*$/);if(o){let p=[];for(n++;n<e.length&&!/^```\s*$/.test(e[n]);)p.push(e[n]),n++;n++,t.push({type:"codeBlock",attrs:o[1]?{language:o[1]}:{},content:[{type:"text",text:p.join(`
283
+ `)||" "}]});continue}let a=i.match(/^(#{1,6})\s+(.*)$/);if(a){t.push({type:"heading",attrs:{level:a[1].length},content:s(a[2])}),n++;continue}if(i.match(/^\s*[-*]\s+(.*)$/)){let p=[];for(;n<e.length;){let v=e[n].match(/^\s*[-*]\s+(.*)$/);if(!v)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(v[1])}]}),n++}t.push({type:"bulletList",content:p});continue}if(i.match(/^\s*\d+[.)]\s+(.*)$/)){let p=[];for(;n<e.length;){let v=e[n].match(/^\s*\d+[.)]\s+(.*)$/);if(!v)break;p.push({type:"listItem",content:[{type:"paragraph",content:s(v[1])}]}),n++}t.push({type:"orderedList",content:p});continue}let f=[i];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6}\s|```|\s*[-*]\s|\s*\d+[.)]\s)/.test(e[n]);)f.push(e[n]),n++;t.push({type:"paragraph",content:s(f.join(" "))})}return{type:"doc",version:1,content:t}}function pc(r,e,t){let n=r.repos[e]?.jira??r.jira;if(!n)return{kind:"legacy"};let s=t.trim().toLowerCase();if(!s)return{kind:"legacy"};if(s===n.email.toLowerCase())return{kind:"self"};let i=r.jiraUsers[s];return i?{kind:"user",creds:{baseUrl:n.baseUrl,email:i.email,apiToken:i.apiToken}}:{kind:"missing",error:`Jira actions from Allwright post under YOUR OWN Atlassian identity, and no Jira credential is set up for ${s} on the runner yet. Ask your admin to run this on the runner machine:
284
284
 
285
285
  allwright jira user-add ${s}
286
286
 
287
- It prompts for your Atlassian email and an API token (create one at id.atlassian.com -> Security -> API tokens). Takes effect immediately - then just retry this action.`}}Or();var Nr=require("node:child_process"),Tn=E(require("node:fs"),1),Mo=E(require("node:os"),1),Do=E(require("node:path"),1);var ts="allwright",mu=`/etc/systemd/system/${ts}.service`,zo="ticketpilot-runner";function Lo(){let r=process.env.SUDO_USER&&process.env.SUDO_USER!=="root"?process.env.SUDO_USER:"",e=r||Mo.default.userInfo().username,t=r?Do.default.join("/home",r):Mo.default.homedir();return{nodePath:process.execPath,scriptPath:Tn.default.realpathSync(process.argv[1]),user:e,home:t}}function Uo(r){let e=Do.default.dirname(r.nodePath);return`[Unit]
287
+ It prompts for your Atlassian email and an API token (create one at id.atlassian.com -> Security -> API tokens). Takes effect immediately - then just retry this action.`}}Or();var Nr=require("node:child_process"),Tn=E(require("node:fs"),1),zo=E(require("node:os"),1),Lo=E(require("node:path"),1);var ts="allwright",gc=`/etc/systemd/system/${ts}.service`,Do="ticketpilot-runner";function Uo(){let r=process.env.SUDO_USER&&process.env.SUDO_USER!=="root"?process.env.SUDO_USER:"",e=r||zo.default.userInfo().username,t=r?Lo.default.join("/home",r):zo.default.homedir();return{nodePath:process.execPath,scriptPath:Tn.default.realpathSync(process.argv[1]),user:e,home:t}}function qo(r){let e=Lo.default.dirname(r.nodePath);return`[Unit]
288
288
  Description=Allwright runner
289
289
  After=network-online.target
290
290
 
@@ -302,8 +302,8 @@ TimeoutStopSec=2h
302
302
 
303
303
  [Install]
304
304
  WantedBy=multi-user.target
305
- `}function gu(){return process.platform==="linux"&&Tn.default.existsSync("/run/systemd/system")}function yu(r){if(!gu())throw new Error(process.platform==="win32"?"Windows service install isn't built in yet - use NSSM: nssm install allwright <node> <this script> start --foreground":"no systemd on this machine - run `allwright start` (background mode) instead");let e=Lo(),t=Uo(e);if(typeof process.getuid=="function"&&process.getuid()!==0){r.info("Root is needed to write the unit. Re-run as:"),r.info(' sudo env "PATH=$PATH" allwright service install'),r.info("(the env PATH part matters when node is installed via nvm - plain sudo can't find it)"),r.info(""),r.info(`This is exactly what it will write to ${mu}:`),r.info(`
306
- `+t);return}try{(0,Nr.execFileSync)("systemctl",["disable","--now",zo]),r.info(`stopped the old ${zo} service - this one replaces it`)}catch{}let n=Hn();if(n)try{process.kill(n,"SIGTERM"),r.info(`stopped the running runner (pid ${n}) - the service takes over`)}catch{}Tn.default.writeFileSync(mu,t),(0,Nr.execFileSync)("systemctl",["daemon-reload"]),(0,Nr.execFileSync)("systemctl",["enable","--now",ts]),(0,Nr.execFileSync)("systemctl",["restart",ts]),r.info(`Installed and started (runs as ${e.user}, survives reboots).`),r.info(`Watch it: journalctl -u ${ts} -f`),r.info("Status: allwright service status")}function vu(r){if(!gu())throw new Error("no systemd on this machine");if(typeof process.getuid=="function"&&process.getuid()!==0)throw new Error("root is needed - run: sudo allwright service uninstall");for(let e of[ts,zo]){try{(0,Nr.execFileSync)("systemctl",["disable","--now",e])}catch{}let t=`/etc/systemd/system/${e}.service`;Tn.default.existsSync(t)&&Tn.default.rmSync(t)}(0,Nr.execFileSync)("systemctl",["daemon-reload"]),r.info("Service removed. The runner config and credentials were not touched.")}var bu=E(be(),1);function wu(r){return r.filter(e=>e.statusCategory!=="done"&&!e.labels.includes("agent-implemented")&&!e.labels.includes(bu.NEEDS_INPUT_LABEL))}function _u(r,e,t){let n=t.map(s=>{let i=(s.description??"").trim().slice(0,600);return`- ${s.key} [${s.status}] ${s.summary}${i?`
305
+ `}function yc(){return process.platform==="linux"&&Tn.default.existsSync("/run/systemd/system")}function vc(r){if(!yc())throw new Error(process.platform==="win32"?"Windows service install isn't built in yet - use NSSM: nssm install allwright <node> <this script> start --foreground":"no systemd on this machine - run `allwright start` (background mode) instead");let e=Uo(),t=qo(e);if(typeof process.getuid=="function"&&process.getuid()!==0){r.info("Root is needed to write the unit. Re-run as:"),r.info(' sudo env "PATH=$PATH" allwright service install'),r.info("(the env PATH part matters when node is installed via nvm - plain sudo can't find it)"),r.info(""),r.info(`This is exactly what it will write to ${gc}:`),r.info(`
306
+ `+t);return}try{(0,Nr.execFileSync)("systemctl",["disable","--now",Do]),r.info(`stopped the old ${Do} service - this one replaces it`)}catch{}let n=Hn();if(n)try{process.kill(n,"SIGTERM"),r.info(`stopped the running runner (pid ${n}) - the service takes over`)}catch{}Tn.default.writeFileSync(gc,t),(0,Nr.execFileSync)("systemctl",["daemon-reload"]),(0,Nr.execFileSync)("systemctl",["enable","--now",ts]),(0,Nr.execFileSync)("systemctl",["restart",ts]),r.info(`Installed and started (runs as ${e.user}, survives reboots).`),r.info(`Watch it: journalctl -u ${ts} -f`),r.info("Status: allwright service status")}function bc(r){if(!yc())throw new Error("no systemd on this machine");if(typeof process.getuid=="function"&&process.getuid()!==0)throw new Error("root is needed - run: sudo allwright service uninstall");for(let e of[ts,Do]){try{(0,Nr.execFileSync)("systemctl",["disable","--now",e])}catch{}let t=`/etc/systemd/system/${e}.service`;Tn.default.existsSync(t)&&Tn.default.rmSync(t)}(0,Nr.execFileSync)("systemctl",["daemon-reload"]),r.info("Service removed. The runner config and credentials were not touched.")}var wc=E(be(),1);function _c(r){return r.filter(e=>e.statusCategory!=="done"&&!e.labels.includes("agent-implemented")&&!e.labels.includes(wc.NEEDS_INPUT_LABEL))}function kc(r,e,t){let n=t.map(s=>{let i=(s.description??"").trim().slice(0,600);return`- ${s.key} [${s.status}] ${s.summary}${i?`
307
307
  ${i.replace(/\n+/g," ")}`:""}`}).join(`
308
308
  `);return`You are looking at this repository to help sequence work on the Jira epic ${r} ("${e}"). These child tickets are still pending:
309
309
 
@@ -314,9 +314,9 @@ Pick the ONE ticket that should be implemented FIRST. Weigh, in this order: (1)
314
314
  Answer with ONLY a fenced json block, nothing after it:
315
315
  \`\`\`json
316
316
  {"issueKey": "<one of the keys above>", "reason": "<2-3 sentences: why this one first, and what it unblocks>"}
317
- \`\`\``}function ku(r,e){let n=r.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??r.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!n)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(n),i=typeof s.issueKey=="string"?s.issueKey.trim():"",o=typeof s.reason=="string"?s.reason.trim():"";return e.includes(i)?{issueKey:i,reason:o||"(no reasoning given)"}:{error:`the agent recommended "${i}", which is not a pending child of this epic`}}catch{return{error:"the agent's JSON recommendation did not parse"}}}var Vo=require("node:crypto"),Hu=E(require("node:fs"),1);var qo=E(require("node:fs"),1),ei=E(require("node:path"),1),ti=E(be(),1),jm={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 Tu(r,e,t,n={}){let s=e.map(u=>`### Pack: ${u.name}
317
+ \`\`\``}function Sc(r,e){let n=r.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/)?.[1]??r.match(/\{[\s\S]*"issueKey"[\s\S]*?\}/)?.[0];if(!n)return{error:"the agent's answer contained no JSON recommendation"};try{let s=JSON.parse(n),i=typeof s.issueKey=="string"?s.issueKey.trim():"",o=typeof s.reason=="string"?s.reason.trim():"";return e.includes(i)?{issueKey:i,reason:o||"(no reasoning given)"}:{error:`the agent recommended "${i}", which is not a pending child of this epic`}}catch{return{error:"the agent's JSON recommendation did not parse"}}}var Wo=require("node:crypto"),Vc=E(require("node:fs"),1);var Fo=E(require("node:fs"),1),ti=E(require("node:path"),1),ri=E(be(),1),Om={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 xc(r,e,t,n={}){let s=e.map(c=>`### Pack: ${c.name}
318
318
 
319
- ${u.content}`).join(`
319
+ ${c.content}`).join(`
320
320
 
321
321
  `),i=t.trim()?`
322
322
 
@@ -334,7 +334,7 @@ Read whatever surrounding code you need for context, but every finding must be a
334
334
 
335
335
  ${n.testResults}
336
336
 
337
- Fold what these results show - failures, flaky exits, suspiciously green suites - into your findings with the rest of the audit.`:"";return`${jm[r]}
337
+ Fold what these results show - failures, flaky exits, suspiciously green suites - into your findings with the rest of the audit.`:"";return`${Om[r]}
338
338
 
339
339
  Knowledge below is LAYERED: global (product) -> org (this company) -> project (this repo). More specific levels OVERRIDE general ones; entries referencing a rule id (SEC-001 style) modify or disable that rule.
340
340
 
@@ -348,8 +348,8 @@ Explore the repository first - entry points, routes, storage, tests - then audit
348
348
  "evidence": [{"file": "<repo-relative path>", "line": <number, omit if n/a>, "note": "<what is there>"}],
349
349
  "fix": "<2-4 sentences: concrete fix, specific to this code>"}]}
350
350
  \`\`\`
351
- 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.`}function xu(r){let t=r.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??r.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!t)return{error:"the agent's report contained no JSON block"};let n;try{n=JSON.parse(t)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(n.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let a of n.findings.slice(0,25)){let u=Om(a),c=u?ti.AuditFinding.safeParse(u):null;if(!c?.success){i++;continue}let f=c.data.id;for(;o.has(f);)f=`${f}-2`;o.add(f),s.push({...c.data,id:f})}return{summary:typeof n.summary=="string"?n.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function Om(r){if(typeof r!="object"||r===null)return null;let e=r,t=typeof e.severity=="string"?e.severity.toLowerCase():"",n=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...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:Nm(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:ti.AuditSeverity.options.includes(t)?t:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:n,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function Su(r){let e=typeof r=="number"?r:typeof r=="string"?parseInt(r,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function Nm(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}function Mm(r){try{let e=qo.default.readFileSync(r,"utf8");return e?e.split(`
352
- `).length:0}catch{return null}}function Cu(r,e){let t=ei.default.resolve(r),n=[],s=[],i=0;for(let o of e){let a=[];for(let u of o.evidence){let c=u.file.trim().replace(/^\.\//,""),f=ei.default.resolve(t,c);if(f!==t&&!f.startsWith(t+ei.default.sep))continue;let p;try{p=qo.default.statSync(f)}catch{continue}if(p.isFile()){if(u.line!==void 0){let v=Mm(f);if(v!==null&&u.line>v){a.push({...u,line:void 0}),i++;continue}}a.push(u)}}if(!a.length){s.push({title:o.title,files:o.evidence.map(u=>u.file)});continue}n.push({...o,evidence:a})}return{findings:n,droppedFindings:s,correctedLines:i}}var rs=E(require("node:fs"),1),Fo=E(require("node:path"),1),Iu=E(be(),1);var zm=20;function Ru(){return Fo.default.join(te(),"audits.json")}function xn(){try{return{byProject:JSON.parse(rs.default.readFileSync(Ru(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function Eu(r){let e=Ru();rs.default.mkdirSync(Fo.default.dirname(e),{recursive:!0,mode:448});let t=e+".tmp";rs.default.writeFileSync(t,JSON.stringify(r,null,2),{mode:384}),rs.default.renameSync(t,e)}function Au(r,e){let t=xn(),n=t.byProject[r]??[];n.unshift(Iu.AuditRecord.parse(e)),t.byProject[r]=n.slice(0,zm),Eu(t)}function $u(r){return(xn().byProject[r]??[]).map(e=>{let t={};for(let n of e.findings)t[n.severity]=(t[n.severity]??0)+1;return{id:e.id,role:e.role,createdAt:e.createdAt,findingCount:e.findings.length,bySeverity:t}})}function Pu(r,e){let t=xn(),n=e?Date.parse(e):NaN,s={};for(let i of r){let o=(t.byProject[i]??[]).filter(u=>!Number.isFinite(n)||Date.parse(u.createdAt)>=n);if(!o.length)continue;let a={audits:o.length,findings:0,valid:0,falsePositive:0,wontFix:0,unreviewed:0};for(let u of o){a.findings+=u.findings.length;for(let c of u.findings){let f=u.verdicts[c.id]?.verdict;f==="valid"?a.valid++:f==="false-positive"?a.falsePositive++:f==="wont-fix"?a.wontFix++:a.unreviewed++}}s[i]=a}return s}function Bo(r,e,t){let n=xn(),i=(n.byProject[r]??[]).find(a=>a.id===e);if(!i)return null;i.ticketed??={},i.verdicts??={},i.lessonsWritten??=[];let o=new Set(i.findings.map(a=>a.id));t.selected&&(i.review={selected:t.selected.filter(a=>o.has(a)),updatedAt:new Date().toISOString()});for(let a of t.ticketed??[])o.has(a.findingId)&&(i.ticketed={...i.ticketed,[a.findingId]:a.issueKey});for(let a of t.verdicts??[])o.has(a.findingId)&&(i.verdicts={...i.verdicts,[a.findingId]:{verdict:a.verdict,note:a.note,by:t.verdictBy??"",at:new Date().toISOString()}});for(let a of t.markLessonsWritten??[])o.has(a)&&!i.lessonsWritten.includes(a)&&i.lessonsWritten.push(a);return Eu(n),i}function ju(r,e){return(xn().byProject[r]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function Ou(r,e){return(xn().byProject[r]??[]).find(t=>t.id===e)??null}_t();var Se=E(require("node:fs"),1),at=E(require("node:path"),1),Mu=E(be(),1);var Dm=`# Security baseline - what to check in any repo
351
+ 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.`}function Cc(r){let t=r.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??r.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!t)return{error:"the agent's report contained no JSON block"};let n;try{n=JSON.parse(t)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(n.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let a of n.findings.slice(0,25)){let c=Nm(a),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 n.summary=="string"?n.summary.trim().slice(0,2e3):"",findings:s,dropped:i}}function Nm(r){if(typeof r!="object"||r===null)return null;let e=r,t=typeof e.severity=="string"?e.severity.toLowerCase():"",n=Array.isArray(e.evidence)?e.evidence.filter(i=>typeof i=="object"&&i!==null).map(i=>({file:typeof i.file=="string"?i.file:"",...Tc(i.line)?{line:Tc(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:Mm(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(t)?t:void 0,area:typeof e.area=="string"?e.area.slice(0,60):"",evidence:n,fix:typeof e.fix=="string"?e.fix.slice(0,2e3):""}}function Tc(r){let e=typeof r=="number"?r:typeof r=="string"?parseInt(r,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function Mm(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}function zm(r){try{let e=Fo.default.readFileSync(r,"utf8");return e?e.split(`
352
+ `).length:0}catch{return null}}function Ic(r,e){let t=ti.default.resolve(r),n=[],s=[],i=0;for(let o of e){let a=[];for(let c of o.evidence){let u=c.file.trim().replace(/^\.\//,""),f=ti.default.resolve(t,u);if(f!==t&&!f.startsWith(t+ti.default.sep))continue;let p;try{p=Fo.default.statSync(f)}catch{continue}if(p.isFile()){if(c.line!==void 0){let v=zm(f);if(v!==null&&c.line>v){a.push({...c,line:void 0}),i++;continue}}a.push(c)}}if(!a.length){s.push({title:o.title,files:o.evidence.map(c=>c.file)});continue}n.push({...o,evidence:a})}return{findings:n,droppedFindings:s,correctedLines:i}}var rs=E(require("node:fs"),1),Bo=E(require("node:path"),1),Rc=E(be(),1);var Dm=20;function Ec(){return Bo.default.join(te(),"audits.json")}function xn(){try{return{byProject:JSON.parse(rs.default.readFileSync(Ec(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function Ac(r){let e=Ec();rs.default.mkdirSync(Bo.default.dirname(e),{recursive:!0,mode:448});let t=e+".tmp";rs.default.writeFileSync(t,JSON.stringify(r,null,2),{mode:384}),rs.default.renameSync(t,e)}function $c(r,e){let t=xn(),n=t.byProject[r]??[];n.unshift(Rc.AuditRecord.parse(e)),t.byProject[r]=n.slice(0,Dm),Ac(t)}function Pc(r){return(xn().byProject[r]??[]).map(e=>{let t={};for(let n of e.findings)t[n.severity]=(t[n.severity]??0)+1;return{id:e.id,role:e.role,createdAt:e.createdAt,findingCount:e.findings.length,bySeverity:t}})}function jc(r,e){let t=xn(),n=e?Date.parse(e):NaN,s={};for(let i of r){let o=(t.byProject[i]??[]).filter(c=>!Number.isFinite(n)||Date.parse(c.createdAt)>=n);if(!o.length)continue;let a={audits:o.length,findings:0,valid:0,falsePositive:0,wontFix:0,unreviewed:0};for(let c of o){a.findings+=c.findings.length;for(let u of c.findings){let f=c.verdicts[u.id]?.verdict;f==="valid"?a.valid++:f==="false-positive"?a.falsePositive++:f==="wont-fix"?a.wontFix++:a.unreviewed++}}s[i]=a}return s}function Ko(r,e,t){let n=xn(),i=(n.byProject[r]??[]).find(a=>a.id===e);if(!i)return null;i.ticketed??={},i.verdicts??={},i.lessonsWritten??=[];let o=new Set(i.findings.map(a=>a.id));t.selected&&(i.review={selected:t.selected.filter(a=>o.has(a)),updatedAt:new Date().toISOString()});for(let a of t.ticketed??[])o.has(a.findingId)&&(i.ticketed={...i.ticketed,[a.findingId]:a.issueKey});for(let a of t.verdicts??[])o.has(a.findingId)&&(i.verdicts={...i.verdicts,[a.findingId]:{verdict:a.verdict,note:a.note,by:t.verdictBy??"",at:new Date().toISOString()}});for(let a of t.markLessonsWritten??[])o.has(a)&&!i.lessonsWritten.includes(a)&&i.lessonsWritten.push(a);return Ac(n),i}function Oc(r,e){return(xn().byProject[r]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function Nc(r,e){return(xn().byProject[r]??[]).find(t=>t.id===e)??null}_t();var Se=E(require("node:fs"),1),at=E(require("node:path"),1),zc=E(be(),1);var Lm=`# Security baseline - what to check in any repo
353
353
 
354
354
  Every rule has a stable id. Findings must cite the id they violate.
355
355
 
@@ -392,7 +392,7 @@ Every rule has a stable id. Findings must cite the id they violate.
392
392
  - **SEC-042** TLS/redirect handling that downgrades to http.
393
393
 
394
394
  Prioritize by real exploitability in THIS codebase, not by rule order.
395
- `,Lm=`# Test gaps - what to check in any repo
395
+ `,Um=`# Test gaps - what to check in any repo
396
396
 
397
397
  Every rule has a stable id. Findings must cite the id they violate.
398
398
 
@@ -422,7 +422,7 @@ Every rule has a stable id. Findings must cite the id they violate.
422
422
  flaky suspects.
423
423
 
424
424
  Report the GAP and why it is risky here, not generic coverage philosophy.
425
- `,Um=`# GDPR readiness - data-protection audit for repos with EU exposure
425
+ `,qm=`# GDPR readiness - data-protection audit for repos with EU exposure
426
426
 
427
427
  FIRST decide exposure: if this product clearly has no EU users, no personal
428
428
  data, or is a purely static/internal tool, say so in ONE summary sentence and
@@ -466,7 +466,7 @@ rules below. Cite the rule id AND map the area to the closest GDPR article
466
466
 
467
467
  Severity: many users' data exposed or a missing legal-basis mechanism is
468
468
  high/critical; hygiene and documentation gaps are medium/low.
469
- `,qm=`# Architecture health - is this repository structurally sound?
469
+ `,Fm=`# Architecture health - is this repository structurally sound?
470
470
 
471
471
  Every rule has a stable id. Findings must cite the id they violate. Judge
472
472
  against what THIS codebase is trying to be (a static site does not need
@@ -505,20 +505,20 @@ deviations.
505
505
 
506
506
  Summarize with an overall verdict: is this repository HEALTHY for its
507
507
  purpose, and what are the 2-3 structural moves with the best payoff?
508
- `,Nu={security:[{name:"baseline.md",content:Dm},{name:"gdpr.md",content:Um}],testing:[{name:"test-gaps.md",content:Lm}],architecture:[{name:"architecture-health.md",content:qm}]},Fm=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function Ko(r){return at.default.join(te(),"knowledge",r)}function zu(r,e){return at.default.join(r,".ticketpilot","knowledge",`${e}.md`)}function Zo(r,e){return at.default.join(r,".ticketpilot","lessons",`${e}.md`)}function Du(r,e){let t=[],n=Ko(r),s=[];if(Se.default.existsSync(n)){for(let u of Se.default.readdirSync(n)){if(!u.endsWith(".md"))continue;let c=at.default.join(n,u),f=Se.default.readFileSync(c,"utf8");if(Fm.some(p=>f.includes(p))&&Nu[r].map(v=>v.name).includes(u)&&!f.includes("SEC-0")&&!f.includes("TEST-0")&&!f.includes("GDPR-0")){Se.default.rmSync(c);continue}s.push(u)}s.sort()}let i=new Set(s);for(let u of Nu[r])i.has(u.name)||t.push({level:"global",source:"pack",name:u.name,content:u.content,editable:!1});for(let u of s)t.push({level:"org",source:"pack",name:u,content:Se.default.readFileSync(at.default.join(n,u),"utf8").slice(0,3e4),editable:!0});let o=zu(e,r);Se.default.existsSync(o)&&t.push({level:"project",source:"pack",name:`${r}.md`,content:Se.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let a=Zo(e,r);return Se.default.existsSync(a)&&t.push({level:"project",source:"lessons",name:`${r}.md`,content:Se.default.readFileSync(a,"utf8").slice(0,2e4),editable:!0}),t}function Lu(r,e){let t=Du(r,e);return{packs:t.filter(n=>n.source==="pack").map(n=>({name:`${n.level}/${n.name}`,content:n.content})),lessons:t.find(n=>n.source==="lessons")?.content??"",layers:t}}function Go(r,e,t,n="project"){let s=n==="org"?at.default.join(Ko(e),"org-lessons.md"):Zo(r,e);Se.default.mkdirSync(at.default.dirname(s),{recursive:!0});let i=Se.default.existsSync(s)?"":`# ${e} lessons (${n} level)
508
+ `,Mc={security:[{name:"baseline.md",content:Lm},{name:"gdpr.md",content:qm}],testing:[{name:"test-gaps.md",content:Um}],architecture:[{name:"architecture-health.md",content:Fm}]},Bm=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function Zo(r){return at.default.join(te(),"knowledge",r)}function Dc(r,e){return at.default.join(r,".ticketpilot","knowledge",`${e}.md`)}function Go(r,e){return at.default.join(r,".ticketpilot","lessons",`${e}.md`)}function Lc(r,e){let t=[],n=Zo(r),s=[];if(Se.default.existsSync(n)){for(let c of Se.default.readdirSync(n)){if(!c.endsWith(".md"))continue;let u=at.default.join(n,c),f=Se.default.readFileSync(u,"utf8");if(Bm.some(p=>f.includes(p))&&Mc[r].map(v=>v.name).includes(c)&&!f.includes("SEC-0")&&!f.includes("TEST-0")&&!f.includes("GDPR-0")){Se.default.rmSync(u);continue}s.push(c)}s.sort()}let i=new Set(s);for(let c of Mc[r])i.has(c.name)||t.push({level:"global",source:"pack",name:c.name,content:c.content,editable:!1});for(let c of s)t.push({level:"org",source:"pack",name:c,content:Se.default.readFileSync(at.default.join(n,c),"utf8").slice(0,3e4),editable:!0});let o=Dc(e,r);Se.default.existsSync(o)&&t.push({level:"project",source:"pack",name:`${r}.md`,content:Se.default.readFileSync(o,"utf8").slice(0,3e4),editable:!0});let a=Go(e,r);return Se.default.existsSync(a)&&t.push({level:"project",source:"lessons",name:`${r}.md`,content:Se.default.readFileSync(a,"utf8").slice(0,2e4),editable:!0}),t}function Uc(r,e){let t=Lc(r,e);return{packs:t.filter(n=>n.source==="pack").map(n=>({name:`${n.level}/${n.name}`,content:n.content})),lessons:t.find(n=>n.source==="lessons")?.content??"",layers:t}}function Ho(r,e,t,n="project"){let s=n==="org"?at.default.join(Zo(e),"org-lessons.md"):Go(r,e);Se.default.mkdirSync(at.default.dirname(s),{recursive:!0});let i=Se.default.existsSync(s)?"":`# ${e} lessons (${n} level)
509
509
 
510
510
  Human-confirmed corrections and rules. Every ${e} audit reads this FIRST. Reference rule ids (SEC-001 style) when overriding a rule.
511
511
 
512
512
  `;Se.default.appendFileSync(s,i+t.trimEnd()+`
513
513
 
514
- `)}function Uu(r,e,t,n){let s=new Date().toISOString().slice(0,10),i=r.evidence[0]?` (${r.evidence[0].file}${r.evidence[0].line?`:${r.evidence[0].line}`:""})`:"",o=r.ruleId?` \xB7 rule ${r.ruleId}`:"";return`## ${s} \xB7 ${e}${o} \xB7 ${r.title}${i}
514
+ `)}function qc(r,e,t,n){let s=new Date().toISOString().slice(0,10),i=r.evidence[0]?` (${r.evidence[0].file}${r.evidence[0].line?`:${r.evidence[0].line}`:""})`:"",o=r.ruleId?` \xB7 rule ${r.ruleId}`:"";return`## ${s} \xB7 ${e}${o} \xB7 ${r.title}${i}
515
515
  Finding \`${r.id}\` [${r.severity}] was marked **${e}**`+(n?` by ${n}`:"")+`.${t?` Reason: ${t}`:""}
516
- `+(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 qu(r,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
517
- ${r.trim()}`}function Fu(r){let e=[];for(let t of Mu.AuditRole.options)for(let n of Du(t,r))e.push({role:t,...n});return e}function Bu(r,e,t,n,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=t==="org"?at.default.join(Ko(e),s):n==="lessons"?Zo(r,e):zu(r,e);Se.default.mkdirSync(at.default.dirname(o),{recursive:!0}),Se.default.writeFileSync(o,i,{mode:t==="org"?384:420})}var Ho=()=>new Date().toISOString(),g={info:r=>console.log(`${Ho()} [info] ${r}`),warn:r=>console.warn(`${Ho()} [warn] ${r}`),error:r=>console.error(`${Ho()} [error] ${r}`)};var Ku=require("node:child_process"),Zu=E(require("node:fs"),1),Gu=E(require("node:path"),1);function ri(r){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let t=Gu.default.join(r,e);if(Zu.default.existsSync(t))return t}return null}function ni(r){let e=[];for(let t of r.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let n of t[1].split(`
518
- `)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function si(r,e,t={}){let n=[],s=t.perCommandTimeoutMs??6e5;for(let i of e){t.onProgress?.(`running: ${i}`);let o=Date.now(),a=await new Promise(u=>{let c=(0,Ku.spawn)("bash",["-lc",i],{cwd:r,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),f="",p=S=>{f+=S.toString(),f.length>2e5&&(f=f.slice(-1e5))};c.stdout.on("data",p),c.stderr.on("data",p);let v=setTimeout(()=>{c.kill("SIGKILL"),f+=`
519
- [killed: timed out]`},s);c.on("close",S=>{clearTimeout(v),u({command:i,exitCode:S??-1,durationMs:Date.now()-o,tail:f.slice(-4e3)})}),c.on("error",S=>{clearTimeout(v),u({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(S)})})});t.onProgress?.(`exit ${a.exitCode} in ${Math.round(a.durationMs/1e3)}s: ${i}`),n.push(a)}return n}async function Cn(r){let{packs:e,lessons:t}=Lu(r.role,r.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${r.role} role - add markdown files under ~/.config/ticketpilot/knowledge/${r.role}/ on the runner`};let n="";if(r.scope.kind==="ticket"&&r.scope.ref){let p=r.scope.ref,v="";try{let T=await r.jira.getIssue(p);v=`Ticket ${p}: ${T.summary}
516
+ `+(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 Fc(r,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
517
+ ${r.trim()}`}function Bc(r){let e=[];for(let t of zc.AuditRole.options)for(let n of Lc(t,r))e.push({role:t,...n});return e}function Kc(r,e,t,n,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=t==="org"?at.default.join(Zo(e),s):n==="lessons"?Go(r,e):Dc(r,e);Se.default.mkdirSync(at.default.dirname(o),{recursive:!0}),Se.default.writeFileSync(o,i,{mode:t==="org"?384:420})}var Vo=()=>new Date().toISOString(),g={info:r=>console.log(`${Vo()} [info] ${r}`),warn:r=>console.warn(`${Vo()} [warn] ${r}`),error:r=>console.error(`${Vo()} [error] ${r}`)};var Zc=require("node:child_process"),Gc=E(require("node:fs"),1),Hc=E(require("node:path"),1);function ni(r){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let t=Hc.default.join(r,e);if(Gc.default.existsSync(t))return t}return null}function si(r){let e=[];for(let t of r.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let n of t[1].split(`
518
+ `)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function ii(r,e,t={}){let n=[],s=t.perCommandTimeoutMs??6e5;for(let i of e){t.onProgress?.(`running: ${i}`);let o=Date.now(),a=await new Promise(c=>{let u=(0,Zc.spawn)("bash",["-lc",i],{cwd:r,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),f="",p=S=>{f+=S.toString(),f.length>2e5&&(f=f.slice(-1e5))};u.stdout.on("data",p),u.stderr.on("data",p);let v=setTimeout(()=>{u.kill("SIGKILL"),f+=`
519
+ [killed: timed out]`},s);u.on("close",S=>{clearTimeout(v),c({command:i,exitCode:S??-1,durationMs:Date.now()-o,tail:f.slice(-4e3)})}),u.on("error",S=>{clearTimeout(v),c({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(S)})})});t.onProgress?.(`exit ${a.exitCode} in ${Math.round(a.durationMs/1e3)}s: ${i}`),n.push(a)}return n}async function Cn(r){let{packs:e,lessons:t}=Uc(r.role,r.repoPath);if(!e.length)return{ok:!1,error:`no knowledge packs found for the ${r.role} role - add markdown files under ~/.config/ticketpilot/knowledge/${r.role}/ on the runner`};let n="";if(r.scope.kind==="ticket"&&r.scope.ref){let p=r.scope.ref,v="";try{let T=await r.jira.getIssue(p);v=`Ticket ${p}: ${T.summary}
520
520
 
521
- ${T.description}`.slice(0,4e3)}catch{v=`Ticket ${p} (could not fetch its text from Jira).`}let S=await Co(r.repoPath,p).catch(()=>null);if(S){let{base:T,stat:x,diff:P}=await Xs(r.repoPath,S).catch(()=>({base:"",stat:"",diff:""}));n=`${v}
521
+ ${T.description}`.slice(0,4e3)}catch{v=`Ticket ${p} (could not fetch its text from Jira).`}let S=await Io(r.repoPath,p).catch(()=>null);if(S){let{base:T,stat:x,diff:P}=await Xs(r.repoPath,S).catch(()=>({base:"",stat:"",diff:""}));n=`${v}
522
522
 
523
523
  Its implementation branch \`${S}\` vs \`${T}\`:
524
524
  \`\`\`
@@ -532,165 +532,165 @@ No implementation branch found for ${p} - audit the parts of the codebase this t
532
532
  ${v}\`\`\`
533
533
  \`\`\`diff
534
534
  ${S}
535
- \`\`\``}let s,i;if(r.role==="testing"){let p=ri(r.repoPath),v=p?ni(Hu.default.readFileSync(p,"utf8")):[];v.length&&(g.info(`Audit (testing): executing ${v.length} TEST.md command(s)`),i=await si(r.repoPath,v,{onProgress:S=>g.info(`[test-run] ${S}`)}),s=i.map(S=>`$ ${S.command}
535
+ \`\`\``}let s,i;if(r.role==="testing"){let p=ni(r.repoPath),v=p?si(Vc.default.readFileSync(p,"utf8")):[];v.length&&(g.info(`Audit (testing): executing ${v.length} TEST.md command(s)`),i=await ii(r.repoPath,v,{onProgress:S=>g.info(`[test-run] ${S}`)}),s=i.map(S=>`$ ${S.command}
536
536
  (exit ${S.exitCode}, ${Math.round(S.durationMs/1e3)}s)
537
537
  ${S.tail.slice(-2e3)}`).join(`
538
538
 
539
539
  ---
540
540
 
541
- `))}let o=r.model||r.agent.adapter.deepModel,a=await r.agent.adapter.run({repoPath:r.repoPath,prompt:Tu(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,Vo.randomUUID)(),model:o,onLog:(p,v)=>{p==="agent"&&g.info(`[audit:${r.role}] ${v.slice(0,160)}`)}}),u=xu(a.resultText);if("error"in u)return{ok:!1,error:u.error};let c=Cu(r.repoPath,u.findings);for(let p of c.droppedFindings)g.warn(`[audit:${r.role}] dropped "${p.title}" - cited files do not exist: `+p.files.join(", "));let f={id:(0,Vo.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:u.summary,packNames:e.map(p=>p.name),findings:c.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return Au(r.projectId,f),g.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${c.findings.length} finding(s)`+(u.dropped?`, ${u.dropped} malformed`:"")+(c.droppedFindings.length?`, ${c.droppedFindings.length} dropped for citing files that do not exist`:"")+(c.correctedLines?`, ${c.correctedLines} bad line number(s) stripped`:"")),{ok:!0,audit:f}}var Kr=E(be(),1);var oa=E(require("node:fs"),1),di=E(require("node:path"),1),hi=require("node:crypto"),Oe=E(be(),1);var Mr=E(be(),1);var Wo=E(require("node:fs"),1),Vu=E(require("node:os"),1),ii=E(require("node:path"),1),Wu=require("node:child_process"),Ju=E(require("node:readline"),1),Yu=E(be(),1),Bm=4e3,Km={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Zm(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??ii.default.join(Vu.default.homedir(),".claude");try{if(Wo.default.existsSync(ii.default.join(e,".credentials.json"))||Wo.default.existsSync(ii.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Gm(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Km[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Zm(r.configDir);return t!=="unknown"&&r.onLog("info",t==="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(n=>{let s=(0,Wu.spawn)(r.bin,e,{cwd:r.repoPath,env:r.configDir?{...process.env,CLAUDE_CONFIG_DIR:r.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,billingMode:t==="subscription"?"subscription":t==="API key"?"api":"unknown"},o=0,a=0,u=0,c=0,f=0,p=()=>{if(!r.onUsage)return;let J=Date.now();J-f<Bm||(f=J,r.onUsage({inputTokens:a,outputTokens:u,cacheReadTokens:c,turns:o}))},v=!1,S=()=>{v||(v=!0,clearTimeout(x),r.signal?.removeEventListener("abort",T),n(i))},T=()=>{i.cancelled=!0,i.error="stopped from the dashboard",r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),3e3).unref()};r.signal?.addEventListener("abort",T,{once:!0});let x=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);s.stdin.write(r.prompt),s.stdin.end(),Ju.default.createInterface({input:s.stdout}).on("line",J=>{if(!J.trim())return;let O;try{O=JSON.parse(J)}catch{r.onLog("agent",J.slice(0,1e3));return}if(O.type==="system"&&O.subtype==="init")i.model=typeof O.model=="string"?O.model:void 0,r.onLog("info",`Claude Code session started (model: ${O.model??"default"})`);else if(O.type==="assistant"){o+=1;let D=O.message?.usage;D&&(a+=Number(D.input_tokens??0)+Number(D.cache_creation_input_tokens??0),u+=Number(D.output_tokens??0),c+=Number(D.cache_read_input_tokens??0),p());for(let Q of O.message?.content??[])if(Q.type==="text"&&Q.text?.trim())r.onLog("agent",Q.text.trim().slice(0,4e3));else if(Q.type==="tool_use"){let h=Q.input??{},m=["file_path","path","pattern","command","description","url"].map(C=>typeof h[C]=="string"?`${C}=${h[C]}`:null).filter(Boolean).join(" "),y=JSON.stringify(h).slice(0,400);r.onLog("info",`tool ${Q.name} ${m?`${m} `:""}${y}`)}}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),a=Math.max(i.inputTokens,a),u=Math.max(i.outputTokens,u),i.inputTokens=a,i.outputTokens=u,c=Number(O.usage?.cache_read_input_tokens??c),i.cacheReadTokens=c,r.onUsage&&(r.onUsage({inputTokens:a,outputTokens:u,cacheReadTokens:c,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 ${r.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 w="";s.stderr.on("data",J=>{w=(w+J.toString()).slice(-2e3)}),s.on("error",J=>{i.error=`failed to start ${r.bin}: ${J.message}`,r.onLog("error",i.error),S()}),s.on("close",J=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${J}${w?`: ${w.slice(-500)}`:""}`),S()})})}var oi={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:Yu.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:Gm};var Xu=require("node:child_process"),Qu=E(require("node:readline"),1),ec=E(be(),1);async function Hm(r){if(r.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(r.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",r.repoPath,...r.model?["--model",r.model]:[],"-"];return new Promise(t=>{let n=(0,Xu.spawn)(r.bin,e,{cwd:r.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0},i="",o=!1,a=()=>{o||(o=!0,clearTimeout(u),t(s))},u=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",s.error),n.kill("SIGTERM"),setTimeout(()=>n.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);n.stdin.write(r.prompt),n.stdin.end(),Qu.default.createInterface({input:n.stdout}).on("line",p=>{if(!p.trim())return;let v;try{v=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}let S=v.item??v.msg??v,T=S?.type??v.type,x=S?.text??S?.message??"";T==="agent_message"&&typeof x=="string"&&x.trim()?(i=x,r.onLog("agent",x.trim().slice(0,4e3))):T==="command_execution"||T==="exec_command_begin"?r.onLog("info",`tool ${String(S?.command??"").slice(0,300)}`):T==="error"&&typeof x=="string"&&x&&r.onLog("error",x.slice(0,1e3))});let f="";n.stderr.on("data",p=>{f=(f+p.toString()).slice(-2e3)}),n.on("error",p=>{s.error=`failed to start ${r.bin}: ${p.message} - is the Codex CLI installed and logged in?`,r.onLog("error",s.error),a()}),n.on("close",p=>{p===0&&i.trim()?(s.ok=!0,s.resultText=i):s.error||(s.error=`codex exited with code ${p}`+(i?"":" and produced no answer")+(f?`: ${f.slice(-500)}`:"")),a()})})}var Jo={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:ec.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:Hm};var Vm={[oi.id]:oi,[Jo.id]:Jo};function lt(r){return Vm[r||Mr.DEFAULT_AGENT_ID]??null}function We(r,e){return!e||e===oi.id?r.claudeBin:r.agents[e]?.bin??e}function In(r,e){let t=lt(r);if(!t)return`no agent adapter named "${r}" on this runner - update the runner, or set the rule's agent to "${Mr.DEFAULT_AGENT_ID}"`;let n=(0,Mr.missingAgentCapabilities)(t.id,e);return n&&n.length?`agent "${t.displayName}" cannot run ${e} rules: it cannot guarantee ${n.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function Je(r,e,t){let n=e.defaultAgent||Mr.DEFAULT_AGENT_ID,s=lt(n);if(!s)return{error:`this project's default agent "${n}" is not on this runner - update the runner, or change the project's agent`};let i=(0,Mr.missingAgentCapabilities)(s.id,t);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:We(r,s.id)}}function kt(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}var lc=E(be(),1);Ye();Or();_t();var Te=E(require("node:fs"),1),Rn=E(require("node:path"),1);var Jm=k.object({runId:k.string(),issueKey:k.string(),repoName:k.string(),owner:k.string(),repo:k.string(),prNumber:k.number().int(),prUrl:k.string(),branch:k.string(),headSha:k.string(),doneLabel:k.string(),failedLabel:k.string(),jiraTransition:k.string().optional(),mergeOnApprove:k.boolean().default(!1),mergeMethod:k.enum(["squash","merge","rebase"]).default("squash"),nextDecisionSeq:k.number().int().default(1e5),changesRequestedNotified:k.boolean().optional(),conflictNotified:k.boolean().optional(),agentConfigDir:k.string().optional()}),Ym=k.record(Jm),Xm=k.object({runId:k.string(),issueKey:k.string(),issueSummary:k.string().default(""),projectId:k.string(),repoName:k.string(),environmentName:k.string(),requestedBy:k.string().default(""),createdAt:k.string()}),Qm=k.record(Xm),eg=k.object({runId:k.string(),issueKey:k.string(),kind:k.enum(["plan","implement"]),repoPath:k.string(),sessionId:k.string(),doneLabel:k.string(),failedLabel:k.string(),timeoutSeconds:k.number(),createdAt:k.string(),questionsPostedAt:k.string(),rounds:k.number().int().default(1),nextLogSeq:k.number().int().nonnegative().default(0),baseRepoPath:k.string().optional(),repoName:k.string().optional(),branch:k.string().optional(),baseBranch:k.string().optional(),jiraTransition:k.string().optional(),jiraTransitionOnMerge:k.string().optional(),requireApproval:k.boolean().optional(),maxTurns:k.number().int().optional(),runTests:k.boolean().default(!0),mergeOnApprove:k.boolean().default(!1),mergeMethod:k.enum(["squash","merge","rebase"]).default("squash"),issueSummary:k.string().default(""),claudeConfigDir:k.string().optional(),agent:k.string().optional(),model:k.string().optional(),actorEmail:k.string().optional()}),tg=k.object({runId:k.string(),issueKey:k.string(),issueSummary:k.string().default(""),repoName:k.string(),baseRepoPath:k.string(),branch:k.string(),baseBranch:k.string(),headSha:k.string(),requireApproval:k.boolean(),mergeOnApprove:k.boolean().default(!1),mergeMethod:k.enum(["squash","merge","rebase"]).default("squash"),doneLabel:k.string(),failedLabel:k.string(),jiraTransition:k.string().optional(),jiraTransitionOnMerge:k.string().optional(),actorEmail:k.string().optional(),resultSummary:k.string().default(""),costUsd:k.number().default(0),nextLogSeq:k.number().int().default(1e5),createdAt:k.string()}),rg=k.record(tg),ng=k.object({runId:k.string(),issueKey:k.string(),repoName:k.string(),owner:k.string(),repo:k.string(),prNumber:k.number().int(),prUrl:k.string(),jiraTransitionOnMerge:k.string().default(""),createdAt:k.string()}),sg=k.record(ng),ig=k.record(eg);function tc(){return Rn.default.join(te(),"pending-runs.json")}function Yo(){return Rn.default.join(te(),"pending-deploys.json")}function Xo(){return Rn.default.join(te(),"pending-inputs.json")}function Qo(){return Rn.default.join(te(),"merge-watch.json")}function ea(){return Rn.default.join(te(),"pending-pushes.json")}function ta(){let r=ea();if(!Te.default.existsSync(r))return{};try{return rg.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function ra(r){let e=ta();e[r.runId]=r,St(ea(),e)}function ai(r){return ta()[r]??null}function na(r){let e=ta();r in e&&(delete e[r],St(ea(),e))}function li(){let r=Qo();if(!Te.default.existsSync(r))return{};try{return sg.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function rc(r){let e=li();e[r.runId]=r,St(Qo(),e)}function ns(r){let e=li();r in e&&(delete e[r],St(Qo(),e))}function ss(){let r=tc();if(!Te.default.existsSync(r))return{};try{return Ym.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function St(r,e){Te.default.mkdirSync(te(),{recursive:!0,mode:448});let t=r+".tmp";Te.default.writeFileSync(t,JSON.stringify(e,null,2)+`
542
- `,{mode:384}),Te.default.renameSync(t,r),Te.default.chmodSync(r,384)}function nc(r){St(tc(),r)}function Tt(r){let e=ss();e[r.runId]=r,nc(e)}function is(r){return ss()[r]??null}function Dr(r){let e=ss();r in e&&(delete e[r],nc(e))}function sa(){let r=Yo();if(!Te.default.existsSync(r))return{};try{return Qm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function sc(r){let e=sa();e[r.runId]=r,St(Yo(),e)}function ui(r){return sa()[r]??null}function ci(r){let e=sa();r in e&&(delete e[r],St(Yo(),e))}function En(){let r=Xo();if(!Te.default.existsSync(r))return{};try{return ig.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function ic(r){let e=En();e[r.runId]=r,St(Xo(),e)}function ut(r){let e=En();r in e&&(delete e[r],St(Xo(),e))}var og=`
541
+ `))}let o=r.model||r.agent.adapter.deepModel,a=await r.agent.adapter.run({repoPath:r.repoPath,prompt:xc(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,Wo.randomUUID)(),model:o,onLog:(p,v)=>{p==="agent"&&g.info(`[audit:${r.role}] ${v.slice(0,160)}`)}}),c=Cc(a.resultText);if("error"in c)return{ok:!1,error:c.error};let u=Ic(r.repoPath,c.findings);for(let p of u.droppedFindings)g.warn(`[audit:${r.role}] dropped "${p.title}" - cited files do not exist: `+p.files.join(", "));let f={id:(0,Wo.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:c.summary,packNames:e.map(p=>p.name),findings:u.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return $c(r.projectId,f),g.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${u.findings.length} finding(s)`+(c.dropped?`, ${c.dropped} malformed`:"")+(u.droppedFindings.length?`, ${u.droppedFindings.length} dropped for citing files that do not exist`:"")+(u.correctedLines?`, ${u.correctedLines} bad line number(s) stripped`:"")),{ok:!0,audit:f}}var Kr=E(be(),1);var aa=E(require("node:fs"),1),hi=E(require("node:path"),1),fi=require("node:crypto"),Oe=E(be(),1);var Mr=E(be(),1);var Jo=E(require("node:fs"),1),Wc=E(require("node:os"),1),oi=E(require("node:path"),1),Jc=require("node:child_process"),Yc=E(require("node:readline"),1),Xc=E(be(),1),Km=4e3,Zm={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Gm(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??oi.default.join(Wc.default.homedir(),".claude");try{if(Jo.default.existsSync(oi.default.join(e,".credentials.json"))||Jo.default.existsSync(oi.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Hm(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Zm[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Gm(r.configDir);return t!=="unknown"&&r.onLog("info",t==="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(n=>{let s=(0,Jc.spawn)(r.bin,e,{cwd:r.repoPath,env:r.configDir?{...process.env,CLAUDE_CONFIG_DIR:r.configDir}:process.env,stdio:["pipe","pipe","pipe"]}),i={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,billingMode:t==="subscription"?"subscription":t==="API key"?"api":"unknown"},o=0,a=0,c=0,u=0,f=0,p=()=>{if(!r.onUsage)return;let X=Date.now();X-f<Km||(f=X,r.onUsage({inputTokens:a,outputTokens:c,cacheReadTokens:u,turns:o}))},v=!1,S=()=>{v||(v=!0,clearTimeout(x),r.signal?.removeEventListener("abort",T),n(i))},T=()=>{i.cancelled=!0,i.error="stopped from the dashboard",r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),3e3).unref()};r.signal?.addEventListener("abort",T,{once:!0});let x=setTimeout(()=>{i.timedOut=!0,i.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",i.error),s.kill("SIGTERM"),setTimeout(()=>s.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);s.stdin.write(r.prompt),s.stdin.end(),Yc.default.createInterface({input:s.stdout}).on("line",X=>{if(!X.trim())return;let O;try{O=JSON.parse(X)}catch{r.onLog("agent",X.slice(0,1e3));return}if(O.type==="system"&&O.subtype==="init")i.model=typeof O.model=="string"?O.model:void 0,r.onLog("info",`Claude Code session started (model: ${O.model??"default"})`);else if(O.type==="assistant"){o+=1;let L=O.message?.usage;L&&(a+=Number(L.input_tokens??0)+Number(L.cache_creation_input_tokens??0),c+=Number(L.output_tokens??0),u+=Number(L.cache_read_input_tokens??0),p());for(let K of O.message?.content??[])if(K.type==="text"&&K.text?.trim())r.onLog("agent",K.text.trim().slice(0,4e3));else if(K.type==="tool_use"){let h=K.input??{},m=["file_path","path","pattern","command","description","url"].map(C=>typeof h[C]=="string"?`${C}=${h[C]}`:null).filter(Boolean).join(" "),y=JSON.stringify(h).slice(0,400);r.onLog("info",`tool ${K.name} ${m?`${m} `:""}${y}`)}}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),a=Math.max(i.inputTokens,a),c=Math.max(i.outputTokens,c),i.inputTokens=a,i.outputTokens=c,u=Number(O.usage?.cache_read_input_tokens??u),i.cacheReadTokens=u,r.onUsage&&(r.onUsage({inputTokens:a,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 ${r.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 k="";s.stderr.on("data",X=>{k=(k+X.toString()).slice(-2e3)}),s.on("error",X=>{i.error=`failed to start ${r.bin}: ${X.message}`,r.onLog("error",i.error),S()}),s.on("close",X=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${X}${k?`: ${k.slice(-500)}`:""}`),S()})})}var ai={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:Xc.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:Hm};var Qc=require("node:child_process"),eu=E(require("node:readline"),1),tu=E(be(),1);async function Vm(r){if(r.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(r.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",r.repoPath,...r.model?["--model",r.model]:[],"-"];return new Promise(t=>{let n=(0,Qc.spawn)(r.bin,e,{cwd:r.repoPath,env:process.env,stdio:["pipe","pipe","pipe"]}),s={ok:!1,timedOut:!1,resultText:"",costUsd:0,inputTokens:0,outputTokens:0,cacheReadTokens:0},i="",o=!1,a=()=>{o||(o=!0,clearTimeout(c),t(s))},c=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",s.error),n.kill("SIGTERM"),setTimeout(()=>n.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);n.stdin.write(r.prompt),n.stdin.end(),eu.default.createInterface({input:n.stdout}).on("line",p=>{if(!p.trim())return;let v;try{v=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}let S=v.item??v.msg??v,T=S?.type??v.type,x=S?.text??S?.message??"";T==="agent_message"&&typeof x=="string"&&x.trim()?(i=x,r.onLog("agent",x.trim().slice(0,4e3))):T==="command_execution"||T==="exec_command_begin"?r.onLog("info",`tool ${String(S?.command??"").slice(0,300)}`):T==="error"&&typeof x=="string"&&x&&r.onLog("error",x.slice(0,1e3))});let f="";n.stderr.on("data",p=>{f=(f+p.toString()).slice(-2e3)}),n.on("error",p=>{s.error=`failed to start ${r.bin}: ${p.message} - is the Codex CLI installed and logged in?`,r.onLog("error",s.error),a()}),n.on("close",p=>{p===0&&i.trim()?(s.ok=!0,s.resultText=i):s.error||(s.error=`codex exited with code ${p}`+(i?"":" and produced no answer")+(f?`: ${f.slice(-500)}`:"")),a()})})}var Yo={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:tu.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:Vm};var Wm={[ai.id]:ai,[Yo.id]:Yo};function lt(r){return Wm[r||Mr.DEFAULT_AGENT_ID]??null}function We(r,e){return!e||e===ai.id?r.claudeBin:r.agents[e]?.bin??e}function In(r,e){let t=lt(r);if(!t)return`no agent adapter named "${r}" on this runner - update the runner, or set the rule's agent to "${Mr.DEFAULT_AGENT_ID}"`;let n=(0,Mr.missingAgentCapabilities)(t.id,e);return n&&n.length?`agent "${t.displayName}" cannot run ${e} rules: it cannot guarantee ${n.join(", ")}. Allwright refuses rather than weakening the isolation silently.`:null}function Je(r,e,t){let n=e.defaultAgent||Mr.DEFAULT_AGENT_ID,s=lt(n);if(!s)return{error:`this project's default agent "${n}" is not on this runner - update the runner, or change the project's agent`};let i=(0,Mr.missingAgentCapabilities)(s.id,t);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:We(r,s.id)}}function kt(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}var cu=E(be(),1);Ye();Or();_t();var Te=E(require("node:fs"),1),Rn=E(require("node:path"),1);var Ym=_.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"),nextDecisionSeq:_.number().int().default(1e5),changesRequestedNotified:_.boolean().optional(),conflictNotified:_.boolean().optional(),agentConfigDir:_.string().optional()}),Xm=_.record(Ym),Qm=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),projectId:_.string(),repoName:_.string(),environmentName:_.string(),requestedBy:_.string().default(""),createdAt:_.string()}),eg=_.record(Qm),tg=_.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"),issueSummary:_.string().default(""),claudeConfigDir:_.string().optional(),agent:_.string().optional(),model:_.string().optional(),actorEmail:_.string().optional()}),rg=_.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"),doneLabel:_.string(),failedLabel:_.string(),jiraTransition:_.string().optional(),jiraTransitionOnMerge:_.string().optional(),actorEmail:_.string().optional(),resultSummary:_.string().default(""),costUsd:_.number().default(0),nextLogSeq:_.number().int().default(1e5),createdAt:_.string()}),ng=_.record(rg),sg=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),jiraTransitionOnMerge:_.string().default(""),createdAt:_.string()}),ig=_.record(sg),og=_.record(tg);function ru(){return Rn.default.join(te(),"pending-runs.json")}function Xo(){return Rn.default.join(te(),"pending-deploys.json")}function Qo(){return Rn.default.join(te(),"pending-inputs.json")}function ea(){return Rn.default.join(te(),"merge-watch.json")}function ta(){return Rn.default.join(te(),"pending-pushes.json")}function ra(){let r=ta();if(!Te.default.existsSync(r))return{};try{return ng.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function na(r){let e=ra();e[r.runId]=r,St(ta(),e)}function li(r){return ra()[r]??null}function sa(r){let e=ra();r in e&&(delete e[r],St(ta(),e))}function ci(){let r=ea();if(!Te.default.existsSync(r))return{};try{return ig.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function nu(r){let e=ci();e[r.runId]=r,St(ea(),e)}function ns(r){let e=ci();r in e&&(delete e[r],St(ea(),e))}function ss(){let r=ru();if(!Te.default.existsSync(r))return{};try{return Xm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function St(r,e){Te.default.mkdirSync(te(),{recursive:!0,mode:448});let t=r+".tmp";Te.default.writeFileSync(t,JSON.stringify(e,null,2)+`
542
+ `,{mode:384}),Te.default.renameSync(t,r),Te.default.chmodSync(r,384)}function su(r){St(ru(),r)}function Tt(r){let e=ss();e[r.runId]=r,su(e)}function is(r){return ss()[r]??null}function Dr(r){let e=ss();r in e&&(delete e[r],su(e))}function ia(){let r=Xo();if(!Te.default.existsSync(r))return{};try{return eg.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function iu(r){let e=ia();e[r.runId]=r,St(Xo(),e)}function ui(r){return ia()[r]??null}function di(r){let e=ia();r in e&&(delete e[r],St(Xo(),e))}function En(){let r=Qo();if(!Te.default.existsSync(r))return{};try{return og.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function ou(r){let e=En();e[r.runId]=r,St(Qo(),e)}function ct(r){let e=En();r in e&&(delete e[r],St(Qo(),e))}var ag=`
543
543
 
544
- 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.`;function aa(r){return oa.default.existsSync(di.default.join(r,"DESIGN.md"))?`
544
+ 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.`;function la(r){return aa.default.existsSync(hi.default.join(r,"DESIGN.md"))?`
545
545
 
546
- 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 uc=5,oc=2,ag=8,ac=2,lg="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 la(r,e,t,n){let s=Date.now(),i="";n&&(i=await n().catch(()=>""));let o=await r.run(e),a=0,u="",c=n?ag:oc;for(;!o.ok&&o.turnLimitHit&&!o.cancelled&&r.capabilities.sessionResume;){if(a>=c){u=`resume cap (${c}) reached`;break}if(n&&a>=oc){let p=await n().catch(()=>""),v=p!==""&&p!==i;if(i=p,!v){u="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*ac*1e3){u=`wall-clock budget (${ac}x the rule's timeout) exhausted`;break}}a++,t("info",`Turn limit hit mid-work - auto-resuming the same session (resume ${a}, cap ${c})`);let f=await r.run({...e,prompt:lg,resume:!0});f.costUsd+=o.costUsd,f.inputTokens+=o.inputTokens,f.outputTokens+=o.outputTokens,o=f}return!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} - even after ${a} automatic same-session resume(s)${u?` (stopped: ${u})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}var ia=new Map;function cc(r){let e=ia.get(r);return e?(e.abort(),!0):!1}async function as(r,e,t,n,s){let i=new AbortController;ia.set(r,i);try{return await la(e,{...t,signal:i.signal},n,s)}finally{ia.delete(r)}}function Lr(r,e,t=0){let n=t;return{emit:(a,u)=>{e.send({type:"run.log",runId:r,seq:n++,ts:new Date().toISOString(),level:a,message:u}),a!=="agent"&&g.info(`[run ${r}] ${u}`)},setStatus:(a,u={})=>{e.send({type:"run.status",runId:r,status:a,...u})},sendUsage:a=>{e.send({type:"run.usage",runId:r,inputTokens:Math.round(a.inputTokens),outputTokens:Math.round(a.outputTokens),cacheReadTokens:a.cacheReadTokens===void 0?void 0:Math.round(a.cacheReadTokens),costUsd:a.costUsd,turns:a.turns})},nextSeq:()=>n}}async function fi(r){return r.rule.action.type==="implement"?dg(r):r.rule.action.type==="respond"?cg(r):ug(r)}async function ug(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=Lr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="plan_only")return;let a=In(o.agent,o.type);if(a){e("error",a),await An(r,a),t("failed",{error:a});return}let u=(0,hi.randomUUID)();try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", plan-only)`),e("info",`Fetching ${r.issueKey} from Jira`);let c=await r.jira.getIssue(r.issueKey),f=kt(o.promptTemplate,{issueKey:c.key,summary:c.summary,description:c.description||"(no description)",comments:us(c.comments)})+await dn(r.jira,c.attachments,r.repoPath,e)+aa(r.repoPath);e("info",`Starting Claude Code in ${r.repoPath} - read-only tools, path-jailed to the repo, timeout ${o.timeoutSeconds}s`);let p=await as(r.runId,lt(o.agent),{repoPath:r.repoPath,prompt:f,timeoutSeconds:o.timeoutSeconds,bin:We(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"read_only",model:o.model||void 0,sessionId:u,onLog:(T,x)=>e(T,x),onUsage:n},e),v={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok||!p.resultText.trim()){let T=p.error??"Claude Code produced no output";e("error",`Run failed: ${T}`),await An(r,T),t(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let S=pi(p.resultText);if(S){await mi({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:u,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:r.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:o.agent,model:o.model},S,e,t,v);return}await hc({runId:r.runId,issueKey:r.issueKey,doneLabel:i.doneLabel,jira:r.jira,resultText:p.resultText,costFields:v,emit:e,setStatus:t})}catch(c){let f=c instanceof Error?c.message:String(c);e("error",`Run failed: ${f}`),await An(r,f),t("failed",{error:f})}finally{zt(r.repoPath)}}async function dc(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=Lr(r.runId,n.transport,r.nextLogSeq);try{i("running"),s("info",`Reply received on ${r.issueKey} - continuing run \`${r.runId}\``);let u=Sc(e)+await dn(n.jiraFor(r.repoName??""),t,r.repoPath,s),c=await as(r.runId,lt(r.agent),{repoPath:r.repoPath,prompt:u,timeoutSeconds:r.timeoutSeconds,bin:We(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"read_only",model:r.model||void 0,sessionId:r.sessionId,resume:!0,onLog:(v,S)=>s(v,S),onUsage:o},s),f={costUsd:c.costUsd,inputTokens:c.inputTokens,outputTokens:c.outputTokens,billingMode:c.billingMode,model:c.model};if(!c.ok||!c.resultText.trim()){let v=c.error??"Claude Code produced no output";s("error",`Run failed: ${v}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,v),ut(r.runId),i(c.timedOut?"timed_out":"failed",{error:v,...c.cancelled?{errorKind:"guard"}:{},...f});return}let p=pi(c.resultText);if(p){if(r.rounds>=uc){await Tc(n.jiraFor(r.repoName??""),r,s,i,f);return}await mi({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:a(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model},p,s,i,f);return}await hc({runId:r.runId,issueKey:r.issueKey,doneLabel:r.doneLabel,jira:n.jiraFor(r.repoName??""),resultText:c.resultText,costFields:f,emit:s,setStatus:i}),ut(r.runId)}catch(u){let c=u instanceof Error?u.message:String(u);s("error",`Run failed: ${c}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,c),ut(r.runId),i("failed",{error:c})}finally{zt(r.repoPath)}}async function hc(r){let{runId:e,issueKey:t,doneLabel:n,jira:s,resultText:i,costFields:o,emit:a,setStatus:u}=r;u("posting",o),a("info",`Posting plan to ${t} (${i.length} chars)`);let c=`
546
+ 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 uu=5,au=2,lg=8,lu=2,cg="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 ca(r,e,t,n){let s=Date.now(),i="";n&&(i=await n().catch(()=>""));let o=await r.run(e),a=0,c="",u=n?lg:au;for(;!o.ok&&o.turnLimitHit&&!o.cancelled&&r.capabilities.sessionResume;){if(a>=u){c=`resume cap (${u}) reached`;break}if(n&&a>=au){let p=await n().catch(()=>""),v=p!==""&&p!==i;if(i=p,!v){c="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*lu*1e3){c=`wall-clock budget (${lu}x the rule's timeout) exhausted`;break}}a++,t("info",`Turn limit hit mid-work - auto-resuming the same session (resume ${a}, cap ${u})`);let f=await r.run({...e,prompt:cg,resume:!0});f.costUsd+=o.costUsd,f.inputTokens+=o.inputTokens,f.outputTokens+=o.outputTokens,o=f}return!o.ok&&o.turnLimitHit&&r.capabilities.sessionResume&&(o.error=`${o.error??"hit the turn limit"} - even after ${a} 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 oa=new Map;function du(r){let e=oa.get(r);return e?(e.abort(),!0):!1}async function as(r,e,t,n,s){let i=new AbortController;oa.set(r,i);try{return await ca(e,{...t,signal:i.signal},n,s)}finally{oa.delete(r)}}function Lr(r,e,t=0){let n=t;return{emit:(a,c)=>{e.send({type:"run.log",runId:r,seq:n++,ts:new Date().toISOString(),level:a,message:c}),a!=="agent"&&g.info(`[run ${r}] ${c}`)},setStatus:(a,c={})=>{e.send({type:"run.status",runId:r,status:a,...c})},sendUsage:a=>{e.send({type:"run.usage",runId:r,inputTokens:Math.round(a.inputTokens),outputTokens:Math.round(a.outputTokens),cacheReadTokens:a.cacheReadTokens===void 0?void 0:Math.round(a.cacheReadTokens),costUsd:a.costUsd,turns:a.turns})},nextSeq:()=>n}}async function pi(r){return r.rule.action.type==="implement"?hg(r):r.rule.action.type==="respond"?dg(r):ug(r)}async function ug(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=Lr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="plan_only")return;let a=In(o.agent,o.type);if(a){e("error",a),await An(r,a),t("failed",{error:a});return}let c=(0,fi.randomUUID)();try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", plan-only)`),e("info",`Fetching ${r.issueKey} from Jira`);let u=await r.jira.getIssue(r.issueKey),f=kt(o.promptTemplate,{issueKey:u.key,summary:u.summary,description:u.description||"(no description)",comments:cs(u.comments)})+await dn(r.jira,u.attachments,r.repoPath,e)+la(r.repoPath);e("info",`Starting Claude Code in ${r.repoPath} - read-only tools, path-jailed to the repo, timeout ${o.timeoutSeconds}s`);let p=await as(r.runId,lt(o.agent),{repoPath:r.repoPath,prompt:f,timeoutSeconds:o.timeoutSeconds,bin:We(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"read_only",model:o.model||void 0,sessionId:c,onLog:(T,x)=>e(T,x),onUsage:n},e),v={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok||!p.resultText.trim()){let T=p.error??"Claude Code produced no output";e("error",`Run failed: ${T}`),await An(r,T),t(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let S=mi(p.resultText);if(S){await gi({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:c,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:r.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:o.agent,model:o.model},S,e,t,v);return}await fu({runId:r.runId,issueKey:r.issueKey,doneLabel:i.doneLabel,jira:r.jira,resultText:p.resultText,costFields:v,emit:e,setStatus:t})}catch(u){let f=u instanceof Error?u.message:String(u);e("error",`Run failed: ${f}`),await An(r,f),t("failed",{error:f})}finally{zt(r.repoPath)}}async function hu(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=Lr(r.runId,n.transport,r.nextLogSeq);try{i("running"),s("info",`Reply received on ${r.issueKey} - continuing run \`${r.runId}\``);let c=Tu(e)+await dn(n.jiraFor(r.repoName??""),t,r.repoPath,s),u=await as(r.runId,lt(r.agent),{repoPath:r.repoPath,prompt:c,timeoutSeconds:r.timeoutSeconds,bin:We(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"read_only",model:r.model||void 0,sessionId:r.sessionId,resume:!0,onLog:(v,S)=>s(v,S),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 v=u.error??"Claude Code produced no output";s("error",`Run failed: ${v}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,v),ct(r.runId),i(u.timedOut?"timed_out":"failed",{error:v,...u.cancelled?{errorKind:"guard"}:{},...f});return}let p=mi(u.resultText);if(p){if(r.rounds>=uu){await xu(n.jiraFor(r.repoName??""),r,s,i,f);return}await gi({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:a(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model},p,s,i,f);return}await fu({runId:r.runId,issueKey:r.issueKey,doneLabel:r.doneLabel,jira:n.jiraFor(r.repoName??""),resultText:u.resultText,costFields:f,emit:s,setStatus:i}),ct(r.runId)}catch(c){let u=c instanceof Error?c.message:String(c);s("error",`Run failed: ${u}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,u),ct(r.runId),i("failed",{error:u})}finally{zt(r.repoPath)}}async function fu(r){let{runId:e,issueKey:t,doneLabel:n,jira:s,resultText:i,costFields:o,emit:a,setStatus:c}=r;c("posting",o),a("info",`Posting plan to ${t} (${i.length} chars)`);let u=`
547
547
 
548
548
  ---
549
- _Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(t,i+c),await s.editLabels(t,{add:[n],remove:[Oe.NEEDS_INPUT_LABEL]}),a("info",`Labeled ${t} with "${n}"`),u("succeeded",{...o,resultSummary:os(i)}),a("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function cg(r){let{emit:e,setStatus:t,sendUsage:n}=Lr(r.runId,r.transport),s=r.rule.action;if(s.type!=="respond")return;let i=In(s.agent,s.type);if(i){e("error",i),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
549
+ _Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(t,i+u),await s.editLabels(t,{add:[n],remove:[Oe.NEEDS_INPUT_LABEL]}),a("info",`Labeled ${t} with "${n}"`),c("succeeded",{...o,resultSummary:os(i)}),a("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function dg(r){let{emit:e,setStatus:t,sendUsage:n}=Lr(r.runId,r.transport),s=r.rule.action;if(s.type!=="respond")return;let i=In(s.agent,s.type);if(i){e("error",i),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
550
550
 
551
- ${i}`).catch(()=>{}),t("failed",{error:i});return}try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", respond`+(r.question?`, question from ${r.question.author}`:"")+")"),e("info",`Fetching ${r.issueKey} from Jira`);let o=await r.jira.getIssue(r.issueKey),a=kt(s.promptTemplate,{issueKey:o.key,summary:o.summary,description:o.description||"(no description)",comments:us(o.comments),question:r.question?.body??"(see the latest comment on the ticket)",questionAuthor:r.question?.author??"the commenter"})+await dn(r.jira,o.attachments,r.repoPath,e)+aa(r.repoPath);e("info",`Starting Claude Code in ${r.repoPath} - read-only tools, path-jailed, timeout ${s.timeoutSeconds}s`);let u=await as(r.runId,lt(s.agent),{repoPath:r.repoPath,prompt:a,timeoutSeconds:s.timeoutSeconds,bin:We(r.cfg,s.agent),configDir:r.claudeConfigDir,mode:"read_only",model:s.model||void 0,sessionId:(0,hi.randomUUID)(),onLog:(f,p)=>e(f,p),onUsage:n},e),c={costUsd:u.costUsd,inputTokens:u.inputTokens,outputTokens:u.outputTokens,billingMode:u.billingMode,model:u.model};if(!u.ok||!u.resultText.trim()){let f=u.error??"Claude Code produced no answer";e("error",`Run failed: ${f}`),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
551
+ ${i}`).catch(()=>{}),t("failed",{error:i});return}try{t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", respond`+(r.question?`, question from ${r.question.author}`:"")+")"),e("info",`Fetching ${r.issueKey} from Jira`);let o=await r.jira.getIssue(r.issueKey),a=kt(s.promptTemplate,{issueKey:o.key,summary:o.summary,description:o.description||"(no description)",comments:cs(o.comments),question:r.question?.body??"(see the latest comment on the ticket)",questionAuthor:r.question?.author??"the commenter"})+await dn(r.jira,o.attachments,r.repoPath,e)+la(r.repoPath);e("info",`Starting Claude Code in ${r.repoPath} - read-only tools, path-jailed, timeout ${s.timeoutSeconds}s`);let c=await as(r.runId,lt(s.agent),{repoPath:r.repoPath,prompt:a,timeoutSeconds:s.timeoutSeconds,bin:We(r.cfg,s.agent),configDir:r.claudeConfigDir,mode:"read_only",model:s.model||void 0,sessionId:(0,fi.randomUUID)(),onLog:(f,p)=>e(f,p),onUsage:n},e),u={costUsd:c.costUsd,inputTokens:c.inputTokens,outputTokens:c.outputTokens,billingMode:c.billingMode,model:c.model};if(!c.ok||!c.resultText.trim()){let f=c.error??"Claude Code produced no answer";e("error",`Run failed: ${f}`),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
552
552
 
553
553
  Error: ${f.slice(0,800)}
554
554
 
555
- Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(p=>g.error(`could not post answer failure to ${r.issueKey}: ${p}`)),t(u.timedOut?"timed_out":"failed",{error:f,...u.cancelled?{errorKind:"guard"}:{},...c});return}t("posting",c),e("info",`Posting answer to ${r.issueKey} (${u.resultText.length} chars)`),await r.jira.addComment(r.issueKey,u.resultText),t("succeeded",{...c,resultSummary:os(u.resultText)}),e("info",`Run succeeded \xB7 $${u.costUsd.toFixed(4)}`)}catch(o){let a=o instanceof Error?o.message:String(o);e("error",`Run failed: ${a}`),t("failed",{error:a})}finally{zt(r.repoPath)}}async function fc(r,e,t,n){let s=`${e}-wip`;try{return zt(r),await Js(r,`WIP: turn limit exhausted (Allwright run ${t})`),await _o(r,s),n("info",`Partial work preserved on branch "${s}"`),s}catch(i){return n("warn",`could not preserve partial work: ${i instanceof Error?i.message:i}`),null}}function pc(r){return`
555
+ Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(p=>g.error(`could not post answer failure to ${r.issueKey}: ${p}`)),t(c.timedOut?"timed_out":"failed",{error:f,...c.cancelled?{errorKind:"guard"}:{},...u});return}t("posting",u),e("info",`Posting answer to ${r.issueKey} (${c.resultText.length} chars)`),await r.jira.addComment(r.issueKey,c.resultText),t("succeeded",{...u,resultSummary:os(c.resultText)}),e("info",`Run succeeded \xB7 $${c.costUsd.toFixed(4)}`)}catch(o){let a=o instanceof Error?o.message:String(o);e("error",`Run failed: ${a}`),t("failed",{error:a})}finally{zt(r.repoPath)}}async function pu(r,e,t,n){let s=`${e}-wip`;try{return zt(r),await Js(r,`WIP: turn limit exhausted (Allwright run ${t})`),await ko(r,s),n("info",`Partial work preserved on branch "${s}"`),s}catch(i){return n("warn",`could not preserve partial work: ${i instanceof Error?i.message:i}`),null}}function mu(r){return`
556
556
 
557
- Partial work from this run is saved on branch \`${r}\` - 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 dg(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=Lr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="implement")return;let a=In(o.agent,o.type);if(a){e("error",a),await An(r,a),t("failed",{error:a});return}let u=di.default.join($r(),r.runId),c=kt(o.branchTemplate,{issueKey:r.issueKey}),f=(0,hi.randomUUID)(),p=!1,v=!1;try{if(!Qs(pe()??r.cfg,r.project.repoName,r.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(c===o.baseBranch&&!r.continueBranch)throw new Error(`rendered branch "${c}" equals the base branch - refusing (check the rule's branch template)`);if(t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", implement)`),o.jiraTransitionOnStart)try{await r.jira.transitionByName(r.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(D){e("warn",`Jira start transition failed: ${D instanceof Error?D.message:D} - continuing anyway`)}let S=await jr(r.repoPath);if(e("info",`Repo origin: ${S}`),!Ve(S))throw new Error(`origin "${S}" is not a GitHub remote - implement mode supports GitHub only`);e("info",`Fetching ${r.issueKey} from Jira`);let T=await r.jira.getIssue(r.issueKey),x=r.continueBranch?c:o.baseBranch;e("info",r.continueBranch?`Continuing branch "${c}" from origin/${c} (autopilot batch)`:`Preparing worktree on branch "${c}" from origin/${o.baseBranch}`),await Sn(r.repoPath,x),await So(r.repoPath,c),await To(r.repoPath,u,c,x),p=!0;let P=kt(o.promptTemplate,{issueKey:T.key,summary:T.summary,description:T.description||"(no description)",comments:us(T.comments)})+await dn(r.jira,T.attachments,u,e)+aa(u)+og+(o.writeTests?lc.WRITE_TESTS_PROMPT:"")+(o.updateMemory?Oe.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree - edit tools enabled, path-jailed, no shell, timeout ${o.timeoutSeconds}s`);let w=await as(r.runId,lt(o.agent),{repoPath:u,prompt:P,timeoutSeconds:o.timeoutSeconds,bin:We(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:o.model||void 0,maxTurns:o.maxTurns,sessionId:f,onLog:(D,Q)=>e(D,Q),onUsage:n},e,()=>Ws(u)),J={costUsd:w.costUsd,inputTokens:w.inputTokens,outputTokens:w.outputTokens,billingMode:w.billingMode,model:w.model};if(!w.ok){let D=w.error??"Claude Code failed";e("error",`Run failed: ${D}`);let Q=D;if(w.turnLimitHit){let h=await fc(u,c,r.runId,e);h&&(Q+=pc(h))}await An(r,Q),t(w.timedOut?"timed_out":"failed",{error:D,...w.cancelled?{errorKind:"guard"}:{},...J});return}let O=pi(w.resultText);if(O){v=!0,await mi({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:u,sessionId:f,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:r.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:o.agent,model:o.model,actorEmail:r.actorEmail,baseRepoPath:r.repoPath,repoName:r.project.repoName,branch:c,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,maxTurns:o.maxTurns,issueSummary:T.summary},O,e,t,J);return}zt(u),await gc({runId:r.runId,issueKey:r.issueKey,issueSummary:T.summary,worktreePath:u,agentConfigDir:r.claudeConfigDir,baseRepoPath:r.repoPath,branch:c,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,doneLabel:i.doneLabel,failedLabel:i.failedLabel,repoName:r.project.repoName,jira:r.jira,cfg:r.cfg,actorEmail:r.actorEmail,resultText:w.resultText,costFields:J,runTests:o.runTests,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,emit:e,setStatus:t})}catch(S){let T=S instanceof Error?S.message:String(S);e("error",`Run failed: ${T}`),await An(r,T),t("failed",{error:T})}finally{p&&!v&&await Bt(r.repoPath,u).catch(()=>{})}}async function mc(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=Lr(r.runId,n.transport,r.nextLogSeq),u=r.repoPath,c=!1;try{if(!Qs(pe()??n.cfg,r.repoName??"",r.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 ${r.issueKey} - continuing run \`${r.runId}\``);let f=Sc(e)+await dn(n.jiraFor(r.repoName??""),t,u,s),p=await as(r.runId,lt(r.agent),{repoPath:u,prompt:f,timeoutSeconds:r.timeoutSeconds,bin:We(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:r.model||void 0,maxTurns:r.maxTurns??120,sessionId:r.sessionId,resume:!0,onLog:(T,x)=>s(T,x),onUsage:o},s,()=>Ws(u)),v={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok){let T=p.error??"Claude Code failed";s("error",`Run failed: ${T}`);let x=T;if(p.turnLimitHit&&r.branch){let P=await fc(u,r.branch,r.runId,s);P&&(x+=pc(P))}await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,x),ut(r.runId),i(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let S=pi(p.resultText);if(S){if(r.rounds>=uc){await Tc(n.jiraFor(r.repoName??""),r,s,i,v);return}c=!0,await mi({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:u,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:a(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary},S,s,i,v);return}zt(u),await gc({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,worktreePath:u,agentConfigDir:r.claudeConfigDir,baseRepoPath:r.baseRepoPath??u,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,requireApproval:r.requireApproval??!0,doneLabel:r.doneLabel,failedLabel:r.failedLabel,repoName:r.repoName,jira:n.jiraFor(r.repoName??""),cfg:n.cfg,actorEmail:r.actorEmail,resultText:p.resultText,costFields:v,runTests:r.runTests,mergeOnApprove:r.mergeOnApprove,mergeMethod:r.mergeMethod,emit:s,setStatus:i}),ut(r.runId)}catch(f){let p=f instanceof Error?f.message:String(f);s("error",`Run failed: ${p}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,p),ut(r.runId),i("failed",{error:p})}finally{c||await Bt(r.baseRepoPath??u,u).catch(()=>{})}}async function gc(r){let{runId:e,issueKey:t,issueSummary:n,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:a,jiraTransition:u,jiraTransitionOnMerge:c,requireApproval:f,doneLabel:p,failedLabel:v,repoName:S,jira:T,cfg:x,actorEmail:P,runTests:w,mergeOnApprove:J,mergeMethod:O,resultText:D,costFields:Q,emit:h,setStatus:m}=r,y=await wo(s);y.deleted.length&&h("info",`Deleted ${y.deleted.length} file(s) listed in ${wn}: `+y.deleted.slice(0,10).join(", ")+(y.deleted.length>10?", \u2026":""));for(let M of y.refused)h("warn",`${wn} entry refused: ${M}`);h("info","Committing changes"),await Js(s,`${t}: ${n}
557
+ Partial work from this run is saved on branch \`${r}\` - 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 hg(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=Lr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="implement")return;let a=In(o.agent,o.type);if(a){e("error",a),await An(r,a),t("failed",{error:a});return}let c=hi.default.join($r(),r.runId),u=kt(o.branchTemplate,{issueKey:r.issueKey}),f=(0,fi.randomUUID)(),p=!1,v=!1;try{if(!ei(pe()??r.cfg,r.project.repoName,r.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&&!r.continueBranch)throw new Error(`rendered branch "${u}" equals the base branch - refusing (check the rule's branch template)`);if(t("running"),e("info",`Run started for ${r.issueKey} (rule "${r.rule.name}", implement)`),o.jiraTransitionOnStart)try{await r.jira.transitionByName(r.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(L){e("warn",`Jira start transition failed: ${L instanceof Error?L.message:L} - continuing anyway`)}let S=await jr(r.repoPath);if(e("info",`Repo origin: ${S}`),!Ve(S))throw new Error(`origin "${S}" is not a GitHub remote - implement mode supports GitHub only`);e("info",`Fetching ${r.issueKey} from Jira`);let T=await r.jira.getIssue(r.issueKey),x=r.continueBranch?u:o.baseBranch;e("info",r.continueBranch?`Continuing branch "${u}" from origin/${u} (autopilot batch)`:`Preparing worktree on branch "${u}" from origin/${o.baseBranch}`),await Sn(r.repoPath,x),await To(r.repoPath,u),await xo(r.repoPath,c,u,x),p=!0;let P=kt(o.promptTemplate,{issueKey:T.key,summary:T.summary,description:T.description||"(no description)",comments:cs(T.comments)})+await dn(r.jira,T.attachments,c,e)+la(c)+ag+(o.writeTests?cu.WRITE_TESTS_PROMPT:"")+(o.updateMemory?Oe.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree - edit tools enabled, path-jailed, no shell, timeout ${o.timeoutSeconds}s`);let k=await as(r.runId,lt(o.agent),{repoPath:c,prompt:P,timeoutSeconds:o.timeoutSeconds,bin:We(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:o.model||void 0,maxTurns:o.maxTurns,sessionId:f,onLog:(L,K)=>e(L,K),onUsage:n},e,()=>Ws(c)),X={costUsd:k.costUsd,inputTokens:k.inputTokens,outputTokens:k.outputTokens,billingMode:k.billingMode,model:k.model};if(!k.ok){let L=k.error??"Claude Code failed";e("error",`Run failed: ${L}`);let K=L;if(k.turnLimitHit){let h=await pu(c,u,r.runId,e);h&&(K+=mu(h))}await An(r,K),t(k.timedOut?"timed_out":"failed",{error:L,...k.cancelled?{errorKind:"guard"}:{},...X});return}let O=mi(k.resultText);if(O){v=!0,await gi({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:c,sessionId:f,doneLabel:i.doneLabel,failedLabel:i.failedLabel,timeoutSeconds:o.timeoutSeconds,jira:r.jira,nextLogSeq:s(),rounds:1,claudeConfigDir:r.claudeConfigDir,agent:o.agent,model:o.model,actorEmail:r.actorEmail,baseRepoPath:r.repoPath,repoName:r.project.repoName,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,maxTurns:o.maxTurns,issueSummary:T.summary},O,e,t,X);return}zt(c),await yu({runId:r.runId,issueKey:r.issueKey,issueSummary:T.summary,worktreePath:c,agentConfigDir:r.claudeConfigDir,baseRepoPath:r.repoPath,branch:u,baseBranch:o.baseBranch,jiraTransition:o.jiraTransition,jiraTransitionOnMerge:o.jiraTransitionOnMerge,requireApproval:o.requireApproval,doneLabel:i.doneLabel,failedLabel:i.failedLabel,repoName:r.project.repoName,jira:r.jira,cfg:r.cfg,actorEmail:r.actorEmail,resultText:k.resultText,costFields:X,runTests:o.runTests,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,emit:e,setStatus:t})}catch(S){let T=S instanceof Error?S.message:String(S);e("error",`Run failed: ${T}`),await An(r,T),t("failed",{error:T})}finally{p&&!v&&await Bt(r.repoPath,c).catch(()=>{})}}async function gu(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=Lr(r.runId,n.transport,r.nextLogSeq),c=r.repoPath,u=!1;try{if(!ei(pe()??n.cfg,r.repoName??"",r.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 ${r.issueKey} - continuing run \`${r.runId}\``);let f=Tu(e)+await dn(n.jiraFor(r.repoName??""),t,c,s),p=await as(r.runId,lt(r.agent),{repoPath:c,prompt:f,timeoutSeconds:r.timeoutSeconds,bin:We(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:r.model||void 0,maxTurns:r.maxTurns??120,sessionId:r.sessionId,resume:!0,onLog:(T,x)=>s(T,x),onUsage:o},s,()=>Ws(c)),v={costUsd:p.costUsd,inputTokens:p.inputTokens,outputTokens:p.outputTokens,billingMode:p.billingMode,model:p.model};if(!p.ok){let T=p.error??"Claude Code failed";s("error",`Run failed: ${T}`);let x=T;if(p.turnLimitHit&&r.branch){let P=await pu(c,r.branch,r.runId,s);P&&(x+=mu(P))}await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,x),ct(r.runId),i(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let S=mi(p.resultText);if(S){if(r.rounds>=uu){await xu(n.jiraFor(r.repoName??""),r,s,i,v);return}u=!0,await gi({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:c,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,jira:n.jiraFor(r.repoName??""),nextLogSeq:a(),rounds:r.rounds+1,createdAt:r.createdAt,claudeConfigDir:r.claudeConfigDir,actorEmail:r.actorEmail,agent:r.agent,model:r.model,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,issueSummary:r.issueSummary},S,s,i,v);return}zt(c),await yu({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,worktreePath:c,agentConfigDir:r.claudeConfigDir,baseRepoPath:r.baseRepoPath??c,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,requireApproval:r.requireApproval??!0,doneLabel:r.doneLabel,failedLabel:r.failedLabel,repoName:r.repoName,jira:n.jiraFor(r.repoName??""),cfg:n.cfg,actorEmail:r.actorEmail,resultText:p.resultText,costFields:v,runTests:r.runTests,mergeOnApprove:r.mergeOnApprove,mergeMethod:r.mergeMethod,emit:s,setStatus:i}),ct(r.runId)}catch(f){let p=f instanceof Error?f.message:String(f);s("error",`Run failed: ${p}`),await xt(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,p),ct(r.runId),i("failed",{error:p})}finally{u||await Bt(r.baseRepoPath??c,c).catch(()=>{})}}async function yu(r){let{runId:e,issueKey:t,issueSummary:n,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:a,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:v,repoName:S,jira:T,cfg:x,actorEmail:P,runTests:k,mergeOnApprove:X,mergeMethod:O,resultText:L,costFields:K,emit:h,setStatus:m}=r,y=await _o(s);y.deleted.length&&h("info",`Deleted ${y.deleted.length} file(s) listed in ${wn}: `+y.deleted.slice(0,10).join(", ")+(y.deleted.length>10?", \u2026":""));for(let M of y.refused)h("warn",`${wn} entry refused: ${M}`);h("info","Committing changes"),await Js(s,`${t}: ${n}
558
558
 
559
- Allwright run ${e}`);let C=await Qn(s,a);if(!C.ok){let M=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 ${_n}/${kn})`;h("error",M),await xt(T,t,e,v,M),m("failed",{error:M,errorKind:"guard",...Q});return}h("info",`Diff: ${C.files} file(s), +${C.insertions}/-${C.deletions}`);let L="";if(w){let M=ri(s);if(!M)h("info","No TEST.md in this repo - skipping the test run (nothing documented to run)");else{let ne=ni(oa.default.readFileSync(M,"utf8"));if(!ne.length)h("info",`${di.default.basename(M)} lists no commands - nothing to run`);else{h("info",`Running ${ne.length} documented test command(s) - no tokens, plain shell`);let oe=await si(s,ne,{perCommandTimeoutMs:15*6e4}),ce=oe.filter(fe=>fe.exitCode!==0);for(let fe of oe)h(fe.exitCode===0?"info":"warn",`${fe.exitCode===0?"PASS":"FAIL"} ${fe.command} (exit ${fe.exitCode})`+(fe.exitCode===0?"":`
560
- ${fe.tail.slice(-1500)}`));L=`
559
+ Allwright run ${e}`);let C=await Qn(s,a);if(!C.ok){let M=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 ${_n}/${kn})`;h("error",M),await xt(T,t,e,v,M),m("failed",{error:M,errorKind:"guard",...K});return}h("info",`Diff: ${C.files} file(s), +${C.insertions}/-${C.deletions}`);let D="";if(k){let M=ni(s);if(!M)h("info","No TEST.md in this repo - skipping the test run (nothing documented to run)");else{let ne=si(aa.default.readFileSync(M,"utf8"));if(!ne.length)h("info",`${hi.default.basename(M)} lists no commands - nothing to run`);else{h("info",`Running ${ne.length} documented test command(s) - no tokens, plain shell`);let oe=await ii(s,ne,{perCommandTimeoutMs:15*6e4}),ue=oe.filter(fe=>fe.exitCode!==0);for(let fe of oe)h(fe.exitCode===0?"info":"warn",`${fe.exitCode===0?"PASS":"FAIL"} ${fe.command} (exit ${fe.exitCode})`+(fe.exitCode===0?"":`
560
+ ${fe.tail.slice(-1500)}`));D=`
561
561
 
562
562
  ### Tests
563
563
  `+oe.map(fe=>`- ${fe.exitCode===0?"PASS":"FAIL"} \`${fe.command}\``).join(`
564
- `)+(ce.length?`
564
+ `)+(ue.length?`
565
565
 
566
- **${ce.length} of ${oe.length} failed.** Output is in the run log.`:`
566
+ **${ue.length} of ${oe.length} failed.** Output is in the run log.`:`
567
567
 
568
- All ${oe.length} passed.`),ce.length&&h("warn",`${ce.length} test command(s) failed - the PR will say so; review before merging`)}}}let V=await jr(s),K=Ve(V);if(!K){let M=`origin "${V}" is not a GitHub remote - implement mode supports GitHub only`;h("error",M),await xt(T,t,e,v,M),m("failed",{error:M,...Q});return}let re=await Pr(s),W=hg(D);try{await yc({gitDir:s,ownerRepo:K,runId:e,issueKey:t,issueSummary:n,agentConfigDir:r.agentConfigDir,branch:o,baseBranch:a,jiraTransition:u,jiraTransitionOnMerge:c,requireApproval:f,doneLabel:p,failedLabel:v,repoName:S,jira:T,cfg:x,actorEmail:P,mergeOnApprove:J,mergeMethod:O,summary:W,cost:Q,testReport:L,emit:h,setStatus:m})}catch(M){let ne=M instanceof Error?M.message:String(M);ra({runId:e,issueKey:t,issueSummary:n,mergeOnApprove:J,mergeMethod:O,repoName:S,baseRepoPath:i,branch:o,baseBranch:a,headSha:re,requireApproval:f,doneLabel:p,failedLabel:v,jiraTransition:u,jiraTransitionOnMerge:c,actorEmail:P,resultSummary:W,costUsd:Q.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),h("error",`Run failed: ${ne}`),h("info",`The commit itself survived on the runner (branch ${o}) - fix the cause, then use "Retry push" on this run's dashboard page.`),await xt(T,t,e,v,`${ne}
568
+ All ${oe.length} passed.`),ue.length&&h("warn",`${ue.length} test command(s) failed - the PR will say so; review before merging`)}}}let W=await jr(s),Z=Ve(W);if(!Z){let M=`origin "${W}" is not a GitHub remote - implement mode supports GitHub only`;h("error",M),await xt(T,t,e,v,M),m("failed",{error:M,...K});return}let re=await Pr(s),J=fg(L);try{await vu({gitDir:s,ownerRepo:Z,runId:e,issueKey:t,issueSummary:n,agentConfigDir:r.agentConfigDir,branch:o,baseBranch:a,jiraTransition:c,jiraTransitionOnMerge:u,requireApproval:f,doneLabel:p,failedLabel:v,repoName:S,jira:T,cfg:x,actorEmail:P,mergeOnApprove:X,mergeMethod:O,summary:J,cost:K,testReport:D,emit:h,setStatus:m})}catch(M){let ne=M instanceof Error?M.message:String(M);na({runId:e,issueKey:t,issueSummary:n,mergeOnApprove:X,mergeMethod:O,repoName:S,baseRepoPath:i,branch:o,baseBranch:a,headSha:re,requireApproval:f,doneLabel:p,failedLabel:v,jiraTransition:c,jiraTransitionOnMerge:u,actorEmail:P,resultSummary:J,costUsd:K.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),h("error",`Run failed: ${ne}`),h("info",`The commit itself survived on the runner (branch ${o}) - fix the cause, then use "Retry push" on this run's dashboard page.`),await xt(T,t,e,v,`${ne}
569
569
 
570
- 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:ne,retryAvailable:!0,...Q})}}async function yc(r){let{gitDir:e,ownerRepo:t,runId:n,issueKey:s,issueSummary:i,mergeOnApprove:o,mergeMethod:a,branch:u,baseBranch:c,jiraTransition:f,jiraTransitionOnMerge:p,requireApproval:v,doneLabel:S,failedLabel:T,repoName:x,jira:P,cfg:w,actorEmail:J,summary:O,cost:D,testReport:Q,emit:h,setStatus:m}=r;h("info",`Pushing ${u} to origin`),await es(e,u);let y=await Ys(e,u),C=`${O}${Q??""}
570
+ 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:ne,retryAvailable:!0,...K})}}async function vu(r){let{gitDir:e,ownerRepo:t,runId:n,issueKey:s,issueSummary:i,mergeOnApprove:o,mergeMethod:a,branch:c,baseBranch:u,jiraTransition:f,jiraTransitionOnMerge:p,requireApproval:v,doneLabel:S,failedLabel:T,repoName:x,jira:P,cfg:k,actorEmail:X,summary:O,cost:L,testReport:K,emit:h,setStatus:m}=r;h("info",`Pushing ${c} to origin`),await es(e,c);let y=await Ys(e,c),C=`${O}${K??""}
571
571
 
572
572
  ---
573
- Jira: ${new URL(`/browse/${s}`,w.jira?.baseUrl??"").toString()}
574
- _Allwright implement run \`${n}\` \xB7 cost $${D.costUsd.toFixed(4)}. `+(Q?"Tests were run by the runner, not the agent._":"The agent has no shell and no tests were run here - review accordingly._");h("info","Opening pull request");let L=Qs(pe()??w,x,J);L.source==="user"&&h("info",`PR will be authored with ${J}'s own GitHub token`);let K=await new $e(L.token).createPullRequest(t.owner,t.repo,{title:`${s}: ${i}`.slice(0,250),head:u,base:c,body:C});h("info",`PR ready: ${K.url}`),rc({runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:K.number,prUrl:K.url,jiraTransitionOnMerge:p??"",createdAt:new Date().toISOString()}),m("posting",D);let re={nextDecisionSeq:1e5,runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:K.number,prUrl:K.url,branch:u,headSha:y,doneLabel:S,failedLabel:T,jiraTransition:f,mergeOnApprove:o,mergeMethod:a,agentConfigDir:r.agentConfigDir};v?(Tt(re),await P.addComment(s,`**Allwright opened a pull request for review.**
573
+ Jira: ${new URL(`/browse/${s}`,k.jira?.baseUrl??"").toString()}
574
+ _Allwright implement run \`${n}\` \xB7 cost $${L.costUsd.toFixed(4)}. `+(K?"Tests were run by the runner, not the agent._":"The agent has no shell and no tests were run here - review accordingly._");h("info","Opening pull request");let D=ei(pe()??k,x,X);D.source==="user"&&h("info",`PR will be authored with ${X}'s own GitHub token`);let Z=await new $e(D.token).createPullRequest(t.owner,t.repo,{title:`${s}: ${i}`.slice(0,250),head:c,base:u,body:C});h("info",`PR ready: ${Z.url}`),nu({runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:Z.number,prUrl:Z.url,jiraTransitionOnMerge:p??"",createdAt:new Date().toISOString()}),m("posting",L);let re={nextDecisionSeq:1e5,runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:Z.number,prUrl:Z.url,branch:c,headSha:y,doneLabel:S,failedLabel:T,jiraTransition:f,mergeOnApprove:o,mergeMethod:a,agentConfigDir:r.agentConfigDir};v?(Tt(re),await P.addComment(s,`**Allwright opened a pull request for review.**
575
575
 
576
- PR: ${K.url}
576
+ PR: ${Z.url}
577
577
 
578
- 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 \`${n}\`)`),m("awaiting_approval",{...D,prUrl:K.url,headSha:y,resultSummary:os(O),retryAvailable:!1}),h("info",`Awaiting approval on the dashboard \xB7 $${D.costUsd.toFixed(4)}`)):(await vc({jira:P,issueKey:s},re,h),m("succeeded",{...D,prUrl:K.url,headSha:y,resultSummary:os(O),retryAvailable:!1}),h("info",`Run succeeded \xB7 ${K.url} \xB7 $${D.costUsd.toFixed(4)}`))}async function vc(r,e,t){let n=null;if(e.jiraTransition)try{await r.jira.transitionByName(e.issueKey,e.jiraTransition)?t("info",`Jira transition "${e.jiraTransition}" applied`):(n=`no transition named "${e.jiraTransition}" is available from this ticket's current status - the PR is fine, but move the ticket manually`,t("warn",n))}catch(s){n=`Jira transition failed: ${s instanceof Error?s.message:s}`,t("warn",n)}return await r.jira.addComment(e.issueKey,`**Allwright: implementation complete.**
578
+ 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 \`${n}\`)`),m("awaiting_approval",{...L,prUrl:Z.url,headSha:y,resultSummary:os(O),retryAvailable:!1}),h("info",`Awaiting approval on the dashboard \xB7 $${L.costUsd.toFixed(4)}`)):(await bu({jira:P,issueKey:s},re,h),m("succeeded",{...L,prUrl:Z.url,headSha:y,resultSummary:os(O),retryAvailable:!1}),h("info",`Run succeeded \xB7 ${Z.url} \xB7 $${L.costUsd.toFixed(4)}`))}async function bu(r,e,t){let n=null;if(e.jiraTransition)try{await r.jira.transitionByName(e.issueKey,e.jiraTransition)?t("info",`Jira transition "${e.jiraTransition}" applied`):(n=`no transition named "${e.jiraTransition}" is available from this ticket's current status - the PR is fine, but move the ticket manually`,t("warn",n))}catch(s){n=`Jira transition failed: ${s instanceof Error?s.message:s}`,t("warn",n)}return await r.jira.addComment(e.issueKey,`**Allwright: implementation complete.**
579
579
 
580
580
  PR: ${e.prUrl}`+(n?`
581
581
 
582
582
  Note: ${n}`:"")+`
583
583
 
584
- (run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[Oe.NEEDS_INPUT_LABEL]}),n}async function ls(r,e,t){let n=is(e);if(!n){g.warn(`run.approved for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:s,setStatus:i}=_c(r,e);try{let o=Ae(pe()??r.cfg,n.repoName);if(!o)throw new Error("GitHub token missing on this runner");let a=new $e(o);s("info",`Approval received for ${n.issueKey} - verifying PR state`);let u=await a.getPullRequest(n.owner,n.repo,n.prNumber);if(!u)throw new Error(`PR #${n.prNumber} no longer exists on GitHub`);if(u.state==="closed"&&!u.merged)throw new Error(`PR #${n.prNumber} was closed on GitHub without merging`);let c=t??n.headSha;if(u.state==="open"&&u.headSha!==c){let f=`PR #${n.prNumber} changed since review started (${c.slice(0,7)} \u2192 ${u.headSha.slice(0,7)}) - approval not applied. Re-review the PR and approve again.`;s("warn",f),await r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${f}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:u.headSha,resultSummary:f});return}if(n.mergeOnApprove&&u.state==="open"&&!u.merged){s("info",`Merging PR #${n.prNumber} (${n.mergeMethod})`);let f=await a.mergePullRequest(n.owner,n.repo,n.prNumber,n.mergeMethod,{sha:c,title:`${n.issueKey} (#${n.prNumber})`});if(!f.merged){let p=`Approved, but the merge did not go through - ${f.reason}`;s("warn",p),await r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${p}
584
+ (run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[Oe.NEEDS_INPUT_LABEL]}),n}async function ls(r,e,t){let n=is(e);if(!n){g.warn(`run.approved for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:s,setStatus:i}=ku(r,e);try{let o=Ae(pe()??r.cfg,n.repoName);if(!o)throw new Error("GitHub token missing on this runner");let a=new $e(o);s("info",`Approval received for ${n.issueKey} - verifying PR state`);let c=await a.getPullRequest(n.owner,n.repo,n.prNumber);if(!c)throw new Error(`PR #${n.prNumber} no longer exists on GitHub`);if(c.state==="closed"&&!c.merged)throw new Error(`PR #${n.prNumber} was closed on GitHub without merging`);let u=t??n.headSha;if(c.state==="open"&&c.headSha!==u){let f=`PR #${n.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 r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${f}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:c.headSha,resultSummary:f});return}if(n.mergeOnApprove&&c.state==="open"&&!c.merged){s("info",`Merging PR #${n.prNumber} (${n.mergeMethod})`);let f=await a.mergePullRequest(n.owner,n.repo,n.prNumber,n.mergeMethod,{sha:u,title:`${n.issueKey} (#${n.prNumber})`});if(!f.merged){let p=`Approved, but the merge did not go through - ${f.reason}`;s("warn",p),await r.jiraFor(n.repoName??"").addComment(n.issueKey,`**Allwright:** ${p}
585
585
 
586
- PR: ${n.prUrl}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:u.headSha,resultSummary:p});return}s("info",`PR #${n.prNumber} merged`)}await vc({jira:r.jiraFor(n.repoName??""),issueKey:n.issueKey},n,s),i("succeeded",{prUrl:n.prUrl}),s("info","Run completed after approval"),Dr(e)}catch(o){let a=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${a}`),await kc(r,n,a),i("failed",{error:a}),Dr(e)}}async function bc(r,e){let t=is(e);if(!t){g.warn(`run.rejected for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:n,setStatus:s}=_c(r,e);try{let i=Ae(pe()??r.cfg,t.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new $e(i);n("info",`Rejection received for ${t.issueKey} - closing PR #${t.prNumber}`);let a=await o.getPullRequest(t.owner,t.repo,t.prNumber);a&&a.state==="open"&&await o.closePullRequest(t.owner,t.repo,t.prNumber),a?.merged||await o.deleteBranch(t.owner,t.repo,t.branch),await r.jiraFor(t.repoName??"").addComment(t.issueKey,`**Allwright: changes rejected.**
586
+ PR: ${n.prUrl}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:c.headSha,resultSummary:p});return}s("info",`PR #${n.prNumber} merged`)}await bu({jira:r.jiraFor(n.repoName??""),issueKey:n.issueKey},n,s),i("succeeded",{prUrl:n.prUrl}),s("info","Run completed after approval"),Dr(e)}catch(o){let a=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${a}`),await Su(r,n,a),i("failed",{error:a}),Dr(e)}}async function wu(r,e){let t=is(e);if(!t){g.warn(`run.rejected for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:n,setStatus:s}=ku(r,e);try{let i=Ae(pe()??r.cfg,t.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new $e(i);n("info",`Rejection received for ${t.issueKey} - closing PR #${t.prNumber}`);let a=await o.getPullRequest(t.owner,t.repo,t.prNumber);a&&a.state==="open"&&await o.closePullRequest(t.owner,t.repo,t.prNumber),a?.merged||await o.deleteBranch(t.owner,t.repo,t.branch),await r.jiraFor(t.repoName??"").addComment(t.issueKey,`**Allwright: changes rejected.**
587
587
 
588
- The pull request was closed and the branch deleted. This ticket is labeled \`${t.failedLabel}\`; remove the label to try again. (run \`${t.runId}\`)`),await r.jiraFor(t.repoName??"").editLabels(t.issueKey,{add:[t.failedLabel]}),s("failed",{error:"rejected by user"}),n("info","PR closed, branch deleted, ticket labeled"),Dr(e)}catch(i){let o=i instanceof Error?i.message:String(i);n("error",`Rejection handling failed: ${o}`),await kc(r,t,o),s("failed",{error:o}),Dr(e)}}async function wc(r,e){let t=ai(e);if(!t){g.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:a,setStatus:u,sendUsage:c}=Lr(e,r.transport,1e5);a("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."),u("failed",{retryAvailable:!1});return}let{emit:n,setStatus:s,sendUsage:i,nextSeq:o}=Lr(e,r.transport,t.nextLogSeq);try{let a=await Ys(t.baseRepoPath,t.branch);if(a!==t.headSha){n("error",`Retry push aborted: branch ${t.branch} no longer holds the commit this run produced (expected ${t.headSha.slice(0,7)}, ${a?`found ${a.slice(0,7)}`:"the branch is gone"}) - a newer run has likely reused the branch. Re-run the ticket instead.`),na(e),s("failed",{retryAvailable:!1});return}let u=await jr(t.baseRepoPath),c=Ve(u);if(!c)throw new Error(`origin "${u}" is not a GitHub remote`);n("info",`Retry push for ${t.issueKey}: branch ${t.branch} at ${t.headSha.slice(0,7)}`);let f=r.jiraFor(t.repoName);await yc({gitDir:t.baseRepoPath,ownerRepo:c,runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,mergeOnApprove:t.mergeOnApprove??!1,mergeMethod:t.mergeMethod??"squash",doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:f,cfg:pe()??r.cfg,actorEmail:t.actorEmail,summary:t.resultSummary,cost:{costUsd:t.costUsd},emit:n,setStatus:s}),na(e),await f.editLabels(t.issueKey,{remove:[t.failedLabel]}).catch(()=>{})}catch(a){let u=a instanceof Error?a.message:String(a);n("error",`Retry push failed: ${u}`),ra({...t,nextLogSeq:o()}),s("failed",{error:u,retryAvailable:!0})}}function _c(r,e){let t=1e5;return{emit:(i,o)=>{r.transport.send({type:"run.log",runId:e,seq:t++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&g.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{r.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function kc(r,e,t){try{await r.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
588
+ The pull request was closed and the branch deleted. This ticket is labeled \`${t.failedLabel}\`; remove the label to try again. (run \`${t.runId}\`)`),await r.jiraFor(t.repoName??"").editLabels(t.issueKey,{add:[t.failedLabel]}),s("failed",{error:"rejected by user"}),n("info","PR closed, branch deleted, ticket labeled"),Dr(e)}catch(i){let o=i instanceof Error?i.message:String(i);n("error",`Rejection handling failed: ${o}`),await Su(r,t,o),s("failed",{error:o}),Dr(e)}}async function _u(r,e){let t=li(e);if(!t){g.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:a,setStatus:c,sendUsage:u}=Lr(e,r.transport,1e5);a("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:n,setStatus:s,sendUsage:i,nextSeq:o}=Lr(e,r.transport,t.nextLogSeq);try{let a=await Ys(t.baseRepoPath,t.branch);if(a!==t.headSha){n("error",`Retry push aborted: branch ${t.branch} no longer holds the commit this run produced (expected ${t.headSha.slice(0,7)}, ${a?`found ${a.slice(0,7)}`:"the branch is gone"}) - a newer run has likely reused the branch. Re-run the ticket instead.`),sa(e),s("failed",{retryAvailable:!1});return}let c=await jr(t.baseRepoPath),u=Ve(c);if(!u)throw new Error(`origin "${c}" is not a GitHub remote`);n("info",`Retry push for ${t.issueKey}: branch ${t.branch} at ${t.headSha.slice(0,7)}`);let f=r.jiraFor(t.repoName);await vu({gitDir:t.baseRepoPath,ownerRepo:u,runId:t.runId,issueKey:t.issueKey,issueSummary:t.issueSummary,branch:t.branch,baseBranch:t.baseBranch,jiraTransition:t.jiraTransition,jiraTransitionOnMerge:t.jiraTransitionOnMerge,requireApproval:t.requireApproval,mergeOnApprove:t.mergeOnApprove??!1,mergeMethod:t.mergeMethod??"squash",doneLabel:t.doneLabel,failedLabel:t.failedLabel,repoName:t.repoName,jira:f,cfg:pe()??r.cfg,actorEmail:t.actorEmail,summary:t.resultSummary,cost:{costUsd:t.costUsd},emit:n,setStatus:s}),sa(e),await f.editLabels(t.issueKey,{remove:[t.failedLabel]}).catch(()=>{})}catch(a){let c=a instanceof Error?a.message:String(a);n("error",`Retry push failed: ${c}`),na({...t,nextLogSeq:o()}),s("failed",{error:c,retryAvailable:!0})}}function ku(r,e){let t=1e5;return{emit:(i,o)=>{r.transport.send({type:"run.log",runId:e,seq:t++,ts:new Date().toISOString(),level:i,message:o}),i!=="agent"&&g.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{r.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function Su(r,e,t){try{await r.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
589
589
 
590
590
  Error: ${t.slice(0,800)}
591
591
 
592
592
  PR: ${e.prUrl}
593
- (run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){g.error(`could not post decision failure to ${e.issueKey}: ${n}`)}}function us(r){if(!r.length)return"(no comments)";let e=6e4,t=r.map(i=>`${i.author} (${i.created}):
593
+ (run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){g.error(`could not post decision failure to ${e.issueKey}: ${n}`)}}function cs(r){if(!r.length)return"(no comments)";let e=6e4,t=r.map(i=>`${i.author} (${i.created}):
594
594
  ${i.body}`),n=[],s=0;for(let i=t.length-1;i>=0;i--){if(s+=t[i].length+6,s>e){n.unshift(`(\u2026 ${i+1} earlier comment(s) omitted for length \u2026)`);break}n.unshift(t[i])}return n.join(`
595
595
  ---
596
- `)}function Sc(r){return`The ticket author replied:
596
+ `)}function Tu(r){return`The ticket author replied:
597
597
 
598
598
  ${r}
599
599
 
600
- Continue from where you left off now that you have this information. If you are still missing what you need, ask again the same way as before (the ${Oe.NEEDS_INPUT_MARKER} marker).`}function pi(r){let e=r.trim(),t=e.split(`
600
+ Continue from where you left off now that you have this information. If you are still missing what you need, ask again the same way as before (the ${Oe.NEEDS_INPUT_MARKER} marker).`}function mi(r){let e=r.trim(),t=e.split(`
601
601
  `,1)[0].trim(),n=o=>o.replace(/[^a-z]/gi,"").toUpperCase();if(n(t)!==n(Oe.NEEDS_INPUT_MARKER))return null;let s=e.indexOf(`
602
- `);return s<0?null:e.slice(s+1).trim()||null}async function mi(r,e,t,n,s){t("info",`Claude needs more information - posting questions to ${r.issueKey}`),await r.jira.addComment(r.issueKey,`**${Oe.NEEDS_INPUT_COMMENT_MARKER} before it can continue.**
602
+ `);return s<0?null:e.slice(s+1).trim()||null}async function gi(r,e,t,n,s){t("info",`Claude needs more information - posting questions to ${r.issueKey}`),await r.jira.addComment(r.issueKey,`**${Oe.NEEDS_INPUT_COMMENT_MARKER} before it can continue.**
603
603
 
604
604
  ${e}
605
605
 
606
- Reply with your answers in a comment on this ticket - this run will pick up right where it left off, automatically, once you do. (run \`${r.runId}\`)`);let i=new Date().toISOString();await r.jira.editLabels(r.issueKey,{add:[Oe.NEEDS_INPUT_LABEL]}),ic({runId:r.runId,issueKey:r.issueKey,kind:r.kind,mergeOnApprove:r.mergeOnApprove??!1,mergeMethod:r.mergeMethod??"squash",repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,createdAt:r.createdAt??i,questionsPostedAt:i,rounds:r.rounds,nextLogSeq:r.nextLogSeq,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,runTests:r.runTests??!0,issueSummary:r.issueSummary??"",claudeConfigDir:r.claudeConfigDir,agent:r.agent,model:r.model,actorEmail:r.actorEmail}),n("needs_input",{...s,resultSummary:os(e)}),t("info",`Waiting for a reply on ${r.issueKey} (label "${Oe.NEEDS_INPUT_LABEL}")`)}async function Tc(r,e,t,n,s){let i=`Claude asked for clarification ${e.rounds} times without reaching a result - giving up. Answer more completely and re-trigger manually if you want another attempt.`;t("error",i),await xt(r,e.issueKey,e.runId,e.failedLabel,i),ut(e.runId),n("failed",{error:i,...s})}async function An(r,e){await xt(r.jira,r.issueKey,r.runId,r.rule.trigger.failedLabel,e)}async function xt(r,e,t,n,s){try{await r.addComment(e,`**Allwright run failed.**
606
+ Reply with your answers in a comment on this ticket - this run will pick up right where it left off, automatically, once you do. (run \`${r.runId}\`)`);let i=new Date().toISOString();await r.jira.editLabels(r.issueKey,{add:[Oe.NEEDS_INPUT_LABEL]}),ou({runId:r.runId,issueKey:r.issueKey,kind:r.kind,mergeOnApprove:r.mergeOnApprove??!1,mergeMethod:r.mergeMethod??"squash",repoPath:r.repoPath,sessionId:r.sessionId,doneLabel:r.doneLabel,failedLabel:r.failedLabel,timeoutSeconds:r.timeoutSeconds,createdAt:r.createdAt??i,questionsPostedAt:i,rounds:r.rounds,nextLogSeq:r.nextLogSeq,baseRepoPath:r.baseRepoPath,repoName:r.repoName,branch:r.branch,baseBranch:r.baseBranch,jiraTransition:r.jiraTransition,jiraTransitionOnMerge:r.jiraTransitionOnMerge,requireApproval:r.requireApproval,maxTurns:r.maxTurns,runTests:r.runTests??!0,issueSummary:r.issueSummary??"",claudeConfigDir:r.claudeConfigDir,agent:r.agent,model:r.model,actorEmail:r.actorEmail}),n("needs_input",{...s,resultSummary:os(e)}),t("info",`Waiting for a reply on ${r.issueKey} (label "${Oe.NEEDS_INPUT_LABEL}")`)}async function xu(r,e,t,n,s){let i=`Claude asked for clarification ${e.rounds} times without reaching a result - giving up. Answer more completely and re-trigger manually if you want another attempt.`;t("error",i),await xt(r,e.issueKey,e.runId,e.failedLabel,i),ct(e.runId),n("failed",{error:i,...s})}async function An(r,e){await xt(r.jira,r.issueKey,r.runId,r.rule.trigger.failedLabel,e)}async function xt(r,e,t,n,s){try{await r.addComment(e,`**Allwright run failed.**
607
607
 
608
608
  Error: ${s.slice(0,800)}
609
609
 
610
- This ticket has been labeled \`${n}\` and will not be retried automatically. To retry, fix the cause and remove the \`${n}\` label. (run \`${t}\`)`),await r.editLabels(e,{add:[n],remove:[Oe.NEEDS_INPUT_LABEL]})}catch(i){g.error(`could not post failure comment to ${e}: ${i}`)}}function hg(r){let e=/##\s*Summary of changes\s*\n([\s\S]*)$/i.exec(r);return(e?e[1]:r).trim().slice(0,8e3)||"(no summary provided)"}function os(r){for(let e of r.split(`
611
- `)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var qr=E(require("node:fs"),1),Ur=E(require("node:path"),1),Fr=require("node:child_process"),ca=E(require("node:readline"),1),da=require("node:crypto"),Br=E(be(),1);var Ac=E(be(),1);_t();Ye();Or();var xc=4e3,fg=4e3;function ha(r){let e=0;return{emit:(s,i)=>{r.transport.send({type:"run.log",runId:r.runId,seq:e++,ts:new Date().toISOString(),level:s,message:i.slice(0,fg)}),s!=="agent"&&g.info(`[deploy ${r.runId}] ${i}`)},setStatus:(s,i={})=>{r.transport.send({type:"run.status",runId:r.runId,status:s,...i})}}}async function gi(r){let{emit:e,setStatus:t}=ha(r),n=r.environment;try{let s=pg(r);if(s){e("error",s),await Xe(r,`**Allwright could not deploy to \`${n.name}\`.**
610
+ This ticket has been labeled \`${n}\` and will not be retried automatically. To retry, fix the cause and remove the \`${n}\` label. (run \`${t}\`)`),await r.editLabels(e,{add:[n],remove:[Oe.NEEDS_INPUT_LABEL]})}catch(i){g.error(`could not post failure comment to ${e}: ${i}`)}}function fg(r){let e=/##\s*Summary of changes\s*\n([\s\S]*)$/i.exec(r);return(e?e[1]:r).trim().slice(0,8e3)||"(no summary provided)"}function os(r){for(let e of r.split(`
611
+ `)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var qr=E(require("node:fs"),1),Ur=E(require("node:path"),1),Fr=require("node:child_process"),da=E(require("node:readline"),1),ha=require("node:crypto"),Br=E(be(),1);var $u=E(be(),1);_t();Ye();Or();var Cu=4e3,pg=4e3;function fa(r){let e=0;return{emit:(s,i)=>{r.transport.send({type:"run.log",runId:r.runId,seq:e++,ts:new Date().toISOString(),level:s,message:i.slice(0,pg)}),s!=="agent"&&g.info(`[deploy ${r.runId}] ${i}`)},setStatus:(s,i={})=>{r.transport.send({type:"run.status",runId:r.runId,status:s,...i})}}}async function yi(r){let{emit:e,setStatus:t}=fa(r),n=r.environment;try{let s=mg(r);if(s){e("error",s),await Xe(r,`**Allwright could not deploy to \`${n.name}\`.**
612
612
 
613
- ${s}`),t("failed",{error:s});return}if(n.requireApproval){sc({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,projectId:r.project.id,repoName:r.project.repoName,environmentName:n.name,requestedBy:r.requestedBy,createdAt:new Date().toISOString()}),e("info",`Deploy to "${n.name}" is waiting for approval on the dashboard - no step has run yet`),await Xe(r,`**Allwright: deploy to \`${n.name}\` needs approval.**
613
+ ${s}`),t("failed",{error:s});return}if(n.requireApproval){iu({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,projectId:r.project.id,repoName:r.project.repoName,environmentName:n.name,requestedBy:r.requestedBy,createdAt:new Date().toISOString()}),e("info",`Deploy to "${n.name}" is waiting for approval on the dashboard - no step has run yet`),await Xe(r,`**Allwright: deploy to \`${n.name}\` needs approval.**
614
614
 
615
- ${r.requestedBy?`Requested by ${r.requestedBy}. `:""}Nothing has been executed yet. Approve it on the Allwright dashboard to run the ${n.steps.length} deploy step(s), or reject to cancel. (run \`${r.runId}\`)`),t("awaiting_approval",{resultSummary:`Awaiting approval to deploy ${r.issueKey} to ${n.name}`});return}await $c(r,e,t)}catch(s){let i=s instanceof Error?s.message:String(s);e("error",`Deploy failed: ${i}`),await Xe(r,`**Allwright deploy to \`${n.name}\` failed.**
615
+ ${r.requestedBy?`Requested by ${r.requestedBy}. `:""}Nothing has been executed yet. Approve it on the Allwright dashboard to run the ${n.steps.length} deploy step(s), or reject to cancel. (run \`${r.runId}\`)`),t("awaiting_approval",{resultSummary:`Awaiting approval to deploy ${r.issueKey} to ${n.name}`});return}await Pu(r,e,t)}catch(s){let i=s instanceof Error?s.message:String(s);e("error",`Deploy failed: ${i}`),await Xe(r,`**Allwright deploy to \`${n.name}\` failed.**
616
616
 
617
617
  ${i.slice(0,800)}
618
618
 
619
- (run \`${r.runId}\`)`),t("failed",{error:i})}}function pg(r){let e=r.environment;if(!r.cfg.deploy.enabled)return"deployments are turned off on this runner. Deploy steps are shell commands, so they stay disabled until someone with access to this machine runs `allwright deploy enable`.";if(!e.steps.length)return`environment "${e.name}" has no deploy steps configured - add them in the dashboard first`;if(e.promotionMode==="merge_and_deploy"&&!e.branch)return`environment "${e.name}" is set to merge-and-deploy but has no branch configured`;if(e.useDedicatedCheckout&&!e.branch)return`environment "${e.name}" wants a dedicated checkout but has no branch configured`;let t=dr(r.cfg,r.project.repoName,e.name),n=e.requiredSecrets.filter(s=>!t[s]&&!process.env[s]);return n.length?`missing deploy secret(s) on this runner: ${n.join(", ")}. Set them with: allwright env set "${r.project.repoName}" "${e.name}" ${n[0]}=...`:null}async function $c(r,e,t){let n=r.environment,s=dr(r.cfg,r.project.repoName,n.name),i=bg(Object.values(s)),o=Date.now();if(t("running"),e("info",`Deploying ${r.issueKey} to "${n.name}"`+(r.requestedBy?` (requested by ${r.requestedBy})`:"")+` - ${n.steps.length} step(s), ${n.timeoutSeconds}s budget`),n.auditBeforeDeploy){e("info",`Pre-deploy ${n.auditBeforeDeploy} audit starting (advisory - will not block)`);try{let P=Je(r.cfg,r.project,"assist"),w="error"in P?{ok:!1,error:P.error}:await Cn({projectId:r.project.id,repoPath:r.repoPath,role:n.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",agent:P,jira:r.jira});if(!w.ok)e("warn",`Pre-deploy audit could not run: ${w.error} - deploying anyway (advisory)`);else if(!w.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let J={};for(let O of w.audit.findings)J[O.severity]=(J[O.severity]??0)+1;e("warn",`Pre-deploy audit: ${w.audit.findings.length} finding(s) (`+Object.entries(J).map(([O,D])=>`${D} ${O}`).join(", ")+") - full report on the Audits page. Deploying anyway (advisory).");for(let O of w.audit.findings.slice(0,5))e("warn",` [${O.severity}] ${O.title} - ${O.evidence[0]?.file??""}`)}}catch(P){e("warn",`Pre-deploy audit crashed: ${P instanceof Error?P.message:String(P)} - deploying anyway`)}}if(n.requireSyncCheck){if(!n.previousEnvBranch||!n.branch){let w=n.branch?`"${n.name}" requires a branch sync check, but no earlier stage in the pipeline has a branch to compare against. Check the pipeline order on the Environments page (was "${n.name}" moved to the top?), or turn the check off.`:`"${n.name}" requires a branch sync check but has no branch set - set it, or turn the check off`;e("error",w),await Xe(r,`**Allwright refused to deploy to \`${n.name}\`.**
619
+ (run \`${r.runId}\`)`),t("failed",{error:i})}}function mg(r){let e=r.environment;if(!r.cfg.deploy.enabled)return"deployments are turned off on this runner. Deploy steps are shell commands, so they stay disabled until someone with access to this machine runs `allwright deploy enable`.";if(!e.steps.length)return`environment "${e.name}" has no deploy steps configured - add them in the dashboard first`;if(e.promotionMode==="merge_and_deploy"&&!e.branch)return`environment "${e.name}" is set to merge-and-deploy but has no branch configured`;if(e.useDedicatedCheckout&&!e.branch)return`environment "${e.name}" wants a dedicated checkout but has no branch configured`;let t=dr(r.cfg,r.project.repoName,e.name),n=e.requiredSecrets.filter(s=>!t[s]&&!process.env[s]);return n.length?`missing deploy secret(s) on this runner: ${n.join(", ")}. Set them with: allwright env set "${r.project.repoName}" "${e.name}" ${n[0]}=...`:null}async function Pu(r,e,t){let n=r.environment,s=dr(r.cfg,r.project.repoName,n.name),i=wg(Object.values(s)),o=Date.now();if(t("running"),e("info",`Deploying ${r.issueKey} to "${n.name}"`+(r.requestedBy?` (requested by ${r.requestedBy})`:"")+` - ${n.steps.length} step(s), ${n.timeoutSeconds}s budget`),n.auditBeforeDeploy){e("info",`Pre-deploy ${n.auditBeforeDeploy} audit starting (advisory - will not block)`);try{let P=Je(r.cfg,r.project,"assist"),k="error"in P?{ok:!1,error:P.error}:await Cn({projectId:r.project.id,repoPath:r.repoPath,role:n.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",agent:P,jira:r.jira});if(!k.ok)e("warn",`Pre-deploy audit could not run: ${k.error} - deploying anyway (advisory)`);else if(!k.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let X={};for(let O of k.audit.findings)X[O.severity]=(X[O.severity]??0)+1;e("warn",`Pre-deploy audit: ${k.audit.findings.length} finding(s) (`+Object.entries(X).map(([O,L])=>`${L} ${O}`).join(", ")+") - full report on the Audits page. Deploying anyway (advisory).");for(let O of k.audit.findings.slice(0,5))e("warn",` [${O.severity}] ${O.title} - ${O.evidence[0]?.file??""}`)}}catch(P){e("warn",`Pre-deploy audit crashed: ${P instanceof Error?P.message:String(P)} - deploying anyway`)}}if(n.requireSyncCheck){if(!n.previousEnvBranch||!n.branch){let k=n.branch?`"${n.name}" requires a branch sync check, but no earlier stage in the pipeline has a branch to compare against. Check the pipeline order on the Environments page (was "${n.name}" moved to the top?), or turn the check off.`:`"${n.name}" requires a branch sync check but has no branch set - set it, or turn the check off`;e("error",k),await Xe(r,`**Allwright refused to deploy to \`${n.name}\`.**
620
620
 
621
- ${w}
621
+ ${k}
622
622
 
623
- (run \`${r.runId}\`)`),t("failed",{error:w,errorKind:"guard"});return}let P=await gg(r,e);if(P){await Xe(r,P.comment),t("failed",{error:P.error,...P.guard?{errorKind:"guard"}:{}});return}}let a=r.repoPath;if(n.useDedicatedCheckout||n.promotionMode==="merge_and_deploy"?(e("info",`Preparing ${n.name} checkout at origin/${n.branch}`),a=await Io({repoPath:r.repoPath,repoName:r.project.repoName,envName:n.name,branch:n.branch,attached:n.promotionMode==="merge_and_deploy"})):e("info",`No dedicated checkout for "${n.name}" - running the steps in the mapped checkout as it is`),n.promotionMode==="merge_and_deploy"){let P=kt(n.ticketBranchTemplate,{issueKey:r.issueKey});e("info",`Merging "${P}" into "${n.branch}"`);let w=await Ro(a,P,`Deploy ${r.issueKey} to ${n.name}
623
+ (run \`${r.runId}\`)`),t("failed",{error:k,errorKind:"guard"});return}let P=await yg(r,e);if(P){await Xe(r,P.comment),t("failed",{error:P.error,...P.guard?{errorKind:"guard"}:{}});return}}let a=r.repoPath;if(n.useDedicatedCheckout||n.promotionMode==="merge_and_deploy"?(e("info",`Preparing ${n.name} checkout at origin/${n.branch}`),a=await Ro({repoPath:r.repoPath,repoName:r.project.repoName,envName:n.name,branch:n.branch,attached:n.promotionMode==="merge_and_deploy"})):e("info",`No dedicated checkout for "${n.name}" - running the steps in the mapped checkout as it is`),n.promotionMode==="merge_and_deploy"){let P=kt(n.ticketBranchTemplate,{issueKey:r.issueKey});e("info",`Merging "${P}" into "${n.branch}"`);let k=await Eo(a,P,`Deploy ${r.issueKey} to ${n.name}
624
624
 
625
- Allwright run ${r.runId}`);if(!w.ok){e("error",w.reason??"merge failed"),await Xe(r,`**Allwright deploy to \`${n.name}\` failed before running anything.**
625
+ Allwright run ${r.runId}`);if(!k.ok){e("error",k.reason??"merge failed"),await Xe(r,`**Allwright deploy to \`${n.name}\` failed before running anything.**
626
626
 
627
- ${w.reason}`),t("failed",{error:w.reason});return}w.alreadyMerged?e("info",`"${P}" is already in "${n.branch}" - nothing to merge`):(e("info",`Pushing "${n.branch}" to origin`),await jo(a,n.branch))}let c=await Pr(a).catch(()=>"");c&&e("info",`Deploying commit ${c.slice(0,10)}`);let f=yg(a,n.workdir),p={...process.env,...s,ALLWRIGHT_ENVIRONMENT:n.name,ALLWRIGHT_ISSUE_KEY:r.issueKey,ALLWRIGHT_RUN_ID:r.runId,ALLWRIGHT_DEPLOY_REF:c,ALLWRIGHT_BRANCH:n.branch,TICKETPILOT_ENVIRONMENT:n.name,TICKETPILOT_ISSUE_KEY:r.issueKey,TICKETPILOT_RUN_ID:r.runId,TICKETPILOT_DEPLOY_REF:c,TICKETPILOT_BRANCH:n.branch},v=0,S=n.timeoutSeconds*1e3;for(let[P,w]of n.steps.entries()){let J=S-(Date.now()-o);if(J<=0){let D=`deploy exceeded its ${n.timeoutSeconds}s budget before step ${P+1}`;e("error",D),await Xe(r,`**Allwright deploy to \`${n.name}\` timed out.**
627
+ ${k.reason}`),t("failed",{error:k.reason});return}k.alreadyMerged?e("info",`"${P}" is already in "${n.branch}" - nothing to merge`):(e("info",`Pushing "${n.branch}" to origin`),await Oo(a,n.branch))}let u=await Pr(a).catch(()=>"");u&&e("info",`Deploying commit ${u.slice(0,10)}`);let f=vg(a,n.workdir),p={...process.env,...s,ALLWRIGHT_ENVIRONMENT:n.name,ALLWRIGHT_ISSUE_KEY:r.issueKey,ALLWRIGHT_RUN_ID:r.runId,ALLWRIGHT_DEPLOY_REF:u,ALLWRIGHT_BRANCH:n.branch,TICKETPILOT_ENVIRONMENT:n.name,TICKETPILOT_ISSUE_KEY:r.issueKey,TICKETPILOT_RUN_ID:r.runId,TICKETPILOT_DEPLOY_REF:u,TICKETPILOT_BRANCH:n.branch},v=0,S=n.timeoutSeconds*1e3;for(let[P,k]of n.steps.entries()){let X=S-(Date.now()-o);if(X<=0){let L=`deploy exceeded its ${n.timeoutSeconds}s budget before step ${P+1}`;e("error",L),await Xe(r,`**Allwright deploy to \`${n.name}\` timed out.**
628
628
 
629
- ${D}`),t("timed_out",{error:D,deployedRef:c});return}e("info",`\u25B6 step ${P+1}/${n.steps.length}: ${w.name}`);let O=await vg({command:w.run,cwd:f,env:p,timeoutMs:J,onLine:(D,Q)=>{v++,v===xc&&e("warn","(output truncated - deploy log limit reached)"),!(v>=xc)&&e(D,i(Q))}});if(O.timedOut){let D=`step "${w.name}" hit the ${n.timeoutSeconds}s deploy budget and was killed`;e("error",D),await Xe(r,`**Allwright deploy to \`${n.name}\` timed out.**
629
+ ${L}`),t("timed_out",{error:L,deployedRef:u});return}e("info",`\u25B6 step ${P+1}/${n.steps.length}: ${k.name}`);let O=await bg({command:k.run,cwd:f,env:p,timeoutMs:X,onLine:(L,K)=>{v++,v===Cu&&e("warn","(output truncated - deploy log limit reached)"),!(v>=Cu)&&e(L,i(K))}});if(O.timedOut){let L=`step "${k.name}" hit the ${n.timeoutSeconds}s deploy budget and was killed`;e("error",L),await Xe(r,`**Allwright deploy to \`${n.name}\` timed out.**
630
630
 
631
- ${D}`),t("timed_out",{error:D,deployedRef:c});return}if(O.code!==0){if(w.continueOnError){e("warn",`step "${w.name}" exited ${O.code} - continuing (marked continue-on-error)`);continue}let D="";try{D=i(await ko(a))}catch{}let Q=`step ${P+1} "${w.name}" failed with exit code ${O.code}`+(O.tail?`: ${i(O.tail)}`:"")+(D?`
631
+ ${L}`),t("timed_out",{error:L,deployedRef:u});return}if(O.code!==0){if(k.continueOnError){e("warn",`step "${k.name}" exited ${O.code} - continuing (marked continue-on-error)`);continue}let L="";try{L=i(await So(a))}catch{}let K=`step ${P+1} "${k.name}" failed with exit code ${O.code}`+(O.tail?`: ${i(O.tail)}`:"")+(L?`
632
632
 
633
633
  Checkout at failure:
634
- ${D}`:"");e("error",Q),await Xe(r,`**Allwright deploy to \`${n.name}\` failed.**
634
+ ${L}`:"");e("error",K),await Xe(r,`**Allwright deploy to \`${n.name}\` failed.**
635
635
 
636
- Step ${P+1} \`${w.name}\` exited ${O.code}.
636
+ Step ${P+1} \`${k.name}\` exited ${O.code}.
637
637
 
638
638
  `+(O.tail?`\`\`\`
639
639
  ${i(O.tail).slice(0,1200)}
640
640
  \`\`\`
641
641
 
642
- `:"")+(D?`Checkout at failure:
642
+ `:"")+(L?`Checkout at failure:
643
643
  \`\`\`
644
- ${D.slice(0,800)}
644
+ ${L.slice(0,800)}
645
645
  \`\`\`
646
646
 
647
- `:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${r.runId}\`)`),t("failed",{error:Q.slice(0,1600),deployedRef:c});return}e("info",`\u2713 step ${P+1}/${n.steps.length}: ${w.name}`)}t("posting");let T=Math.round((Date.now()-o)/1e3);r.issueKey!==Br.BRANCH_DEPLOY_ISSUE_KEY&&await Xe(r,`**Allwright deployed \`${r.issueKey}\` to \`${n.name}\`.**
647
+ `:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${r.runId}\`)`),t("failed",{error:K.slice(0,1600),deployedRef:u});return}e("info",`\u2713 step ${P+1}/${n.steps.length}: ${k.name}`)}t("posting");let T=Math.round((Date.now()-o)/1e3);r.issueKey!==Br.BRANCH_DEPLOY_ISSUE_KEY&&await Xe(r,`**Allwright deployed \`${r.issueKey}\` to \`${n.name}\`.**
648
648
 
649
- `+(c?`Commit: \`${c.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
649
+ `+(u?`Commit: \`${u.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
650
650
  `:"")+`${n.steps.length} step(s) in ${T}s.`+(r.requestedBy?` Requested by ${r.requestedBy}.`:"")+`
651
651
 
652
- (run \`${r.runId}\`)`);let x=await mg(r,e,c);t("succeeded",{resultSummary:`Deployed to ${n.name}${c?` at ${c.slice(0,10)}`:""} in ${T}s`+(x!==null?` \xB7 ${x} ticket(s) moved to "${n.deployToColumn}"`:""),deployedRef:c}),e("info",`Deploy to "${n.name}" succeeded in ${T}s`)}async function mg(r,e,t){let n=r.environment;if(!n.deployFromColumn||!n.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await r.jira.search(`project = "${r.project.jiraProjectKey}" AND status = "${n.deployFromColumn}" ORDER BY updated ASC`,50)}catch(a){return e("warn",`deploy succeeded, but listing tickets in "${n.deployFromColumn}" failed: ${a instanceof Error?a.message:a} - move them by hand`),null}if(!i.length)return e("info",`No tickets in "${n.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${n.deployFromColumn}" to "${n.deployToColumn}"`);let o=0;for(let a of i)try{if(await r.jira.addComment(a.key,`**Allwright: deployed to \`${n.name}\` on ${s}.**
652
+ (run \`${r.runId}\`)`);let x=await gg(r,e,u);t("succeeded",{resultSummary:`Deployed to ${n.name}${u?` at ${u.slice(0,10)}`:""} in ${T}s`+(x!==null?` \xB7 ${x} ticket(s) moved to "${n.deployToColumn}"`:""),deployedRef:u}),e("info",`Deploy to "${n.name}" succeeded in ${T}s`)}async function gg(r,e,t){let n=r.environment;if(!n.deployFromColumn||!n.deployToColumn)return null;let s=new Date().toISOString().slice(0,10),i;try{i=await r.jira.search(`project = "${r.project.jiraProjectKey}" AND status = "${n.deployFromColumn}" ORDER BY updated ASC`,50)}catch(a){return e("warn",`deploy succeeded, but listing tickets in "${n.deployFromColumn}" failed: ${a instanceof Error?a.message:a} - move them by hand`),null}if(!i.length)return e("info",`No tickets in "${n.deployFromColumn}" to move`),0;e("info",`Moving ${i.length} ticket(s) from "${n.deployFromColumn}" to "${n.deployToColumn}"`);let o=0;for(let a of i)try{if(await r.jira.addComment(a.key,`**Allwright: deployed to \`${n.name}\` on ${s}.**
653
653
 
654
654
  `+(t?`Commit: \`${t.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
655
- `:"")+(r.requestedBy?`Requested by ${r.requestedBy}. `:"")+`(run \`${r.runId}\`)`),!await r.jira.transitionByName(a.key,n.deployToColumn)){e("warn",`${a.key}: no workflow transition to "${n.deployToColumn}" from its current status - left in place`),await r.jira.addComment(a.key,`**Allwright could not move this ticket to \`${n.deployToColumn}\`** - no such transition from its current status. The deploy itself succeeded; move it by hand. (run \`${r.runId}\`)`).catch(()=>{});continue}o++,e("info",`\u2713 ${a.key} \u2192 "${n.deployToColumn}"`)}catch(u){e("warn",`${a.key}: sweep failed (${u instanceof Error?u.message:u}) - left in "${n.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${n.deployToColumn}"`),o}async function gg(r,e){let t=r.environment,n=t.previousEnvBranch,s=(a,u=!1)=>({error:a,guard:u,comment:`**Allwright could not deploy \`${r.issueKey}\` to \`${t.name}\`.**
655
+ `:"")+(r.requestedBy?`Requested by ${r.requestedBy}. `:"")+`(run \`${r.runId}\`)`),!await r.jira.transitionByName(a.key,n.deployToColumn)){e("warn",`${a.key}: no workflow transition to "${n.deployToColumn}" from its current status - left in place`),await r.jira.addComment(a.key,`**Allwright could not move this ticket to \`${n.deployToColumn}\`** - no such transition from its current status. The deploy itself succeeded; move it by hand. (run \`${r.runId}\`)`).catch(()=>{});continue}o++,e("info",`\u2713 ${a.key} \u2192 "${n.deployToColumn}"`)}catch(c){e("warn",`${a.key}: sweep failed (${c instanceof Error?c.message:c}) - left in "${n.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${n.deployToColumn}"`),o}async function yg(r,e){let t=r.environment,n=t.previousEnvBranch,s=(a,c=!1)=>({error:a,guard:c,comment:`**Allwright could not deploy \`${r.issueKey}\` to \`${t.name}\`.**
656
656
 
657
657
  ${a}
658
658
 
659
- (run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await Sn(r.repoPath,n),await Sn(r.repoPath,t.branch)}catch(a){return s(`sync check could not fetch branches: ${a instanceof Error?a.message:String(a)}`)}let i;try{i=await Oo(r.repoPath,`origin/${n}`,`origin/${t.branch}`)}catch(a){return s(`sync check failed: ${a instanceof Error?a.message:String(a)}`)}if(!i)return e("info",`"${t.branch}" already matches "${n}" - continuing`),null;e("warn",`"${t.branch}" and "${n}" have diverged - opening a PR instead of deploying`);let o=Ae(pe()??r.cfg,r.project.repoName);if(!o)return s(`"${t.branch}" and "${n}" have diverged, and no GitHub token applies to this repo to open a PR. Run \`allwright github set-token\`, or merge them manually, then retry the deploy.`,!0);try{let a=await jr(r.repoPath),u=Ve(a);if(!u)throw new Error(`could not parse a GitHub owner/repo from origin "${a}"`);let f=await new $e(o).createPullRequest(u.owner,u.repo,{title:`Sync ${t.name} (${t.branch}) with ${n}`,head:n,base:t.branch,body:`Allwright opened this automatically while trying to deploy \`${r.issueKey}\` to \`${t.name}\`: \`${t.branch}\` doesn't have everything that's on \`${n}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
659
+ (run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await Sn(r.repoPath,n),await Sn(r.repoPath,t.branch)}catch(a){return s(`sync check could not fetch branches: ${a instanceof Error?a.message:String(a)}`)}let i;try{i=await No(r.repoPath,`origin/${n}`,`origin/${t.branch}`)}catch(a){return s(`sync check failed: ${a instanceof Error?a.message:String(a)}`)}if(!i)return e("info",`"${t.branch}" already matches "${n}" - continuing`),null;e("warn",`"${t.branch}" and "${n}" have diverged - opening a PR instead of deploying`);let o=Ae(pe()??r.cfg,r.project.repoName);if(!o)return s(`"${t.branch}" and "${n}" have diverged, and no GitHub token applies to this repo to open a PR. Run \`allwright github set-token\`, or merge them manually, then retry the deploy.`,!0);try{let a=await jr(r.repoPath),c=Ve(a);if(!c)throw new Error(`could not parse a GitHub owner/repo from origin "${a}"`);let f=await new $e(o).createPullRequest(c.owner,c.repo,{title:`Sync ${t.name} (${t.branch}) with ${n}`,head:n,base:t.branch,body:`Allwright opened this automatically while trying to deploy \`${r.issueKey}\` to \`${t.name}\`: \`${t.branch}\` doesn't have everything that's on \`${n}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
660
660
 
661
- (run \`${r.runId}\`)`});return s(`"${t.branch}" is not in sync with "${n}" - opened ${f.url} to catch it up. Merge that, then retry the deploy.`,!0)}catch(a){return s(`could not open a sync PR: ${a instanceof Error?a.message:String(a)}`)}}function yg(r,e){if(!e.trim())return r;let t=Ur.default.resolve(r,e),n=Ur.default.relative(r,t);if(n.startsWith("..")||Ur.default.isAbsolute(n))throw new Error(`working directory "${e}" is outside the repository checkout`);return t}function vg(r){return new Promise(e=>{let t=(0,Fr.spawn)("bash",["-lc",r.command],{cwd:r.cwd,env:r.env,detached:!0,stdio:["ignore","pipe","pipe"]}),n=[],s=c=>{n.push(c),n.length>20&&n.shift()},i=!1,o=!1,a=c=>{i||(i=!0,clearTimeout(u),e({code:c,timedOut:o,tail:n.join(`
662
- `)}))},u=setTimeout(()=>{o=!0,Cc(t.pid,"SIGTERM"),setTimeout(()=>Cc(t.pid,"SIGKILL"),1e4).unref()},r.timeoutMs);ca.default.createInterface({input:t.stdout}).on("line",c=>{s(c),r.onLine("info",c)}),ca.default.createInterface({input:t.stderr}).on("line",c=>{s(c),r.onLine("warn",c)}),t.on("error",c=>{s(`failed to start: ${c.message}`),a(127)}),t.on("close",c=>a(c??1))})}function Cc(r,e){if(r)try{process.kill(-r,e)}catch{try{process.kill(r,e)}catch{}}}function bg(r){let e=r.filter(t=>t&&t.length>=6).sort((t,n)=>n.length-t.length);return e.length?t=>{let n=t;for(let s of e)n=n.split(s).join("***");return n}:t=>t}async function Xe(r,e){if(r.issueKey!==Br.BRANCH_DEPLOY_ISSUE_KEY)try{await r.jira.addComment(r.issueKey,e)}catch(t){g.error(`could not post deploy comment to ${r.issueKey}: ${t}`)}}function fa(r){return ui(r)!==null}async function Pc(r,e){let t=ui(e);if(!t)return;let{emit:n,setStatus:s}=ha({runId:e,transport:r.transport}),i=r.lookup(t.projectId,t.environmentName);if(!i){let a=`approved, but environment "${t.environmentName}" is no longer in this runner's config (deleted or renamed?) - nothing was deployed`;n("error",a),s("failed",{error:a}),ci(e);return}ci(e);let o={runId:e,project:i.project,environment:i.environment,issueKey:t.issueKey,issueSummary:t.issueSummary,repoPath:i.repoPath,cfg:r.cfg,jira:r.jiraFor(i.project.repoName),transport:r.transport,requestedBy:t.requestedBy};n("info",`Approved - running the ${i.environment.steps.length} deploy step(s) now`);try{await $c(o,n,s)}catch(a){let u=a instanceof Error?a.message:String(a);n("error",`Deploy failed: ${u}`),await Xe(o,`**Allwright deploy failed.**
661
+ (run \`${r.runId}\`)`});return s(`"${t.branch}" is not in sync with "${n}" - opened ${f.url} to catch it up. Merge that, then retry the deploy.`,!0)}catch(a){return s(`could not open a sync PR: ${a instanceof Error?a.message:String(a)}`)}}function vg(r,e){if(!e.trim())return r;let t=Ur.default.resolve(r,e),n=Ur.default.relative(r,t);if(n.startsWith("..")||Ur.default.isAbsolute(n))throw new Error(`working directory "${e}" is outside the repository checkout`);return t}function bg(r){return new Promise(e=>{let t=(0,Fr.spawn)("bash",["-lc",r.command],{cwd:r.cwd,env:r.env,detached:!0,stdio:["ignore","pipe","pipe"]}),n=[],s=u=>{n.push(u),n.length>20&&n.shift()},i=!1,o=!1,a=u=>{i||(i=!0,clearTimeout(c),e({code:u,timedOut:o,tail:n.join(`
662
+ `)}))},c=setTimeout(()=>{o=!0,Iu(t.pid,"SIGTERM"),setTimeout(()=>Iu(t.pid,"SIGKILL"),1e4).unref()},r.timeoutMs);da.default.createInterface({input:t.stdout}).on("line",u=>{s(u),r.onLine("info",u)}),da.default.createInterface({input:t.stderr}).on("line",u=>{s(u),r.onLine("warn",u)}),t.on("error",u=>{s(`failed to start: ${u.message}`),a(127)}),t.on("close",u=>a(u??1))})}function Iu(r,e){if(r)try{process.kill(-r,e)}catch{try{process.kill(r,e)}catch{}}}function wg(r){let e=r.filter(t=>t&&t.length>=6).sort((t,n)=>n.length-t.length);return e.length?t=>{let n=t;for(let s of e)n=n.split(s).join("***");return n}:t=>t}async function Xe(r,e){if(r.issueKey!==Br.BRANCH_DEPLOY_ISSUE_KEY)try{await r.jira.addComment(r.issueKey,e)}catch(t){g.error(`could not post deploy comment to ${r.issueKey}: ${t}`)}}function pa(r){return ui(r)!==null}async function ju(r,e){let t=ui(e);if(!t)return;let{emit:n,setStatus:s}=fa({runId:e,transport:r.transport}),i=r.lookup(t.projectId,t.environmentName);if(!i){let a=`approved, but environment "${t.environmentName}" is no longer in this runner's config (deleted or renamed?) - nothing was deployed`;n("error",a),s("failed",{error:a}),di(e);return}di(e);let o={runId:e,project:i.project,environment:i.environment,issueKey:t.issueKey,issueSummary:t.issueSummary,repoPath:i.repoPath,cfg:r.cfg,jira:r.jiraFor(i.project.repoName),transport:r.transport,requestedBy:t.requestedBy};n("info",`Approved - running the ${i.environment.steps.length} deploy step(s) now`);try{await Pu(o,n,s)}catch(a){let c=a instanceof Error?a.message:String(a);n("error",`Deploy failed: ${c}`),await Xe(o,`**Allwright deploy failed.**
663
663
 
664
- ${u.slice(0,800)}`),s("failed",{error:u})}}async function jc(r,e){let t=ui(e);if(!t)return;let{emit:n,setStatus:s}=ha({runId:e,transport:r.transport});ci(e),n("info",`Deploy to "${t.environmentName}" was rejected - nothing ran`);let i=r.lookup(t.projectId,t.environmentName);try{await r.jiraFor(i?.project.repoName??"").addComment(t.issueKey,`**Allwright: deploy to \`${t.environmentName}\` was rejected.**
664
+ ${c.slice(0,800)}`),s("failed",{error:c})}}async function Ou(r,e){let t=ui(e);if(!t)return;let{emit:n,setStatus:s}=fa({runId:e,transport:r.transport});di(e),n("info",`Deploy to "${t.environmentName}" was rejected - nothing ran`);let i=r.lookup(t.projectId,t.environmentName);try{await r.jiraFor(i?.project.repoName??"").addComment(t.issueKey,`**Allwright: deploy to \`${t.environmentName}\` was rejected.**
665
665
 
666
- No deploy step was executed. (run \`${e}\`)`)}catch(o){g.error(`could not post rejection comment to ${t.issueKey}: ${o}`)}s("failed",{error:"deploy rejected by a reviewer"})}var wg=k.object({steps:k.array(Br.DeployStep).max(50).default([]),requiredSecrets:k.array(k.string()).max(50).default([]),notes:k.string().default("")}),_g=[".ticketpilot/deploy.md","DEPLOY.md","DEPLOYMENT.md","docs/DEPLOY.md","docs/deploy.md","docs/deployment.md"],Ic=24e3;function yi(r){for(let e of _g){let t=Ur.default.join(r,e);try{if(!qr.default.existsSync(t))continue;let n=qr.default.readFileSync(t,"utf8");if(!n.trim())continue;return{path:e,content:n.length>Ic?n.slice(0,Ic)+`
666
+ No deploy step was executed. (run \`${e}\`)`)}catch(o){g.error(`could not post rejection comment to ${t.issueKey}: ${o}`)}s("failed",{error:"deploy rejected by a reviewer"})}var _g=_.object({steps:_.array(Br.DeployStep).max(50).default([]),requiredSecrets:_.array(_.string()).max(50).default([]),notes:_.string().default("")}),kg=[".ticketpilot/deploy.md","DEPLOY.md","DEPLOYMENT.md","docs/DEPLOY.md","docs/deploy.md","docs/deployment.md"],Ru=24e3;function vi(r){for(let e of kg){let t=Ur.default.join(r,e);try{if(!qr.default.existsSync(t))continue;let n=qr.default.readFileSync(t,"utf8");if(!n.trim())continue;return{path:e,content:n.length>Ru?n.slice(0,Ru)+`
667
667
 
668
- [\u2026document truncated\u2026]`:n}}catch{continue}}return null}var Rc=["docker","docker-compose","pm2","systemctl","node","pnpm","npm","yarn","make","python3","pip","rsync","ssh","caddy","nginx"];function Oc(r){return Nc("bash",["-lc",`command -v ${JSON.stringify(r)}`]).trim().length>0}function Nc(r,e){try{let t=(0,Fr.spawnSync)(r,e,{encoding:"utf8",timeout:5e3});return t.status===0?t.stdout??"":""}catch{return""}}async function kg(r,e){let t;try{t=new URL(r)}catch{e.push({name:"public-url",ok:!1,detail:`not a valid URL: ${r}`});return}try{let{lookup:n}=await import("node:dns/promises"),s=await n(t.hostname);e.push({name:"public-url-dns",ok:!0,detail:`${t.hostname} \u2192 ${s.address}`})}catch{e.push({name:"public-url-dns",ok:!1,detail:`${t.hostname} does not resolve - add an A/CNAME record for it at your DNS provider (changes can take a few minutes to propagate)`});return}if(t.protocol==="https:"){let n=await import("node:tls");await new Promise(s=>{let i=n.connect({host:t.hostname,port:Number(t.port||443),servername:t.hostname,timeout:8e3},()=>{let o=i.getPeerCertificate(),a=o?.valid_to?Math.round((new Date(o.valid_to).getTime()-Date.now())/864e5):NaN;e.push(Number.isFinite(a)&&a>0?{name:"public-url-tls",ok:a>14,detail:`certificate valid, expires in ${a} day(s)${a<=14?" - renew soon":""}`}:{name:"public-url-tls",ok:!1,detail:"certificate expired or unreadable"}),i.end(),s()});i.on("error",o=>{e.push({name:"public-url-tls",ok:!1,detail:`TLS handshake failed: ${o.message} - is a certificate installed for this hostname?`}),s()}),i.on("timeout",()=>{e.push({name:"public-url-tls",ok:!1,detail:"TLS handshake timed out"}),i.destroy(),s()})})}try{let n=await fetch(t.toString(),{method:"GET",redirect:"manual",signal:AbortSignal.timeout(1e4)});e.push({name:"public-url-reachable",ok:n.status<500,detail:`HTTP ${n.status}${n.status>=300&&n.status<400?` \u2192 ${n.headers.get("location")??""}`:""}`})}catch(n){e.push({name:"public-url-reachable",ok:!1,detail:`not reachable from the runner: ${n instanceof Error?n.message:String(n)}`})}}function Sg(r){let e=r.match(/\/(?:var|home|opt|srv)\/[\w./-]+/g)??[],t=[...new Set(e.map(s=>s.replace(/[.,;:)\]'"`]+$/,"")))].slice(0,12);return t.length?`
668
+ [\u2026document truncated\u2026]`:n}}catch{continue}}return null}var Eu=["docker","docker-compose","pm2","systemctl","node","pnpm","npm","yarn","make","python3","pip","rsync","ssh","caddy","nginx"];function Nu(r){return Mu("bash",["-lc",`command -v ${JSON.stringify(r)}`]).trim().length>0}function Mu(r,e){try{let t=(0,Fr.spawnSync)(r,e,{encoding:"utf8",timeout:5e3});return t.status===0?t.stdout??"":""}catch{return""}}async function Sg(r,e){let t;try{t=new URL(r)}catch{e.push({name:"public-url",ok:!1,detail:`not a valid URL: ${r}`});return}try{let{lookup:n}=await import("node:dns/promises"),s=await n(t.hostname);e.push({name:"public-url-dns",ok:!0,detail:`${t.hostname} \u2192 ${s.address}`})}catch{e.push({name:"public-url-dns",ok:!1,detail:`${t.hostname} does not resolve - add an A/CNAME record for it at your DNS provider (changes can take a few minutes to propagate)`});return}if(t.protocol==="https:"){let n=await import("node:tls");await new Promise(s=>{let i=n.connect({host:t.hostname,port:Number(t.port||443),servername:t.hostname,timeout:8e3},()=>{let o=i.getPeerCertificate(),a=o?.valid_to?Math.round((new Date(o.valid_to).getTime()-Date.now())/864e5):NaN;e.push(Number.isFinite(a)&&a>0?{name:"public-url-tls",ok:a>14,detail:`certificate valid, expires in ${a} day(s)${a<=14?" - renew soon":""}`}:{name:"public-url-tls",ok:!1,detail:"certificate expired or unreadable"}),i.end(),s()});i.on("error",o=>{e.push({name:"public-url-tls",ok:!1,detail:`TLS handshake failed: ${o.message} - is a certificate installed for this hostname?`}),s()}),i.on("timeout",()=>{e.push({name:"public-url-tls",ok:!1,detail:"TLS handshake timed out"}),i.destroy(),s()})})}try{let n=await fetch(t.toString(),{method:"GET",redirect:"manual",signal:AbortSignal.timeout(1e4)});e.push({name:"public-url-reachable",ok:n.status<500,detail:`HTTP ${n.status}${n.status>=300&&n.status<400?` \u2192 ${n.headers.get("location")??""}`:""}`})}catch(n){e.push({name:"public-url-reachable",ok:!1,detail:`not reachable from the runner: ${n instanceof Error?n.message:String(n)}`})}}function Tg(r){let e=r.match(/\/(?:var|home|opt|srv)\/[\w./-]+/g)??[],t=[...new Set(e.map(s=>s.replace(/[.,;:)\]'"`]+$/,"")))].slice(0,12);return t.length?`
669
669
  - absolute paths the document mentions, checked on THIS machine:
670
670
  ${t.map(s=>` - ${s}: ${qr.default.existsSync(s)?"EXISTS on this machine":"not found on this machine"}`).join(`
671
- `)}`:""}function Tg(){let r=[],e=(t,n)=>{try{let s=(0,Fr.execFileSync)(n,["--version"],{encoding:"utf8",timeout:5e3}).trim();r.push(`- ${t}: ${s}`)}catch{}};for(let t of["node","npm","python3"]){let n="";try{n=(0,Fr.execFileSync)("which",[t],{encoding:"utf8",timeout:5e3}).trim()}catch{continue}e(`${t} in the RUNNER's PATH (${n}) - deploy steps run with THIS`,n);for(let s of[`/usr/bin/${t}`,`/usr/local/bin/${t}`])s!==n&&qr.default.existsSync(s)&&e(`${t} at ${s}`,s)}return r.length?`
671
+ `)}`:""}function xg(){let r=[],e=(t,n)=>{try{let s=(0,Fr.execFileSync)(n,["--version"],{encoding:"utf8",timeout:5e3}).trim();r.push(`- ${t}: ${s}`)}catch{}};for(let t of["node","npm","python3"]){let n="";try{n=(0,Fr.execFileSync)("which",[t],{encoding:"utf8",timeout:5e3}).trim()}catch{continue}e(`${t} in the RUNNER's PATH (${n}) - deploy steps run with THIS`,n);for(let s of[`/usr/bin/${t}`,`/usr/local/bin/${t}`])s!==n&&qr.default.existsSync(s)&&e(`${t} at ${s}`,s)}return r.length?`
672
672
  - runtime versions (a MISMATCH between the runner's PATH and the system install is a common root cause):
673
673
  ${r.map(t=>` ${t}`).join(`
674
- `)}`:""}function Mc(r,e,t,n=""){let s=Rc.filter(a=>Oc(a)),i=Rc.filter(a=>!s.includes(a)),o=Object.keys(dr(r,e,t));return`About the machine these steps will run on (gathered by the runner, trust it):
674
+ `)}`:""}function zu(r,e,t,n=""){let s=Eu.filter(a=>Nu(a)),i=Eu.filter(a=>!s.includes(a)),o=Object.keys(dr(r,e,t));return`About the machine these steps will run on (gathered by the runner, trust it):
675
675
  - available tools: ${s.join(", ")||"(none of the common ones)"}
676
676
  - NOT installed: ${i.join(", ")||"(none missing)"}
677
- - secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+Tg()+Sg(n)}async function zc(r){let e=[];if(r.publicUrl?.trim()&&await kg(r.publicUrl.trim(),e),e.push(qr.default.existsSync(r.repoPath)?{name:"repo-path",ok:!0,detail:r.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${r.repoPath}`}),e.push({name:"deploys-enabled",ok:r.cfg.deploy.enabled,detail:r.cfg.deploy.enabled?"enabled on this runner":"disabled - run: allwright deploy enable (then restart the runner)"}),r.workdir){let a=Ur.default.isAbsolute(r.workdir)?r.workdir:Ur.default.join(r.repoPath,r.workdir);e.push(qr.default.existsSync(a)?{name:"workdir",ok:!0,detail:a}:{name:"workdir",ok:!1,detail:`does not exist: ${a}`})}if(r.branch){let a=Nc("git",["-C",r.repoPath,"ls-remote","--heads","origin",r.branch]);e.push(a.trim()?{name:"branch",ok:!0,detail:`origin/${r.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${r.branch}" (or the remote is unreachable)`})}let t=dr(r.cfg,r.repoName,r.environmentName),n=new Set(r.requiredSecrets);for(let a of r.steps)for(let u of a.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))n.add(u[1]);let s=[...n].filter(a=>!t[a]&&!process.env[a]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} - set with: allwright env set "${r.repoName}" "${r.environmentName}" ${s[0]}=...`:`${n.size} present`});let i=new Set;for(let a of r.steps)for(let u of a.run.split(/&&|\|\||;|\|/)){let c=u.trim().split(/\s+/),f=c.shift();for(;f&&(/^[A-Za-z_][A-Za-z0-9_]*=/.test(f)||f==="sudo"||f==="env"||f==="nohup");)f=c.shift();!f||f.startsWith("$")||f.startsWith("#")||f.startsWith("(")||i.add(f)}let o=[...i].filter(a=>!Oc(a));return e.push({name:"binaries",ok:o.length===0,detail:o.length?`not found on this machine: ${o.join(", ")}`:`${i.size} found: ${[...i].slice(0,12).join(", ")}`}),{ok:e.every(a=>a.ok),checks:e}}async function Dc(r){let e=Mc(r.cfg,r.repoName,r.environmentName),t=kt(Ac.DEPLOY_FIX_PROMPT_TEMPLATE,{envName:r.environmentName,steps:r.steps.map((c,f)=>`${f+1}. [${c.name}]${c.continueOnError?" (continues on error)":""}
678
- ${c.run}`).join(`
679
- `),failedStep:r.failedStep||"(unknown)",errorText:r.errorText||"(no error text recorded)",machineContext:e}),n=await r.agent.adapter.run({repoPath:r.repoPath,prompt:t,timeoutSeconds:240,bin:r.agent.bin,mode:"read_only",maxTurns:40,sessionId:(0,da.randomUUID)(),onLog:()=>{}});if(!n.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:n.error??"the agent produced no output"};let s=Uc(n.resultText),i=n.resultText.split(/```/)[0]?.trim()??"",a=/```(?:markdown|md)\s*\n([\s\S]*?)```/i.exec(n.resultText)?.[1]?.trim()??"",u=a?yi(r.repoPath):null;return s?{ok:!0,...s,notes:i||s.notes,docPath:u?.path??(a?"DEPLOY.md":""),docContent:a}:{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: "${n.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`}}async function Lc(r){let e=yi(r.repoPath);if(!e)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:'this repo has no deploy document. Create DEPLOY.md at the repo root (or .ticketpilot/deploy.md) describing how this project actually deploys - the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let t=Mc(r.cfg,r.repoName,r.environmentName,e.content),n=kt(Br.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:r.environmentName,docPath:e.path,docContent:e.content,notes:r.notes.trim()||"(nothing specified)",machineContext:t}),s=await r.agent.adapter.run({repoPath:r.repoPath,prompt:n,timeoutSeconds:r.timeoutSeconds,bin:r.agent.bin,mode:"read_only",maxTurns:30,sessionId:(0,da.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=Uc(s.resultText);return i?{ok:!0,...i}:(g.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
680
- `+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 Uc(r){for(let e of xg(r)){let t;try{t=JSON.parse(e)}catch{continue}let n=wg.safeParse(Cg(t));if(n.success&&n.data.steps.length||n.success&&n.data.notes.trim())return n.data}return null}function xg(r){let e=[];for(let s of r.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let t=r.indexOf("{"),n=r.lastIndexOf("}");return t>=0&&n>t&&e.push(r.slice(t,n+1)),e}function Cg(r){if(!r||typeof r!="object")return r;let e=r,n=(Array.isArray(r)?r:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,a)=>{if(typeof o=="string")return o.trim()?{name:Ec(o,a),run:o.trim()}:null;if(!o||typeof o!="object")return null;let u=o,c=ua(u.run,u.command,u.cmd,u.script,u.shell);return c?{name:(ua(u.name,u.title,u.description)??Ec(c,a)).slice(0,120),run:c,continueOnError:u.continueOnError===!0||u.continue_on_error===!0}:null}).filter(Boolean),s=e.requiredSecrets??e.required_secrets??e.secrets,i=Array.isArray(s)?s.filter(o=>typeof o=="string"):s&&typeof s=="object"?Object.keys(s):[];return{steps:n.slice(0,50),requiredSecrets:i.slice(0,50),notes:ua(e.notes,e.note,e.explanation)??""}}function ua(...r){for(let e of r)if(typeof e=="string"&&e.trim())return e.trim()}function Ec(r,e){return(r.split(`
681
- `)[0].trim()||`Step ${e+1}`).slice(0,120)}_t();Ye();Or();function vi(r,e){if(!r.componentRoutes.length)return{project:r};let t=e.filter(Boolean);if(!t.length)return{error:`no Jira component set - project "${r.name}" routes by component (${r.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let n=r.componentRoutes.filter(i=>t.includes(i.component));if(!n.length)return{error:`component(s) [${t.join(", ")}] not mapped - known: `+r.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(n.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) - ambiguous, refusing`}:{project:{...r,repoName:n[0].repoName}}}var qc=24*3600*1e3,bi=14,Ig=bi*24*3600*1e3,Rg=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),wi=class{constructor(e,t,n){this.cfg=e;this.jiraFor=t;this.transport=n}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,t){this.routingWarned.has(e)||(this.routingWarned.add(e),g.warn(`Component routing refused - ${t}`))}resolveClaudeProfile(e,t){if(!t)return;let n=this.cfg.claudeProfiles[t]?.configDir;return!n&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${t}" is not set up on this runner (allwright claude login "${t}") - using the runner's own login instead.`}),g.warn(`run ${e}: claude profile "${t}" missing locally - using default login`)),n}setConfig(e,t,n=!1,s=[]){this.projects=e,this.rules=t,this.environments=s;let i=t.filter(o=>o.enabled).length;g.info(`config synced: ${e.length} project(s), ${t.length} rule(s) (${i} enabled), ${s.length} environment(s)`),n!==this.paused&&(g.info(n?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=n)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),g.info(`polling Jira every ${this.cfg.pollIntervalSeconds}s`)}stop(){this.timer&&clearInterval(this.timer)}lastScheduleCheck=0;auditInFlight=!1;async runScheduledAudits(){if(!(!this.cfg.auditSchedules.length||this.auditInFlight)&&!(Date.now()-this.lastScheduleCheck<15*6e4)){this.lastScheduleCheck=Date.now();for(let e of this.cfg.auditSchedules){let t=this.projects.find(s=>s.repoName===e.repoName);if(!t)continue;let n=ju(t.id,e.role);if(!(n&&Date.now()-new Date(n).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{g.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=Je(this.cfg,t,"assist");if("error"in s){g.warn(`Scheduled audit skipped: ${s.error}`);continue}let i=await Cn({projectId:t.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;g.info(`Scheduled audit done: ${o} finding(s) - drift visible on the Audits page`)}else g.warn(`Scheduled audit failed: ${i.error}`)}catch(s){g.warn(`Scheduled audit crashed: ${s instanceof Error?s.message:String(s)}`)}finally{this.auditInFlight=!1}break}}}}async tick(){if(!(this.ticking||this.paused||!this.transport.connected)){this.ticking=!0;try{await this.runScheduledAudits(),await this.sweepMergedPRs(),await this.sweepGitHubApprovals();let e=new Set;for(let t of this.rules){if(!t.enabled)continue;let n=this.projects.find(i=>i.id===t.projectId);if(!n)continue;let s=this.cfg.repos[n.repoName];if(!s){g.warn(`rule "${t.name}": no local path for repo "${n.repoName}" - run: allwright repo add "${n.repoName}" /path/to/checkout`);continue}t.action.type==="deploy"?await this.pollDeployRule(t,n,s.path):t.action.type==="respond"?await this.pollRespondRule(t,n,s.path):(e.has(n.id)||(e.add(n.id),await this.sweepNeedsInput(n)),t.trigger.type==="comment_keyword"&&await this.sweepRevisions(t,n),await this.pollRule(t,n,s.path))}await this.pullAutopilotWork()}catch(e){g.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 T=Date.parse(e.pausedUntil);Number.isFinite(T)&&(this.autopilotPausedUntil=T);return}let t=e.item;if(!t)return;let n=this.rules.find(T=>T.id===t.ruleId&&T.enabled),s=this.projects.find(T=>T.id===t.projectId);if(!n||!s){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:"the rule or project this item was queued against no longer exists"});return}let i=vi(s,[]),o="project"in i?i.project:s,a=this.cfg.repos[o.repoName];if(!a){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:`no local checkout mapped for "${o.repoName}" on this machine`});return}let u=t.baseOverride||t.branchOverride?{...n,action:n.action.type==="implement"?{...n.action,...t.baseOverride?{baseBranch:t.baseOverride}:{},...t.branchOverride?{branchTemplate:t.branchOverride}:{}}:n.action}:n;g.info(`autopilot: taking ${t.issueKey} (${n.name})`+(t.branchOverride?` -> shared branch ${t.branchOverride}`:"")+(t.baseOverride?` -> stacked on ${t.baseOverride}`:""));let c=this.jiraOf(o),f="";try{f=(await c.getIssue(t.issueKey))?.summary??""}catch(T){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:`could not read ${t.issueKey} from Jira: ${T instanceof Error?T.message:String(T)}`});return}let p=await this.transport.claimRun({ruleId:n.id,issueKey:t.issueKey,issueSummary:f,triggerFingerprint:`autopilot:${t.id}`,dedupKey:`autopilot:${t.id}`});if(!p.accepted||!p.runId){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:p.reason??"the control plane refused the run"});return}this.transport.sendAutopilotReport({itemId:t.id,outcome:"claimed",runId:p.runId});let v=`${n.id}:${t.issueKey}`;this.inFlight.add(v);let S=this.resolveClaudeProfile(p.runId,p.claudeProfile);this.enqueueForRepo(a.path,async()=>{try{await fi({runId:p.runId,rule:u,project:o,issueKey:t.issueKey,repoPath:a.path,cfg:this.cfg,jira:c,transport:this.transport,claudeConfigDir:S,actorEmail:p.actorEmail,continueBranch:t.continueBranch})}finally{this.inFlight.delete(v)}})}async sweepGitHubApprovals(){let e=Object.values(ss());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=i=>{let o=Ae(t,i);if(!o)return null;let a=n.get(o);return a||n.set(o,a=new $e(o)),a};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let a=`gh-approve:${i.runId}`;if(this.inFlight.has(a))continue;let u,c;try{[u,c]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(S){g.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${S instanceof Error?S.message:S}`);continue}if(!c)continue;let f={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(c.merged){g.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub - completing the run`),this.inFlight.add(a);try{await ls(f,i.runId,c.headSha)}finally{this.inFlight.delete(a)}continue}if(c.state==="closed"){g.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub - failing the run`);let S=this.jiraFor(i.repoName),T=`PR #${i.prNumber} was closed on GitHub without merging`;await S.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
677
+ - secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+xg()+Tg(n)}async function Du(r){let e=[];if(r.publicUrl?.trim()&&await Sg(r.publicUrl.trim(),e),e.push(qr.default.existsSync(r.repoPath)?{name:"repo-path",ok:!0,detail:r.repoPath}:{name:"repo-path",ok:!1,detail:`checkout missing: ${r.repoPath}`}),e.push({name:"deploys-enabled",ok:r.cfg.deploy.enabled,detail:r.cfg.deploy.enabled?"enabled on this runner":"disabled - run: allwright deploy enable (then restart the runner)"}),r.workdir){let a=Ur.default.isAbsolute(r.workdir)?r.workdir:Ur.default.join(r.repoPath,r.workdir);e.push(qr.default.existsSync(a)?{name:"workdir",ok:!0,detail:a}:{name:"workdir",ok:!1,detail:`does not exist: ${a}`})}if(r.branch){let a=Mu("git",["-C",r.repoPath,"ls-remote","--heads","origin",r.branch]);e.push(a.trim()?{name:"branch",ok:!0,detail:`origin/${r.branch} exists`}:{name:"branch",ok:!1,detail:`origin has no branch "${r.branch}" (or the remote is unreachable)`})}let t=dr(r.cfg,r.repoName,r.environmentName),n=new Set(r.requiredSecrets);for(let a of r.steps)for(let c of a.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))n.add(c[1]);let s=[...n].filter(a=>!t[a]&&!process.env[a]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} - set with: allwright env set "${r.repoName}" "${r.environmentName}" ${s[0]}=...`:`${n.size} present`});let i=new Set;for(let a of r.steps)for(let c of a.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(a=>!Nu(a));return e.push({name:"binaries",ok:o.length===0,detail:o.length?`not found on this machine: ${o.join(", ")}`:`${i.size} found: ${[...i].slice(0,12).join(", ")}`}),{ok:e.every(a=>a.ok),checks:e}}async function Lu(r){let e=zu(r.cfg,r.repoName,r.environmentName),t=kt($u.DEPLOY_FIX_PROMPT_TEMPLATE,{envName:r.environmentName,steps:r.steps.map((u,f)=>`${f+1}. [${u.name}]${u.continueOnError?" (continues on error)":""}
678
+ ${u.run}`).join(`
679
+ `),failedStep:r.failedStep||"(unknown)",errorText:r.errorText||"(no error text recorded)",machineContext:e}),n=await r.agent.adapter.run({repoPath:r.repoPath,prompt:t,timeoutSeconds:240,bin:r.agent.bin,mode:"read_only",maxTurns:40,sessionId:(0,ha.randomUUID)(),onLog:()=>{}});if(!n.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:n.error??"the agent produced no output"};let s=qu(n.resultText),i=n.resultText.split(/```/)[0]?.trim()??"",a=/```(?:markdown|md)\s*\n([\s\S]*?)```/i.exec(n.resultText)?.[1]?.trim()??"",c=a?vi(r.repoPath):null;return s?{ok:!0,...s,notes:i||s.notes,docPath:c?.path??(a?"DEPLOY.md":""),docContent:a}:{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: "${n.resultText.trim().slice(0,200).replace(/\s+/g," ")}\u2026"`}}async function Uu(r){let e=vi(r.repoPath);if(!e)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:'this repo has no deploy document. Create DEPLOY.md at the repo root (or .ticketpilot/deploy.md) describing how this project actually deploys - the same commands you run by hand. "Ask Claude for steps" translates that document; it does not guess.'};let t=zu(r.cfg,r.repoName,r.environmentName,e.content),n=kt(Br.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE,{envName:r.environmentName,docPath:e.path,docContent:e.content,notes:r.notes.trim()||"(nothing specified)",machineContext:t}),s=await r.agent.adapter.run({repoPath:r.repoPath,prompt:n,timeoutSeconds:r.timeoutSeconds,bin:r.agent.bin,mode:"read_only",maxTurns:30,sessionId:(0,ha.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=qu(s.resultText);return i?{ok:!0,...i}:(g.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
680
+ `+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 qu(r){for(let e of Cg(r)){let t;try{t=JSON.parse(e)}catch{continue}let n=_g.safeParse(Ig(t));if(n.success&&n.data.steps.length||n.success&&n.data.notes.trim())return n.data}return null}function Cg(r){let e=[];for(let s of r.matchAll(/```[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g))s[1].trim()&&e.push(s[1]);let t=r.indexOf("{"),n=r.lastIndexOf("}");return t>=0&&n>t&&e.push(r.slice(t,n+1)),e}function Ig(r){if(!r||typeof r!="object")return r;let e=r,n=(Array.isArray(r)?r:Array.isArray(e.steps)?e.steps:Array.isArray(e.deploy_steps)?e.deploy_steps:Array.isArray(e.deploySteps)?e.deploySteps:[]).map((o,a)=>{if(typeof o=="string")return o.trim()?{name:Au(o,a),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)??Au(u,a)).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:n.slice(0,50),requiredSecrets:i.slice(0,50),notes:ua(e.notes,e.note,e.explanation)??""}}function ua(...r){for(let e of r)if(typeof e=="string"&&e.trim())return e.trim()}function Au(r,e){return(r.split(`
681
+ `)[0].trim()||`Step ${e+1}`).slice(0,120)}_t();Ye();Or();function bi(r,e){if(!r.componentRoutes.length)return{project:r};let t=e.filter(Boolean);if(!t.length)return{error:`no Jira component set - project "${r.name}" routes by component (${r.componentRoutes.map(i=>i.component).join(", ")}); set one on the ticket`};let n=r.componentRoutes.filter(i=>t.includes(i.component));if(!n.length)return{error:`component(s) [${t.join(", ")}] not mapped - known: `+r.componentRoutes.map(i=>`${i.component}\u2192${i.repoName}`).join(", ")};let s=new Set(n.map(i=>i.repoName));return s.size>1?{error:`components map to DIFFERENT repos (${[...s].join(", ")}) - ambiguous, refusing`}:{project:{...r,repoName:n[0].repoName}}}var Fu=24*3600*1e3,wi=14,Rg=wi*24*3600*1e3,Eg=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),_i=class{constructor(e,t,n){this.cfg=e;this.jiraFor=t;this.transport=n}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,t){this.routingWarned.has(e)||(this.routingWarned.add(e),g.warn(`Component routing refused - ${t}`))}resolveClaudeProfile(e,t){if(!t)return;let n=this.cfg.claudeProfiles[t]?.configDir;return!n&&e&&(this.transport.send({type:"run.log",runId:e,seq:99e3,ts:new Date().toISOString(),level:"warn",message:`Claude profile "${t}" is not set up on this runner (allwright claude login "${t}") - using the runner's own login instead.`}),g.warn(`run ${e}: claude profile "${t}" missing locally - using default login`)),n}setConfig(e,t,n=!1,s=[]){this.projects=e,this.rules=t,this.environments=s;let i=t.filter(o=>o.enabled).length;g.info(`config synced: ${e.length} project(s), ${t.length} rule(s) (${i} enabled), ${s.length} environment(s)`),n!==this.paused&&(g.info(n?"polling paused from the dashboard":"polling resumed from the dashboard"),this.paused=n)}start(){let e=this.cfg.pollIntervalSeconds*1e3;this.timer=setInterval(()=>{this.tick()},e),this.tick(),g.info(`polling Jira every ${this.cfg.pollIntervalSeconds}s`)}stop(){this.timer&&clearInterval(this.timer)}lastScheduleCheck=0;auditInFlight=!1;async runScheduledAudits(){if(!(!this.cfg.auditSchedules.length||this.auditInFlight)&&!(Date.now()-this.lastScheduleCheck<15*6e4)){this.lastScheduleCheck=Date.now();for(let e of this.cfg.auditSchedules){let t=this.projects.find(s=>s.repoName===e.repoName);if(!t)continue;let n=Oc(t.id,e.role);if(!(n&&Date.now()-new Date(n).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{g.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=Je(this.cfg,t,"assist");if("error"in s){g.warn(`Scheduled audit skipped: ${s.error}`);continue}let i=await Cn({projectId:t.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;g.info(`Scheduled audit done: ${o} finding(s) - drift visible on the Audits page`)}else g.warn(`Scheduled audit failed: ${i.error}`)}catch(s){g.warn(`Scheduled audit crashed: ${s instanceof Error?s.message:String(s)}`)}finally{this.auditInFlight=!1}break}}}}async tick(){if(!(this.ticking||this.paused||!this.transport.connected)){this.ticking=!0;try{await this.runScheduledAudits(),await this.sweepMergedPRs(),await this.sweepGitHubApprovals();let e=new Set;for(let t of this.rules){if(!t.enabled)continue;let n=this.projects.find(i=>i.id===t.projectId);if(!n)continue;let s=this.cfg.repos[n.repoName];if(!s){g.warn(`rule "${t.name}": no local path for repo "${n.repoName}" - run: allwright repo add "${n.repoName}" /path/to/checkout`);continue}t.action.type==="deploy"?await this.pollDeployRule(t,n,s.path):t.action.type==="respond"?await this.pollRespondRule(t,n,s.path):(e.has(n.id)||(e.add(n.id),await this.sweepNeedsInput(n)),t.trigger.type==="comment_keyword"&&await this.sweepRevisions(t,n),await this.pollRule(t,n,s.path))}await this.pullAutopilotWork()}catch(e){g.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 T=Date.parse(e.pausedUntil);Number.isFinite(T)&&(this.autopilotPausedUntil=T);return}let t=e.item;if(!t)return;let n=this.rules.find(T=>T.id===t.ruleId&&T.enabled),s=this.projects.find(T=>T.id===t.projectId);if(!n||!s){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:"the rule or project this item was queued against no longer exists"});return}let i=bi(s,[]),o="project"in i?i.project:s,a=this.cfg.repos[o.repoName];if(!a){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:`no local checkout mapped for "${o.repoName}" on this machine`});return}let c=t.baseOverride||t.branchOverride?{...n,action:n.action.type==="implement"?{...n.action,...t.baseOverride?{baseBranch:t.baseOverride}:{},...t.branchOverride?{branchTemplate:t.branchOverride}:{}}:n.action}:n;g.info(`autopilot: taking ${t.issueKey} (${n.name})`+(t.branchOverride?` -> shared branch ${t.branchOverride}`:"")+(t.baseOverride?` -> stacked on ${t.baseOverride}`:""));let u=this.jiraOf(o),f="";try{f=(await u.getIssue(t.issueKey))?.summary??""}catch(T){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:`could not read ${t.issueKey} from Jira: ${T instanceof Error?T.message:String(T)}`});return}let p=await this.transport.claimRun({ruleId:n.id,issueKey:t.issueKey,issueSummary:f,triggerFingerprint:`autopilot:${t.id}`,dedupKey:`autopilot:${t.id}`});if(!p.accepted||!p.runId){this.transport.sendAutopilotReport({itemId:t.id,outcome:"failed",error:p.reason??"the control plane refused the run"});return}this.transport.sendAutopilotReport({itemId:t.id,outcome:"claimed",runId:p.runId});let v=`${n.id}:${t.issueKey}`;this.inFlight.add(v);let S=this.resolveClaudeProfile(p.runId,p.claudeProfile);this.enqueueForRepo(a.path,async()=>{try{await pi({runId:p.runId,rule:c,project:o,issueKey:t.issueKey,repoPath:a.path,cfg:this.cfg,jira:u,transport:this.transport,claudeConfigDir:S,actorEmail:p.actorEmail,continueBranch:t.continueBranch})}finally{this.inFlight.delete(v)}})}async sweepGitHubApprovals(){let e=Object.values(ss());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=i=>{let o=Ae(t,i);if(!o)return null;let a=n.get(o);return a||n.set(o,a=new $e(o)),a};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let a=`gh-approve:${i.runId}`;if(this.inFlight.has(a))continue;let 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(S){g.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${S instanceof Error?S.message:S}`);continue}if(!u)continue;let f={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(u.merged){g.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub - completing the run`),this.inFlight.add(a);try{await ls(f,i.runId,u.headSha)}finally{this.inFlight.delete(a)}continue}if(u.state==="closed"){g.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub - failing the run`);let S=this.jiraFor(i.repoName),T=`PR #${i.prNumber} was closed on GitHub without merging`;await S.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
682
682
 
683
683
  PR: ${i.prUrl}
684
684
 
685
- The run is marked failed. Remove the \`${i.failedLabel}\` label (or hit Retry on the Allwright board) to implement again. (run \`${i.runId}\`)`).catch(()=>{}),await S.editLabels(i.issueKey,{add:[i.failedLabel]}).catch(()=>{}),this.transport.send({type:"run.status",runId:i.runId,status:"failed",error:T}),Dr(i.runId);continue}c.mergeableState==="dirty"?(this.transport.send({type:"run.pr.conflict",runId:i.runId,conflicted:!0}),i.conflictNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: the pull request for this ticket has merge conflicts.** The base branch moved after this change was built, so GitHub cannot merge it as-is.
685
+ The run is marked failed. Remove the \`${i.failedLabel}\` label (or hit Retry on the Allwright board) to implement again. (run \`${i.runId}\`)`).catch(()=>{}),await S.editLabels(i.issueKey,{add:[i.failedLabel]}).catch(()=>{}),this.transport.send({type:"run.status",runId:i.runId,status:"failed",error:T}),Dr(i.runId);continue}u.mergeableState==="dirty"?(this.transport.send({type:"run.pr.conflict",runId:i.runId,conflicted:!0}),i.conflictNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: the pull request for this ticket has merge conflicts.** The base branch moved after this change was built, so GitHub cannot merge it as-is.
686
686
 
687
687
  PR: ${i.prUrl}
688
688
 
689
- To fix: Reject this run on the Allwright dashboard (that closes the conflicted PR), then post the implement trigger comment again - a fresh run rebuilds the change on the current base. Or resolve the conflicts manually on branch \`${i.branch}\`; approval works normally once the PR is conflict-free. (run \`${i.runId}\`)`).catch(()=>{}),i.conflictNotified=!0,Tt(i),g.info(`merge conflicts on PR #${i.prNumber} for ${i.issueKey} - ticket notified`))):c.mergeableState!==null&&c.mergeableState!=="unknown"&&(this.transport.send({type:"run.pr.conflict",runId:i.runId,conflicted:!1}),i.conflictNotified&&(i.conflictNotified=!1,Tt(i)));let p=u.filter(S=>S.state==="APPROVED"||S.state==="CHANGES_REQUESTED").sort((S,T)=>S.submittedAt.localeCompare(T.submittedAt)),v=p[p.length-1];if(v){if(v.state==="CHANGES_REQUESTED"){i.changesRequestedNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: changes were requested on the pull request** (by ${v.user}).
689
+ To fix: Reject this run on the Allwright dashboard (that closes the conflicted PR), then post the implement trigger comment again - a fresh run rebuilds the change on the current base. Or resolve the conflicts manually on branch \`${i.branch}\`; approval works normally once the PR is conflict-free. (run \`${i.runId}\`)`).catch(()=>{}),i.conflictNotified=!0,Tt(i),g.info(`merge conflicts on PR #${i.prNumber} for ${i.issueKey} - ticket notified`))):u.mergeableState!==null&&u.mergeableState!=="unknown"&&(this.transport.send({type:"run.pr.conflict",runId:i.runId,conflicted:!1}),i.conflictNotified&&(i.conflictNotified=!1,Tt(i)));let p=c.filter(S=>S.state==="APPROVED"||S.state==="CHANGES_REQUESTED").sort((S,T)=>S.submittedAt.localeCompare(T.submittedAt)),v=p[p.length-1];if(v){if(v.state==="CHANGES_REQUESTED"){i.changesRequestedNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: changes were requested on the pull request** (by ${v.user}).
690
690
 
691
691
  PR: ${i.prUrl}
692
692
 
693
- Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),Tt({...i,changesRequestedNotified:!0}),g.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} - ticket notified`));continue}if(v.commitId===c.headSha){g.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${v.user} - completing the run`),this.inFlight.add(a);try{await ls(f,i.runId,v.commitId)}catch(S){g.warn(`github-approval completion failed for ${i.runId}: ${S instanceof Error?S.message:S}`)}finally{this.inFlight.delete(a)}}}}}async sweepMergedPRs(){let e=Object.values(li());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=a=>{let u=Ae(t,a);if(!u)return null;let c=n.get(u);return c||n.set(u,c=new $e(u)),c},i=20,o=720*3600*1e3;for(let a of e.slice(0,i)){let u=s(a.repoName);if(!u)continue;if(Date.now()-new Date(a.createdAt).getTime()>o){g.warn(`merge watch for ${a.issueKey} PR #${a.prNumber} is over 30 days old - dropping`),ns(a.runId);continue}let c;try{c=await u.getPullRequest(a.owner,a.repo,a.prNumber)}catch(v){g.warn(`merge check failed for ${a.owner}/${a.repo}#${a.prNumber}: ${v instanceof Error?v.message:v}`);continue}if(!c){ns(a.runId);continue}if(c.state==="open")continue;if(!c.merged){ns(a.runId);continue}let f=this.jiraFor(a.repoName),p="";if(a.jiraTransitionOnMerge)try{p=await f.transitionByName(a.issueKey,a.jiraTransitionOnMerge)?`
693
+ Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),Tt({...i,changesRequestedNotified:!0}),g.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} - ticket notified`));continue}if(v.commitId===u.headSha){g.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${v.user} - completing the run`),this.inFlight.add(a);try{await ls(f,i.runId,v.commitId)}catch(S){g.warn(`github-approval completion failed for ${i.runId}: ${S instanceof Error?S.message:S}`)}finally{this.inFlight.delete(a)}}}}}async sweepMergedPRs(){let e=Object.values(ci());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=a=>{let c=Ae(t,a);if(!c)return null;let u=n.get(c);return u||n.set(c,u=new $e(c)),u},i=20,o=720*3600*1e3;for(let a of e.slice(0,i)){let c=s(a.repoName);if(!c)continue;if(Date.now()-new Date(a.createdAt).getTime()>o){g.warn(`merge watch for ${a.issueKey} PR #${a.prNumber} is over 30 days old - dropping`),ns(a.runId);continue}let u;try{u=await c.getPullRequest(a.owner,a.repo,a.prNumber)}catch(v){g.warn(`merge check failed for ${a.owner}/${a.repo}#${a.prNumber}: ${v instanceof Error?v.message:v}`);continue}if(!u){ns(a.runId);continue}if(u.state==="open")continue;if(!u.merged){ns(a.runId);continue}let f=this.jiraFor(a.repoName),p="";if(a.jiraTransitionOnMerge)try{p=await f.transitionByName(a.issueKey,a.jiraTransitionOnMerge)?`
694
694
 
695
695
  Ticket moved to **${a.jiraTransitionOnMerge}**.`:`
696
696
 
@@ -698,17 +698,17 @@ Note: no transition named "${a.jiraTransitionOnMerge}" is available from this ti
698
698
 
699
699
  Note: the "${a.jiraTransitionOnMerge}" transition failed: ${v instanceof Error?v.message:v}`}try{await f.addComment(a.issueKey,`**Allwright: the pull request for this ticket was merged.**
700
700
 
701
- PR: ${a.prUrl} (merged at \`${c.headSha.slice(0,10)}\`)${p}
701
+ PR: ${a.prUrl} (merged at \`${u.headSha.slice(0,10)}\`)${p}
702
702
 
703
- (run \`${a.runId}\`)`)}catch(v){g.warn(`could not post merge comment to ${a.issueKey}: ${v instanceof Error?v.message:v}`);continue}g.info(`PR #${a.prNumber} for ${a.issueKey} merged - ticket updated`),ns(a.runId)}}async sweepNeedsInput(e){let t;try{t=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${Kr.NEEDS_INPUT_LABEL}"`,10)}catch(s){g.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!t.length)return;let n=En();for(let s of t){let i=Object.values(n).filter(a=>a.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[Kr.NEEDS_INPUT_LABEL]}).catch(()=>{}),g.warn(`${s.key}: needs-input label with no local pending record - removed`);continue}let o=null;for(let a of i){let u=`resume:${a.runId}`;if(this.inFlight.has(u))continue;if(Date.now()-new Date(a.createdAt).getTime()>Ig){this.inFlight.add(u),this.abandonStaleInput(a,e).finally(()=>this.inFlight.delete(u));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(T){g.warn(`needs-input check failed for ${s.key}: ${T instanceof Error?T.message:T}`);continue}let c=new Date(a.questionsPostedAt).getTime(),f=o.comments.filter(T=>!ot(T.body)&&new Date(T.created).getTime()>c);if(!f.length)continue;let p=us(f),v=o.attachments;this.inFlight.add(u),g.info(`reply received on ${s.key} - resuming run ${a.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[Kr.NEEDS_INPUT_LABEL]}).catch(T=>{g.warn(`could not remove needs-input label on ${s.key}: ${T}`)});let S={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};a.kind==="implement"?this.enqueueForRepo(a.baseRepoPath??a.repoPath,async()=>{try{await mc(a,p,v,S)}finally{this.inFlight.delete(u)}}):this.enqueueForRepo(a.repoPath,async()=>{try{await dc(a,p,v,S)}finally{this.inFlight.delete(u)}})}}}async abandonStaleInput(e,t){g.warn(`${e.issueKey}: needs-input unanswered for over ${bi}d - abandoning run ${e.runId}`);try{await this.jiraOf(t).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
703
+ (run \`${a.runId}\`)`)}catch(v){g.warn(`could not post merge comment to ${a.issueKey}: ${v instanceof Error?v.message:v}`);continue}g.info(`PR #${a.prNumber} for ${a.issueKey} merged - ticket updated`),ns(a.runId)}}async sweepNeedsInput(e){let t;try{t=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${Kr.NEEDS_INPUT_LABEL}"`,10)}catch(s){g.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!t.length)return;let n=En();for(let s of t){let i=Object.values(n).filter(a=>a.issueKey===s.key);if(!i.length){await this.jiraOf(e).editLabels(s.key,{remove:[Kr.NEEDS_INPUT_LABEL]}).catch(()=>{}),g.warn(`${s.key}: needs-input label with no local pending record - removed`);continue}let o=null;for(let a of i){let c=`resume:${a.runId}`;if(this.inFlight.has(c))continue;if(Date.now()-new Date(a.createdAt).getTime()>Rg){this.inFlight.add(c),this.abandonStaleInput(a,e).finally(()=>this.inFlight.delete(c));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(T){g.warn(`needs-input check failed for ${s.key}: ${T instanceof Error?T.message:T}`);continue}let u=new Date(a.questionsPostedAt).getTime(),f=o.comments.filter(T=>!ot(T.body)&&new Date(T.created).getTime()>u);if(!f.length)continue;let p=cs(f),v=o.attachments;this.inFlight.add(c),g.info(`reply received on ${s.key} - resuming run ${a.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[Kr.NEEDS_INPUT_LABEL]}).catch(T=>{g.warn(`could not remove needs-input label on ${s.key}: ${T}`)});let S={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};a.kind==="implement"?this.enqueueForRepo(a.baseRepoPath??a.repoPath,async()=>{try{await gu(a,p,v,S)}finally{this.inFlight.delete(c)}}):this.enqueueForRepo(a.repoPath,async()=>{try{await hu(a,p,v,S)}finally{this.inFlight.delete(c)}})}}}async abandonStaleInput(e,t){g.warn(`${e.issueKey}: needs-input unanswered for over ${wi}d - abandoning run ${e.runId}`);try{await this.jiraOf(t).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
704
704
 
705
- No reply arrived within ${bi} days of the question above. This ticket has been labeled \`${e.failedLabel}\`; remove it and re-trigger to try again. (run \`${e.runId}\`)`),await this.jiraOf(t).editLabels(e.issueKey,{add:[e.failedLabel],remove:[Kr.NEEDS_INPUT_LABEL]})}catch(n){g.warn(`could not post staleness notice for ${e.issueKey}: ${n}`)}e.kind==="implement"&&await Bt(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),ut(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${bi} days`})}async pollRule(e,t,n){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,t):await this.matchCommentTrigger(e,t);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let a=vi(t,i.components??[]);if("error"in a){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${a.error}`);continue}let u=a.project,c=u.repoName===t.repoName?n:this.cfg.repos[u.repoName]?.path;if(!c){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${u.repoName}" but it has no local checkout - run: allwright repo add "${u.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"&&g.warn(`claim rejected for ${i.issueKey}: ${f.reason??"unknown"}`);continue}this.inFlight.add(o),g.info(`claimed run ${f.runId} for ${i.issueKey}`+(u.repoName!==t.repoName?` (routed \u2192 ${u.repoName})`:"")+(f.claudeProfile?` (claude profile "${f.claudeProfile}")`:""));let p=this.resolveClaudeProfile(f.runId,f.claudeProfile);this.enqueueForRepo(c,async()=>{try{await fi({runId:f.runId,rule:e,project:u,issueKey:i.issueKey,repoPath:c,cfg:this.cfg,jira:this.jiraOf(u),transport:this.transport,claudeConfigDir:p,actorEmail:f.actorEmail})}finally{this.inFlight.delete(o)}})}}async pollRespondRule(e,t,n){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),a=Date.now()-qc;for(let u of i){let c=await this.jiraOf(t).getIssue(u.key);for(let f of c.comments){if(!f.body.toLowerCase().includes(o)||ot(f.body)||new Date(f.created).getTime()<a||!f.id)continue;let p=`respond:${f.id}`;if(this.inFlight.has(p))continue;let v=vi(t,u.components??[]);if("error"in v){this.warnRoutingOnce(`${e.id}:${u.key}`,`${u.key}: ${v.error}`);continue}let S=v.project,T=S.repoName===t.repoName?n:this.cfg.repos[S.repoName]?.path;if(!T){this.warnRoutingOnce(`${e.id}:${u.key}:path`,`${u.key}: routed to repo "${S.repoName}" but it has no local checkout - run: allwright repo add "${S.repoName}" /path/to/checkout`);continue}let x=await this.transport.claimRun({ruleId:e.id,issueKey:u.key,issueSummary:u.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"&&g.warn(`respond claim rejected for ${u.key}: ${x.reason??"unknown"}`);continue}this.inFlight.add(p),g.info(`claimed respond run ${x.runId}: ${u.key} (comment ${f.id})`+(S.repoName!==t.repoName?` (routed \u2192 ${S.repoName})`:"")+(x.claudeProfile?` (claude profile "${x.claudeProfile}")`:""));let P={author:f.author,body:f.body},w=this.resolveClaudeProfile(x.runId,x.claudeProfile);this.enqueueForRepo(T,async()=>{try{await fi({runId:x.runId,rule:e,project:S,issueKey:u.key,repoPath:T,cfg:this.cfg,jira:this.jiraOf(S),transport:this.transport,question:P,claudeConfigDir:w,actorEmail:x.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.doneLabel}" AND updated >= "-2d"`,10)}catch(o){g.warn(`revision sweep failed for ${t.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=n.keyword.toLowerCase();for(let o of s)try{let a=await this.jiraOf(t).getIssue(o.key),u=null;for(let f of a.comments)ot(f.body)&&(u=Math.max(u??0,new Date(f.created).getTime()));if(u===null||!a.comments.some(f=>!ot(f.body)&&f.body.toLowerCase().includes(i)&&new Date(f.created).getTime()>u))continue;await this.jiraOf(t).editLabels(o.key,{remove:[n.doneLabel]}),g.info(`revision requested on ${o.key} (new "${n.keyword}" after completion) - done label removed, rule will re-fire`)}catch(a){g.warn(`revision check failed for ${o.key}: ${a instanceof Error?a.message:a}`)}}async pollDeployRule(e,t,n){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let a=await this.transport.claimDeploy({projectId:t.id,ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,environmentName:i.environmentName,requestedByAccountId:i.requestedByAccountId,requestedByDisplayName:i.requestedByDisplayName,dedupKey:i.dedupKey,triggerFingerprint:i.fingerprint});if(!a.accepted||!a.runId||!a.environment){if(a.code==="duplicate")continue;a.reason&&a.runId?(await this.jiraOf(t).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
705
+ No reply arrived within ${wi} days of the question above. This ticket has been labeled \`${e.failedLabel}\`; remove it and re-trigger to try again. (run \`${e.runId}\`)`),await this.jiraOf(t).editLabels(e.issueKey,{add:[e.failedLabel],remove:[Kr.NEEDS_INPUT_LABEL]})}catch(n){g.warn(`could not post staleness notice for ${e.issueKey}: ${n}`)}e.kind==="implement"&&await Bt(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),ct(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${wi} days`})}async pollRule(e,t,n){let s=e.trigger.type==="label_added"?await this.matchLabelTrigger(e,t):await this.matchCommentTrigger(e,t);for(let i of s){let o=`${e.id}:${i.issueKey}`;if(this.inFlight.has(o))continue;let a=bi(t,i.components??[]);if("error"in a){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${a.error}`);continue}let c=a.project,u=c.repoName===t.repoName?n: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"&&g.warn(`claim rejected for ${i.issueKey}: ${f.reason??"unknown"}`);continue}this.inFlight.add(o),g.info(`claimed run ${f.runId} for ${i.issueKey}`+(c.repoName!==t.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 pi({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,t,n){let s=e.trigger;if(s.type!=="comment_keyword"||e.action.type!=="respond")return;let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=s.keyword.toLowerCase(),a=Date.now()-Fu;for(let c of i){let u=await this.jiraOf(t).getIssue(c.key);for(let f of u.comments){if(!f.body.toLowerCase().includes(o)||ot(f.body)||new Date(f.created).getTime()<a||!f.id)continue;let p=`respond:${f.id}`;if(this.inFlight.has(p))continue;let v=bi(t,c.components??[]);if("error"in v){this.warnRoutingOnce(`${e.id}:${c.key}`,`${c.key}: ${v.error}`);continue}let S=v.project,T=S.repoName===t.repoName?n:this.cfg.repos[S.repoName]?.path;if(!T){this.warnRoutingOnce(`${e.id}:${c.key}:path`,`${c.key}: routed to repo "${S.repoName}" but it has no local checkout - run: allwright repo add "${S.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"&&g.warn(`respond claim rejected for ${c.key}: ${x.reason??"unknown"}`);continue}this.inFlight.add(p),g.info(`claimed respond run ${x.runId}: ${c.key} (comment ${f.id})`+(S.repoName!==t.repoName?` (routed \u2192 ${S.repoName})`:"")+(x.claudeProfile?` (claude profile "${x.claudeProfile}")`:""));let P={author:f.author,body:f.body},k=this.resolveClaudeProfile(x.runId,x.claudeProfile);this.enqueueForRepo(T,async()=>{try{await pi({runId:x.runId,rule:e,project:S,issueKey:c.key,repoPath:T,cfg:this.cfg,jira:this.jiraOf(S),transport:this.transport,question:P,claudeConfigDir:k,actorEmail:x.actorEmail})}finally{this.inFlight.delete(p)}})}}}async sweepRevisions(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return;let s;try{s=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.doneLabel}" AND updated >= "-2d"`,10)}catch(o){g.warn(`revision sweep failed for ${t.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=n.keyword.toLowerCase();for(let o of s)try{let a=await this.jiraOf(t).getIssue(o.key),c=null;for(let f of a.comments)ot(f.body)&&(c=Math.max(c??0,new Date(f.created).getTime()));if(c===null||!a.comments.some(f=>!ot(f.body)&&f.body.toLowerCase().includes(i)&&new Date(f.created).getTime()>c))continue;await this.jiraOf(t).editLabels(o.key,{remove:[n.doneLabel]}),g.info(`revision requested on ${o.key} (new "${n.keyword}" after completion) - done label removed, rule will re-fire`)}catch(a){g.warn(`revision check failed for ${o.key}: ${a instanceof Error?a.message:a}`)}}async pollDeployRule(e,t,n){if(e.action.type!=="deploy")return;let s=e.trigger.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t);for(let i of s){let o=`deploy:${i.dedupKey}`;if(this.inFlight.has(o))continue;let a=await this.transport.claimDeploy({projectId:t.id,ruleId:e.id,issueKey:i.issueKey,issueSummary:i.summary,environmentName:i.environmentName,requestedByAccountId:i.requestedByAccountId,requestedByDisplayName:i.requestedByDisplayName,dedupKey:i.dedupKey,triggerFingerprint:i.fingerprint});if(!a.accepted||!a.runId||!a.environment){if(a.code==="duplicate")continue;a.reason&&a.runId?(await this.jiraOf(t).addComment(i.issueKey,`**Allwright did not deploy this ticket.**
706
706
 
707
707
  ${a.reason}`+(i.requestedByAccountId?`
708
708
 
709
709
  Jira account id: \`${i.requestedByAccountId}\``:"")+`
710
710
 
711
- (run \`${a.runId}\`)`).catch(c=>g.warn(`could not post refusal to ${i.issueKey}: ${c}`)),g.warn(`deploy refused for ${i.issueKey}: ${a.reason}`)):a.reason&&g.warn(`deploy claim rejected for ${i.issueKey}: ${a.reason}`);continue}let u=a.environment;this.inFlight.add(o),g.info(`claimed deploy ${a.runId}: ${i.issueKey} \u2192 ${u.name}`),this.enqueue(this.envQueues,u.id,async()=>{try{await gi({runId:a.runId,project:t,environment:u,issueKey:i.issueKey,issueSummary:i.summary,repoPath:n,cfg:this.cfg,jira:this.jiraOf(t),transport:this.transport,requestedBy:i.requestedByDisplayName})}finally{this.inFlight.delete(o)}})}}async matchCommentDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="comment_keyword"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=n.keyword.toLowerCase(),a=Date.now()-qc,u=this.environments.filter(p=>p.projectId===t.id).map(p=>p.name),c=this.fixedEnvironmentName(s.environmentId),f=[];for(let p of i){let v=await this.jiraOf(t).getIssue(p.key);if(!(s.requireStatus&&v.status.toLowerCase()!==s.requireStatus.toLowerCase()))for(let S of v.comments){if(!S.body.toLowerCase().includes(o)||ot(S.body)||new Date(S.created).getTime()<a||!S.id)continue;let T=s.envSelection==="fixed"?c:Eg(S.body,n.keyword,u);f.push({issueKey:p.key,summary:p.summary,environmentName:T,requestedByAccountId:S.authorAccountId??void 0,requestedByDisplayName:S.author,dedupKey:`deploy:comment:${S.id}`,fingerprint:`comment "${n.keyword}" by ${S.author} at ${S.created}`+(T?` \u2192 ${T}`:"")})}}return f}async matchStatusDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="status_changed"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=this.fixedEnvironmentName(s.environmentId),a=[];for(let u of i){let c=await this.jiraOf(t).lastEnteredStatus(u.key,n.status);c&&a.push({issueKey:u.key,summary:u.summary,environmentName:o,requestedByAccountId:c.authorAccountId??void 0,requestedByDisplayName:c.author,dedupKey:`deploy:status:${e.id}:${u.key}:${c.at}`,fingerprint:`moved to "${n.status}" by ${c.author} at ${c.at}`})}return a}fixedEnvironmentName(e){return e?this.environments.find(t=>t.id===e)?.name??"":""}async matchLabelTrigger(e,t){let n=e.trigger;if(n.type!=="label_added")return[];let s=`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Kr.NEEDS_INPUT_LABEL}") ORDER BY updated ASC`;return(await this.jiraOf(t).search(s,10)).map(o=>({issueKey:o.key,summary:o.summary,components:o.components,fingerprint:`label "${n.label}" matched at ${new Date().toISOString()}`}))}async matchCommentTrigger(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return[];let s=`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND (labels IS EMPTY OR labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Kr.NEEDS_INPUT_LABEL}")) ORDER BY updated DESC`,i=await this.jiraOf(t).search(s,10),o=n.keyword.toLowerCase(),a=[];for(let u of i){let f=[...(await this.jiraOf(t).getIssue(u.key)).comments].reverse().find(p=>p.body.toLowerCase().includes(o)&&!ot(p.body));f&&a.push({issueKey:u.key,components:u.components,summary:u.summary,fingerprint:`comment keyword "${n.keyword}" by ${f.author} at ${f.created}`,triggeredByAccountId:f.authorAccountId??void 0})}return a}async diagnoseRule(e,t){let n=e.trigger;if(e.action.type==="deploy"){let u=n.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t),c=u.filter(f=>f.environmentName);return{matchedCount:c.length,excludedCount:u.length-c.length,excludedSample:u.filter(f=>!f.environmentName).slice(0,5).map(f=>f.issueKey)}}if(n.type==="status_changed")return{matchedCount:(await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}"`,50)).length,excludedCount:0,excludedSample:[]};if(n.type==="label_added"){let[u,c]=await Promise.all([this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}")`,50),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]);return{matchedCount:u.length,excludedCount:c.length,excludedSample:c.slice(0,5).map(f=>f.key)}}let s=n.keyword.toLowerCase(),[i,o]=await Promise.all([this.matchCommentTrigger(e,t),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]),a=[];for(let u of o)(await this.jiraOf(t).getIssue(u.key)).comments.some(f=>f.body.toLowerCase().includes(s))&&a.push(u.key);return{matchedCount:i.length,excludedCount:a.length,excludedSample:a.slice(0,5)}}enqueueForRepo(e,t){this.enqueue(this.repoQueues,e,t)}runOnRepoQueue(e,t){this.enqueue(this.repoQueues,e,t)}runOnEnvironmentQueue(e,t){this.enqueue(this.envQueues,e,t)}enqueue(e,t,n){let i=(e.get(t)??Promise.resolve()).then(async()=>{this.activeWork++;try{await n()}finally{this.activeWork--}}).catch(o=>{g.error(`run crashed: ${o instanceof Error?o.stack:o}`)});e.set(t,i)}};function Eg(r,e,t){let n=r.toLowerCase().indexOf(e.toLowerCase());if(n<0)return"";let i=r.slice(n+e.length).split(/[^\w.-]+/).filter(Boolean);for(let o of i){let a=t.find(u=>u.toLowerCase()===o.toLowerCase());if(a)return a}for(let o of i)if(!Rg.has(o.toLowerCase()))return o;return""}var Fc=E(require("node:fs"),1),Bc=E(require("node:path"),1),pa=require("node:crypto");_t();var Ag=`This repository is in the middle of a git merge: the base branch moved and some files conflict with the change on this branch. Your ONLY job is to resolve those conflicts.
711
+ (run \`${a.runId}\`)`).catch(u=>g.warn(`could not post refusal to ${i.issueKey}: ${u}`)),g.warn(`deploy refused for ${i.issueKey}: ${a.reason}`)):a.reason&&g.warn(`deploy claim rejected for ${i.issueKey}: ${a.reason}`);continue}let c=a.environment;this.inFlight.add(o),g.info(`claimed deploy ${a.runId}: ${i.issueKey} \u2192 ${c.name}`),this.enqueue(this.envQueues,c.id,async()=>{try{await yi({runId:a.runId,project:t,environment:c,issueKey:i.issueKey,issueSummary:i.summary,repoPath:n,cfg:this.cfg,jira:this.jiraOf(t),transport:this.transport,requestedBy:i.requestedByDisplayName})}finally{this.inFlight.delete(o)}})}}async matchCommentDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="comment_keyword"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=n.keyword.toLowerCase(),a=Date.now()-Fu,c=this.environments.filter(p=>p.projectId===t.id).map(p=>p.name),u=this.fixedEnvironmentName(s.environmentId),f=[];for(let p of i){let v=await this.jiraOf(t).getIssue(p.key);if(!(s.requireStatus&&v.status.toLowerCase()!==s.requireStatus.toLowerCase()))for(let S of v.comments){if(!S.body.toLowerCase().includes(o)||ot(S.body)||new Date(S.created).getTime()<a||!S.id)continue;let T=s.envSelection==="fixed"?u:Ag(S.body,n.keyword,c);f.push({issueKey:p.key,summary:p.summary,environmentName:T,requestedByAccountId:S.authorAccountId??void 0,requestedByDisplayName:S.author,dedupKey:`deploy:comment:${S.id}`,fingerprint:`comment "${n.keyword}" by ${S.author} at ${S.created}`+(T?` \u2192 ${T}`:"")})}}return f}async matchStatusDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="status_changed"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=this.fixedEnvironmentName(s.environmentId),a=[];for(let c of i){let u=await this.jiraOf(t).lastEnteredStatus(c.key,n.status);u&&a.push({issueKey:c.key,summary:c.summary,environmentName:o,requestedByAccountId:u.authorAccountId??void 0,requestedByDisplayName:u.author,dedupKey:`deploy:status:${e.id}:${c.key}:${u.at}`,fingerprint:`moved to "${n.status}" by ${u.author} at ${u.at}`})}return a}fixedEnvironmentName(e){return e?this.environments.find(t=>t.id===e)?.name??"":""}async matchLabelTrigger(e,t){let n=e.trigger;if(n.type!=="label_added")return[];let s=`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Kr.NEEDS_INPUT_LABEL}") ORDER BY updated ASC`;return(await this.jiraOf(t).search(s,10)).map(o=>({issueKey:o.key,summary:o.summary,components:o.components,fingerprint:`label "${n.label}" matched at ${new Date().toISOString()}`}))}async matchCommentTrigger(e,t){let n=e.trigger;if(n.type!=="comment_keyword")return[];let s=`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND (labels IS EMPTY OR labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Kr.NEEDS_INPUT_LABEL}")) ORDER BY updated DESC`,i=await this.jiraOf(t).search(s,10),o=n.keyword.toLowerCase(),a=[];for(let c of i){let f=[...(await this.jiraOf(t).getIssue(c.key)).comments].reverse().find(p=>p.body.toLowerCase().includes(o)&&!ot(p.body));f&&a.push({issueKey:c.key,components:c.components,summary:c.summary,fingerprint:`comment keyword "${n.keyword}" by ${f.author} at ${f.created}`,triggeredByAccountId:f.authorAccountId??void 0})}return a}async diagnoseRule(e,t){let n=e.trigger;if(e.action.type==="deploy"){let c=n.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t),u=c.filter(f=>f.environmentName);return{matchedCount:u.length,excludedCount:c.length-u.length,excludedSample:c.filter(f=>!f.environmentName).slice(0,5).map(f=>f.issueKey)}}if(n.type==="status_changed")return{matchedCount:(await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND status = "${n.status}"`,50)).length,excludedCount:0,excludedSample:[]};if(n.type==="label_added"){let[c,u]=await Promise.all([this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}")`,50),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]);return{matchedCount:c.length,excludedCount:u.length,excludedSample:u.slice(0,5).map(f=>f.key)}}let s=n.keyword.toLowerCase(),[i,o]=await Promise.all([this.matchCommentTrigger(e,t),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]),a=[];for(let c of o)(await this.jiraOf(t).getIssue(c.key)).comments.some(f=>f.body.toLowerCase().includes(s))&&a.push(c.key);return{matchedCount:i.length,excludedCount:a.length,excludedSample:a.slice(0,5)}}enqueueForRepo(e,t){this.enqueue(this.repoQueues,e,t)}runOnRepoQueue(e,t){this.enqueue(this.repoQueues,e,t)}runOnEnvironmentQueue(e,t){this.enqueue(this.envQueues,e,t)}enqueue(e,t,n){let i=(e.get(t)??Promise.resolve()).then(async()=>{this.activeWork++;try{await n()}finally{this.activeWork--}}).catch(o=>{g.error(`run crashed: ${o instanceof Error?o.stack:o}`)});e.set(t,i)}};function Ag(r,e,t){let n=r.toLowerCase().indexOf(e.toLowerCase());if(n<0)return"";let i=r.slice(n+e.length).split(/[^\w.-]+/).filter(Boolean);for(let o of i){let a=t.find(c=>c.toLowerCase()===o.toLowerCase());if(a)return a}for(let o of i)if(!Eg.has(o.toLowerCase()))return o;return""}var Bu=E(require("node:fs"),1),Ku=E(require("node:path"),1),ma=require("node:crypto");_t();var $g=`This repository is in the middle of a git merge: the base branch moved and some files conflict with the change on this branch. Your ONLY job is to resolve those conflicts.
712
712
 
713
713
  Rules:
714
714
  - Edit ONLY the conflicted files listed below. Do not touch anything else, do not refactor, do not "improve" surrounding code.
@@ -717,22 +717,22 @@ Rules:
717
717
  - When you are done, every listed file must contain no conflict markers and must be syntactically valid.
718
718
 
719
719
  Conflicted files:
720
- `;async function Kc(r){let{cfg:e,repoPath:t,branch:n,baseBranch:s,issueKey:i,onLog:o}=r,a=Bc.default.join($r(),`conflict-${(0,pa.randomUUID)().slice(0,8)}`),u=!1;try{o("info",`Preparing a worktree for ${n} to merge ${s} into it`),await Po(t,a,n),u=!0;let c=await Eo(a,s);if(c.ok&&c.alreadyUpToDate)return o("info",`${n} 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(!c.ok&&c.conflicts===null)return{ok:!1,note:`The merge could not even be started: ${c.reason}`};let f={},p=!1;if(!c.ok){let T=c.conflicts;o("info",`git merged everything except ${T.length} file(s): ${T.slice(0,20).join(", ")}`+(T.length>20?", \u2026":""));let x=lt(r.agentId);if(!x)return await Kt(a),{ok:!1,note:`no adapter for agent "${r.agentId}" on this runner`};let P=In(r.agentId,"edit_no_shell");if(P)return await Kt(a),{ok:!1,note:`${P} Resolve the conflicts yourself on branch ${n}, or use Rebuild on current base.`};o("info",`Asking ${x.displayName} to resolve only those files`);let w=await la(x,{repoPath:a,prompt:Ag+T.map(O=>`- ${O}`).join(`
721
- `),timeoutSeconds:r.timeoutSeconds,bin:We(e,r.agentId),configDir:r.configDir,mode:"edit_no_shell",sessionId:(0,pa.randomUUID)(),onLog:(O,D)=>o(O,D)},(O,D)=>o(O==="warn"?"warn":O,D));if(f={costUsd:w.costUsd,inputTokens:w.inputTokens,outputTokens:w.outputTokens},!w.ok)return await Kt(a),{ok:!1,...f,note:`The agent could not do the resolution: ${w.error??"it produced no output"}. Nothing was changed - the merge was rolled back. Fix that first, then Resolve again.`};p=!0;let J=await $o(a);if(J.length)return await Kt(a),{ok:!1,...f,note:`The agent left conflict markers in ${J.slice(0,5).join(", ")}, so nothing was pushed and the merge was rolled back. Resolve it by hand on ${n}, or use Rebuild on current base to redo the ticket against today's base.`};await Ao(a,`${i}: merge ${s}, conflicts resolved by the agent
720
+ `;async function Zu(r){let{cfg:e,repoPath:t,branch:n,baseBranch:s,issueKey:i,onLog:o}=r,a=Ku.default.join($r(),`conflict-${(0,ma.randomUUID)().slice(0,8)}`),c=!1;try{o("info",`Preparing a worktree for ${n} to merge ${s} into it`),await jo(t,a,n),c=!0;let u=await Ao(a,s);if(u.ok&&u.alreadyUpToDate)return o("info",`${n} 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 T=u.conflicts;o("info",`git merged everything except ${T.length} file(s): ${T.slice(0,20).join(", ")}`+(T.length>20?", \u2026":""));let x=lt(r.agentId);if(!x)return await Kt(a),{ok:!1,note:`no adapter for agent "${r.agentId}" on this runner`};let P=In(r.agentId,"edit_no_shell");if(P)return await Kt(a),{ok:!1,note:`${P} Resolve the conflicts yourself on branch ${n}, or use Rebuild on current base.`};o("info",`Asking ${x.displayName} to resolve only those files`);let k=-1,X=setInterval(()=>{Po(a,T).then(K=>{let h=T.filter(m=>!K.includes(m));h.length!==k&&(k=h.length,o("info",`Conflict progress: ${h.length}/${T.length} resolved`+(h.length?` \xB7 clean: ${h.join(", ")}`:"")+(K.length?` \xB7 still conflicted: ${K.join(", ")}`:"")))}).catch(()=>{})},12e3),O=await ca(x,{repoPath:a,prompt:$g+T.map(K=>`- ${K}`).join(`
721
+ `),timeoutSeconds:r.timeoutSeconds,bin:We(e,r.agentId),configDir:r.configDir,mode:"edit_no_shell",sessionId:(0,ma.randomUUID)(),onLog:(K,h)=>o(K,h)},(K,h)=>o(K==="warn"?"warn":K,h));if(clearInterval(X),f={costUsd:O.costUsd,inputTokens:O.inputTokens,outputTokens:O.outputTokens},!O.ok)return await Kt(a),{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 L=await Qs(a);if(L.length)return await Kt(a),{ok:!1,...f,note:`The agent left conflict markers in ${L.slice(0,5).join(", ")}, so nothing was pushed and the merge was rolled back. Resolve it by hand on ${n}, or use Rebuild on current base to redo the ticket against today's base.`};await $o(a,`${i}: merge ${s}, conflicts resolved by the agent
722
722
 
723
- Resolved via Allwright`)}let v=await Qn(a,s);if(!v.ok){let T=v.forbidden.length?`the merged result touches protected paths (${v.forbidden.slice(0,5).join(", ")})`:`the merged result is too large (${v.files} files, ${v.insertions+v.deletions} lines; limits ${_n}/${kn})`;return await Kt(a),{ok:!1,...f,note:`Nothing was pushed: ${T}. The merge was rolled back.`}}await es(a,n);let S=await Pr(a);return o("info",`Pushed the merge to ${n} (${S.slice(0,7)})`),{ok:!0,...f,freeOfCharge:!p,headSha:S,note:p?`Merged ${s} into ${n}; the agent resolved the overlapping files. The PR is the same one - review the merge commit, then approve.`:`Merged ${s} into ${n} cleanly - no agent was needed, so this cost nothing. The PR is the same one; review and approve.`}}catch(c){return await Kt(a).catch(()=>{}),{ok:!1,note:`Could not resolve the conflict: ${c instanceof Error?c.message.slice(0,300):String(c)}`}}finally{u&&(await Bt(t,a).catch(()=>{}),Fc.default.rmSync(a,{recursive:!0,force:!0}))}}Ye();var Zr=E(require("node:fs"),1),Gc=E(require("node:path"),1);var $g=k.object({role:k.enum(["user","agent"]),text:k.string()}),Pg=k.object({sessionId:k.string(),projectId:k.string(),title:k.string().default(""),updatedAt:k.string(),messages:k.array($g).default([])}),jg=k.record(Pg),Og=10,Ng=200,Zc=2e4;function Hc(){return Gc.default.join(te(),"chat-sessions.json")}function ma(){let r=Hc();if(!Zr.default.existsSync(r))return{};try{return jg.parse(JSON.parse(Zr.default.readFileSync(r,"utf8")))}catch{return{}}}function Mg(r){Zr.default.mkdirSync(te(),{recursive:!0,mode:448});let e=Hc(),t=e+".tmp";Zr.default.writeFileSync(t,JSON.stringify(r,null,2)+`
724
- `,{mode:384}),Zr.default.renameSync(t,e),Zr.default.chmodSync(e,384)}function Vc(r,e,t,n){let s=ma(),o=s[e]??{sessionId:e,projectId:r,title:t.slice(0,80),updatedAt:new Date().toISOString(),messages:[]};o.messages.push({role:"user",text:t.slice(0,Zc)},{role:"agent",text:n.slice(0,Zc)}),o.messages=o.messages.slice(-Ng),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(u=>u.projectId===o.projectId).sort((u,c)=>c.updatedAt.localeCompare(u.updatedAt));for(let u of a.slice(Og))delete s[u.sessionId];Mg(s)}function Wc(r){return Object.values(ma()).filter(e=>e.projectId===r).sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)).map(e=>({sessionId:e.sessionId,title:e.title,updatedAt:e.updatedAt,messageCount:e.messages.length}))}function ga(r){return ma()[r]??null}var Gr=E(require("node:fs"),1),Be=E(require("node:path"),1),ya=300,zg=4,Jc=512*1024,Dg=new Set([".git","node_modules","dist","build","out",".next","vendor","coverage",".venv","venv","__pycache__",".turbo",".cache"]),Yc=/\.mdx?$/i;function Xc(r){let e=Be.default.resolve(r),t=[],n=(s,i)=>{if(i>zg||t.length>=ya)return;let o;try{o=Gr.default.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o){if(t.length>=ya)return;if(!a.isFile()||!Yc.test(a.name))continue;let u=Be.default.join(s,a.name);try{let c=Gr.default.statSync(u);t.push({path:Be.default.relative(e,u).split(Be.default.sep).join("/"),sizeBytes:c.size,updatedAt:c.mtime.toISOString()})}catch{}}for(let a of o){if(t.length>=ya)return;!a.isDirectory()||a.isSymbolicLink()||Dg.has(a.name)||a.name.startsWith(".")||n(Be.default.join(s,a.name),i+1)}};return n(e,0),t}function Qc(r,e){let t=Be.default.resolve(r);if(!Yc.test(e))return{ok:!1,error:"only markdown files can be opened here"};let n=Be.default.resolve(t,e);if(n!==t&&!n.startsWith(t+Be.default.sep))return{ok:!1,error:"that path is outside the project checkout"};let s;try{s=Gr.default.realpathSync(n)}catch{return{ok:!1,error:"file not found in this checkout"}}let i=(()=>{try{return Gr.default.realpathSync(t)}catch{return t}})();if(s!==i&&!s.startsWith(i+Be.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 a=Gr.default.readFileSync(s,"utf8"),u=Buffer.byteLength(a,"utf8")>Jc;return{ok:!0,path:Be.default.relative(i,s).split(Be.default.sep).join("/"),content:u?a.slice(0,Jc):a,truncated:u}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"could not read the file"}}}var Vt=E(be(),1);var _i=E(require("node:fs"),1),ed=E(require("node:path"),1);var Lg=k.object({id:k.string(),name:k.string().default(""),jiraProjectKey:k.string().default(""),repoName:k.string().default(""),jiraSiteUrl:k.string().default("")}),Ug=k.array(Lg);function td(){return ed.default.join(te(),"synced-projects.json")}function rd(r){try{let e=r.map(t=>({id:t.id,name:t.name,jiraProjectKey:t.jiraProjectKey,repoName:t.repoName,jiraSiteUrl:t.jiraSiteUrl??""}));_i.default.mkdirSync(te(),{recursive:!0}),_i.default.writeFileSync(td(),JSON.stringify(e,null,2),{mode:384})}catch{}}function qg(){try{let r=Ug.safeParse(JSON.parse(_i.default.readFileSync(td(),"utf8")));return r.success?r.data:[]}catch{return[]}}function nd(r){return qg().find(e=>e.repoName===r)??null}var lv=E(Xd(),1),uv=E(Ai(),1),cv=E(jn(),1),dv=E(Ra(),1),hv=E($a(),1),fv=E(za(),1),ah=E(Oi(),1),pv=E(oh(),1);var La=ah.default;var ys=E(require("node:crypto"),1),dt=E(be(),1);function mv(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function Ua(r,e,t,n){r.push(`dropped ${e} ${t} - this runner is out of date and does not understand it yet (${n}). Update the runner (npm install -g @ticketpilot/runner) to pick it up.`)}function gv(r){if(!r||typeof r!="object"||r.type!=="config")return null;let e=r,t=[],n=[];for(let a of Array.isArray(e.projects)?e.projects:[]){let u=dt.ProjectConfig.safeParse(a);u.success?n.push(u.data):Ua(t,"project","",u.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let u=dt.RuleConfig.safeParse(a);u.success?s.push(u.data):Ua(t,"rule",mv(a),u.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let u=dt.EnvironmentConfig.safeParse(a);u.success?i.push(u.data):Ua(t,"environment","",u.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:n,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:t}}var yv=2e4,vv=6e4,bv=5e3,Mi=class{constructor(e,t,n,s){this.wsUrl=e;this.runnerToken=t;this.meta=n;this.events=s}wsUrl;runnerToken;meta;events;ws=null;queue=[];pending=new Map;backoffMs=1e3;heartbeat=null;closed=!1;bootAnnounced=!1;start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.heartbeat&&clearInterval(this.heartbeat),this.ws?.close()}get connected(){return this.ws?.readyState===La.OPEN}connect(){if(this.closed)return;g.info(`connecting to control plane at ${this.wsUrl}`);let e=new La(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:dt.PROTOCOL_VERSION,runnerVersion:this.meta.runnerVersion,platform:`${process.platform}/${process.arch} node${process.versions.node}`,justBooted:!this.bootAnnounced});let t=this.queue.splice(0,this.queue.length);for(let n of t)this.sendNow(n);this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=setInterval(()=>{this.send({type:"heartbeat",ts:new Date().toISOString()})},yv)}),e.on("message",t=>{let n;try{n=JSON.parse(t.toString())}catch(i){g.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,dt.parseServerMsg)(n)}catch(i){let o=gv(n);if(!o){g.warn(`ignoring malformed server message: ${i}`);return}for(let a of o.warnings)g.warn(a);g.warn(`config push had ${o.warnings.length} ${o.warnings.length===1?"entry":"entries"} this runner doesn't understand - applied everything else instead of dropping the whole config`),s=o.msg}this.handle(s)}),e.on("close",t=>{if(this.heartbeat&&clearInterval(this.heartbeat),t===4001)g.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(t===4003){g.error("this runner has been revoked from the control plane UI. Re-enroll with a fresh token if this was not intended."),this.closed=!0;return}if(this.closed)return;let n=Math.random()*.3+.85,s=Math.round(this.backoffMs*n);g.warn(`disconnected (code ${t}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,vv)}),e.on("error",t=>{g.warn(`websocket error: ${t.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,g.info(`connected as runner "${e.runnerName}" (${e.runnerId})`);return}if(e.type==="run.claim.result"||e.type==="deploy.claim.result"||e.type==="autopilot.next.result"){let t=this.pending.get(e.requestId);t&&(clearTimeout(t.timer),this.pending.delete(e.requestId),t.resolve(e));return}if(e.type==="config")return this.events.onConfig(e);if(e.type==="project.test")return this.events.onProjectTest(e);if(e.type==="rule.diagnose")return this.events.onRuleDiagnose(e);if(e.type==="run.cancel")return this.events.onCancel(e.runId);if(e.type==="run.approved")return this.events.onApproved(e.runId,e.headSha);if(e.type==="run.rejected")return this.events.onRejected(e.runId);if(e.type==="run.retryPush")return this.events.onRetryPush(e.runId);if(e.type==="deploy.start")return this.events.onDeployStart(e);if(e.type==="deploy.suggest")return this.events.onDeploySuggest(e);if(e.type==="deploy.fix")return this.events.onDeployFix(e);if(e.type==="env.preflight")return this.events.onEnvPreflight(e);if(e.type==="chat.turn")return this.events.onChatTurn(e);if(e.type==="chat.create.ticket")return this.events.onChatCreateTicket(e);if(e.type==="chat.list")return this.events.onChatList(e);if(e.type==="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==="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>=bv){let t=this.queue.findIndex(n=>n.type==="run.log");t>=0?this.queue.splice(t,1):this.queue.shift()}this.queue.push(e)}async claimRun(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=ys.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"run.claim",requestId:t,...e})});return!n||n.type!=="run.claim.result"?{accepted:!1,reason:"claim timed out"}:{accepted:n.accepted,runId:n.runId,reason:n.reason,claudeProfile:n.claudeProfile,actorEmail:n.actorEmail}}async requestAutopilotNext(){if(!this.connected)return null;let e=ys.default.randomUUID(),t=await new Promise(n=>{let s=setTimeout(()=>{this.pending.delete(e),n(null)},15e3);this.pending.set(e,{resolve:n,timer:s}),this.sendNow({type:"autopilot.next",requestId:e})});return!t||t.type!=="autopilot.next.result"?null:{ok:t.ok,item:t.item,pausedUntil:t.pausedUntil}}sendAutopilotReport(e){this.send({type:"autopilot.report",requestId:ys.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 t=ys.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:t,...e})});return!n||n.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:n.accepted,runId:n.runId,environment:n.environment,reason:n.reason,code:n.code}}sendDeploySuggestResult(e,t){this.send({type:"deploy.suggest.result",requestId:e,...t,docPath:t.docPath??"",docContent:t.docContent??""})}sendChatTurnResult(e,t){this.send({type:"chat.turn.result",requestId:e,...t,inputTokens:t.inputTokens??0,outputTokens:t.outputTokens??0,cacheReadTokens:t.cacheReadTokens??0,costUsd:t.costUsd??0,model:t.model??""})}sendChatCreateTicketResult(e,t){this.send({type:"chat.create.ticket.result",requestId:e,...t,childKeys:t.childKeys??[]})}sendChatListResult(e,t){this.send({type:"chat.list.result",requestId:e,sessions:t})}sendRepoDocsResult(e,t){this.send({type:"repo.docs.result",requestId:e,...t})}sendRepoDocReadResult(e,t){this.send({type:"repo.doc.read.result",requestId:e,...t})}sendChatLoadResult(e,t){this.send({type:"chat.load.result",requestId:e,...t})}sendBoardFetchResult(e,t){this.send({type:"board.fetch.result",requestId:e,...t,browseBaseUrl:t.browseBaseUrl??""})}sendAuditStartResult(e,t){this.send({type:"audit.start.result",requestId:e,...t})}sendAuditListResult(e,t){this.send({type:"audit.list.result",requestId:e,ok:t.ok,error:t.error,audits:t.audits??[]})}sendAuditGetResult(e,t){this.send({type:"audit.get.result",requestId:e,...t})}sendAuditReviewResult(e,t){this.send({type:"audit.review.result",requestId:e,...t})}sendKnowledgeListResult(e,t){this.send({type:"knowledge.list.result",requestId:e,ok:t.ok,error:t.error,files:t.files??[]})}sendKnowledgeSaveResult(e,t){this.send({type:"knowledge.save.result",requestId:e,...t})}sendEpicListResult(e,t){this.send({type:"epic.list.result",requestId:e,ok:t.ok,error:t.error,epics:t.epics??[],children:t.children??[]})}sendEpicSuggestResult(e,t){this.send({type:"epic.suggest.result",requestId:e,ok:t.ok,error:t.error,issueKey:t.issueKey??"",reason:t.reason??"",considered:t.considered??0})}sendTeamCredsResult(e,t){this.send({type:"team.creds.result",requestId:e,ok:t.ok,error:t.error,githubShared:t.githubShared??!1,sharedGithubLogin:t.sharedGithubLogin??"",entries:t.entries??[]})}sendBoardTriggerResult(e,t){this.send({type:"board.trigger.result",requestId:e,...t})}sendAuditStatsResult(e,t){this.send({type:"audit.stats.result",requestId:e,ok:t.ok,error:t.error,byProject:t.byProject??{}})}sendRunnerUpdateResult(e,t){this.send({type:"runner.update.result",requestId:e,ok:t.ok,error:t.error,note:t.note??"",scheduled:t.scheduled??!1})}sendSetupClaudeMdGenerateResult(e,t){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:t.ok,error:t.error,content:t.content??""})}sendSetupClaudeMdSaveResult(e,t){this.send({type:"setup.claudemd.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendResolveConflictResult(e,t){this.send({type:"run.resolve.conflict.result",requestId:e,ok:t.ok,note:t.note??"",freeOfCharge:t.freeOfCharge??!1,headSha:t.headSha??"",costUsd:t.costUsd,inputTokens:t.inputTokens,outputTokens:t.outputTokens})}sendAgentProfilesResult(e,t){this.send({type:"agent.profiles.result",requestId:e,ok:t.ok,error:t.error,profiles:t.profiles??[],defaultLoggedIn:t.defaultLoggedIn??!1,agentsWithoutProfiles:t.agentsWithoutProfiles??[]})}sendRepoDocSaveResult(e,t){this.send({type:"repo.doc.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupStatusResult(e,t){this.send({type:"setup.status.result",requestId:e,ok:t.ok,error:t.error,jiraConfigured:t.jiraConfigured??!1,jiraEmail:t.jiraEmail??"",claude:t.claude,githubTokenSet:t.githubTokenSet??!1,githubLogin:t.githubLogin??"",deploysEnabled:t.deploysEnabled??!1,jiraUserCount:t.jiraUserCount??0,repos:t.repos??[]})}sendEnvPreflightResult(e,t){this.send({type:"env.preflight.result",requestId:e,...t,checks:this.withFixDefaults(t.checks)})}sendJiraUsersResult(e,t){this.send({type:"jira.users.result",requestId:e,...t})}withFixDefaults(e){return e.map(t=>({...t,kind:t.kind??"connection",fix:t.fix??[],fixNote:t.fixNote??""}))}sendProjectTestResult(e,t,n){this.send({type:"project.test.result",requestId:e,ok:t,checks:this.withFixDefaults(n)})}sendRuleDiagnoseResult(e,t){this.send({type:"rule.diagnose.result",requestId:e,...t,checks:this.withFixDefaults(t.checks)})}};var zi=E(require("node:fs"),1),Ln=E(require("node:path"),1),uh=require("node:child_process"),wv=/\.mdx?$/i,lh=6,_v=/^[\w.\- ()]+$/;function kv(r,e){let t=e.trim().replace(/\\/g,"/").replace(/^\.\//,"");if(!t)return{ok:!1,error:"empty path"};if(Ln.default.isAbsolute(t))return{ok:!1,error:"path must be repo-relative"};if(!wv.test(t))return{ok:!1,error:"only markdown files (.md) can be saved"};let n=t.split("/");if(n.length>lh)return{ok:!1,error:`path deeper than ${lh} levels`};for(let o of n)if(o==="."||o===".."||!_v.test(o))return{ok:!1,error:`invalid path segment "${o}"`};if(n[0]===".git")return{ok:!1,error:"cannot write under .git"};let s=Ln.default.resolve(r),i=Ln.default.resolve(s,t);return i!==s&&!i.startsWith(s+Ln.default.sep)?{ok:!1,error:"path escapes the checkout"}:{ok:!0,abs:i,rel:t}}async function qa(r){let e=kv(r.repoPath,r.relPath);if(!e.ok)return{ok:!1,error:e.error};if(zi.default.existsSync(e.abs)&&!r.overwrite)return{ok:!1,error:`${e.rel} already exists in this checkout`};zi.default.mkdirSync(Ln.default.dirname(e.abs),{recursive:!0}),zi.default.writeFileSync(e.abs,r.content.endsWith(`
723
+ Resolved via Allwright`)}let v=await Qn(a,s);if(!v.ok){let T=v.forbidden.length?`the merged result touches protected paths (${v.forbidden.slice(0,5).join(", ")})`:`the merged result is too large (${v.files} files, ${v.insertions+v.deletions} lines; limits ${_n}/${kn})`;return await Kt(a),{ok:!1,...f,note:`Nothing was pushed: ${T}. The merge was rolled back.`}}await es(a,n);let S=await Pr(a);return o("info",`Pushed the merge to ${n} (${S.slice(0,7)})`),{ok:!0,...f,freeOfCharge:!p,headSha:S,note:p?`Merged ${s} into ${n}; the agent resolved the overlapping files. The PR is the same one - review the merge commit, then approve.`:`Merged ${s} into ${n} cleanly - no agent was needed, so this cost nothing. The PR is the same one; review and approve.`}}catch(u){return await Kt(a).catch(()=>{}),{ok:!1,note:`Could not resolve the conflict: ${u instanceof Error?u.message.slice(0,300):String(u)}`}}finally{c&&(await Bt(t,a).catch(()=>{}),Bu.default.rmSync(a,{recursive:!0,force:!0}))}}Ye();var Zr=E(require("node:fs"),1),Hu=E(require("node:path"),1);var Pg=_.object({role:_.enum(["user","agent"]),text:_.string()}),jg=_.object({sessionId:_.string(),projectId:_.string(),title:_.string().default(""),updatedAt:_.string(),messages:_.array(Pg).default([])}),Og=_.record(jg),Ng=10,Mg=200,Gu=2e4;function Vu(){return Hu.default.join(te(),"chat-sessions.json")}function ga(){let r=Vu();if(!Zr.default.existsSync(r))return{};try{return Og.parse(JSON.parse(Zr.default.readFileSync(r,"utf8")))}catch{return{}}}function zg(r){Zr.default.mkdirSync(te(),{recursive:!0,mode:448});let e=Vu(),t=e+".tmp";Zr.default.writeFileSync(t,JSON.stringify(r,null,2)+`
724
+ `,{mode:384}),Zr.default.renameSync(t,e),Zr.default.chmodSync(e,384)}function Wu(r,e,t,n){let s=ga(),o=s[e]??{sessionId:e,projectId:r,title:t.slice(0,80),updatedAt:new Date().toISOString(),messages:[]};o.messages.push({role:"user",text:t.slice(0,Gu)},{role:"agent",text:n.slice(0,Gu)}),o.messages=o.messages.slice(-Mg),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(c=>c.projectId===o.projectId).sort((c,u)=>u.updatedAt.localeCompare(c.updatedAt));for(let c of a.slice(Ng))delete s[c.sessionId];zg(s)}function Ju(r){return Object.values(ga()).filter(e=>e.projectId===r).sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)).map(e=>({sessionId:e.sessionId,title:e.title,updatedAt:e.updatedAt,messageCount:e.messages.length}))}function ya(r){return ga()[r]??null}var Gr=E(require("node:fs"),1),Be=E(require("node:path"),1),va=300,Dg=4,Yu=512*1024,Lg=new Set([".git","node_modules","dist","build","out",".next","vendor","coverage",".venv","venv","__pycache__",".turbo",".cache"]),Xu=/\.mdx?$/i;function Qu(r){let e=Be.default.resolve(r),t=[],n=(s,i)=>{if(i>Dg||t.length>=va)return;let o;try{o=Gr.default.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o){if(t.length>=va)return;if(!a.isFile()||!Xu.test(a.name))continue;let c=Be.default.join(s,a.name);try{let u=Gr.default.statSync(c);t.push({path:Be.default.relative(e,c).split(Be.default.sep).join("/"),sizeBytes:u.size,updatedAt:u.mtime.toISOString()})}catch{}}for(let a of o){if(t.length>=va)return;!a.isDirectory()||a.isSymbolicLink()||Lg.has(a.name)||a.name.startsWith(".")||n(Be.default.join(s,a.name),i+1)}};return n(e,0),t}function ed(r,e){let t=Be.default.resolve(r);if(!Xu.test(e))return{ok:!1,error:"only markdown files can be opened here"};let n=Be.default.resolve(t,e);if(n!==t&&!n.startsWith(t+Be.default.sep))return{ok:!1,error:"that path is outside the project checkout"};let s;try{s=Gr.default.realpathSync(n)}catch{return{ok:!1,error:"file not found in this checkout"}}let i=(()=>{try{return Gr.default.realpathSync(t)}catch{return t}})();if(s!==i&&!s.startsWith(i+Be.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 a=Gr.default.readFileSync(s,"utf8"),c=Buffer.byteLength(a,"utf8")>Yu;return{ok:!0,path:Be.default.relative(i,s).split(Be.default.sep).join("/"),content:c?a.slice(0,Yu):a,truncated:c}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"could not read the file"}}}var Vt=E(be(),1);var ki=E(require("node:fs"),1),td=E(require("node:path"),1);var Ug=_.object({id:_.string(),name:_.string().default(""),jiraProjectKey:_.string().default(""),repoName:_.string().default(""),jiraSiteUrl:_.string().default("")}),qg=_.array(Ug);function rd(){return td.default.join(te(),"synced-projects.json")}function nd(r){try{let e=r.map(t=>({id:t.id,name:t.name,jiraProjectKey:t.jiraProjectKey,repoName:t.repoName,jiraSiteUrl:t.jiraSiteUrl??""}));ki.default.mkdirSync(te(),{recursive:!0}),ki.default.writeFileSync(rd(),JSON.stringify(e,null,2),{mode:384})}catch{}}function Fg(){try{let r=qg.safeParse(JSON.parse(ki.default.readFileSync(rd(),"utf8")));return r.success?r.data:[]}catch{return[]}}function sd(r){return Fg().find(e=>e.repoName===r)??null}var cv=E(Qd(),1),uv=E($i(),1),dv=E(jn(),1),hv=E(Ea(),1),fv=E(Pa(),1),pv=E(Da(),1),lh=E(Ni(),1),mv=E(ah(),1);var Ua=lh.default;var ys=E(require("node:crypto"),1),dt=E(be(),1);function gv(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function qa(r,e,t,n){r.push(`dropped ${e} ${t} - this runner is out of date and does not understand it yet (${n}). Update the runner (npm install -g @ticketpilot/runner) to pick it up.`)}function yv(r){if(!r||typeof r!="object"||r.type!=="config")return null;let e=r,t=[],n=[];for(let a of Array.isArray(e.projects)?e.projects:[]){let c=dt.ProjectConfig.safeParse(a);c.success?n.push(c.data):qa(t,"project","",c.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let c=dt.RuleConfig.safeParse(a);c.success?s.push(c.data):qa(t,"rule",gv(a),c.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let c=dt.EnvironmentConfig.safeParse(a);c.success?i.push(c.data):qa(t,"environment","",c.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:n,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:t}}var vv=2e4,bv=6e4,wv=5e3,zi=class{constructor(e,t,n,s){this.wsUrl=e;this.runnerToken=t;this.meta=n;this.events=s}wsUrl;runnerToken;meta;events;ws=null;queue=[];pending=new Map;backoffMs=1e3;heartbeat=null;closed=!1;bootAnnounced=!1;start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.heartbeat&&clearInterval(this.heartbeat),this.ws?.close()}get connected(){return this.ws?.readyState===Ua.OPEN}connect(){if(this.closed)return;g.info(`connecting to control plane at ${this.wsUrl}`);let e=new Ua(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:dt.PROTOCOL_VERSION,runnerVersion:this.meta.runnerVersion,platform:`${process.platform}/${process.arch} node${process.versions.node}`,justBooted:!this.bootAnnounced});let t=this.queue.splice(0,this.queue.length);for(let n of t)this.sendNow(n);this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=setInterval(()=>{this.send({type:"heartbeat",ts:new Date().toISOString()})},vv)}),e.on("message",t=>{let n;try{n=JSON.parse(t.toString())}catch(i){g.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,dt.parseServerMsg)(n)}catch(i){let o=yv(n);if(!o){g.warn(`ignoring malformed server message: ${i}`);return}for(let a of o.warnings)g.warn(a);g.warn(`config push had ${o.warnings.length} ${o.warnings.length===1?"entry":"entries"} this runner doesn't understand - applied everything else instead of dropping the whole config`),s=o.msg}this.handle(s)}),e.on("close",t=>{if(this.heartbeat&&clearInterval(this.heartbeat),t===4001)g.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(t===4003){g.error("this runner has been revoked from the control plane UI. Re-enroll with a fresh token if this was not intended."),this.closed=!0;return}if(this.closed)return;let n=Math.random()*.3+.85,s=Math.round(this.backoffMs*n);g.warn(`disconnected (code ${t}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,bv)}),e.on("error",t=>{g.warn(`websocket error: ${t.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,g.info(`connected as runner "${e.runnerName}" (${e.runnerId})`);return}if(e.type==="run.claim.result"||e.type==="deploy.claim.result"||e.type==="autopilot.next.result"){let t=this.pending.get(e.requestId);t&&(clearTimeout(t.timer),this.pending.delete(e.requestId),t.resolve(e));return}if(e.type==="config")return this.events.onConfig(e);if(e.type==="project.test")return this.events.onProjectTest(e);if(e.type==="rule.diagnose")return this.events.onRuleDiagnose(e);if(e.type==="run.cancel")return this.events.onCancel(e.runId);if(e.type==="run.approved")return this.events.onApproved(e.runId,e.headSha);if(e.type==="run.rejected")return this.events.onRejected(e.runId);if(e.type==="run.retryPush")return this.events.onRetryPush(e.runId);if(e.type==="deploy.start")return this.events.onDeployStart(e);if(e.type==="deploy.suggest")return this.events.onDeploySuggest(e);if(e.type==="deploy.fix")return this.events.onDeployFix(e);if(e.type==="env.preflight")return this.events.onEnvPreflight(e);if(e.type==="chat.turn")return this.events.onChatTurn(e);if(e.type==="chat.create.ticket")return this.events.onChatCreateTicket(e);if(e.type==="chat.list")return this.events.onChatList(e);if(e.type==="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==="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>=wv){let t=this.queue.findIndex(n=>n.type==="run.log");t>=0?this.queue.splice(t,1):this.queue.shift()}this.queue.push(e)}async claimRun(e){if(!this.connected)return{accepted:!1,reason:"control plane offline"};let t=ys.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"run.claim",requestId:t,...e})});return!n||n.type!=="run.claim.result"?{accepted:!1,reason:"claim timed out"}:{accepted:n.accepted,runId:n.runId,reason:n.reason,claudeProfile:n.claudeProfile,actorEmail:n.actorEmail}}async requestAutopilotNext(){if(!this.connected)return null;let e=ys.default.randomUUID(),t=await new Promise(n=>{let s=setTimeout(()=>{this.pending.delete(e),n(null)},15e3);this.pending.set(e,{resolve:n,timer:s}),this.sendNow({type:"autopilot.next",requestId:e})});return!t||t.type!=="autopilot.next.result"?null:{ok:t.ok,item:t.item,pausedUntil:t.pausedUntil}}sendAutopilotReport(e){this.send({type:"autopilot.report",requestId:ys.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 t=ys.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:t,...e})});return!n||n.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:n.accepted,runId:n.runId,environment:n.environment,reason:n.reason,code:n.code}}sendDeploySuggestResult(e,t){this.send({type:"deploy.suggest.result",requestId:e,...t,docPath:t.docPath??"",docContent:t.docContent??""})}sendChatTurnResult(e,t){this.send({type:"chat.turn.result",requestId:e,...t,inputTokens:t.inputTokens??0,outputTokens:t.outputTokens??0,cacheReadTokens:t.cacheReadTokens??0,costUsd:t.costUsd??0,model:t.model??""})}sendChatCreateTicketResult(e,t){this.send({type:"chat.create.ticket.result",requestId:e,...t,childKeys:t.childKeys??[]})}sendChatListResult(e,t){this.send({type:"chat.list.result",requestId:e,sessions:t})}sendRepoDocsResult(e,t){this.send({type:"repo.docs.result",requestId:e,...t})}sendRepoDocReadResult(e,t){this.send({type:"repo.doc.read.result",requestId:e,...t})}sendChatLoadResult(e,t){this.send({type:"chat.load.result",requestId:e,...t})}sendBoardFetchResult(e,t){this.send({type:"board.fetch.result",requestId:e,...t,browseBaseUrl:t.browseBaseUrl??""})}sendAuditStartResult(e,t){this.send({type:"audit.start.result",requestId:e,...t})}sendAuditListResult(e,t){this.send({type:"audit.list.result",requestId:e,ok:t.ok,error:t.error,audits:t.audits??[]})}sendAuditGetResult(e,t){this.send({type:"audit.get.result",requestId:e,...t})}sendAuditReviewResult(e,t){this.send({type:"audit.review.result",requestId:e,...t})}sendKnowledgeListResult(e,t){this.send({type:"knowledge.list.result",requestId:e,ok:t.ok,error:t.error,files:t.files??[]})}sendKnowledgeSaveResult(e,t){this.send({type:"knowledge.save.result",requestId:e,...t})}sendEpicListResult(e,t){this.send({type:"epic.list.result",requestId:e,ok:t.ok,error:t.error,epics:t.epics??[],children:t.children??[]})}sendEpicSuggestResult(e,t){this.send({type:"epic.suggest.result",requestId:e,ok:t.ok,error:t.error,issueKey:t.issueKey??"",reason:t.reason??"",considered:t.considered??0})}sendTeamCredsResult(e,t){this.send({type:"team.creds.result",requestId:e,ok:t.ok,error:t.error,githubShared:t.githubShared??!1,sharedGithubLogin:t.sharedGithubLogin??"",entries:t.entries??[]})}sendBoardTriggerResult(e,t){this.send({type:"board.trigger.result",requestId:e,...t})}sendAuditStatsResult(e,t){this.send({type:"audit.stats.result",requestId:e,ok:t.ok,error:t.error,byProject:t.byProject??{}})}sendRunnerUpdateResult(e,t){this.send({type:"runner.update.result",requestId:e,ok:t.ok,error:t.error,note:t.note??"",scheduled:t.scheduled??!1})}sendSetupClaudeMdGenerateResult(e,t){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:t.ok,error:t.error,content:t.content??""})}sendSetupClaudeMdSaveResult(e,t){this.send({type:"setup.claudemd.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendResolveConflictResult(e,t){this.send({type:"run.resolve.conflict.result",requestId:e,ok:t.ok,note:t.note??"",freeOfCharge:t.freeOfCharge??!1,headSha:t.headSha??"",costUsd:t.costUsd,inputTokens:t.inputTokens,outputTokens:t.outputTokens})}sendAgentProfilesResult(e,t){this.send({type:"agent.profiles.result",requestId:e,ok:t.ok,error:t.error,profiles:t.profiles??[],defaultLoggedIn:t.defaultLoggedIn??!1,agentsWithoutProfiles:t.agentsWithoutProfiles??[]})}sendRepoDocSaveResult(e,t){this.send({type:"repo.doc.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupStatusResult(e,t){this.send({type:"setup.status.result",requestId:e,ok:t.ok,error:t.error,jiraConfigured:t.jiraConfigured??!1,jiraEmail:t.jiraEmail??"",claude:t.claude,githubTokenSet:t.githubTokenSet??!1,githubLogin:t.githubLogin??"",deploysEnabled:t.deploysEnabled??!1,jiraUserCount:t.jiraUserCount??0,repos:t.repos??[]})}sendEnvPreflightResult(e,t){this.send({type:"env.preflight.result",requestId:e,...t,checks:this.withFixDefaults(t.checks)})}sendJiraUsersResult(e,t){this.send({type:"jira.users.result",requestId:e,...t})}withFixDefaults(e){return e.map(t=>({...t,kind:t.kind??"connection",fix:t.fix??[],fixNote:t.fixNote??""}))}sendProjectTestResult(e,t,n){this.send({type:"project.test.result",requestId:e,ok:t,checks:this.withFixDefaults(n)})}sendRuleDiagnoseResult(e,t){this.send({type:"rule.diagnose.result",requestId:e,...t,checks:this.withFixDefaults(t.checks)})}};var Di=E(require("node:fs"),1),Ln=E(require("node:path"),1),uh=require("node:child_process"),_v=/\.mdx?$/i,ch=6,kv=/^[\w.\- ()]+$/;function Sv(r,e){let t=e.trim().replace(/\\/g,"/").replace(/^\.\//,"");if(!t)return{ok:!1,error:"empty path"};if(Ln.default.isAbsolute(t))return{ok:!1,error:"path must be repo-relative"};if(!_v.test(t))return{ok:!1,error:"only markdown files (.md) can be saved"};let n=t.split("/");if(n.length>ch)return{ok:!1,error:`path deeper than ${ch} levels`};for(let o of n)if(o==="."||o===".."||!kv.test(o))return{ok:!1,error:`invalid path segment "${o}"`};if(n[0]===".git")return{ok:!1,error:"cannot write under .git"};let s=Ln.default.resolve(r),i=Ln.default.resolve(s,t);return i!==s&&!i.startsWith(s+Ln.default.sep)?{ok:!1,error:"path escapes the checkout"}:{ok:!0,abs:i,rel:t}}async function Fa(r){let e=Sv(r.repoPath,r.relPath);if(!e.ok)return{ok:!1,error:e.error};if(Di.default.existsSync(e.abs)&&!r.overwrite)return{ok:!1,error:`${e.rel} already exists in this checkout`};Di.default.mkdirSync(Ln.default.dirname(e.abs),{recursive:!0}),Di.default.writeFileSync(e.abs,r.content.endsWith(`
725
725
  `)?r.content:r.content+`
726
- `);let t=s=>new Promise((i,o)=>{(0,uh.execFile)("git",["-C",r.repoPath,...s],{timeout:12e4},(a,u,c)=>a?o(new Error(c||a.message)):i())}),n="";try{await t(["add",e.rel]),await t(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",r.commitMessage]);try{await t(["push"]),n="committed and pushed to the repo"}catch(s){n="committed locally, but push failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - push it from the server when convenient"}}catch(s){n="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:n}}var Xr=E(require("node:fs"),1),Fa=E(require("node:path"),1),Di=require("node:child_process"),dh=require("node:util");Or();_t();var hh=E(be(),1),ch=(0,dh.promisify)(Di.execFile);function Sv(r){try{return new URL(r).host}catch{return r}}function Tv(r){try{return(0,Di.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function Li(r,e,t=[],n){let s=[],i=r.repos[e.repoName]?.jira,o=i??r.jira,a=(e.jiraSiteUrl??"").trim().toLowerCase();if(!o)s.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else if(!a)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=Sv(o.baseUrl),v=i?"this repo's own Jira credential":"the runner-wide Jira credential";if(p!==a)s.push({name:"jira-site",ok:!1,detail:`this project is on ${a}, but ${v} 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 ${a}: the base URL (https://${a}), 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 S=new Ee(o);try{let T=await S.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${T.displayName} on ${p} (${v})`});try{await S.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}: ${vs(x)}`})}}catch(T){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${vs(T)}`})}}}let u=r.repos[e.repoName];if(u&&Xr.default.existsSync(u.path)){let p=Fa.default.join(u.path,"CLAUDE.md"),v=Xr.default.existsSync(p)&&Xr.default.readFileSync(p,"utf8").trim().length>0;s.push({name:"memory-file",kind:"content",ok:v,detail:v?"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.",...v?{}:{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 S=yi(u.path);s.push({name:"deploy-doc",kind:"content",ok:S!==null,detail:S?`${S.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.",...S?{}:{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(!u)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(!Xr.default.existsSync(u.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${u.path}`});else{let p=Xr.default.existsSync(Fa.default.join(u.path,".git"));s.push({name:"repo-path",ok:!0,detail:`${u.path}${p?" (git checkout)":" (warning: not a git checkout)"}`})}let c=[...new Set([e.defaultAgent||"claude-code",...n??[]])];for(let p of c){let v=We(r,p),S=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:T}=await ch(v,["--version"],{timeout:15e3});s.push({name:S,ok:!0,detail:T.trim().slice(0,100)})}catch(T){s.push({name:S,ok:!1,detail:`cannot run "${v}" for agent "${p}": ${vs(T)}`,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 ch("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: ${vs(p)}`})}let f=Ae(r,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 ${hh.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(()=>(Ye(),zr)),v=new p(f),S=await v.whoami(),T=u&&Xr.default.existsSync(u.path)?Tv(u.path):null,x=T?Ve(T):null;if(!x)s.push({name:"github-token",ok:!0,detail:`authenticated as ${S} - repo access not checked (no local checkout yet)`});else{let P=await v.repoAccess(x.owner,x.repo);s.push({name:"github-token",ok:P.ok&&P.canPush,detail:P.ok?P.canPush?`${S} has push access to ${x.owner}/${x.repo}`:`${S} can read ${x.owner}/${x.repo} but NOT push to it - implement rules will fail at the push`:`${S} cannot see ${x.owner}/${x.repo}: ${P.error}`,...P.ok&&P.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:vs(p)})}if(t.length){r.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 t){let v=dr(r,e.repoName,p.name),S=p.requiredSecrets.filter(T=>!v[T]&&!process.env[T]);s.push({name:`env:${p.name}`,ok:S.length===0,detail:S.length?`missing secret(s): ${S.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${S[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function vs(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var ye=new ul;ye.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(Gs);function bh(r){g.info(`Create the token at ${Vt.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Vt.GITHUB_TOKEN_PERMISSIONS.steps)g.info(` - ${e}`);g.info(Vt.GITHUB_TOKEN_PERMISSIONS.note),g.info(`Then paste it below for ${r}.`)}ye.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",Ba.default.hostname()).option("--jira-url <url>","Jira base URL, e.g. https://yourorg.atlassian.net").option("--jira-email <email>","Jira account email").option("--jira-token <token>","Jira API token (stored locally only)").action(async r=>{let e=en.default.createInterface({input:process.stdin,output:process.stdout}),t=async(n,s,i=!1)=>{if(s)return s;let o=await e.question(`${n}: `);if(!o.trim())throw new Error(`${n} is required`);return o.trim()};try{let n=await t("Control plane URL",r.cpUrl),s=await t("Enrolment token (from the web UI)",r.enrollToken),i=await t("Jira base URL (https://yourorg.atlassian.net)",r.jiraUrl),o=await t("Jira account email",r.jiraEmail),a=await t("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",r.jiraToken,!0),u=ao.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),c=await new Ee(u.jira).myself();g.info(`Jira credential OK - authenticated as ${c.displayName}`),u=await ru(u,s),g.info(`Enrolled as runner "${u.runnerName}" (${u.runnerId})`),g.info(`Credentials saved to ${Nt()} (mode 600, this machine only)`),g.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var Ka=ye.command("repo").description("Map control-plane repo names to local checkouts");Ka.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(r,e)=>{let t=se();t.repos[r]={path:e},he(t),g.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(_t(),cu));g.info(` origin remote: ${await n(e)} - make sure this is the repo you meant`)}catch{g.warn(` could not read an origin remote at ${e} - is it a git checkout?`)}});Ka.command("list").description("Show configured repo mappings").action(()=>{let r=se(),e=Object.entries(r.repos);if(!e.length)return g.info("no repos mapped yet");for(let[t,n]of e)g.info(`${t} -> ${n.path}`)});var wh=ye.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");wh.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 r=>{if(!/^[a-zA-Z0-9._-]+$/.test(r))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=se(),t=e.claudeProfiles[r]?.configDir??`${Nt().replace(/runner\.json$/,"")}claude-profiles/${r}`;et.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},he(e),g.info(`profile "${r}" -> ${t}`),g.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),g.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let n=(0,At.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),g.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),qn()});wh.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=se(),e=Object.entries(r.claudeProfiles);if(g.info("default: this OS user's own Claude login (no profile)"),!e.length)return g.info("no named profiles yet - allwright claude login <name>");for(let[t,n]of e){let s=et.default.existsSync(n.configDir)&&et.default.readdirSync(n.configDir).length>0;g.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});Ka.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(r=>{let e=se();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}`)}let t=e.repos[r].path;delete e.repos[r];let n=Object.keys(e.environments).filter(i=>i.startsWith(`${r}:`));for(let i of n)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==r),he(e),g.info(`Removed "${r}" (was ${t})`),n.length&&g.info(`Also removed ${n.length} environment secret set(s): ${n.join(", ")}`),e.auditSchedules.length!==s&&g.info("Also removed its audit schedule(s)"),g.info("The checkout on disk was NOT touched - remove it yourself if you want it gone."),g.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var Za=ye.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Za.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(r=>{if(r.print){g.info(`
727
- `+Uo(Lo()));return}yu(g)});Za.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>vu(g));Za.command("status").description("systemctl status for the runner service").action(()=>{(0,At.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});ye.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()=>{g.info("Updating: npm install -g allwright@latest");let r=(0,At.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,t)=>{r.on("exit",n=>n===0?e():t(new Error(`npm exited with code ${n}`))),r.on("error",t)}),g.info("Updated. Restart the runner service to load the new version (check active runs first).")});var ws=ye.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");ws.command("set <repoName>").description("Store Jira credentials for ONE repo's project (e.g. a project on a different *.atlassian.net site than the runner's main credential). Prompts on stdin; stored locally only, like every other credential.").action(async r=>{let e=se();if(!e.repos[r]){let a=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${a}. Run \`allwright repo add\` first.`)}let t=nd(r),n=(t?.jiraSiteUrl??"").trim(),s=n?`https://${n}`:"",i=e.jira?.email??"";if(s&&i&&e.jira?.apiToken){let a={baseUrl:s,email:i,apiToken:e.jira.apiToken};try{let u=await new Ee(a).myself();if(e.repos[r].jira=a,he(e),g.info(`The token already on this server works on ${n} - authenticated as ${u.displayName}. Saved it for "${r}"; nothing to type.`),t?.jiraProjectKey)try{await new Ee(a).search(`project = "${t.jiraProjectKey}"`,1),g.info(`Project ${t.jiraProjectKey} is readable with it.`)}catch{g.warn(`Authenticated, but project ${t.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.`)}qn();return}catch{g.info(`The token already on this server does not work on ${n} - asking for one that does.`)}}let o=en.default.createInterface({input:process.stdin,output:process.stdout});try{let u=(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(!u||!f||!p)throw new Error("all three values are required");let v={baseUrl:u,email:f,apiToken:p},S=await new Ee(v).myself();g.info(`Jira credential OK - authenticated as ${S.displayName} on ${u}`),e.repos[r].jira=v,he(e),g.info(`Saved: repo "${r}" now polls ${u} (other repos keep the runner-wide credential)`),qn()}finally{o.close()}});ws.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=se();g.info(`runner-wide: ${r.jira?`${r.jira.baseUrl} (${r.jira.email})`:"(not configured)"}`);for(let[e,t]of Object.entries(r.repos))g.info(`${e} -> ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(runner-wide credential)"}`)});ws.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 r=>{let e=se(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=en.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`Their ATLASSIAN account email [${t}]: `)).trim()||t,i=(await n.question("Their Jira API token (they create it at id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!i)throw new Error("API token is required");let o=[e.jira,...Object.values(e.repos).map(c=>c.jira)].filter(c=>!!c),a=new Set,u=!1;for(let c of o)if(!a.has(c.baseUrl)){a.add(c.baseUrl);try{let f=await new Ee({baseUrl:c.baseUrl,email:s,apiToken:i}).myself();g.info(`${c.baseUrl}: OK - authenticated as ${f.displayName}`),u=!0}catch{g.warn(`${c.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!u)throw new Error("credential failed on every configured Jira site - nothing saved");e.jiraUsers[t]={email:s,apiToken:i},he(e),g.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});ws.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=se(),e=Object.entries(r.jiraUsers);if(!e.length)return g.info("none yet - everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[t,n]of e)g.info(`${t} -> posts to Jira as ${n.email}`)});ws.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=se(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],he(e),g.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var Fn=ye.command("github").description("GitHub credential for implement-mode rules");Fn.command("set-token").description("Store a GitHub token for opening pull requests (implement rules). Stored locally only, like your Jira token. Recommended: a fine-grained PAT scoped to the repo with contents:write + pull_requests:write.").option("--token <token>","GitHub token (omit to be prompted)").action(async r=>{let e=en.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??void bh("every repo on this server")??(await e.question("GitHub token: ")).trim();if(!t)throw new Error("token is required");let{GitHubClient:n}=await Promise.resolve().then(()=>(Ye(),zr)),s=await new n(t).whoami(),i=se();i.github={token:t,login:s},he(i),g.info(`GitHub token OK - authenticated as ${s}`),g.info(`Saved to ${Nt()} (mode 600, this machine only)`)}finally{e.close()}});Fn.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 r=>{let e=se();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}. Run \`allwright repo add\` first.`)}let t=e.github?.token,n=e.repos[r]?.path;if(t&&n&&et.default.existsSync(n))try{let i=(0,At.execFileSync)("git",["-C",n,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim(),o=Ve(i);if(o){let{GitHubClient:a}=await Promise.resolve().then(()=>(Ye(),zr)),u=new a(t),c=await u.repoAccess(o.owner,o.repo);if(c.ok&&c.canPush){let f=await u.whoami();g.info(`The shared token on this server already has push access to ${o.owner}/${o.repo} as ${f} - "${r}" needs nothing of its own. Storing a second token here would only give you two to rotate.`),g.info("Want a separately revocable one anyway? Paste it at the prompt below; press Enter to leave things as they are.")}}}catch{}let s=en.default.createInterface({input:process.stdin,output:process.stdout});try{bh(`"${r}"`);let i=(await s.question(`GitHub token for "${r}": `)).trim();if(!i&&t){g.info(`Nothing changed - "${r}" keeps using the shared token.`);return}if(!i)throw new Error("token is required");let{GitHubClient:o}=await Promise.resolve().then(()=>(Ye(),zr)),a=await new o(i).whoami();e.repos[r].github={token:i,login:a},he(e),g.info(`GitHub token OK - authenticated as ${a}`),g.info(`Saved: repo "${r}" now uses its own token (other repos keep the runner-wide one)`)}finally{s.close()}});Fn.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 r=>{let e=se(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=en.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`GitHub token for ${t}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(Ye(),zr)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},he(e),g.info(`GitHub token OK - authenticated as ${o}`),g.info(`Saved. Implement runs triggered by ${t} now open PRs as ${o}. No restart needed.`)}finally{n.close()}});Fn.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=se(),e=Object.entries(r.githubUsers);if(!e.length)return g.info("no per-user GitHub tokens - everyone's PRs use the repo/runner-wide token");for(let[t]of e)g.info(`${t} -> own GitHub token stored`)});Fn.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=se(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],he(e),g.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});Fn.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=se();g.info(`runner-wide: ${r.github?.token?"token set":"(not configured)"}`);for(let[t,n]of Object.entries(r.repos))g.info(`${t} -> ${n.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(r.githubUsers);g.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var Ga=ye.command("audit").description("Recurring specialist audits on this runner");Ga.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((r,e,t)=>{let n=se();if(!n.repos[r]){let i=Object.keys(n.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(t,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");n.auditSchedules=[...n.auditSchedules.filter(i=>!(i.repoName===r&&i.role===e)),{repoName:r,role:e,intervalHours:s}],he(n),g.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});Ga.command("schedules").description("List scheduled audits").action(()=>{let r=se();if(!r.auditSchedules.length)return g.info("no scheduled audits - allwright audit schedule <repo> <role> <hours>");for(let e of r.auditSchedules)g.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});Ga.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=se(),n=t.auditSchedules.length;if(t.auditSchedules=t.auditSchedules.filter(s=>!(s.repoName===r&&s.role===e)),t.auditSchedules.length===n)throw new Error("no such schedule");he(t),g.info("Removed. Restart the runner to apply.")});var Ha=ye.command("deploy").description("Deployment settings for this machine");Ha.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 r=se();r.deploy={enabled:!0},he(r),g.info("deployments ENABLED on this runner"),g.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),qn()});Ha.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=se();r.deploy={enabled:!1},he(r),g.info("deployments DISABLED on this runner"),qn()});Ha.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=se();g.info(`deployments: ${r.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e){let s=Object.keys(n.secrets);g.info(`${t}: ${s.length?s.join(", "):"(no secrets)"}`)}});var Va=ye.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");Va.command("set <repoName> <envName> <assignments...>").description('Store secrets for one environment, e.g. env set acme/api production "SSH_HOST=1.2.3.4" "SSH_USER=deploy". Your deploy steps reference these as $SSH_HOST. The control plane only ever learns the NAMES.').action((r,e,t)=>{let n=se(),s=Ps(r,e),i=n.environments[s]??{secrets:{}},o=[];for(let a of t){let u=a.indexOf("=");if(u<=0)throw new Error(`expected KEY=VALUE, got "${a}"`);let c=a.slice(0,u).trim();i.secrets[c]=a.slice(u+1),o.push(c)}n.environments[s]=i,he(n),g.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),g.info(`Saved to ${Nt()} (mode 600, this machine only)`),qn()});Va.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=se(),s=Ps(r,e),i=n.environments[s];if(!i)return g.info(`nothing stored for ${s}`);for(let o of t)delete i.secrets[o];n.environments[s]=i,he(n),g.info(`removed ${t.join(", ")} from ${s}`)});Va.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=se(),e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e)g.info(`${t}: ${Object.keys(n.secrets).join(", ")||"(none)"}`)});ye.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=kl(r);g.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),g.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private - anyone holding it can act as this runner."),g.info(`Restore on any machine with: allwright import ${Un.default.basename(e.file)}`)}catch(e){g.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});ye.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=hr();if(e&&fr(e)){g.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 t=Sl(r);g.info(`Restored ${t.restored.length} entries into ${te()}`),t.previousDir&&g.info(`Previous config kept at ${t.previousDir}`),g.info("Start the runner and it will reconnect with the restored identity.")}catch(t){g.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});ye.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=se(),e=Object.keys(r.repos);if(!r.jira){g.error("no Jira credentials configured - run `allwright init`"),process.exitCode=1;return}let t=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],n=!0;for(let s of t){let i=await Li(r,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let a=o.ok?"PASS":"FAIL";(o.ok?g.info:g.error)(`[${a}] ${o.name}: ${o.detail}`),n&&=o.ok}}n||(process.exitCode=1)});function qn(){let r=hr();if(r&&fr(r)&&process.platform!=="win32")try{process.kill(r,"SIGHUP"),g.info("running runner reloaded its config live - no restart needed");return}catch{}g.info("No background runner found to reload. Under systemd: sudo systemctl kill -s HUP allwright - otherwise it applies on the next allwright start.")}function Iv(r){if(!r.runnerToken)throw new Error("runner not enrolled - run `allwright init`");if(!r.jira)throw new Error("no Jira credentials - run `allwright init`");let e=Al();e.ok||(g.warn(`another runner is already running on this machine (pid ${e.pid}). Two runner processes with one identity kick each other off the control plane every second. Stop the other one first: \`allwright stop\` (background runner) or \`sudo systemctl stop allwright\` (service).`),process.exit(1)),process.on("exit",co);let t=new Ee(r.jira),n=new Map,s=h=>{let m=r.repos[h]?.jira;if(!m)return t;let y=n.get(h);return y||(y=new Ee(m),n.set(h,y)),y},i=new Map,o=(h,m)=>{let y=fu(pe()??r,h,m);switch(y.kind){case"legacy":return{jira:s(h),authored:!1};case"self":return{jira:s(h),authored:!0};case"missing":return{error:y.error};case"user":{let C=`${y.creds.baseUrl}:${y.creds.email}:${y.creds.apiToken.slice(-6)}`,L=i.get(C);return L||(L=new Ee(y.creds),i.set(C,L)),{jira:L,authored:!0}}}},a=new URL("/api/runner/ws",r.controlPlaneUrl);a.protocol=a.protocol==="https:"?"wss:":"ws:";let u=[],c=[],f=[],p,v=null,S={cfg:r,jiraFor:s,transport:null},T=new Set,x=h=>{let m=u.find(C=>C.id===h),y=m&&r.repos[m.repoName];return m&&y?{project:m,repoPath:y.path}:null},P={cfg:r,jiraFor:s,get transport(){return S.transport},lookup:(h,m)=>{let y=x(h),C=f.find(L=>L.projectId===h&&L.name===m);return y&&C?{...y,environment:C}:null}},w=new Mi(a.toString(),r.runnerToken,{runnerVersion:Gs},{onConfig:h=>{u=h.projects,rd(h.projects),c=h.rules,f=h.environments,p.setConfig(h.projects,h.rules,h.pollingPaused,h.environments)},onDeployFix:async h=>{let m=x(h.projectId);if(!m){w.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let y=Je(r,m.project,"assist");if("error"in y){w.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:y.error});return}g.info(`investigating failed deploy of "${h.environmentName}" (step: ${h.failedStep||"?"})`);let C=await Dc({agent:y,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,steps:h.steps,failedStep:h.failedStep,errorText:h.errorText,cfg:r});w.sendDeploySuggestResult(h.requestId,C)},onProjectTest:async h=>{let m=u.find(C=>C.id===h.projectId);if(!m){w.sendProjectTestResult(h.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}g.info(`running connection test for project "${m.name}"`);let y=await Li(pe()??r,m,f.filter(C=>C.projectId===m.id),c.filter(C=>C.projectId===m.id).map(C=>"agent"in C.action?C.action.agent:"").filter(Boolean));w.sendProjectTestResult(h.requestId,y.every(C=>C.ok),y)},onRuleDiagnose:async h=>{let m=c.find(W=>W.id===h.ruleId),y=m&&u.find(W=>W.id===m.projectId);if(!m||!y){w.sendRuleDiagnoseResult(h.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}g.info(`diagnosing rule "${m.name}"`);let C=await Li(pe()??r,y,m.action.type==="deploy"?f.filter(W=>W.projectId===y.id):[]),L=m.action.type==="implement"?C:C.filter(W=>W.name!=="github-token"),{matchedCount:V,excludedCount:K,excludedSample:re}=await p.diagnoseRule(m,y);w.sendRuleDiagnoseResult(h.requestId,{checks:L,matchedCount:V,excludedCount:K,excludedSample:re})},onCancel:h=>{cc(h)?g.info(`run ${h} stopped from the dashboard`):g.warn(`cancel requested for run ${h}, but nothing is running under that id here - it likely finished already`)},onApproved:(h,m)=>{if(fa(h)){Pc(P,h).catch(y=>g.error(`deploy approval crashed for ${h}: ${y instanceof Error?y.stack:y}`));return}ls(S,h,m).catch(y=>g.error(`approval handling crashed for ${h}: ${y instanceof Error?y.stack:y}`))},onRetryPush:h=>{let m=ai(h),y=()=>wc(S,h).catch(C=>g.error(`retry push crashed for ${h}: ${C instanceof Error?C.stack:C}`));m?p.runOnRepoQueue(m.baseRepoPath,y):y()},onRejected:h=>{if(fa(h)){jc(P,h).catch(m=>g.error(`deploy rejection crashed for ${h}: ${m instanceof Error?m.stack:m}`));return}bc(S,h).catch(m=>g.error(`rejection handling crashed for ${h}: ${m instanceof Error?m.stack:m}`))},onDeployStart:h=>{let m=`${h.runId}#${h.attempt}`;if(T.has(m))return;T.add(m);let y=x(h.projectId);if(!y){let C="this runner has no local checkout mapped for that project - run: allwright repo add <repoName> /path/to/checkout";g.error(`deploy ${h.runId}: ${C}`),w.send({type:"run.status",runId:h.runId,status:"failed",error:C});return}g.info(`deploy ${h.runId} requested from the dashboard: ${h.issueKey} \u2192 ${h.environment.name}`),p.runOnEnvironmentQueue(h.environment.id,()=>gi({runId:h.runId,project:y.project,environment:h.environment,issueKey:h.issueKey,issueSummary:h.issueSummary,repoPath:y.repoPath,cfg:r,jira:s(y.project.repoName),transport:w,requestedBy:h.requestedBy}).catch(C=>g.error(`deploy crashed for ${h.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async h=>{let m=x(h.projectId);if(!m){w.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let y=Je(r,m.project,"assist");if("error"in y){w.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:y.error});return}g.info(`asking ${y.adapter.displayName} for "${h.environmentName}" deploy steps in ${m.repoPath}`);let C=await Lc({agent:y,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,notes:h.notes,timeoutSeconds:h.timeoutSeconds,cfg:r});w.sendDeploySuggestResult(h.requestId,C)},onEnvPreflight:async h=>{let m=x(h.projectId);if(!m){w.sendEnvPreflightResult(h.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let y=await zc({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,steps:h.steps,requiredSecrets:h.requiredSecrets,workdir:h.workdir,branch:h.branch,publicUrl:h.publicUrl,cfg:r});w.sendEnvPreflightResult(h.requestId,y)},onChatTurn:async h=>{let m=x(h.projectId);if(!m){w.sendChatTurnResult(h.requestId,{ok:!1,sessionId:h.sessionId??"",reply:"",error:"this runner has no local checkout mapped for that project"});return}let y=h.sessionId||(0,qi.randomUUID)(),C=!h.sessionId;if((C?0:ga(y)?.messages.length??0)>=44){w.sendChatTurnResult(h.requestId,{ok:!1,sessionId:y,reply:"",error:"this chat has hit its length limit - every turn re-reads the whole conversation, so long chats get slow and expensive. Start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}let V=h.files.length?Cl(m.repoPath,h.requestId,h.files):null,K="```",re=C?`You are the project assistant for "${m.project.name}" - this working directory is its repository, and you have read-only access.
726
+ `);let t=s=>new Promise((i,o)=>{(0,uh.execFile)("git",["-C",r.repoPath,...s],{timeout:12e4},(a,c,u)=>a?o(new Error(u||a.message)):i())}),n="";try{await t(["add",e.rel]),await t(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",r.commitMessage]);try{await t(["push"]),n="committed and pushed to the repo"}catch(s){n="committed locally, but push failed: "+(s instanceof Error?s.message.slice(0,200):"unknown")+" - push it from the server when convenient"}}catch(s){n="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:n}}var Xr=E(require("node:fs"),1),Ba=E(require("node:path"),1),Li=require("node:child_process"),hh=require("node:util");Or();_t();var fh=E(be(),1),dh=(0,hh.promisify)(Li.execFile);function Tv(r){try{return new URL(r).host}catch{return r}}function xv(r){try{return(0,Li.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function Ui(r,e,t=[],n){let s=[],i=r.repos[e.repoName]?.jira,o=i??r.jira,a=(e.jiraSiteUrl??"").trim().toLowerCase();if(!o)s.push({name:"jira-credentials",ok:!1,detail:"no Jira credentials configured on this runner"});else if(!a)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=Tv(o.baseUrl),v=i?"this repo's own Jira credential":"the runner-wide Jira credential";if(p!==a)s.push({name:"jira-site",ok:!1,detail:`this project is on ${a}, but ${v} 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 ${a}: the base URL (https://${a}), 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 S=new Ee(o);try{let T=await S.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${T.displayName} on ${p} (${v})`});try{await S.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}: ${vs(x)}`})}}catch(T){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${vs(T)}`})}}}let c=r.repos[e.repoName];if(c&&Xr.default.existsSync(c.path)){let p=Ba.default.join(c.path,"CLAUDE.md"),v=Xr.default.existsSync(p)&&Xr.default.readFileSync(p,"utf8").trim().length>0;s.push({name:"memory-file",kind:"content",ok:v,detail:v?"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.",...v?{}:{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 S=vi(c.path);s.push({name:"deploy-doc",kind:"content",ok:S!==null,detail:S?`${S.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.",...S?{}:{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(!Xr.default.existsSync(c.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${c.path}`});else{let p=Xr.default.existsSync(Ba.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",...n??[]])];for(let p of u){let v=We(r,p),S=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:T}=await dh(v,["--version"],{timeout:15e3});s.push({name:S,ok:!0,detail:T.trim().slice(0,100)})}catch(T){s.push({name:S,ok:!1,detail:`cannot run "${v}" for agent "${p}": ${vs(T)}`,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 dh("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: ${vs(p)}`})}let f=Ae(r,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 ${fh.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(()=>(Ye(),zr)),v=new p(f),S=await v.whoami(),T=c&&Xr.default.existsSync(c.path)?xv(c.path):null,x=T?Ve(T):null;if(!x)s.push({name:"github-token",ok:!0,detail:`authenticated as ${S} - repo access not checked (no local checkout yet)`});else{let P=await v.repoAccess(x.owner,x.repo);s.push({name:"github-token",ok:P.ok&&P.canPush,detail:P.ok?P.canPush?`${S} has push access to ${x.owner}/${x.repo}`:`${S} can read ${x.owner}/${x.repo} but NOT push to it - implement rules will fail at the push`:`${S} cannot see ${x.owner}/${x.repo}: ${P.error}`,...P.ok&&P.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:vs(p)})}if(t.length){r.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 t){let v=dr(r,e.repoName,p.name),S=p.requiredSecrets.filter(T=>!v[T]&&!process.env[T]);s.push({name:`env:${p.name}`,ok:S.length===0,detail:S.length?`missing secret(s): ${S.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${S[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function vs(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var ye=new ul;ye.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(Gs);function wh(r){g.info(`Create the token at ${Vt.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Vt.GITHUB_TOKEN_PERMISSIONS.steps)g.info(` - ${e}`);g.info(Vt.GITHUB_TOKEN_PERMISSIONS.note),g.info(`Then paste it below for ${r}.`)}ye.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",Ka.default.hostname()).option("--jira-url <url>","Jira base URL, e.g. https://yourorg.atlassian.net").option("--jira-email <email>","Jira account email").option("--jira-token <token>","Jira API token (stored locally only)").action(async r=>{let e=en.default.createInterface({input:process.stdin,output:process.stdout}),t=async(n,s,i=!1)=>{if(s)return s;let o=await e.question(`${n}: `);if(!o.trim())throw new Error(`${n} is required`);return o.trim()};try{let n=await t("Control plane URL",r.cpUrl),s=await t("Enrolment token (from the web UI)",r.enrollToken),i=await t("Jira base URL (https://yourorg.atlassian.net)",r.jiraUrl),o=await t("Jira account email",r.jiraEmail),a=await t("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",r.jiraToken,!0),c=lo.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),u=await new Ee(c.jira).myself();g.info(`Jira credential OK - authenticated as ${u.displayName}`),c=await nc(c,s),g.info(`Enrolled as runner "${c.runnerName}" (${c.runnerId})`),g.info(`Credentials saved to ${Nt()} (mode 600, this machine only)`),g.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var Za=ye.command("repo").description("Map control-plane repo names to local checkouts");Za.command("add <repoName> <localPath>").description("Map a repo name (as configured in the web UI) to a local checkout path").action(async(r,e)=>{let t=se();t.repos[r]={path:e},he(t),g.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(_t(),dc));g.info(` origin remote: ${await n(e)} - make sure this is the repo you meant`)}catch{g.warn(` could not read an origin remote at ${e} - is it a git checkout?`)}});Za.command("list").description("Show configured repo mappings").action(()=>{let r=se(),e=Object.entries(r.repos);if(!e.length)return g.info("no repos mapped yet");for(let[t,n]of e)g.info(`${t} -> ${n.path}`)});var _h=ye.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");_h.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 r=>{if(!/^[a-zA-Z0-9._-]+$/.test(r))throw new Error("profile name: letters, digits, dots, dashes and underscores only");let e=se(),t=e.claudeProfiles[r]?.configDir??`${Nt().replace(/runner\.json$/,"")}claude-profiles/${r}`;et.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},he(e),g.info(`profile "${r}" -> ${t}`),g.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),g.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let n=(0,At.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),g.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),qn()});_h.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=se(),e=Object.entries(r.claudeProfiles);if(g.info("default: this OS user's own Claude login (no profile)"),!e.length)return g.info("no named profiles yet - allwright claude login <name>");for(let[t,n]of e){let s=et.default.existsSync(n.configDir)&&et.default.readdirSync(n.configDir).length>0;g.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});Za.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(r=>{let e=se();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}`)}let t=e.repos[r].path;delete e.repos[r];let n=Object.keys(e.environments).filter(i=>i.startsWith(`${r}:`));for(let i of n)delete e.environments[i];let s=e.auditSchedules.length;e.auditSchedules=e.auditSchedules.filter(i=>i.repoName!==r),he(e),g.info(`Removed "${r}" (was ${t})`),n.length&&g.info(`Also removed ${n.length} environment secret set(s): ${n.join(", ")}`),e.auditSchedules.length!==s&&g.info("Also removed its audit schedule(s)"),g.info("The checkout on disk was NOT touched - remove it yourself if you want it gone."),g.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var Ga=ye.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Ga.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(r=>{if(r.print){g.info(`
727
+ `+qo(Uo()));return}vc(g)});Ga.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>bc(g));Ga.command("status").description("systemctl status for the runner service").action(()=>{(0,At.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});ye.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()=>{g.info("Updating: npm install -g allwright@latest");let r=(0,At.spawn)("npm",["install","-g","allwright@latest"],{stdio:"inherit"});await new Promise((e,t)=>{r.on("exit",n=>n===0?e():t(new Error(`npm exited with code ${n}`))),r.on("error",t)}),g.info("Updated. Restart the runner service to load the new version (check active runs first).")});var ws=ye.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");ws.command("set <repoName>").description("Store Jira credentials for ONE repo's project (e.g. a project on a different *.atlassian.net site than the runner's main credential). Prompts on stdin; stored locally only, like every other credential.").action(async r=>{let e=se();if(!e.repos[r]){let a=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${a}. Run \`allwright repo add\` first.`)}let t=sd(r),n=(t?.jiraSiteUrl??"").trim(),s=n?`https://${n}`:"",i=e.jira?.email??"";if(s&&i&&e.jira?.apiToken){let a={baseUrl:s,email:i,apiToken:e.jira.apiToken};try{let c=await new Ee(a).myself();if(e.repos[r].jira=a,he(e),g.info(`The token already on this server works on ${n} - authenticated as ${c.displayName}. Saved it for "${r}"; nothing to type.`),t?.jiraProjectKey)try{await new Ee(a).search(`project = "${t.jiraProjectKey}"`,1),g.info(`Project ${t.jiraProjectKey} is readable with it.`)}catch{g.warn(`Authenticated, but project ${t.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.`)}qn();return}catch{g.info(`The token already on this server does not work on ${n} - asking for one that does.`)}}let o=en.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 v={baseUrl:c,email:f,apiToken:p},S=await new Ee(v).myself();g.info(`Jira credential OK - authenticated as ${S.displayName} on ${c}`),e.repos[r].jira=v,he(e),g.info(`Saved: repo "${r}" now polls ${c} (other repos keep the runner-wide credential)`),qn()}finally{o.close()}});ws.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=se();g.info(`runner-wide: ${r.jira?`${r.jira.baseUrl} (${r.jira.email})`:"(not configured)"}`);for(let[e,t]of Object.entries(r.repos))g.info(`${e} -> ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(runner-wide credential)"}`)});ws.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 r=>{let e=se(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=en.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`Their ATLASSIAN account email [${t}]: `)).trim()||t,i=(await n.question("Their Jira API token (they create it at id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!i)throw new Error("API token is required");let o=[e.jira,...Object.values(e.repos).map(u=>u.jira)].filter(u=>!!u),a=new Set,c=!1;for(let u of o)if(!a.has(u.baseUrl)){a.add(u.baseUrl);try{let f=await new Ee({baseUrl:u.baseUrl,email:s,apiToken:i}).myself();g.info(`${u.baseUrl}: OK - authenticated as ${f.displayName}`),c=!0}catch{g.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[t]={email:s,apiToken:i},he(e),g.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});ws.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=se(),e=Object.entries(r.jiraUsers);if(!e.length)return g.info("none yet - everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[t,n]of e)g.info(`${t} -> posts to Jira as ${n.email}`)});ws.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=se(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],he(e),g.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var Fn=ye.command("github").description("GitHub credential for implement-mode rules");Fn.command("set-token").description("Store a GitHub token for opening pull requests (implement rules). Stored locally only, like your Jira token. Recommended: a fine-grained PAT scoped to the repo with contents:write + pull_requests:write.").option("--token <token>","GitHub token (omit to be prompted)").action(async r=>{let e=en.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??void wh("every repo on this server")??(await e.question("GitHub token: ")).trim();if(!t)throw new Error("token is required");let{GitHubClient:n}=await Promise.resolve().then(()=>(Ye(),zr)),s=await new n(t).whoami(),i=se();i.github={token:t,login:s},he(i),g.info(`GitHub token OK - authenticated as ${s}`),g.info(`Saved to ${Nt()} (mode 600, this machine only)`)}finally{e.close()}});Fn.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 r=>{let e=se();if(!e.repos[r]){let i=Object.keys(e.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}. Run \`allwright repo add\` first.`)}let t=e.github?.token,n=e.repos[r]?.path;if(t&&n&&et.default.existsSync(n))try{let i=(0,At.execFileSync)("git",["-C",n,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim(),o=Ve(i);if(o){let{GitHubClient:a}=await Promise.resolve().then(()=>(Ye(),zr)),c=new a(t),u=await c.repoAccess(o.owner,o.repo);if(u.ok&&u.canPush){let f=await c.whoami();g.info(`The shared token on this server already has push access to ${o.owner}/${o.repo} as ${f} - "${r}" needs nothing of its own. Storing a second token here would only give you two to rotate.`),g.info("Want a separately revocable one anyway? Paste it at the prompt below; press Enter to leave things as they are.")}}}catch{}let s=en.default.createInterface({input:process.stdin,output:process.stdout});try{wh(`"${r}"`);let i=(await s.question(`GitHub token for "${r}": `)).trim();if(!i&&t){g.info(`Nothing changed - "${r}" keeps using the shared token.`);return}if(!i)throw new Error("token is required");let{GitHubClient:o}=await Promise.resolve().then(()=>(Ye(),zr)),a=await new o(i).whoami();e.repos[r].github={token:i,login:a},he(e),g.info(`GitHub token OK - authenticated as ${a}`),g.info(`Saved: repo "${r}" now uses its own token (other repos keep the runner-wide one)`)}finally{s.close()}});Fn.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 r=>{let e=se(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=en.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`GitHub token for ${t}: `)).trim();if(!s)throw new Error("token is required");let{GitHubClient:i}=await Promise.resolve().then(()=>(Ye(),zr)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},he(e),g.info(`GitHub token OK - authenticated as ${o}`),g.info(`Saved. Implement runs triggered by ${t} now open PRs as ${o}. No restart needed.`)}finally{n.close()}});Fn.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=se(),e=Object.entries(r.githubUsers);if(!e.length)return g.info("no per-user GitHub tokens - everyone's PRs use the repo/runner-wide token");for(let[t]of e)g.info(`${t} -> own GitHub token stored`)});Fn.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=se(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],he(e),g.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});Fn.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=se();g.info(`runner-wide: ${r.github?.token?"token set":"(not configured)"}`);for(let[t,n]of Object.entries(r.repos))g.info(`${t} -> ${n.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(r.githubUsers);g.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var Ha=ye.command("audit").description("Recurring specialist audits on this runner");Ha.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((r,e,t)=>{let n=se();if(!n.repos[r]){let i=Object.keys(n.repos).join(", ")||"(none)";throw new Error(`unknown repo "${r}" - mapped repos: ${i}`)}if(e!=="security"&&e!=="testing")throw new Error('role must be "security" or "testing"');let s=parseInt(t,10);if(!Number.isInteger(s)||s<6||s>720)throw new Error("intervalHours must be 6-720");n.auditSchedules=[...n.auditSchedules.filter(i=>!(i.repoName===r&&i.role===e)),{repoName:r,role:e,intervalHours:s}],he(n),g.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});Ha.command("schedules").description("List scheduled audits").action(()=>{let r=se();if(!r.auditSchedules.length)return g.info("no scheduled audits - allwright audit schedule <repo> <role> <hours>");for(let e of r.auditSchedules)g.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});Ha.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=se(),n=t.auditSchedules.length;if(t.auditSchedules=t.auditSchedules.filter(s=>!(s.repoName===r&&s.role===e)),t.auditSchedules.length===n)throw new Error("no such schedule");he(t),g.info("Removed. Restart the runner to apply.")});var Va=ye.command("deploy").description("Deployment settings for this machine");Va.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 r=se();r.deploy={enabled:!0},he(r),g.info("deployments ENABLED on this runner"),g.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),qn()});Va.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=se();r.deploy={enabled:!1},he(r),g.info("deployments DISABLED on this runner"),qn()});Va.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=se();g.info(`deployments: ${r.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e){let s=Object.keys(n.secrets);g.info(`${t}: ${s.length?s.join(", "):"(no secrets)"}`)}});var Wa=ye.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");Wa.command("set <repoName> <envName> <assignments...>").description('Store secrets for one environment, e.g. env set acme/api production "SSH_HOST=1.2.3.4" "SSH_USER=deploy". Your deploy steps reference these as $SSH_HOST. The control plane only ever learns the NAMES.').action((r,e,t)=>{let n=se(),s=Ps(r,e),i=n.environments[s]??{secrets:{}},o=[];for(let a of t){let c=a.indexOf("=");if(c<=0)throw new Error(`expected KEY=VALUE, got "${a}"`);let u=a.slice(0,c).trim();i.secrets[u]=a.slice(c+1),o.push(u)}n.environments[s]=i,he(n),g.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),g.info(`Saved to ${Nt()} (mode 600, this machine only)`),qn()});Wa.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=se(),s=Ps(r,e),i=n.environments[s];if(!i)return g.info(`nothing stored for ${s}`);for(let o of t)delete i.secrets[o];n.environments[s]=i,he(n),g.info(`removed ${t.join(", ")} from ${s}`)});Wa.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=se(),e=Object.entries(r.environments);if(!e.length)return g.info("no environment secrets stored");for(let[t,n]of e)g.info(`${t}: ${Object.keys(n.secrets).join(", ")||"(none)"}`)});ye.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=Sl(r);g.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),g.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private - anyone holding it can act as this runner."),g.info(`Restore on any machine with: allwright import ${Un.default.basename(e.file)}`)}catch(e){g.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});ye.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=hr();if(e&&fr(e)){g.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 t=Tl(r);g.info(`Restored ${t.restored.length} entries into ${te()}`),t.previousDir&&g.info(`Previous config kept at ${t.previousDir}`),g.info("Start the runner and it will reconnect with the restored identity.")}catch(t){g.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});ye.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=se(),e=Object.keys(r.repos);if(!r.jira){g.error("no Jira credentials configured - run `allwright init`"),process.exitCode=1;return}let t=e.length?e.map(s=>({jiraProjectKey:"*",repoName:s})):[{jiraProjectKey:"*",repoName:"(none mapped)"}],n=!0;for(let s of t){let i=await Ui(r,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let a=o.ok?"PASS":"FAIL";(o.ok?g.info:g.error)(`[${a}] ${o.name}: ${o.detail}`),n&&=o.ok}}n||(process.exitCode=1)});function qn(){let r=hr();if(r&&fr(r)&&process.platform!=="win32")try{process.kill(r,"SIGHUP"),g.info("running runner reloaded its config live - no restart needed");return}catch{}g.info("No background runner found to reload. Under systemd: sudo systemctl kill -s HUP allwright - otherwise it applies on the next allwright start.")}function Rv(r){if(!r.runnerToken)throw new Error("runner not enrolled - run `allwright init`");if(!r.jira)throw new Error("no Jira credentials - run `allwright init`");let e=$l();e.ok||(g.warn(`another runner is already running on this machine (pid ${e.pid}). Two runner processes with one identity kick each other off the control plane every second. Stop the other one first: \`allwright stop\` (background runner) or \`sudo systemctl stop allwright\` (service).`),process.exit(1)),process.on("exit",ho);let t=new Ee(r.jira),n=new Map,s=h=>{let m=r.repos[h]?.jira;if(!m)return t;let y=n.get(h);return y||(y=new Ee(m),n.set(h,y)),y},i=new Map,o=(h,m)=>{let y=pc(pe()??r,h,m);switch(y.kind){case"legacy":return{jira:s(h),authored:!1};case"self":return{jira:s(h),authored:!0};case"missing":return{error:y.error};case"user":{let C=`${y.creds.baseUrl}:${y.creds.email}:${y.creds.apiToken.slice(-6)}`,D=i.get(C);return D||(D=new Ee(y.creds),i.set(C,D)),{jira:D,authored:!0}}}},a=new URL("/api/runner/ws",r.controlPlaneUrl);a.protocol=a.protocol==="https:"?"wss:":"ws:";let c=[],u=[],f=[],p,v=null,S={cfg:r,jiraFor:s,transport:null},T=new Set,x=h=>{let m=c.find(C=>C.id===h),y=m&&r.repos[m.repoName];return m&&y?{project:m,repoPath:y.path}:null},P={cfg:r,jiraFor:s,get transport(){return S.transport},lookup:(h,m)=>{let y=x(h),C=f.find(D=>D.projectId===h&&D.name===m);return y&&C?{...y,environment:C}:null}},k=new zi(a.toString(),r.runnerToken,{runnerVersion:Gs},{onConfig:h=>{c=h.projects,nd(h.projects),u=h.rules,f=h.environments,p.setConfig(h.projects,h.rules,h.pollingPaused,h.environments)},onDeployFix:async h=>{let m=x(h.projectId);if(!m){k.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let y=Je(r,m.project,"assist");if("error"in y){k.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:y.error});return}g.info(`investigating failed deploy of "${h.environmentName}" (step: ${h.failedStep||"?"})`);let C=await Lu({agent:y,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,steps:h.steps,failedStep:h.failedStep,errorText:h.errorText,cfg:r});k.sendDeploySuggestResult(h.requestId,C)},onProjectTest:async h=>{let m=c.find(C=>C.id===h.projectId);if(!m){k.sendProjectTestResult(h.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}g.info(`running connection test for project "${m.name}"`);let y=await Ui(pe()??r,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));k.sendProjectTestResult(h.requestId,y.every(C=>C.ok),y)},onRuleDiagnose:async h=>{let m=u.find(J=>J.id===h.ruleId),y=m&&c.find(J=>J.id===m.projectId);if(!m||!y){k.sendRuleDiagnoseResult(h.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}g.info(`diagnosing rule "${m.name}"`);let C=await Ui(pe()??r,y,m.action.type==="deploy"?f.filter(J=>J.projectId===y.id):[]),D=m.action.type==="implement"?C:C.filter(J=>J.name!=="github-token"),{matchedCount:W,excludedCount:Z,excludedSample:re}=await p.diagnoseRule(m,y);k.sendRuleDiagnoseResult(h.requestId,{checks:D,matchedCount:W,excludedCount:Z,excludedSample:re})},onCancel:h=>{du(h)?g.info(`run ${h} stopped from the dashboard`):g.warn(`cancel requested for run ${h}, but nothing is running under that id here - it likely finished already`)},onApproved:(h,m)=>{if(pa(h)){ju(P,h).catch(y=>g.error(`deploy approval crashed for ${h}: ${y instanceof Error?y.stack:y}`));return}ls(S,h,m).catch(y=>g.error(`approval handling crashed for ${h}: ${y instanceof Error?y.stack:y}`))},onRetryPush:h=>{let m=li(h),y=()=>_u(S,h).catch(C=>g.error(`retry push crashed for ${h}: ${C instanceof Error?C.stack:C}`));m?p.runOnRepoQueue(m.baseRepoPath,y):y()},onRejected:h=>{if(pa(h)){Ou(P,h).catch(m=>g.error(`deploy rejection crashed for ${h}: ${m instanceof Error?m.stack:m}`));return}wu(S,h).catch(m=>g.error(`rejection handling crashed for ${h}: ${m instanceof Error?m.stack:m}`))},onDeployStart:h=>{let m=`${h.runId}#${h.attempt}`;if(T.has(m))return;T.add(m);let y=x(h.projectId);if(!y){let C="this runner has no local checkout mapped for that project - run: allwright repo add <repoName> /path/to/checkout";g.error(`deploy ${h.runId}: ${C}`),k.send({type:"run.status",runId:h.runId,status:"failed",error:C});return}g.info(`deploy ${h.runId} requested from the dashboard: ${h.issueKey} \u2192 ${h.environment.name}`),p.runOnEnvironmentQueue(h.environment.id,()=>yi({runId:h.runId,project:y.project,environment:h.environment,issueKey:h.issueKey,issueSummary:h.issueSummary,repoPath:y.repoPath,cfg:r,jira:s(y.project.repoName),transport:k,requestedBy:h.requestedBy}).catch(C=>g.error(`deploy crashed for ${h.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async h=>{let m=x(h.projectId);if(!m){k.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let y=Je(r,m.project,"assist");if("error"in y){k.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:y.error});return}g.info(`asking ${y.adapter.displayName} for "${h.environmentName}" deploy steps in ${m.repoPath}`);let C=await Uu({agent:y,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,notes:h.notes,timeoutSeconds:h.timeoutSeconds,cfg:r});k.sendDeploySuggestResult(h.requestId,C)},onEnvPreflight:async h=>{let m=x(h.projectId);if(!m){k.sendEnvPreflightResult(h.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let y=await Du({repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,steps:h.steps,requiredSecrets:h.requiredSecrets,workdir:h.workdir,branch:h.branch,publicUrl:h.publicUrl,cfg:r});k.sendEnvPreflightResult(h.requestId,y)},onChatTurn:async h=>{let m=x(h.projectId);if(!m){k.sendChatTurnResult(h.requestId,{ok:!1,sessionId:h.sessionId??"",reply:"",error:"this runner has no local checkout mapped for that project"});return}let y=h.sessionId||(0,Fi.randomUUID)(),C=!h.sessionId;if((C?0:ya(y)?.messages.length??0)>=44){k.sendChatTurnResult(h.requestId,{ok:!1,sessionId:y,reply:"",error:"this chat has hit its length limit - every turn re-reads the whole conversation, so long chats get slow and expensive. Start a new chat (it keeps the repo knowledge; only the conversation resets)."});return}let W=h.files.length?Il(m.repoPath,h.requestId,h.files):null,Z="```",re=C?`You are the project assistant for "${m.project.name}" - this working directory is its repository, and you have read-only access.
728
728
 
729
729
  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.
730
730
  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.
731
731
 
732
732
  ONLY when the user explicitly asks for a ticket, propose it by ending your reply with EXACTLY one fenced block in this shape:
733
- ${K}ticket
733
+ ${Z}ticket
734
734
  {"summary": "\u2026", "description": "\u2026"}
735
- ${K}
735
+ ${Z}
736
736
  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.
737
737
  Write the description in plain human language, structured with these Markdown section headings in this order:
738
738
  Story: - one or two sentences: who needs this and why.
@@ -741,16 +741,16 @@ Expected Flow: - the flow once this ticket is done, as numbered steps.
741
741
  Current Flow: - how it behaves today; include ONLY when current behavior exists.
742
742
  Acceptance Criteria: - testable bullet points a reviewer can check off one by one.
743
743
  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.
744
- 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 ${K}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks - a nested ${K} would end the outer block early and corrupt the draft.
744
+ 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 ${Z}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks - a nested ${Z} would end the outer block early and corrupt the draft.
745
745
  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:
746
746
  {"epic": {"summary": "\u2026", "description": "\u2026"}, "tickets": [{"summary": "\u2026", "description": "\u2026"}, \u2026]}
747
747
  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.
748
748
 
749
- ${h.userName||"The user"} says: ${h.message}`+(V?.section??""):`${h.userName||"The user"} says: ${h.message}`+(V?.section??""),W=0,M;try{let ne=Je(r,m.project,"chat");if("error"in ne){w.sendChatTurnResult(h.requestId,{ok:!1,sessionId:y,reply:"",error:ne.error});return}M=await ne.adapter.run({repoPath:m.repoPath,prompt:re,timeoutSeconds:180,bin:ne.bin,mode:"read_only",maxTurns:25,model:h.model||ne.adapter.fastModel,sessionId:y,resume:!C,onLog:(oe,ce)=>{oe==="agent"&&w.send({type:"chat.stream",requestId:h.requestId,seq:W++,text:ce.slice(0,8e3)})},onUsage:oe=>{w.send({type:"chat.usage",requestId:h.requestId,inputTokens:Math.round(oe.inputTokens),outputTokens:Math.round(oe.outputTokens),cacheReadTokens:oe.cacheReadTokens===void 0?void 0:Math.round(oe.cacheReadTokens),turns:oe.turns})}})}finally{V&&et.default.rmSync(V.dir,{recursive:!0,force:!0})}M.ok&&Vc(h.projectId,y,h.message,M.resultText),w.sendChatTurnResult(h.requestId,{ok:M.ok,sessionId:y,reply:M.resultText,error:M.ok?void 0:M.error??"the agent produced no reply",inputTokens:M.inputTokens,outputTokens:M.outputTokens,cacheReadTokens:M.cacheReadTokens,costUsd:M.costUsd,model:M.model??""})},onChatList:h=>{w.sendChatListResult(h.requestId,Wc(h.projectId))},onRepoDocs:h=>{let m=x(h.projectId);if(!m){w.sendRepoDocsResult(h.requestId,{ok:!1,docs:[],error:"this runner has no local checkout mapped for that project"});return}w.sendRepoDocsResult(h.requestId,{ok:!0,docs:Xc(m.repoPath)})},onRepoDocRead:h=>{let m=x(h.projectId);if(!m){w.sendRepoDocReadResult(h.requestId,{ok:!1,path:h.path,content:"",truncated:!1,error:"this runner has no local checkout mapped for that project"});return}let y=Qc(m.repoPath,h.path);w.sendRepoDocReadResult(h.requestId,{ok:y.ok,path:y.ok?y.path:h.path,content:y.ok?y.content:"",truncated:y.ok?y.truncated:!1,error:y.ok?void 0:y.error})},onChatLoad:h=>{let m=ga(h.sessionId);w.sendChatLoadResult(h.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 h=>{let m=x(h.projectId);if(!m){w.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C;try{C=await y.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await y.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let L=await y.boardColumns(m.project.jiraProjectKey),V;if(L){V=L.map(W=>({name:W.name,issues:[]}));let re=new Map;for(let W of C){let M=L.findIndex(oe=>oe.statusIds.includes(W.statusId)),ne={key:W.key,summary:W.summary,labels:W.labels};if(M>=0)V[M].issues.push(ne);else{let oe=re.get(W.status)??[];oe.push(ne),re.set(W.status,oe)}}for(let[W,M]of re)V.push({name:W,issues:M})}else{let re=ce=>ce.trim().toLowerCase(),W=new Map,M=new Map;for(let ce of C){let fe=re(ce.status);W.has(fe)||W.set(fe,ce.status.trim());let Wa=M.get(fe)??[];Wa.push({key:ce.key,summary:ce.summary,labels:ce.labels}),M.set(fe,Wa)}let ne=[];try{ne=await y.projectStatuses(m.project.jiraProjectKey)}catch{}let oe=[];for(let ce of ne){let fe=re(ce);!oe.includes(fe)&&M.has(fe)&&oe.push(fe)}for(let ce of M.keys())oe.includes(ce)||oe.push(ce);V=oe.map(ce=>({name:W.get(ce)??ce,issues:M.get(ce)??[]}))}let K=r.repos[m.project.repoName]?.jira??r.jira;w.sendBoardFetchResult(h.requestId,{ok:!0,browseBaseUrl:(K?.baseUrl??"").replace(/\/+$/,""),columns:V})}catch(y){w.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:y instanceof Error?y.message:String(y)})}},onBoardTrigger:async h=>{let m=x(h.projectId);if(!m){w.sendBoardTriggerResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C=h.comment.trim()?o(m.project.repoName,h.requestedByEmail):{jira:y,authored:!1};if(C.error!==void 0){w.sendBoardTriggerResult(h.requestId,{ok:!1,error:C.error});return}if(h.reimplement){let L=await y.getIssue(h.issueKey),V=L.comments.filter(W=>ot(W.body)),K=V.length?Math.max(...V.map(W=>new Date(W.created).getTime())):0;if(!L.comments.some(W=>!ot(W.body)&&new Date(W.created).getTime()>K)){w.sendBoardTriggerResult(h.requestId,{ok:!1,error:`${h.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 y.editLabels(h.issueKey,{remove:["agent-implemented"]})}h.removeLabel.trim()&&await y.editLabels(h.issueKey,{remove:[h.removeLabel.trim()]}),h.comment.trim()&&await C.jira.addTriggerComment(h.issueKey,`${h.comment.trim()}`+(!C.authored&&h.requestedBy?`
749
+ ${h.userName||"The user"} says: ${h.message}`+(W?.section??""):`${h.userName||"The user"} says: ${h.message}`+(W?.section??""),J=0,M;try{let ne=Je(r,m.project,"chat");if("error"in ne){k.sendChatTurnResult(h.requestId,{ok:!1,sessionId:y,reply:"",error:ne.error});return}M=await ne.adapter.run({repoPath:m.repoPath,prompt:re,timeoutSeconds:180,bin:ne.bin,mode:"read_only",maxTurns:25,model:h.model||ne.adapter.fastModel,sessionId:y,resume:!C,onLog:(oe,ue)=>{oe==="agent"&&k.send({type:"chat.stream",requestId:h.requestId,seq:J++,text:ue.slice(0,8e3)})},onUsage:oe=>{k.send({type:"chat.usage",requestId:h.requestId,inputTokens:Math.round(oe.inputTokens),outputTokens:Math.round(oe.outputTokens),cacheReadTokens:oe.cacheReadTokens===void 0?void 0:Math.round(oe.cacheReadTokens),turns:oe.turns})}})}finally{W&&et.default.rmSync(W.dir,{recursive:!0,force:!0})}M.ok&&Wu(h.projectId,y,h.message,M.resultText),k.sendChatTurnResult(h.requestId,{ok:M.ok,sessionId:y,reply:M.resultText,error:M.ok?void 0:M.error??"the agent produced no reply",inputTokens:M.inputTokens,outputTokens:M.outputTokens,cacheReadTokens:M.cacheReadTokens,costUsd:M.costUsd,model:M.model??""})},onChatList:h=>{k.sendChatListResult(h.requestId,Ju(h.projectId))},onRepoDocs:h=>{let m=x(h.projectId);if(!m){k.sendRepoDocsResult(h.requestId,{ok:!1,docs:[],error:"this runner has no local checkout mapped for that project"});return}k.sendRepoDocsResult(h.requestId,{ok:!0,docs:Qu(m.repoPath)})},onRepoDocRead:h=>{let m=x(h.projectId);if(!m){k.sendRepoDocReadResult(h.requestId,{ok:!1,path:h.path,content:"",truncated:!1,error:"this runner has no local checkout mapped for that project"});return}let y=ed(m.repoPath,h.path);k.sendRepoDocReadResult(h.requestId,{ok:y.ok,path:y.ok?y.path:h.path,content:y.ok?y.content:"",truncated:y.ok?y.truncated:!1,error:y.ok?void 0:y.error})},onChatLoad:h=>{let m=ya(h.sessionId);k.sendChatLoadResult(h.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 h=>{let m=x(h.projectId);if(!m){k.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C;try{C=await y.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await y.searchBoard(`project = "${m.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let D=await y.boardColumns(m.project.jiraProjectKey),W;if(D){W=D.map(J=>({name:J.name,issues:[]}));let re=new Map;for(let J of C){let M=D.findIndex(oe=>oe.statusIds.includes(J.statusId)),ne={key:J.key,summary:J.summary,labels:J.labels};if(M>=0)W[M].issues.push(ne);else{let oe=re.get(J.status)??[];oe.push(ne),re.set(J.status,oe)}}for(let[J,M]of re)W.push({name:J,issues:M})}else{let re=ue=>ue.trim().toLowerCase(),J=new Map,M=new Map;for(let ue of C){let fe=re(ue.status);J.has(fe)||J.set(fe,ue.status.trim());let Ja=M.get(fe)??[];Ja.push({key:ue.key,summary:ue.summary,labels:ue.labels}),M.set(fe,Ja)}let ne=[];try{ne=await y.projectStatuses(m.project.jiraProjectKey)}catch{}let oe=[];for(let ue of ne){let fe=re(ue);!oe.includes(fe)&&M.has(fe)&&oe.push(fe)}for(let ue of M.keys())oe.includes(ue)||oe.push(ue);W=oe.map(ue=>({name:J.get(ue)??ue,issues:M.get(ue)??[]}))}let Z=r.repos[m.project.repoName]?.jira??r.jira;k.sendBoardFetchResult(h.requestId,{ok:!0,browseBaseUrl:(Z?.baseUrl??"").replace(/\/+$/,""),columns:W})}catch(y){k.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:y instanceof Error?y.message:String(y)})}},onBoardTrigger:async h=>{let m=x(h.projectId);if(!m){k.sendBoardTriggerResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C=h.comment.trim()?o(m.project.repoName,h.requestedByEmail):{jira:y,authored:!1};if(C.error!==void 0){k.sendBoardTriggerResult(h.requestId,{ok:!1,error:C.error});return}if(h.reimplement){let D=await y.getIssue(h.issueKey),W=D.comments.filter(J=>ot(J.body)),Z=W.length?Math.max(...W.map(J=>new Date(J.created).getTime())):0;if(!D.comments.some(J=>!ot(J.body)&&new Date(J.created).getTime()>Z)){k.sendBoardTriggerResult(h.requestId,{ok:!1,error:`${h.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 y.editLabels(h.issueKey,{remove:["agent-implemented"]})}h.removeLabel.trim()&&await y.editLabels(h.issueKey,{remove:[h.removeLabel.trim()]}),h.comment.trim()&&await C.jira.addTriggerComment(h.issueKey,`${h.comment.trim()}`+(!C.authored&&h.requestedBy?`
750
750
 
751
- _(requested by ${h.requestedBy} via Allwright)_`:"")),g.info(`Board action on ${h.issueKey}`+(h.comment?` comment "${h.comment.trim()}"`:"")+(h.removeLabel?` -label ${h.removeLabel}`:"")+(h.requestedBy?` by ${h.requestedBy}`:"")),w.sendBoardTriggerResult(h.requestId,{ok:!0})}catch(y){w.sendBoardTriggerResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onChatCreateTicket:async h=>{let m=x(h.projectId);if(!m){w.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:"this runner has no local checkout mapped for that project"});return}try{let y=o(m.project.repoName,h.requestedByEmail);if(y.error!==void 0){w.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:y.error});return}let C=`
751
+ _(requested by ${h.requestedBy} via Allwright)_`:"")),g.info(`Board action on ${h.issueKey}`+(h.comment?` comment "${h.comment.trim()}"`:"")+(h.removeLabel?` -label ${h.removeLabel}`:"")+(h.requestedBy?` by ${h.requestedBy}`:"")),k.sendBoardTriggerResult(h.requestId,{ok:!0})}catch(y){k.sendBoardTriggerResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onChatCreateTicket:async h=>{let m=x(h.projectId);if(!m){k.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:"this runner has no local checkout mapped for that project"});return}try{let y=o(m.project.repoName,h.requestedByEmail);if(y.error!==void 0){k.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:y.error});return}let C=`
752
752
 
753
753
  ---
754
- _Created via Allwright Compose`+(!y.authored&&h.requestedBy?` by ${h.requestedBy}`:"")+", drafted with the project agent._",{key:L}=await y.jira.createIssue(m.project.jiraProjectKey,h.summary,(h.description||"(no description)")+C,h.asEpic?"Epic":"Task");h.files.length&&await y.jira.addAttachments(L,h.files.map(K=>({name:K.name,content:Buffer.from(K.contentBase64,"base64")}))).then(()=>g.info(`Compose attached ${h.files.length} file(s) to ${L}`)).catch(K=>g.warn(`Compose could not attach files to ${L}: ${K instanceof Error?K.message:K}`));let V=[];if(h.asEpic){for(let K of h.children){let re=await y.jira.createIssue(m.project.jiraProjectKey,K.summary,K.description||"(no description)","Task",L);V.push(re.key)}g.info(`Compose created epic ${L} with ${V.length} child ticket(s)`),w.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:L,childKeys:V});return}h.triggerComment.trim()&&await y.jira.addTriggerComment(L,`${h.triggerComment.trim()}`+(!y.authored&&h.requestedBy?`
754
+ _Created via Allwright Compose`+(!y.authored&&h.requestedBy?` by ${h.requestedBy}`:"")+", drafted with the project agent._",{key:D}=await y.jira.createIssue(m.project.jiraProjectKey,h.summary,(h.description||"(no description)")+C,h.asEpic?"Epic":"Task");h.files.length&&await y.jira.addAttachments(D,h.files.map(Z=>({name:Z.name,content:Buffer.from(Z.contentBase64,"base64")}))).then(()=>g.info(`Compose attached ${h.files.length} file(s) to ${D}`)).catch(Z=>g.warn(`Compose could not attach files to ${D}: ${Z instanceof Error?Z.message:Z}`));let W=[];if(h.asEpic){for(let Z of h.children){let re=await y.jira.createIssue(m.project.jiraProjectKey,Z.summary,Z.description||"(no description)","Task",D);W.push(re.key)}g.info(`Compose created epic ${D} with ${W.length} child ticket(s)`),k.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:D,childKeys:W});return}h.triggerComment.trim()&&await y.jira.addTriggerComment(D,`${h.triggerComment.trim()}`+(!y.authored&&h.requestedBy?`
755
755
 
756
- _(requested by ${h.requestedBy} via Allwright)_`:"")),g.info(`Compose created ${L}`+(h.requestedBy?` for ${h.requestedBy}`:"")+(h.triggerComment?` with trigger "${h.triggerComment.trim()}"`:"")),w.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:L})}catch(y){w.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:y instanceof Error?y.message:String(y)})}},onAuditStart:async h=>{let m=x(h.projectId);if(!m){w.sendAuditStartResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{g.info(`Audit (${h.role}) starting on ${m.project.repoName}`+(h.scope.kind!=="repo"?` scoped to ${h.scope.kind}:${h.scope.ref}`:""));let y=Je(r,m.project,"assist");if("error"in y){w.sendAuditStartResult(h.requestId,{ok:!1,error:y.error});return}let C=await Cn({projectId:h.projectId,repoPath:m.repoPath,role:h.role,scope:h.scope,model:h.model,agent:y,jira:s(m.project.repoName)});if(!C.ok){w.sendAuditStartResult(h.requestId,{ok:!1,error:C.error});return}w.sendAuditStartResult(h.requestId,{ok:!0,audit:C.audit})}catch(y){w.sendAuditStartResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onAuditList:async h=>{try{w.sendAuditListResult(h.requestId,{ok:!0,audits:$u(h.projectId)})}catch(m){w.sendAuditListResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async h=>{try{let m=Ou(h.projectId,h.auditId);if(!m){w.sendAuditGetResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}w.sendAuditGetResult(h.requestId,{ok:!0,audit:m})}catch(m){w.sendAuditGetResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async h=>{try{let m=Bo(h.projectId,h.auditId,{selected:h.selected,ticketed:h.ticketed,verdicts:h.verdicts,verdictBy:h.verdictBy});if(!m){w.sendAuditReviewResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}let y=x(h.projectId);if(y&&h.verdicts.length){let C=[];for(let L of h.verdicts){if(L.verdict==="valid"||m.lessonsWritten.includes(L.findingId))continue;let V=m.findings.find(K=>K.id===L.findingId);V&&(Go(y.repoPath,m.role,Uu(V,L.verdict,L.note,h.verdictBy)),C.push(L.findingId),g.info(`Lesson written (${m.role}): ${L.verdict} - ${V.title.slice(0,60)}`))}C.length&&(m=Bo(h.projectId,h.auditId,{markLessonsWritten:C})??m)}w.sendAuditReviewResult(h.requestId,{ok:!0,audit:m})}catch(m){w.sendAuditReviewResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async h=>{let m=x(h.projectId);if(!m){w.sendKnowledgeListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{w.sendKnowledgeListResult(h.requestId,{ok:!0,files:Fu(m.repoPath)})}catch(y){w.sendKnowledgeListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onKnowledgeSave:async h=>{let m=x(h.projectId);if(!m){w.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{h.append?Go(m.repoPath,h.role,qu(h.content,h.by),h.level):Bu(m.repoPath,h.role,h.level,h.source,h.name,h.content),g.info(`Knowledge ${h.append?"taught":"saved"}: ${h.role}/${h.level}/${h.name}`),w.sendKnowledgeSaveResult(h.requestId,{ok:!0})}catch(y){w.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onEpicList:async h=>{let m=x(h.projectId);if(!m){w.sendEpicListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName);if(h.epicKey){let C=await y.epicChildren(h.epicKey);w.sendEpicListResult(h.requestId,{ok:!0,children:C})}else{let C=await y.searchEpics(m.project.jiraProjectKey);w.sendEpicListResult(h.requestId,{ok:!0,epics:C})}}catch(y){w.sendEpicListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onEpicSuggest:async h=>{let m=x(h.projectId);if(!m){w.sendEpicSuggestResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C=await y.epicChildren(h.epicKey),L=wu(C);if(!L.length){w.sendEpicSuggestResult(h.requestId,{ok:!1,error:`every child of ${h.epicKey} is already done or in an agent's hands - nothing to sequence`});return}if(L.length===1){w.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:L[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let V=await Promise.all(L.slice(0,12).map(async ne=>{try{let oe=await y.getIssue(ne.key);return{...ne,description:oe.description}}catch{return{...ne,description:""}}})),K=(await y.getIssue(h.epicKey).catch(()=>null))?.summary??"";g.info(`Epic suggest: weighing ${V.length} pending children of ${h.epicKey}`);let re=Je(r,m.project,"assist");if("error"in re){w.sendEpicSuggestResult(h.requestId,{ok:!1,error:re.error});return}let W=await re.adapter.run({repoPath:m.repoPath,prompt:_u(h.epicKey,K,V),timeoutSeconds:150,bin:re.bin,mode:"read_only",maxTurns:20,sessionId:(0,qi.randomUUID)(),model:h.model||"claude-sonnet-5",onLog:()=>{}}),M=ku(W.resultText,V.map(ne=>ne.key));if("error"in M){w.sendEpicSuggestResult(h.requestId,{ok:!1,error:M.error});return}g.info(`Epic suggest: ${h.epicKey} -> do ${M.issueKey} first`),w.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:M.issueKey,reason:M.reason,considered:V.length})}catch(y){w.sendEpicSuggestResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onTeamCreds:async h=>{try{let m=pe()??r;if(m.github?.token&&!m.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(Ye(),zr));m.github.login=await new C(m.github.token).whoami(),he(m)}catch{}let y=pu(m,h.emails);w.sendTeamCredsResult(h.requestId,{ok:!0,...y})}catch(m){w.sendTeamCredsResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async h=>{try{let m=pe()??r,{buildSetupReport:y}=await Promise.resolve().then(()=>(vh(),yh)),C=await y(m,h.repoNames);w.sendSetupStatusResult(h.requestId,{ok:!0,...C})}catch(m){w.sendSetupStatusResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async h=>{try{let m=x(h.projectId);if(!m){w.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md";g.info(`Setup: drafting ${y} 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.",L='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. Reply with ONLY the file content - no preamble, no fences around the whole thing.',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.`,K=Je(r,m.project,"assist");if("error"in K){w.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,content:"",error:K.error});return}let W=(await K.adapter.run({repoPath:m.repoPath,prompt:h.kind==="deploy"?L:h.kind==="design"?V:C,timeoutSeconds:240,bin:K.bin,mode:"read_only",maxTurns:40,sessionId:(0,qi.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!W){w.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"the agent returned no content - try again"});return}w.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!0,content:W})}catch(m){w.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async h=>{try{let m=x(h.projectId);if(!m){w.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md",C=await qa({repoPath:m.repoPath,relPath:y,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${y} (agent-drafted, human-approved via Allwright)`});C.ok&&g.info(`Setup: wrote human-approved ${y} to ${m.repoPath}`),w.sendSetupClaudeMdSaveResult(h.requestId,C)}catch(m){w.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRepoDocSave:async h=>{try{let m=x(h.projectId);if(!m){w.sendRepoDocSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=await qa({repoPath:m.repoPath,relPath:h.relPath,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${h.relPath.trim()} (written in Allwright Compose, human-approved)`});y.ok&&g.info(`Saved approved doc ${h.relPath} into ${m.repoPath}`),w.sendRepoDocSaveResult(h.requestId,y)}catch(m){w.sendRepoDocSaveResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditStats:h=>{try{w.sendAuditStatsResult(h.requestId,{ok:!0,byProject:Pu(h.projectIds,h.since)})}catch(m){w.sendAuditStatsResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async h=>{if(!process.env.INVOCATION_ID){w.sendRunnerUpdateResult(h.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=()=>{g.info("Installing allwright@latest");let C=Un.default.dirname(process.execPath),L=et.default.existsSync(Un.default.join(C,"npm"))?Un.default.join(C,"npm"):"npm";(0,At.execFile)(L,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${C}:${process.env.PATH??""}`}},(V,K,re)=>{if(V){w.sendRunnerUpdateResult(h.requestId,{ok:!1,error:`npm install failed: ${(re||V.message).slice(0,300)} - on the machine run: allwright update && sudo systemctl restart allwright`});return}w.sendRunnerUpdateResult(h.requestId,{ok:!0,note:"updated - restarting now, back in a few seconds"}),g.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})};if(p.idle){m();return}if(v){w.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:"an update is already scheduled and will install once the current work finishes"});return}let y=p.busyCount;w.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:`scheduled - ${y} run(s)/deploy(s) active right now. Nothing is refused meanwhile; the install runs automatically as soon as this machine goes idle.`}),g.info(`Update scheduled: waiting for ${y} active run(s)/deploy(s) to finish`),v=setInterval(()=>{p.idle&&(clearInterval(v),v=null,m())},5e3)},onResolveConflict:async h=>{let m=y=>w.sendResolveConflictResult(h.requestId,{ok:!1,note:y});try{let y=is(h.runId);if(!y){m("this runner no longer has that PR on file - it may have been decided already");return}let C=r.repos[y.repoName];if(!C){m(`no local checkout mapped for "${y.repoName}" on this machine`);return}let L=Ae(r,y.repoName);if(!L){m("no GitHub token on this runner for that repo");return}let V=await new $e(L).getPullRequest(y.owner,y.repo,y.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 K=u.find(ne=>ne.repoName===y.repoName),re=y.nextDecisionSeq??1e5,W=(ne,oe)=>{w.send({type:"run.log",runId:h.runId,seq:re++,ts:new Date().toISOString(),level:ne,message:oe}),y.nextDecisionSeq=re,Tt(y)},M=await Kc({cfg:r,repoPath:C.path,branch:y.branch,baseBranch:V.baseRef,issueKey:y.issueKey,agentId:K?.defaultAgent||Vt.DEFAULT_AGENT_ID,configDir:y.agentConfigDir,timeoutSeconds:900,onLog:W});M.ok&&M.headSha&&(y.headSha=M.headSha,y.conflictNotified=!1,Tt(y),w.send({type:"run.pr.conflict",runId:h.runId,conflicted:!1}),w.send({type:"run.status",runId:h.runId,status:"awaiting_approval",headSha:M.headSha,...M.costUsd!==void 0?{costUsd:M.costUsd}:{},...M.inputTokens!==void 0?{inputTokens:M.inputTokens}:{},...M.outputTokens!==void 0?{outputTokens:M.outputTokens}:{}})),w.sendResolveConflictResult(h.requestId,M)}catch(y){m(y instanceof Error?y.message.slice(0,300):String(y))}},onAgentProfiles:h=>{try{let m=C=>{try{return et.default.existsSync(C)&&et.default.readdirSync(C).length>0}catch{return!1}},y=Object.entries(r.claudeProfiles).map(([C,L])=>({agent:"claude-code",name:C,loggedIn:m(L.configDir)}));w.sendAgentProfilesResult(h.requestId,{ok:!0,profiles:y,defaultLoggedIn:m(Un.default.join(Ba.default.homedir(),".claude")),agentsWithoutProfiles:Vt.REGISTERED_AGENTS.filter(C=>!C.capabilities.loginProfiles).map(C=>C.id)})}catch(m){w.sendAgentProfilesResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onJiraUsers:async h=>{try{let m=await t.searchUsers(h.query);w.sendJiraUsersResult(h.requestId,{ok:!0,users:m})}catch(m){w.sendJiraUsersResult(h.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});S.transport=w,p=new wi(r,s,w);let J=Object.values(En()).filter(h=>h.kind==="implement").map(h=>h.repoPath);xo(Object.values(r.repos).map(h=>h.path),J).catch(()=>{}),w.start(),p.start();let O=()=>{g.info("shutting down"),v&&clearInterval(v),w.stop(),El(process.pid),co(),process.exit(0)},D=!1,Q=()=>{if(D){g.warn("second stop signal - exiting NOW; the interrupted run will be marked failed"),O();return}if(D=!0,p.stop(),p.idle){O();return}g.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 h=setInterval(()=>{p.idle&&(clearInterval(h),O())},3e3)};process.on("SIGINT",Q),process.on("SIGTERM",Q),process.on("SIGHUP",()=>{try{let h=se();if(!h.jira)throw new Error("no Jira credentials in the reloaded config");for(let m of Object.keys(r))delete r[m];Object.assign(r,h),t=new Ee(h.jira),n.clear(),g.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(h){g.error(`config reload failed - keeping the running config: ${h instanceof Error?h.message:String(h)}`)}})}ye.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 r=>{let e=se();if(r.foreground){Iv(e);return}let t=hr();if(t&&fr(t)){g.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=Hn();if(n){g.info(`a runner is already running on this machine (pid ${n}) - most likely the systemd service. One machine runs ONE runner; nothing to do. (Service controls: sudo systemctl status|stop|restart allwright)`);return}let s=Il(),i=(0,At.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),Rl(i.pid),g.info(`Runner started in the background (pid ${i.pid}).`),g.info(`Logs: ${Ms()}`),g.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});ye.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(r=>{let e=hr();if(!e||!fr(e)){g.info("no background runner is running"),e&&et.default.rmSync(hn(),{force:!0});return}if(r.force){process.kill(e,"SIGKILL"),et.default.rmSync(hn(),{force:!0}),g.info(`killed (pid ${e}) - any interrupted run will show as failed on the dashboard`);return}process.kill(e,"SIGTERM"),g.info(`stop signal sent (pid ${e}) - it stops polling now and exits once active work finishes (watch \`allwright status\`). Use --force to kill immediately.`)});ye.command("status").description("Check whether the background runner is running").action(()=>{let r=hr();r&&fr(r)?g.info(`running in the background (pid ${r})`):g.info("not running")});ye.parseAsync().catch(r=>{g.error(r instanceof Error?r.message:String(r)),process.exit(1)});
756
+ _(requested by ${h.requestedBy} via Allwright)_`:"")),g.info(`Compose created ${D}`+(h.requestedBy?` for ${h.requestedBy}`:"")+(h.triggerComment?` with trigger "${h.triggerComment.trim()}"`:"")),k.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:D})}catch(y){k.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:y instanceof Error?y.message:String(y)})}},onAuditStart:async h=>{let m=x(h.projectId);if(!m){k.sendAuditStartResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{g.info(`Audit (${h.role}) starting on ${m.project.repoName}`+(h.scope.kind!=="repo"?` scoped to ${h.scope.kind}:${h.scope.ref}`:""));let y=Je(r,m.project,"assist");if("error"in y){k.sendAuditStartResult(h.requestId,{ok:!1,error:y.error});return}let C=await Cn({projectId:h.projectId,repoPath:m.repoPath,role:h.role,scope:h.scope,model:h.model,agent:y,jira:s(m.project.repoName)});if(!C.ok){k.sendAuditStartResult(h.requestId,{ok:!1,error:C.error});return}k.sendAuditStartResult(h.requestId,{ok:!0,audit:C.audit})}catch(y){k.sendAuditStartResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onAuditList:async h=>{try{k.sendAuditListResult(h.requestId,{ok:!0,audits:Pc(h.projectId)})}catch(m){k.sendAuditListResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async h=>{try{let m=Nc(h.projectId,h.auditId);if(!m){k.sendAuditGetResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}k.sendAuditGetResult(h.requestId,{ok:!0,audit:m})}catch(m){k.sendAuditGetResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditReview:async h=>{try{let m=Ko(h.projectId,h.auditId,{selected:h.selected,ticketed:h.ticketed,verdicts:h.verdicts,verdictBy:h.verdictBy});if(!m){k.sendAuditReviewResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}let y=x(h.projectId);if(y&&h.verdicts.length){let C=[];for(let D of h.verdicts){if(D.verdict==="valid"||m.lessonsWritten.includes(D.findingId))continue;let W=m.findings.find(Z=>Z.id===D.findingId);W&&(Ho(y.repoPath,m.role,qc(W,D.verdict,D.note,h.verdictBy)),C.push(D.findingId),g.info(`Lesson written (${m.role}): ${D.verdict} - ${W.title.slice(0,60)}`))}C.length&&(m=Ko(h.projectId,h.auditId,{markLessonsWritten:C})??m)}k.sendAuditReviewResult(h.requestId,{ok:!0,audit:m})}catch(m){k.sendAuditReviewResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onKnowledgeList:async h=>{let m=x(h.projectId);if(!m){k.sendKnowledgeListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{k.sendKnowledgeListResult(h.requestId,{ok:!0,files:Bc(m.repoPath)})}catch(y){k.sendKnowledgeListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onKnowledgeSave:async h=>{let m=x(h.projectId);if(!m){k.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{h.append?Ho(m.repoPath,h.role,Fc(h.content,h.by),h.level):Kc(m.repoPath,h.role,h.level,h.source,h.name,h.content),g.info(`Knowledge ${h.append?"taught":"saved"}: ${h.role}/${h.level}/${h.name}`),k.sendKnowledgeSaveResult(h.requestId,{ok:!0})}catch(y){k.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onEpicList:async h=>{let m=x(h.projectId);if(!m){k.sendEpicListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName);if(h.epicKey){let C=await y.epicChildren(h.epicKey);k.sendEpicListResult(h.requestId,{ok:!0,children:C})}else{let C=await y.searchEpics(m.project.jiraProjectKey);k.sendEpicListResult(h.requestId,{ok:!0,epics:C})}}catch(y){k.sendEpicListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onEpicSuggest:async h=>{let m=x(h.projectId);if(!m){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let y=s(m.project.repoName),C=await y.epicChildren(h.epicKey),D=_c(C);if(!D.length){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:`every child of ${h.epicKey} is already done or in an agent's hands - nothing to sequence`});return}if(D.length===1){k.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:D[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let W=await Promise.all(D.slice(0,12).map(async ne=>{try{let oe=await y.getIssue(ne.key);return{...ne,description:oe.description}}catch{return{...ne,description:""}}})),Z=(await y.getIssue(h.epicKey).catch(()=>null))?.summary??"";g.info(`Epic suggest: weighing ${W.length} pending children of ${h.epicKey}`);let re=Je(r,m.project,"assist");if("error"in re){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:re.error});return}let J=await re.adapter.run({repoPath:m.repoPath,prompt:kc(h.epicKey,Z,W),timeoutSeconds:150,bin:re.bin,mode:"read_only",maxTurns:20,sessionId:(0,Fi.randomUUID)(),model:h.model||"claude-sonnet-5",onLog:()=>{}}),M=Sc(J.resultText,W.map(ne=>ne.key));if("error"in M){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:M.error});return}g.info(`Epic suggest: ${h.epicKey} -> do ${M.issueKey} first`),k.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:M.issueKey,reason:M.reason,considered:W.length})}catch(y){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onTeamCreds:async h=>{try{let m=pe()??r;if(m.github?.token&&!m.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(Ye(),zr));m.github.login=await new C(m.github.token).whoami(),he(m)}catch{}let y=mc(m,h.emails);k.sendTeamCredsResult(h.requestId,{ok:!0,...y})}catch(m){k.sendTeamCredsResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupStatus:async h=>{try{let m=pe()??r,{buildSetupReport:y}=await Promise.resolve().then(()=>(bh(),vh)),C=await y(m,h.repoNames);k.sendSetupStatusResult(h.requestId,{ok:!0,...C})}catch(m){k.sendSetupStatusResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async h=>{try{let m=x(h.projectId);if(!m){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md";g.info(`Setup: drafting ${y} 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.",D='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. Reply with ONLY the file content - no preamble, no fences around the whole thing.',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.`,Z=Je(r,m.project,"assist");if("error"in Z){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,content:"",error:Z.error});return}let J=(await Z.adapter.run({repoPath:m.repoPath,prompt:h.kind==="deploy"?D:h.kind==="design"?W:C,timeoutSeconds:240,bin:Z.bin,mode:"read_only",maxTurns:40,sessionId:(0,Fi.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!J){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"the agent returned no content - try again"});return}k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!0,content:J})}catch(m){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async h=>{try{let m=x(h.projectId);if(!m){k.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md",C=await Fa({repoPath:m.repoPath,relPath:y,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${y} (agent-drafted, human-approved via Allwright)`});C.ok&&g.info(`Setup: wrote human-approved ${y} to ${m.repoPath}`),k.sendSetupClaudeMdSaveResult(h.requestId,C)}catch(m){k.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRepoDocSave:async h=>{try{let m=x(h.projectId);if(!m){k.sendRepoDocSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let y=await Fa({repoPath:m.repoPath,relPath:h.relPath,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${h.relPath.trim()} (written in Allwright Compose, human-approved)`});y.ok&&g.info(`Saved approved doc ${h.relPath} into ${m.repoPath}`),k.sendRepoDocSaveResult(h.requestId,y)}catch(m){k.sendRepoDocSaveResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditStats:h=>{try{k.sendAuditStatsResult(h.requestId,{ok:!0,byProject:jc(h.projectIds,h.since)})}catch(m){k.sendAuditStatsResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onRunnerUpdate:async h=>{if(!process.env.INVOCATION_ID){k.sendRunnerUpdateResult(h.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=()=>{g.info("Installing allwright@latest");let C=Un.default.dirname(process.execPath),D=et.default.existsSync(Un.default.join(C,"npm"))?Un.default.join(C,"npm"):"npm";(0,At.execFile)(D,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${C}:${process.env.PATH??""}`}},(W,Z,re)=>{if(W){k.sendRunnerUpdateResult(h.requestId,{ok:!1,error:`npm install failed: ${(re||W.message).slice(0,300)} - on the machine run: allwright update && sudo systemctl restart allwright`});return}k.sendRunnerUpdateResult(h.requestId,{ok:!0,note:"updated - restarting now, back in a few seconds"}),g.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})};if(p.idle){m();return}if(v){k.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:"an update is already scheduled and will install once the current work finishes"});return}let y=p.busyCount;k.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:`scheduled - ${y} run(s)/deploy(s) active right now. Nothing is refused meanwhile; the install runs automatically as soon as this machine goes idle.`}),g.info(`Update scheduled: waiting for ${y} active run(s)/deploy(s) to finish`),v=setInterval(()=>{p.idle&&(clearInterval(v),v=null,m())},5e3)},onResolveConflict:async h=>{let m=y=>k.sendResolveConflictResult(h.requestId,{ok:!1,note:y});try{let y=is(h.runId);if(!y){m("this runner no longer has that PR on file - it may have been decided already");return}let C=r.repos[y.repoName];if(!C){m(`no local checkout mapped for "${y.repoName}" on this machine`);return}let D=Ae(r,y.repoName);if(!D){m("no GitHub token on this runner for that repo");return}let W=await new $e(D).getPullRequest(y.owner,y.repo,y.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 Z=c.find(ne=>ne.repoName===y.repoName),re=y.nextDecisionSeq??1e5,J=(ne,oe)=>{k.send({type:"run.log",runId:h.runId,seq:re++,ts:new Date().toISOString(),level:ne,message:oe}),y.nextDecisionSeq=re,Tt(y)},M=await Zu({cfg:r,repoPath:C.path,branch:y.branch,baseBranch:W.baseRef,issueKey:y.issueKey,agentId:Z?.defaultAgent||Vt.DEFAULT_AGENT_ID,configDir:y.agentConfigDir,timeoutSeconds:900,onLog:J});M.ok&&M.headSha&&(y.headSha=M.headSha,y.conflictNotified=!1,Tt(y),k.send({type:"run.pr.conflict",runId:h.runId,conflicted:!1}),k.send({type:"run.status",runId:h.runId,status:"awaiting_approval",headSha:M.headSha,...M.costUsd!==void 0?{costUsd:M.costUsd}:{},...M.inputTokens!==void 0?{inputTokens:M.inputTokens}:{},...M.outputTokens!==void 0?{outputTokens:M.outputTokens}:{}})),k.sendResolveConflictResult(h.requestId,M)}catch(y){m(y instanceof Error?y.message.slice(0,300):String(y))}},onAgentProfiles:h=>{try{let m=C=>{try{return et.default.existsSync(C)&&et.default.readdirSync(C).length>0}catch{return!1}},y=Object.entries(r.claudeProfiles).map(([C,D])=>({agent:"claude-code",name:C,loggedIn:m(D.configDir)}));k.sendAgentProfilesResult(h.requestId,{ok:!0,profiles:y,defaultLoggedIn:m(Un.default.join(Ka.default.homedir(),".claude")),agentsWithoutProfiles:Vt.REGISTERED_AGENTS.filter(C=>!C.capabilities.loginProfiles).map(C=>C.id)})}catch(m){k.sendAgentProfilesResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onJiraUsers:async h=>{try{let m=await t.searchUsers(h.query);k.sendJiraUsersResult(h.requestId,{ok:!0,users:m})}catch(m){k.sendJiraUsersResult(h.requestId,{ok:!1,users:[],error:m instanceof Error?m.message:String(m)})}}});S.transport=k,p=new _i(r,s,k);let X=Object.values(En()).filter(h=>h.kind==="implement").map(h=>h.repoPath);Co(Object.values(r.repos).map(h=>h.path),X).catch(()=>{}),k.start(),p.start();let O=()=>{g.info("shutting down"),v&&clearInterval(v),k.stop(),Al(process.pid),ho(),process.exit(0)},L=!1,K=()=>{if(L){g.warn("second stop signal - exiting NOW; the interrupted run will be marked failed"),O();return}if(L=!0,p.stop(),p.idle){O();return}g.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 h=setInterval(()=>{p.idle&&(clearInterval(h),O())},3e3)};process.on("SIGINT",K),process.on("SIGTERM",K),process.on("SIGHUP",()=>{try{let h=se();if(!h.jira)throw new Error("no Jira credentials in the reloaded config");for(let m of Object.keys(r))delete r[m];Object.assign(r,h),t=new Ee(h.jira),n.clear(),g.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(h){g.error(`config reload failed - keeping the running config: ${h instanceof Error?h.message:String(h)}`)}})}ye.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 r=>{let e=se();if(r.foreground){Rv(e);return}let t=hr();if(t&&fr(t)){g.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=Hn();if(n){g.info(`a runner is already running on this machine (pid ${n}) - most likely the systemd service. One machine runs ONE runner; nothing to do. (Service controls: sudo systemctl status|stop|restart allwright)`);return}let s=Rl(),i=(0,At.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),El(i.pid),g.info(`Runner started in the background (pid ${i.pid}).`),g.info(`Logs: ${Ms()}`),g.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});ye.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(r=>{let e=hr();if(!e||!fr(e)){g.info("no background runner is running"),e&&et.default.rmSync(hn(),{force:!0});return}if(r.force){process.kill(e,"SIGKILL"),et.default.rmSync(hn(),{force:!0}),g.info(`killed (pid ${e}) - any interrupted run will show as failed on the dashboard`);return}process.kill(e,"SIGTERM"),g.info(`stop signal sent (pid ${e}) - it stops polling now and exits once active work finishes (watch \`allwright status\`). Use --force to kill immediately.`)});ye.command("status").description("Check whether the background runner is running").action(()=>{let r=hr();r&&fr(r)?g.info(`running in the background (pid ${r})`):g.info("not running")});ye.parseAsync().catch(r=>{g.error(r instanceof Error?r.message:String(r)),process.exit(1)});