allwright 1.17.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/allwright.js +154 -145
- package/package.json +1 -1
package/bin/allwright.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`).replace(/^/gm," ".repeat(i))}let
|
|
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
|
|
2
|
+
"use strict";var dh=Object.create;var Mi=Object.defineProperty;var hh=Object.getOwnPropertyDescriptor;var fh=Object.getOwnPropertyNames;var ph=Object.getPrototypeOf,mh=Object.prototype.hasOwnProperty;var fs=(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}},ps=(r,e)=>{for(var t in e)Mi(r,t,{get:e[t],enumerable:!0})},gh=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fh(e))!mh.call(r,s)&&s!==t&&Mi(r,s,{get:()=>e[s],enumerable:!(n=hh(e,s))||n.enumerable});return r};var R=(r,e,t)=>(t=r!=null?dh(ph(r)):{},gh(e||!r||!r.__esModule?Mi(t,"default",{value:r,enumerable:!0}):t,r));var Nn=ee(Di=>{var ms=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}},zi=class extends ms{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Di.CommanderError=ms;Di.InvalidArgumentError=zi});var gs=ee(Ui=>{var{InvalidArgumentError:yh}=Nn(),Li=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 yh(`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 vh(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}Ui.Argument=Li;Ui.humanReadableArgName=vh});var Fi=ee(Ua=>{var{humanReadableArgName:bh}=gs(),qi=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=>bh(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 j=`${T.padEnd(n+o)}${x}`;return t.wrap(j,s-i,n+o)}return T}function l(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:",l(p),""]));let v=t.visibleOptions(e).map(T=>a(t.optionTerm(T),t.optionDescription(T)));if(v.length>0&&(c=c.concat(["Options:",l(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:",l(T),""]))}let k=t.visibleCommands(e).map(T=>a(t.subcommandTerm(T),t.subcommandDescription(T)));return k.length>0&&(c=c.concat(["Commands:",l(k),""])),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 l=e.slice(0,n),c=e.slice(n).replace(`\r
|
|
5
5
|
`,`
|
|
6
|
-
`),f=" ".repeat(n),
|
|
7
|
-
|.{1,${a-1}}([${
|
|
8
|
-
`?"":(
|
|
9
|
-
`)}};
|
|
6
|
+
`),f=" ".repeat(n),v="\\s\u200B",k=new RegExp(`
|
|
7
|
+
|.{1,${a-1}}([${v}]|$)|[^${v}]+?([${v}]|$)`,"g"),T=c.match(k)||[];return l+T.map((x,j)=>x===`
|
|
8
|
+
`?"":(j>0?f:"")+x.trimEnd()).join(`
|
|
9
|
+
`)}};Ua.Help=qi});var Gi=ee(Zi=>{var{InvalidArgumentError:wh}=Nn(),Bi=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=kh(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 wh(`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}},Ki=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 kh(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}}Zi.Option=Bi;Zi.DualOptions=Ki});var Fa=ee(qa=>{function Sh(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 Th(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=Sh(r,o),l=Math.max(r.length,o.length);(l-a)/l>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
|
|
10
10
|
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
11
|
-
(Did you mean ${n[0]}?)`:""}
|
|
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
|
|
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
|
|
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
|
|
11
|
+
(Did you mean ${n[0]}?)`:""}qa.suggestSimilar=Th});var Va=ee(Ga=>{var xh=require("node:events").EventEmitter,Vi=require("node:child_process"),lt=require("node:path"),Hi=require("node:fs"),de=require("node:process"),{Argument:Ch,humanReadableArgName:Eh}=gs(),{CommanderError:Wi}=Nn(),{Help:Ih}=Fi(),{Option:Ba,DualOptions:Rh}=Gi(),{suggestSimilar:Ka}=Fa(),Ji=class r extends xh{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(/([^ ]+) *(.*)/),l=this.createCommand(o);return s&&(l.description(s),l._executableHandler=!0),i.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(i.noHelp||i.hidden),l._executableFile=i.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),s?this:l}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Ih,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 Ch(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
13
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new Wi(e,t,n)),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 Ba(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
|
|
14
|
+
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let l=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,l,o):i!==null&&e.variadic&&(i=e._concatValue(i,l)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof Ba)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let f=a.exec(l);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=lt.resolve(f,p);if(Hi.existsSync(v))return v;if(s.includes(lt.extname(p)))return;let k=s.find(T=>Hi.existsSync(`${v}${T}`));if(k)return`${v}${k}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let f;try{f=Hi.realpathSync(this._scriptPath)}catch{f=this._scriptPath}a=lt.resolve(lt.dirname(f),a)}if(a){let f=i(a,o);if(!f&&!e._executableFile&&this._scriptPath){let p=lt.basename(this._scriptPath,lt.extname(this._scriptPath));p!==this._name&&(f=i(a,`${p}-${e._name}`))}o=f||o}n=s.includes(lt.extname(o));let l;de.platform!=="win32"?n?(t.unshift(o),t=Za(de.execArgv).concat(t),l=Vi.spawn(de.argv[0],t,{stdio:"inherit"})):l=Vi.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Za(de.execArgv).concat(t),l=Vi.spawn(de.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{de.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let c=this._exitCallback;l.on("close",f=>{f=f??1,c?c(new Wi(f,"commander.executeSubCommandAsync","(close)")):de.exit(f)}),l.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(
|
|
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 Wi(1,"commander.executeSubCommandAsync","(error)");p.nestedError=f,c(p)}}),this.runningCommand=l}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;i.length;){let l=i.shift();if(l==="--"){s===n&&s.push(l),s.push(...i);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let c=this._findOption(l);if(c){if(c.required){let 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(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),i.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),f=this._findOption(l.slice(0,c));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,l.slice(c+1));continue}}if(o(l)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(l),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(l),i.length>0&&s.push(...i);break}s.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
18
18
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
20
|
-
`),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in
|
|
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=>
|
|
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 Rh(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),f=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:f||o},s=o=>{let a=n(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=Ka(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=Ka(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=>Eh(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=lt.basename(e,lt.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 Da(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})}La.Command=Zi});var Ka=Q($e=>{var{Argument:qa}=ps(),{Command:Vi}=Ua(),{CommanderError:kh,InvalidArgumentError:Fa}=Pn(),{Help:Sh}=zi(),{Option:Ba}=qi();$e.program=new Vi;$e.createCommand=r=>new Vi(r);$e.createOption=(r,e)=>new Ba(r,e);$e.createArgument=(r,e)=>new qa(r,e);$e.Command=Vi;$e.Option=Ba;$e.Argument=qa;$e.Help=Sh;$e.CommanderError=kh;$e.InvalidArgumentError=Fa;$e.InvalidOptionArgumentError=Fa});var Dn=Q(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.getParsedType=ne.ZodParsedType=ne.objectUtil=ne.util=void 0;var eo;(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})(eo||(ne.util=eo={}));var pu;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(pu||(ne.objectUtil=pu={}));ne.ZodParsedType=eo.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var Ff=r=>{switch(typeof r){case"undefined":return ne.ZodParsedType.undefined;case"string":return ne.ZodParsedType.string;case"number":return Number.isNaN(r)?ne.ZodParsedType.nan:ne.ZodParsedType.number;case"boolean":return ne.ZodParsedType.boolean;case"function":return ne.ZodParsedType.function;case"bigint":return ne.ZodParsedType.bigint;case"symbol":return ne.ZodParsedType.symbol;case"object":return Array.isArray(r)?ne.ZodParsedType.array:r===null?ne.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?ne.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?ne.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?ne.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?ne.ZodParsedType.date:ne.ZodParsedType.object;default:return ne.ZodParsedType.unknown}};ne.getParsedType=Ff});var Is=Q(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.ZodError=Ot.quotelessJson=Ot.ZodIssueCode=void 0;var mu=Dn();Ot.ZodIssueCode=mu.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 Bf=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");Ot.quotelessJson=Bf;var Ln=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 l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],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,mu.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()}};Ot.ZodError=Ln;Ln.create=r=>new Ln(r)});var ro=Q(to=>{"use strict";Object.defineProperty(to,"__esModule",{value:!0});var be=Is(),ar=Dn(),Kf=(r,e)=>{let t;switch(r.code){case be.ZodIssueCode.invalid_type:r.received===ar.ZodParsedType.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case be.ZodIssueCode.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,ar.util.jsonStringifyReplacer)}`;break;case be.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${ar.util.joinValues(r.keys,", ")}`;break;case be.ZodIssueCode.invalid_union:t="Invalid input";break;case be.ZodIssueCode.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${ar.util.joinValues(r.options)}`;break;case be.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${ar.util.joinValues(r.options)}, received '${r.received}'`;break;case be.ZodIssueCode.invalid_arguments:t="Invalid function arguments";break;case be.ZodIssueCode.invalid_return_type:t="Invalid function return type";break;case be.ZodIssueCode.invalid_date:t="Invalid date";break;case be.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}"`:ar.util.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case be.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 be.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 be.ZodIssueCode.custom:t="Invalid input";break;case be.ZodIssueCode.invalid_intersection_types:t="Intersection results could not be merged";break;case be.ZodIssueCode.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case be.ZodIssueCode.not_finite:t="Number must be finite";break;default:t=e.defaultError,ar.util.assertNever(r)}return{message:t}};to.default=Kf});var Rs=Q(Nt=>{"use strict";var Zf=Nt&&Nt.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Nt,"__esModule",{value:!0});Nt.defaultErrorMap=void 0;Nt.setErrorMap=Vf;Nt.getErrorMap=Hf;var gu=Zf(ro());Nt.defaultErrorMap=gu.default;var yu=gu.default;function Vf(r){yu=r}function Hf(){return yu}});var so=Q(te=>{"use strict";var Gf=te&&te.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(te,"__esModule",{value:!0});te.isAsync=te.isValid=te.isDirty=te.isAborted=te.OK=te.DIRTY=te.INVALID=te.ParseStatus=te.EMPTY_PATH=te.makeIssue=void 0;te.addIssueToContext=Yf;var Wf=Rs(),vu=Gf(ro()),Jf=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(l=>!!l).slice().reverse();for(let l of c)a=l(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};te.makeIssue=Jf;te.EMPTY_PATH=[];function Yf(r,e){let t=(0,Wf.getErrorMap)(),n=(0,te.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===vu.default?void 0:vu.default].filter(s=>!!s)});r.common.issues.push(n)}var no=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 te.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 te.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}}};te.ParseStatus=no;te.INVALID=Object.freeze({status:"aborted"});var Xf=r=>({status:"dirty",value:r});te.DIRTY=Xf;var Qf=r=>({status:"valid",value:r});te.OK=Qf;var ep=r=>r.status==="aborted";te.isAborted=ep;var tp=r=>r.status==="dirty";te.isDirty=tp;var rp=r=>r.status==="valid";te.isValid=rp;var np=r=>typeof Promise<"u"&&r instanceof Promise;te.isAsync=np});var _u=Q(bu=>{"use strict";Object.defineProperty(bu,"__esModule",{value:!0})});var ku=Q(As=>{"use strict";Object.defineProperty(As,"__esModule",{value:!0});As.errorUtil=void 0;var wu;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(wu||(As.errorUtil=wu={}))});var Ou=Q(v=>{"use strict";Object.defineProperty(v,"__esModule",{value:!0});v.discriminatedUnion=v.date=v.boolean=v.bigint=v.array=v.any=v.coerce=v.ZodFirstPartyTypeKind=v.late=v.ZodSchema=v.Schema=v.ZodReadonly=v.ZodPipeline=v.ZodBranded=v.BRAND=v.ZodNaN=v.ZodCatch=v.ZodDefault=v.ZodNullable=v.ZodOptional=v.ZodTransformer=v.ZodEffects=v.ZodPromise=v.ZodNativeEnum=v.ZodEnum=v.ZodLiteral=v.ZodLazy=v.ZodFunction=v.ZodSet=v.ZodMap=v.ZodRecord=v.ZodTuple=v.ZodIntersection=v.ZodDiscriminatedUnion=v.ZodUnion=v.ZodObject=v.ZodArray=v.ZodVoid=v.ZodNever=v.ZodUnknown=v.ZodAny=v.ZodNull=v.ZodUndefined=v.ZodSymbol=v.ZodDate=v.ZodBoolean=v.ZodBigInt=v.ZodNumber=v.ZodString=v.ZodType=void 0;v.NEVER=v.void=v.unknown=v.union=v.undefined=v.tuple=v.transformer=v.symbol=v.string=v.strictObject=v.set=v.record=v.promise=v.preprocess=v.pipeline=v.ostring=v.optional=v.onumber=v.oboolean=v.object=v.number=v.nullable=v.null=v.never=v.nativeEnum=v.nan=v.map=v.literal=v.lazy=v.intersection=v.instanceof=v.function=v.enum=v.effect=void 0;v.datetimeRegex=Eu;v.custom=Ru;var I=Is(),$s=Rs(),M=ku(),_=so(),A=Dn(),Me=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Su=(r,e)=>{if((0,_.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 I.ZodError(r.common.issues);return this._error=t,this._error}}};function K(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message: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 Z=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 Su(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 Su(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:I.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 Ee({schema:this,typeName:q.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 Ne.create(this,this._def)}nullable(){return et.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return yt.create(this)}promise(){return Dt.create(this,this._def)}or(e){return pr.create([this,e],this._def)}and(e){return mr.create(this,e,this._def)}transform(e){return new Ee({...K(this._def),schema:this,typeName:q.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new _r({...K(this._def),innerType:this,defaultValue:t,typeName:q.ZodDefault})}brand(){return new Un({typeName:q.ZodBranded,type:this,...K(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new wr({...K(this._def),innerType:this,catchValue:t,typeName:q.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return qn.create(this,e)}readonly(){return kr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};v.ZodType=Z;v.Schema=Z;v.ZodSchema=Z;var sp=/^c[^\s-]{8,}$/i,ip=/^[0-9a-z]+$/,op=/^[0-9A-HJKMNP-TV-Z]{26}$/i,ap=/^[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,up=/^[a-z0-9_-]{21}$/i,cp=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,lp=/^[-+]?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)?)??$/,dp=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,hp="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",io,fp=/^(?:(?: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])$/,mp=/^(([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]))$/,gp=/^(([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])$/,yp=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,vp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,xu="((\\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])))",bp=new RegExp(`^${xu}$`);function Cu(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 _p(r){return new RegExp(`^${Cu(r)}$`)}function Eu(r){let e=`${xu}T${Cu(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 wp(r,e){return!!((e==="v4"||!e)&&fp.test(r)||(e==="v6"||!e)&&mp.test(r))}function kp(r,e){if(!cp.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 Sp(r,e){return!!((e==="v4"||!e)&&pp.test(r)||(e==="v6"||!e)&&gp.test(r))}var Mt=class r extends Z{_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:I.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:I.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:I.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:I.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,_.addIssueToContext)(s,{code:I.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")dp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"email",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")io||(io=new RegExp(hp,"u")),io.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"emoji",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")ap.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"uuid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")up.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"nanoid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")sp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cuid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")ip.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cuid2",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")op.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"ulid",code:I.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:I.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:I.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:I.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:I.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:I.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Eu(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?bp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?_p(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?lp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"duration",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?wp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"ip",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?kp(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"jwt",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?Sp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"cidr",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?yp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"base64",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?vp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,_.addIssueToContext)(s,{validation:"base64url",code:I.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:I.ZodIssueCode.invalid_string,...M.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...M.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...M.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...M.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...M.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...M.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...M.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...M.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...M.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...M.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...M.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...M.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...M.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...M.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,...M.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,...M.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...M.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...M.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...M.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...M.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...M.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...M.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...M.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...M.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,M.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}};v.ZodString=Mt;Mt.create=r=>new Mt({checks:[],typeName:q.ZodString,coerce:r?.coerce??!1,...K(r)});function Tp(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 ur=class r extends Z{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:I.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:I.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:I.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:I.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Tp(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,_.addIssueToContext)(n,{code:I.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:I.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,M.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,M.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,M.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,M.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:M.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:M.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:M.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:M.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:M.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:M.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:M.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:M.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:M.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:M.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)}};v.ZodNumber=ur;ur.create=r=>new ur({checks:[],typeName:q.ZodNumber,coerce:r?.coerce||!1,...K(r)});var cr=class r extends Z{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:I.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:I.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:I.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:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.bigint,received:t.parsedType}),_.INVALID}gte(e,t){return this.setLimit("min",e,!0,M.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,M.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,M.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,M.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:M.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:M.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:M.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:M.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:M.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:M.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}};v.ZodBigInt=cr;cr.create=r=>new cr({checks:[],typeName:q.ZodBigInt,coerce:r?.coerce??!1,...K(r)});var lr=class extends Z{_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:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.boolean,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};v.ZodBoolean=lr;lr.create=r=>new lr({typeName:q.ZodBoolean,coerce:r?.coerce||!1,...K(r)});var dr=class r extends Z{_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:I.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:I.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:I.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:I.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:M.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:M.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}};v.ZodDate=dr;dr.create=r=>new dr({checks:[],coerce:r?.coerce||!1,typeName:q.ZodDate,...K(r)});var on=class extends Z{_parse(e){if(this._getType(e)!==A.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.symbol,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};v.ZodSymbol=on;on.create=r=>new on({typeName:q.ZodSymbol,...K(r)});var hr=class extends Z{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.undefined,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};v.ZodUndefined=hr;hr.create=r=>new hr({typeName:q.ZodUndefined,...K(r)});var fr=class extends Z{_parse(e){if(this._getType(e)!==A.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.null,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};v.ZodNull=fr;fr.create=r=>new fr({typeName:q.ZodNull,...K(r)});var zt=class extends Z{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,_.OK)(e.data)}};v.ZodAny=zt;zt.create=r=>new zt({typeName:q.ZodAny,...K(r)});var gt=class extends Z{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,_.OK)(e.data)}};v.ZodUnknown=gt;gt.create=r=>new gt({typeName:q.ZodUnknown,...K(r)});var Ze=class extends Z{_parse(e){let t=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.never,received:t.parsedType}),_.INVALID}};v.ZodNever=Ze;Ze.create=r=>new Ze({typeName:q.ZodNever,...K(r)});var an=class extends Z{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.void,received:n.parsedType}),_.INVALID}return(0,_.OK)(e.data)}};v.ZodVoid=an;an.create=r=>new an({typeName:q.ZodVoid,...K(r)});var yt=class r extends Z{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==A.ZodParsedType.array)return(0,_.addIssueToContext)(t,{code:I.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?I.ZodIssueCode.too_big:I.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:I.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:I.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 Me(t,o,t.path,a)))).then(o=>_.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Me(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:M.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:M.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:M.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};v.ZodArray=yt;yt.create=(r,e)=>new yt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:q.ZodArray,...K(e)});function sn(r){if(r instanceof Te){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ne.create(sn(n))}return new Te({...r._def,shape:()=>e})}else return r instanceof yt?new yt({...r._def,type:sn(r.element)}):r instanceof Ne?Ne.create(sn(r.unwrap())):r instanceof et?et.create(sn(r.unwrap())):r instanceof Qe?Qe.create(r.items.map(e=>sn(e))):r}var Te=class r extends Z{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 l=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(l,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:l.parsedType}),_.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ze&&this._def.unknownKeys==="strip"))for(let l in s.data)o.includes(l)||a.push(l);let c=[];for(let l of o){let f=i[l],p=s.data[l];c.push({key:{status:"valid",value:l},value:f._parse(new Me(s,p,s.path,l)),alwaysSet:l in s.data})}if(this._def.catchall instanceof Ze){let l=this._def.unknownKeys;if(l==="passthrough")for(let f of a)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(l==="strict")a.length>0&&((0,_.addIssueToContext)(s,{code:I.ZodIssueCode.unrecognized_keys,keys:a}),n.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let f of a){let p=s.data[f];c.push({key:{status:"valid",value:f},value:l._parse(new Me(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let f of c){let p=await f.key,b=await f.value;l.push({key:p,value:b,alwaysSet:f.alwaysSet})}return l}).then(l=>_.ParseStatus.mergeObjectSync(n,l)):_.ParseStatus.mergeObjectSync(n,c)}get shape(){return this._def.shape()}strict(e){return M.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:M.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:q.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 sn(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 Ne;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Iu(A.util.objectKeys(this.shape))}};v.ZodObject=Te;Te.create=(r,e)=>new Te({shape:()=>r,unknownKeys:"strip",catchall:Ze.create(),typeName:q.ZodObject,...K(e)});Te.strictCreate=(r,e)=>new Te({shape:()=>r,unknownKeys:"strict",catchall:Ze.create(),typeName:q.ZodObject,...K(e)});Te.lazycreate=(r,e)=>new Te({shape:r,unknownKeys:"strip",catchall:Ze.create(),typeName:q.ZodObject,...K(e)});var pr=class extends Z{_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 I.ZodError(a.ctx.common.issues));return(0,_.addIssueToContext)(t,{code:I.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 c of n){let l={...t,common:{...t.common,issues:[]},parent:null},f=c._parseSync({data:t.data,path:t.path,parent:l});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new I.ZodError(c));return(0,_.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_union,unionErrors:a}),_.INVALID}}get options(){return this._def.options}};v.ZodUnion=pr;pr.create=(r,e)=>new pr({options:r,typeName:q.ZodUnion,...K(e)});var mt=r=>r instanceof gr?mt(r.schema):r instanceof Ee?mt(r.innerType()):r instanceof yr?[r.value]:r instanceof vr?r.options:r instanceof br?A.util.objectValues(r.enum):r instanceof _r?mt(r._def.innerType):r instanceof hr?[void 0]:r instanceof fr?[null]:r instanceof Ne?[void 0,...mt(r.unwrap())]:r instanceof et?[null,...mt(r.unwrap())]:r instanceof Un||r instanceof kr?mt(r.unwrap()):r instanceof wr?mt(r._def.innerType):[],Ps=class r extends Z{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.object)return(0,_.addIssueToContext)(t,{code:I.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:I.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=mt(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:q.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...K(n)})}};v.ZodDiscriminatedUnion=Ps;function oo(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=oo(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=oo(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 mr=class extends Z{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,_.isAborted)(i)||(0,_.isAborted)(o))return _.INVALID;let a=oo(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:I.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}))}};v.ZodIntersection=mr;mr.create=(r,e,t)=>new mr({left:r,right:e,typeName:q.ZodIntersection,...K(t)});var Qe=class r extends Z{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.array)return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:n.parsedType}),_.INVALID;if(n.data.length<this._def.items.length)return(0,_.addIssueToContext)(n,{code:I.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:I.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 Me(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})}};v.ZodTuple=Qe;Qe.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Qe({items:r,typeName:q.ZodTuple,rest:null,...K(e)})};var js=class r extends Z{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:I.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 Me(n,a,n.path,a)),value:o._parse(new Me(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 Z?new r({keyType:e,valueType:t,typeName:q.ZodRecord,...K(n)}):new r({keyType:Mt.create(),valueType:e,typeName:q.ZodRecord,...K(t)})}};v.ZodRecord=js;var un=class extends Z{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:I.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,c],l)=>({key:s._parse(new Me(n,a,n.path,[l,"key"])),value:i._parse(new Me(n,c,n.path,[l,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of o){let l=await c.key,f=await c.value;if(l.status==="aborted"||f.status==="aborted")return _.INVALID;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(l.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let l=c.key,f=c.value;if(l.status==="aborted"||f.status==="aborted")return _.INVALID;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(l.value,f.value)}return{status:t.value,value:a}}}};v.ZodMap=un;un.create=(r,e,t)=>new un({valueType:e,keyType:r,typeName:q.ZodMap,...K(t)});var cn=class r extends Z{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.set)return(0,_.addIssueToContext)(n,{code:I.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:I.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:I.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 l=new Set;for(let f of c){if(f.status==="aborted")return _.INVALID;f.status==="dirty"&&t.dirty(),l.add(f.value)}return{status:t.value,value:l}}let a=[...n.data.values()].map((c,l)=>i._parse(new Me(n,c,n.path,l)));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:M.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:M.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};v.ZodSet=cn;cn.create=(r,e)=>new cn({valueType:r,minSize:null,maxSize:null,typeName:q.ZodSet,...K(e)});var Os=class r extends Z{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:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.function,received:t.parsedType}),_.INVALID;function n(a,c){return(0,_.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,$s.getErrorMap)(),$s.defaultErrorMap].filter(l=>!!l),issueData:{code:I.ZodIssueCode.invalid_arguments,argumentsError:c}})}function s(a,c){return(0,_.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,$s.getErrorMap)(),$s.defaultErrorMap].filter(l=>!!l),issueData:{code:I.ZodIssueCode.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Dt){let a=this;return(0,_.OK)(async function(...c){let l=new I.ZodError([]),f=await a._def.args.parseAsync(c,i).catch(T=>{throw l.addIssue(n(c,T)),l}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(T=>{throw l.addIssue(s(p,T)),l})})}else{let a=this;return(0,_.OK)(function(...c){let l=a._def.args.safeParse(c,i);if(!l.success)throw new I.ZodError([n(c,l.error)]);let f=Reflect.apply(o,this,l.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new I.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:Qe.create(e).rest(gt.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||Qe.create([]).rest(gt.create()),returns:t||gt.create(),typeName:q.ZodFunction,...K(n)})}};v.ZodFunction=Os;var gr=class extends Z{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})}};v.ZodLazy=gr;gr.create=(r,e)=>new gr({getter:r,typeName:q.ZodLazy,...K(e)});var yr=class extends Z{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(t,{received:t.data,code:I.ZodIssueCode.invalid_literal,expected:this._def.value}),_.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};v.ZodLiteral=yr;yr.create=(r,e)=>new yr({value:r,typeName:q.ZodLiteral,...K(e)});function Iu(r,e){return new vr({values:r,typeName:q.ZodEnum,...K(e)})}var vr=class r extends Z{_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:I.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:I.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})}};v.ZodEnum=vr;vr.create=Iu;var br=class extends Z{_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:I.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:I.ZodIssueCode.invalid_enum_value,options:s}),_.INVALID}return(0,_.OK)(e.data)}get enum(){return this._def.values}};v.ZodNativeEnum=br;br.create=(r,e)=>new br({values:r,typeName:q.ZodNativeEnum,...K(e)});var Dt=class extends Z{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:I.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})))}};v.ZodPromise=Dt;Dt.create=(r,e)=>new Dt({type:r,typeName:q.ZodPromise,...K(e)});var Ee=class extends Z{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===q.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 c=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return c.status==="aborted"?_.INVALID:c.status==="dirty"||t.value==="dirty"?(0,_.DIRTY)(c.value):c});{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 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"?_.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)}};v.ZodEffects=Ee;v.ZodTransformer=Ee;Ee.create=(r,e,t)=>new Ee({schema:r,typeName:q.ZodEffects,effect:e,...K(t)});Ee.createWithPreprocess=(r,e,t)=>new Ee({schema:e,effect:{type:"preprocess",transform:r},typeName:q.ZodEffects,...K(t)});var Ne=class extends Z{_parse(e){return this._getType(e)===A.ZodParsedType.undefined?(0,_.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};v.ZodOptional=Ne;Ne.create=(r,e)=>new Ne({innerType:r,typeName:q.ZodOptional,...K(e)});var et=class extends Z{_parse(e){return this._getType(e)===A.ZodParsedType.null?(0,_.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};v.ZodNullable=et;et.create=(r,e)=>new et({innerType:r,typeName:q.ZodNullable,...K(e)});var _r=class extends Z{_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}};v.ZodDefault=_r;_r.create=(r,e)=>new _r({innerType:r,typeName:q.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...K(e)});var wr=class extends Z{_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 I.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new I.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};v.ZodCatch=wr;wr.create=(r,e)=>new wr({innerType:r,typeName:q.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...K(e)});var ln=class extends Z{_parse(e){if(this._getType(e)!==A.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,_.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.nan,received:n.parsedType}),_.INVALID}return{status:"valid",value:e.data}}};v.ZodNaN=ln;ln.create=r=>new ln({typeName:q.ZodNaN,...K(r)});v.BRAND=Symbol("zod_brand");var Un=class extends Z{_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}};v.ZodBranded=Un;var qn=class r extends Z{_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:q.ZodPipeline})}};v.ZodPipeline=qn;var kr=class extends Z{_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}};v.ZodReadonly=kr;kr.create=(r,e)=>new kr({innerType:r,typeName:q.ZodReadonly,...K(e)});function Tu(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Ru(r,e={},t){return r?zt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Tu(e,n),c=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:c})}});if(!i){let o=Tu(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):zt.create()}v.late={object:Te.lazycreate};var q;(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"})(q||(v.ZodFirstPartyTypeKind=q={}));var xp=(r,e={message:`Input not instance of ${r.name}`})=>Ru(t=>t instanceof r,e);v.instanceof=xp;var Au=Mt.create;v.string=Au;var $u=ur.create;v.number=$u;var Cp=ln.create;v.nan=Cp;var Ep=cr.create;v.bigint=Ep;var Pu=lr.create;v.boolean=Pu;var Ip=dr.create;v.date=Ip;var Rp=on.create;v.symbol=Rp;var Ap=hr.create;v.undefined=Ap;var $p=fr.create;v.null=$p;var Pp=zt.create;v.any=Pp;var jp=gt.create;v.unknown=jp;var Op=Ze.create;v.never=Op;var Np=an.create;v.void=Np;var Mp=yt.create;v.array=Mp;var zp=Te.create;v.object=zp;var Dp=Te.strictCreate;v.strictObject=Dp;var Lp=pr.create;v.union=Lp;var Up=Ps.create;v.discriminatedUnion=Up;var qp=mr.create;v.intersection=qp;var Fp=Qe.create;v.tuple=Fp;var Bp=js.create;v.record=Bp;var Kp=un.create;v.map=Kp;var Zp=cn.create;v.set=Zp;var Vp=Os.create;v.function=Vp;var Hp=gr.create;v.lazy=Hp;var Gp=yr.create;v.literal=Gp;var Wp=vr.create;v.enum=Wp;var Jp=br.create;v.nativeEnum=Jp;var Yp=Dt.create;v.promise=Yp;var ju=Ee.create;v.effect=ju;v.transformer=ju;var Xp=Ne.create;v.optional=Xp;var Qp=et.create;v.nullable=Qp;var em=Ee.createWithPreprocess;v.preprocess=em;var tm=qn.create;v.pipeline=tm;var rm=()=>Au().optional();v.ostring=rm;var nm=()=>$u().optional();v.onumber=nm;var sm=()=>Pu().optional();v.oboolean=sm;v.coerce={string:(r=>Mt.create({...r,coerce:!0})),number:(r=>ur.create({...r,coerce:!0})),boolean:(r=>lr.create({...r,coerce:!0})),bigint:(r=>cr.create({...r,coerce:!0})),date:(r=>dr.create({...r,coerce:!0}))};v.NEVER=_.INVALID});var ao=Q(ze=>{"use strict";var im=ze&&ze.__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]})),dn=ze&&ze.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&im(e,r,t)};Object.defineProperty(ze,"__esModule",{value:!0});dn(Rs(),ze);dn(so(),ze);dn(_u(),ze);dn(Dn(),ze);dn(Ou(),ze);dn(Is(),ze)});var zu=Q(xe=>{"use strict";var Nu=xe&&xe.__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]})),om=xe&&xe.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),am=xe&&xe.__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)&&Nu(e,r,t);return om(e,r),e},um=xe&&xe.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Nu(e,r,t)};Object.defineProperty(xe,"__esModule",{value:!0});xe.z=void 0;var Mu=am(ao());xe.z=Mu;um(ao(),xe);xe.default=Mu});var pe=Q(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.AutopilotReportMsg=d.AutopilotNextResultMsg=d.AutopilotNextMsg=d.RunnerUpdateResultMsg=d.RunnerUpdateMsg=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=void 0;d.missingAgentCapabilities=cm;d.parseRunnerMsg=dm;d.parseServerMsg=hm;var u=zu();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.35";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 cm(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 lm=r=>r.includes(d.NEEDS_INPUT_COMMENT_MARKER)||d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));d.needsInputMarkerIn=lm;d.RunStatus=u.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);d.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];d.TriggerType=u.z.enum(["label_added","comment_keyword","status_changed"]);d.ActionType=u.z.enum(["plan_only","implement","respond","deploy"]);d.LabelAddedTrigger=u.z.object({type:u.z.literal("label_added"),label:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-planned"),failedLabel:u.z.string().min(1).default("agent-failed")});d.CommentKeywordTrigger=u.z.object({type:u.z.literal("comment_keyword"),keyword:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-implemented"),failedLabel:u.z.string().min(1).default("agent-failed")});d.StatusChangedTrigger=u.z.object({type:u.z.literal("status_changed"),status:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-deployed"),failedLabel:u.z.string().min(1).default("agent-failed")});d.TriggerConfig=u.z.discriminatedUnion("type",[d.LabelAddedTrigger,d.CommentKeywordTrigger,d.StatusChangedTrigger]);d.PlanOnlyAction=u.z.object({type:u.z.literal("plan_only"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(900),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default("")});d.ImplementAction=u.z.object({type:u.z.literal("implement"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(7200).default(1800),maxTurns:u.z.number().int().positive().max(500).default(120),requireApproval:u.z.boolean().default(!0),branchTemplate:u.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:u.z.string().min(1).default("main"),jiraTransition:u.z.string().optional(),jiraTransitionOnStart:u.z.string().optional(),jiraTransitionOnMerge:u.z.string().optional(),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default(""),updateMemory:u.z.boolean().default(!1),writeTests:u.z.boolean().default(!0),runTests:u.z.boolean().default(!0),mergeOnApprove:u.z.boolean().default(!0),mergeMethod:u.z.enum(["squash","merge","rebase"]).default("squash")});d.RespondAction=u.z.object({type:u.z.literal("respond"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(600),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default("")});d.DeployStep=u.z.object({name:u.z.string().min(1).max(120),run:u.z.string().min(1).max(4e3),continueOnError:u.z.boolean().default(!1)});d.PromotionMode=u.z.enum(["deploy_only","merge_and_deploy"]);d.EnvironmentConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),rank:u.z.number().int().nonnegative(),auditBeforeDeploy:u.z.enum(["","security","testing"]).default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default(""),useDedicatedCheckout:u.z.boolean().default(!1),promotionMode:d.PromotionMode.default("deploy_only"),ticketBranchTemplate:u.z.string().default("agent/{{issueKey}}"),steps:u.z.array(d.DeployStep).default([]),workdir:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(21600).default(1800),requiredSecrets:u.z.array(u.z.string()).default([]),requireApproval:u.z.boolean().default(!1),requireSyncCheck:u.z.boolean().default(!1),previousEnvBranch:u.z.string().optional(),deployFromColumn:u.z.string().default(""),deployToColumn:u.z.string().default("")});d.DeployAction=u.z.object({type:u.z.literal("deploy"),envSelection:u.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:u.z.string().optional(),requireStatus:u.z.string().optional()});d.ActionConfig=u.z.discriminatedUnion("type",[d.PlanOnlyAction,d.ImplementAction,d.RespondAction,d.DeployAction]);d.ProjectConfig=u.z.object({id:u.z.string(),name:u.z.string(),jiraProjectKey:u.z.string(),repoName:u.z.string(),jiraSiteUrl:u.z.string().default(""),defaultAgent:u.z.string().default("claude-code"),componentRoutes:u.z.array(u.z.object({component:u.z.string().min(1),repoName:u.z.string().min(1)})).default([])});d.RuleConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),enabled:u.z.boolean(),trigger:d.TriggerConfig,action:d.ActionConfig});d.HelloMsg=u.z.object({type:u.z.literal("hello"),protocolVersion:u.z.string(),runnerVersion:u.z.string(),platform:u.z.string(),justBooted:u.z.boolean().optional()});d.HeartbeatMsg=u.z.object({type:u.z.literal("heartbeat"),ts:u.z.string()});d.RunClaimMsg=u.z.object({type:u.z.literal("run.claim"),requestId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),triggerFingerprint:u.z.string(),dedupKey:u.z.string().optional(),triggeredByAccountId:u.z.string().optional()});d.RunLogMsg=u.z.object({type:u.z.literal("run.log"),runId:u.z.string(),seq:u.z.number().int().nonnegative(),ts:u.z.string(),level:u.z.enum(["info","warn","error","agent"]),message:u.z.string().max(16384)});d.RunUsageMsg=u.z.object({type:u.z.literal("run.usage"),runId:u.z.string(),inputTokens:u.z.number().int().nonnegative(),outputTokens:u.z.number().int().nonnegative(),cacheReadTokens:u.z.number().int().nonnegative().optional(),costUsd:u.z.number().nonnegative().optional(),turns:u.z.number().int().nonnegative().optional()});d.RunStatusMsg=u.z.object({type:u.z.literal("run.status"),runId:u.z.string(),status:d.RunStatus,error:u.z.string().optional(),errorKind:u.z.enum(["guard"]).optional(),costUsd:u.z.number().nonnegative().optional(),inputTokens:u.z.number().int().nonnegative().optional(),outputTokens:u.z.number().int().nonnegative().optional(),resultSummary:u.z.string().max(2e3).optional(),billingMode:u.z.enum(["subscription","api","unknown"]).optional(),model:u.z.string().max(200).optional(),prUrl:u.z.string().optional(),headSha:u.z.string().optional(),deployedRef:u.z.string().optional(),retryAvailable:u.z.boolean().optional()});d.ProjectTestResultMsg=u.z.object({type:u.z.literal("project.test.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string(),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")}))});d.RuleDiagnoseResultMsg=u.z.object({type:u.z.literal("rule.diagnose.result"),requestId:u.z.string(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string(),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")})),matchedCount:u.z.number().int().nonnegative(),excludedCount:u.z.number().int().nonnegative(),excludedSample:u.z.array(u.z.string()).max(5)});d.DeployClaimMsg=u.z.object({type:u.z.literal("deploy.claim"),requestId:u.z.string(),projectId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environmentName:u.z.string(),requestedByAccountId:u.z.string().optional(),requestedByDisplayName:u.z.string().default(""),dedupKey:u.z.string(),triggerFingerprint:u.z.string()});d.DeployClaimResultMsg=u.z.object({type:u.z.literal("deploy.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),environment:d.EnvironmentConfig.optional(),reason:u.z.string().optional(),code:u.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});d.JiraUsersResultMsg=u.z.object({type:u.z.literal("jira.users.result"),requestId:u.z.string(),ok:u.z.boolean(),users:u.z.array(u.z.object({accountId:u.z.string(),displayName:u.z.string(),email:u.z.string().default(""),active:u.z.boolean().default(!0)})).default([]),error:u.z.string().optional()});d.ChatStreamMsg=u.z.object({type:u.z.literal("chat.stream"),requestId:u.z.string(),seq:u.z.number().int().nonnegative(),text:u.z.string().max(8e3)});d.ChatUsageMsg=u.z.object({type:u.z.literal("chat.usage"),requestId:u.z.string(),inputTokens:u.z.number().int().nonnegative(),outputTokens:u.z.number().int().nonnegative(),cacheReadTokens:u.z.number().int().nonnegative().optional(),turns:u.z.number().int().nonnegative().optional()});d.ChatListMsg=u.z.object({type:u.z.literal("chat.list"),requestId:u.z.string(),projectId:u.z.string()});d.ChatListResultMsg=u.z.object({type:u.z.literal("chat.list.result"),requestId:u.z.string(),sessions:u.z.array(u.z.object({sessionId:u.z.string(),title:u.z.string().default(""),updatedAt:u.z.string().default(""),messageCount:u.z.number().int().nonnegative().default(0)})).default([])});d.ChatLoadMsg=u.z.object({type:u.z.literal("chat.load"),requestId:u.z.string(),sessionId:u.z.string()});d.ChatLoadResultMsg=u.z.object({type:u.z.literal("chat.load.result"),requestId:u.z.string(),ok:u.z.boolean(),projectId:u.z.string().default(""),messages:u.z.array(u.z.object({role:u.z.enum(["user","agent"]),text:u.z.string()})).default([]),error:u.z.string().optional()});d.RepoDocsMsg=u.z.object({type:u.z.literal("repo.docs"),requestId:u.z.string(),projectId:u.z.string()});d.RepoDocsResultMsg=u.z.object({type:u.z.literal("repo.docs.result"),requestId:u.z.string(),ok:u.z.boolean(),docs:u.z.array(u.z.object({path:u.z.string(),sizeBytes:u.z.number().int().nonnegative().default(0),updatedAt:u.z.string().default("")})).default([]),error:u.z.string().optional()});d.RepoDocReadMsg=u.z.object({type:u.z.literal("repo.doc.read"),requestId:u.z.string(),projectId:u.z.string(),path:u.z.string().max(400)});d.RepoDocReadResultMsg=u.z.object({type:u.z.literal("repo.doc.read.result"),requestId:u.z.string(),ok:u.z.boolean(),path:u.z.string().default(""),content:u.z.string().default(""),truncated:u.z.boolean().default(!1),error:u.z.string().optional()});d.BoardFetchMsg=u.z.object({type:u.z.literal("board.fetch"),requestId:u.z.string(),projectId:u.z.string()});d.BoardFetchResultMsg=u.z.object({type:u.z.literal("board.fetch.result"),requestId:u.z.string(),ok:u.z.boolean(),browseBaseUrl:u.z.string().default(""),columns:u.z.array(u.z.object({name:u.z.string(),issues:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),labels:u.z.array(u.z.string()).default([])})).default([])})).default([]),error:u.z.string().optional()});d.BoardTriggerMsg=u.z.object({type:u.z.literal("board.trigger"),requestId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),comment:u.z.string().max(2e3).default(""),removeLabel:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),reimplement:u.z.boolean().default(!1)});d.BoardTriggerResultMsg=u.z.object({type:u.z.literal("board.trigger.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});d.EpicListMsg=u.z.object({type:u.z.literal("epic.list"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().default("")});d.EpicChild=u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string(),statusCategory:u.z.string(),labels:u.z.array(u.z.string()).default([])});d.EpicListResultMsg=u.z.object({type:u.z.literal("epic.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),epics:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string()})).default([]),children:u.z.array(d.EpicChild).default([])});d.EpicSuggestMsg=u.z.object({type:u.z.literal("epic.suggest"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().min(1),model:u.z.string().default("")});d.EpicSuggestResultMsg=u.z.object({type:u.z.literal("epic.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),issueKey:u.z.string().default(""),reason:u.z.string().default(""),considered:u.z.number().int().default(0)});d.AuditRole=u.z.enum(["security","testing","architecture"]);d.AuditSeverity=u.z.enum(["critical","high","medium","low","info"]);d.AuditScope=u.z.object({kind:u.z.enum(["repo","ticket","branch"]).default("repo"),ref:u.z.string().default("")});d.AuditFinding=u.z.object({id:u.z.string().min(1),title:u.z.string().min(1),ruleId:u.z.string().max(20).default(""),severity:d.AuditSeverity,area:u.z.string().default(""),evidence:u.z.array(u.z.object({file:u.z.string().min(1),line:u.z.number().int().positive().optional(),note:u.z.string().default("")})).min(1),fix:u.z.string().default("")});d.AuditRecord=u.z.object({id:u.z.string(),role:d.AuditRole,createdAt:u.z.string(),model:u.z.string().default(""),summary:u.z.string().default(""),packNames:u.z.array(u.z.string()).default([]),findings:u.z.array(d.AuditFinding).default([]),costUsd:u.z.number().default(0),review:u.z.object({selected:u.z.array(u.z.string()),updatedAt:u.z.string()}).optional(),verdicts:u.z.record(u.z.object({verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().default(""),by:u.z.string().default(""),at:u.z.string().default("")})).default({}),lessonsWritten:u.z.array(u.z.string()).default([]),ticketed:u.z.record(u.z.string()).default({}),scope:d.AuditScope.default({kind:"repo",ref:""}),testRun:u.z.array(u.z.object({command:u.z.string(),exitCode:u.z.number().int(),durationMs:u.z.number().int().default(0),tail:u.z.string().default("")})).optional()});d.AuditStartMsg=u.z.object({type:u.z.literal("audit.start"),requestId:u.z.string(),projectId:u.z.string(),role:d.AuditRole,model:u.z.string().default(""),scope:d.AuditScope.default({kind:"repo",ref:""})});d.AuditStartResultMsg=u.z.object({type:u.z.literal("audit.start.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditListMsg=u.z.object({type:u.z.literal("audit.list"),requestId:u.z.string(),projectId:u.z.string()});d.AuditStatsMsg=u.z.object({type:u.z.literal("audit.stats"),requestId:u.z.string(),projectIds:u.z.array(u.z.string()).max(200).default([]),since:u.z.string().default("")});d.AuditStatsResultMsg=u.z.object({type:u.z.literal("audit.stats.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),byProject:u.z.record(u.z.object({audits:u.z.number().int().default(0),findings:u.z.number().int().default(0),valid:u.z.number().int().default(0),falsePositive:u.z.number().int().default(0),wontFix:u.z.number().int().default(0),unreviewed:u.z.number().int().default(0)})).default({})});d.AuditListResultMsg=u.z.object({type:u.z.literal("audit.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audits:u.z.array(u.z.object({id:u.z.string(),role:d.AuditRole,createdAt:u.z.string(),findingCount:u.z.number().int(),bySeverity:u.z.record(u.z.number().int()).default({})})).default([])});d.AuditGetMsg=u.z.object({type:u.z.literal("audit.get"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string()});d.AuditGetResultMsg=u.z.object({type:u.z.literal("audit.get.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditReviewMsg=u.z.object({type:u.z.literal("audit.review"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string(),selected:u.z.array(u.z.string()).optional(),ticketed:u.z.array(u.z.object({findingId:u.z.string(),issueKey:u.z.string()})).default([]),verdicts:u.z.array(u.z.object({findingId:u.z.string(),verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().max(2e3).default("")})).default([]),verdictBy:u.z.string().default("")});d.AuditReviewResultMsg=u.z.object({type:u.z.literal("audit.review.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.KnowledgeListMsg=u.z.object({type:u.z.literal("knowledge.list"),requestId:u.z.string(),projectId:u.z.string()});d.KnowledgeFile=u.z.object({role:d.AuditRole,level:u.z.enum(["global","org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string(),content:u.z.string(),editable:u.z.boolean().default(!1)});d.KnowledgeListResultMsg=u.z.object({type:u.z.literal("knowledge.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),files:u.z.array(d.KnowledgeFile).default([])});d.KnowledgeSaveMsg=u.z.object({type:u.z.literal("knowledge.save"),requestId:u.z.string(),projectId:u.z.string(),role:d.AuditRole,level:u.z.enum(["org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string().min(1).max(100),content:u.z.string().max(6e4),append:u.z.boolean().default(!1),by:u.z.string().default("")});d.KnowledgeSaveResultMsg=u.z.object({type:u.z.literal("knowledge.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});d.TeamCredsMsg=u.z.object({type:u.z.literal("team.creds"),requestId:u.z.string(),emails:u.z.array(u.z.string()).max(200)});d.TeamCredsResultMsg=u.z.object({type:u.z.literal("team.creds.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),githubShared:u.z.boolean().default(!1),sharedGithubLogin:u.z.string().default(""),entries:u.z.array(u.z.object({email:u.z.string(),jira:u.z.enum(["own","runner-account","missing"]),jiraAs:u.z.string().default(""),github:u.z.enum(["own","shared","missing"]),githubAs:u.z.string().default("")})).default([])});d.ChatFile=u.z.object({name:u.z.string().min(1).max(255),contentBase64:u.z.string().min(1).max(6e6)});d.ChatTurnMsg=u.z.object({type:u.z.literal("chat.turn"),requestId:u.z.string(),projectId:u.z.string(),sessionId:u.z.string().optional(),message:u.z.string().min(1).max(2e4),userName:u.z.string().default(""),model:u.z.string().default(""),files:u.z.array(d.ChatFile).max(8).default([])});d.ChatTurnResultMsg=u.z.object({type:u.z.literal("chat.turn.result"),requestId:u.z.string(),ok:u.z.boolean(),sessionId:u.z.string().default(""),reply:u.z.string().default(""),error:u.z.string().optional(),inputTokens:u.z.number().int().nonnegative().default(0),outputTokens:u.z.number().int().nonnegative().default(0),cacheReadTokens:u.z.number().int().nonnegative().default(0),costUsd:u.z.number().nonnegative().default(0),model:u.z.string().max(200).default("")});d.ChatCreateTicketMsg=u.z.object({type:u.z.literal("chat.create.ticket"),requestId:u.z.string(),projectId:u.z.string(),summary:u.z.string().min(1).max(250),description:u.z.string().default(""),triggerComment:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),asEpic:u.z.boolean().default(!1),children:u.z.array(u.z.object({summary:u.z.string().min(1),description:u.z.string().default("")})).max(20).default([]),files:u.z.array(d.ChatFile).max(8).default([])});d.ChatCreateTicketResultMsg=u.z.object({type:u.z.literal("chat.create.ticket.result"),requestId:u.z.string(),ok:u.z.boolean(),issueKey:u.z.string().default(""),error:u.z.string().optional(),childKeys:u.z.array(u.z.string()).default([])});d.EnvPreflightMsg=u.z.object({type:u.z.literal("env.preflight"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string().default(""),steps:u.z.array(d.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),workdir:u.z.string().default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default("")});d.EnvPreflightResultMsg=u.z.object({type:u.z.literal("env.preflight.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string().default(""),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")})).default([])});d.DeploySuggestResultMsg=u.z.object({type:u.z.literal("deploy.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),steps:u.z.array(d.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),notes:u.z.string().default(""),error:u.z.string().optional()});d.SetupStatusMsg=u.z.object({type:u.z.literal("setup.status"),requestId:u.z.string(),repoNames:u.z.array(u.z.string()).max(100).default([])});d.SetupStatusResultMsg=u.z.object({type:u.z.literal("setup.status.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),jiraConfigured:u.z.boolean().default(!1),jiraEmail:u.z.string().default(""),claude:u.z.object({installed:u.z.boolean(),version:u.z.string().default(""),loggedIn:u.z.boolean()}).optional(),githubTokenSet:u.z.boolean().default(!1),githubLogin:u.z.string().default(""),deploysEnabled:u.z.boolean().default(!1),jiraUserCount:u.z.number().int().default(0),repos:u.z.array(u.z.object({repoName:u.z.string(),mapped:u.z.boolean(),pathExists:u.z.boolean().default(!1),isGit:u.z.boolean().default(!1),claudeMd:u.z.boolean().default(!1),deployMd:u.z.boolean().default(!1),testMd:u.z.boolean().default(!1),defaultBranch:u.z.string().default(""),githubToken:u.z.boolean().default(!1),githubTokenOwn:u.z.boolean().default(!1)})).default([])});d.SetupClaudeMdGenerateMsg=u.z.object({type:u.z.literal("setup.claudemd.generate"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),streamId:u.z.string().default("")});d.SetupClaudeMdGenerateResultMsg=u.z.object({type:u.z.literal("setup.claudemd.generate.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),content:u.z.string().default("")});d.SetupClaudeMdSaveMsg=u.z.object({type:u.z.literal("setup.claudemd.save"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy"]).default("claude"),overwrite:u.z.boolean().default(!1),content:u.z.string().max(1e5)});d.SetupClaudeMdSaveResultMsg=u.z.object({type:u.z.literal("setup.claudemd.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});d.RunnerUpdateMsg=u.z.object({type:u.z.literal("runner.update"),requestId:u.z.string()});d.RunnerUpdateResultMsg=u.z.object({type:u.z.literal("runner.update.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});d.AutopilotNextMsg=u.z.object({type:u.z.literal("autopilot.next"),requestId:u.z.string()});d.AutopilotNextResultMsg=u.z.object({type:u.z.literal("autopilot.next.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),item:u.z.object({id:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),ruleId:u.z.string(),baseOverride:u.z.string().default(""),branchOverride:u.z.string().default(""),continueBranch:u.z.boolean().default(!1)}).nullable().default(null),pausedUntil:u.z.string().default("")});d.AutopilotReportMsg=u.z.object({type:u.z.literal("autopilot.report"),requestId:u.z.string(),itemId:u.z.string(),outcome:u.z.enum(["claimed","failed","paused"]),runId:u.z.string().default(""),error:u.z.string().default("")});d.RunnerToServerMsg=u.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.RunnerUpdateResultMsg,d.AuditStatsResultMsg,d.AutopilotNextMsg,d.AutopilotReportMsg]);d.HelloAckMsg=u.z.object({type:u.z.literal("hello.ack"),runnerId:u.z.string(),runnerName:u.z.string(),serverTime:u.z.string()});d.ConfigMsg=u.z.object({type:u.z.literal("config"),projects:u.z.array(d.ProjectConfig),rules:u.z.array(d.RuleConfig),environments:u.z.array(d.EnvironmentConfig).default([]),pollingPaused:u.z.boolean().default(!1)});d.RunClaimResultMsg=u.z.object({type:u.z.literal("run.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),reason:u.z.string().optional(),claudeProfile:u.z.string().optional(),actorEmail:u.z.string().optional()});d.ProjectTestMsg=u.z.object({type:u.z.literal("project.test"),requestId:u.z.string(),projectId:u.z.string()});d.RuleDiagnoseMsg=u.z.object({type:u.z.literal("rule.diagnose"),requestId:u.z.string(),ruleId:u.z.string()});d.RunCancelMsg=u.z.object({type:u.z.literal("run.cancel"),runId:u.z.string()});d.RunApprovedMsg=u.z.object({type:u.z.literal("run.approved"),runId:u.z.string(),headSha:u.z.string().optional()});d.RunRejectedMsg=u.z.object({type:u.z.literal("run.rejected"),runId:u.z.string()});d.RunRetryPushMsg=u.z.object({type:u.z.literal("run.retryPush"),runId:u.z.string()});d.DeployStartMsg=u.z.object({type:u.z.literal("deploy.start"),runId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environment:d.EnvironmentConfig,requestedBy:u.z.string().default(""),attempt:u.z.number().int().positive().default(1)});d.DeployFixMsg=u.z.object({type:u.z.literal("deploy.fix"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),steps:u.z.array(u.z.object({name:u.z.string(),run:u.z.string(),continueOnError:u.z.boolean().default(!1)})),failedStep:u.z.string().default(""),errorText:u.z.string().max(8e3).default("")});d.DeploySuggestMsg=u.z.object({type:u.z.literal("deploy.suggest"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),notes:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(1800).default(300)});d.JiraUsersMsg=u.z.object({type:u.z.literal("jira.users"),requestId:u.z.string(),query:u.z.string().default("")});d.ServerToRunnerMsg=u.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.RunnerUpdateMsg,d.AuditStatsMsg,d.AutopilotNextResultMsg]);d.EnrollRequest=u.z.object({enrollToken:u.z.string().min(10),name:u.z.string().min(1).max(100),platform:u.z.string(),runnerVersion:u.z.string()});d.EnrollResponse=u.z.object({runnerId:u.z.string(),runnerToken:u.z.string(),controlPlaneWsUrl:u.z.string()});function dm(r){return d.RunnerToServerMsg.parse(r)}function hm(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 Za(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})}Ga.Command=Ji});var Ya=ee(Oe=>{var{Argument:Ha}=gs(),{Command:Yi}=Va(),{CommanderError:Ah,InvalidArgumentError:Wa}=Nn(),{Help:$h}=Fi(),{Option:Ja}=Gi();Oe.program=new Yi;Oe.createCommand=r=>new Yi(r);Oe.createOption=(r,e)=>new Ja(r,e);Oe.createArgument=(r,e)=>new Ha(r,e);Oe.Command=Yi;Oe.Option=Ja;Oe.Argument=Ha;Oe.Help=$h;Oe.CommanderError=Ah;Oe.InvalidArgumentError=Wa;Oe.InvalidOptionArgumentError=Wa});var Un=ee(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.getParsedType=oe.ZodParsedType=oe.objectUtil=oe.util=void 0;var io;(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})(io||(oe.util=io={}));var _u;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(_u||(oe.objectUtil=_u={}));oe.ZodParsedType=io.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);var Jf=r=>{switch(typeof r){case"undefined":return oe.ZodParsedType.undefined;case"string":return oe.ZodParsedType.string;case"number":return Number.isNaN(r)?oe.ZodParsedType.nan:oe.ZodParsedType.number;case"boolean":return oe.ZodParsedType.boolean;case"function":return oe.ZodParsedType.function;case"bigint":return oe.ZodParsedType.bigint;case"symbol":return oe.ZodParsedType.symbol;case"object":return Array.isArray(r)?oe.ZodParsedType.array:r===null?oe.ZodParsedType.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?oe.ZodParsedType.promise:typeof Map<"u"&&r instanceof Map?oe.ZodParsedType.map:typeof Set<"u"&&r instanceof Set?oe.ZodParsedType.set:typeof Date<"u"&&r instanceof Date?oe.ZodParsedType.date:oe.ZodParsedType.object;default:return oe.ZodParsedType.unknown}};oe.getParsedType=Jf});var As=ee(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.ZodError=Nt.quotelessJson=Nt.ZodIssueCode=void 0;var ku=Un();Nt.ZodIssueCode=ku.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 Yf=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:");Nt.quotelessJson=Yf;var qn=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=n=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)n._errors.push(t(o));else{let a=n,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,ku.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()}};Nt.ZodError=qn;qn.create=r=>new qn(r)});var ao=ee(oo=>{"use strict";Object.defineProperty(oo,"__esModule",{value:!0});var ke=As(),cr=Un(),Xf=(r,e)=>{let t;switch(r.code){case ke.ZodIssueCode.invalid_type:r.received===cr.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,cr.util.jsonStringifyReplacer)}`;break;case ke.ZodIssueCode.unrecognized_keys:t=`Unrecognized key(s) in object: ${cr.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 ${cr.util.joinValues(r.options)}`;break;case ke.ZodIssueCode.invalid_enum_value:t=`Invalid enum value. Expected ${cr.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}"`:cr.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,cr.util.assertNever(r)}return{message:t}};oo.default=Xf});var $s=ee(Mt=>{"use strict";var Qf=Mt&&Mt.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Mt,"__esModule",{value:!0});Mt.defaultErrorMap=void 0;Mt.setErrorMap=ep;Mt.getErrorMap=tp;var Su=Qf(ao());Mt.defaultErrorMap=Su.default;var Tu=Su.default;function ep(r){Tu=r}function tp(){return Tu}});var lo=ee(ne=>{"use strict";var rp=ne&&ne.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(ne,"__esModule",{value:!0});ne.isAsync=ne.isValid=ne.isDirty=ne.isAborted=ne.OK=ne.DIRTY=ne.INVALID=ne.ParseStatus=ne.EMPTY_PATH=ne.makeIssue=void 0;ne.addIssueToContext=ip;var np=$s(),xu=rp(ao()),sp=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};ne.makeIssue=sp;ne.EMPTY_PATH=[];function ip(r,e){let t=(0,np.getErrorMap)(),n=(0,ne.makeIssue)({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===xu.default?void 0:xu.default].filter(s=>!!s)});r.common.issues.push(n)}var uo=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 ne.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 ne.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}}};ne.ParseStatus=uo;ne.INVALID=Object.freeze({status:"aborted"});var op=r=>({status:"dirty",value:r});ne.DIRTY=op;var ap=r=>({status:"valid",value:r});ne.OK=ap;var up=r=>r.status==="aborted";ne.isAborted=up;var lp=r=>r.status==="dirty";ne.isDirty=lp;var cp=r=>r.status==="valid";ne.isValid=cp;var dp=r=>typeof Promise<"u"&&r instanceof Promise;ne.isAsync=dp});var Eu=ee(Cu=>{"use strict";Object.defineProperty(Cu,"__esModule",{value:!0})});var Ru=ee(Ps=>{"use strict";Object.defineProperty(Ps,"__esModule",{value:!0});Ps.errorUtil=void 0;var Iu;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(Iu||(Ps.errorUtil=Iu={}))});var qu=ee(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.discriminatedUnion=y.date=y.boolean=y.bigint=y.array=y.any=y.coerce=y.ZodFirstPartyTypeKind=y.late=y.ZodSchema=y.Schema=y.ZodReadonly=y.ZodPipeline=y.ZodBranded=y.BRAND=y.ZodNaN=y.ZodCatch=y.ZodDefault=y.ZodNullable=y.ZodOptional=y.ZodTransformer=y.ZodEffects=y.ZodPromise=y.ZodNativeEnum=y.ZodEnum=y.ZodLiteral=y.ZodLazy=y.ZodFunction=y.ZodSet=y.ZodMap=y.ZodRecord=y.ZodTuple=y.ZodIntersection=y.ZodDiscriminatedUnion=y.ZodUnion=y.ZodObject=y.ZodArray=y.ZodVoid=y.ZodNever=y.ZodUnknown=y.ZodAny=y.ZodNull=y.ZodUndefined=y.ZodSymbol=y.ZodDate=y.ZodBoolean=y.ZodBigInt=y.ZodNumber=y.ZodString=y.ZodType=void 0;y.NEVER=y.void=y.unknown=y.union=y.undefined=y.tuple=y.transformer=y.symbol=y.string=y.strictObject=y.set=y.record=y.promise=y.preprocess=y.pipeline=y.ostring=y.optional=y.onumber=y.oboolean=y.object=y.number=y.nullable=y.null=y.never=y.nativeEnum=y.nan=y.map=y.literal=y.lazy=y.intersection=y.instanceof=y.function=y.enum=y.effect=void 0;y.datetimeRegex=Ou;y.custom=Mu;var I=As(),js=$s(),N=Ru(),b=lo(),A=Un(),Le=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}},Au=(r,e)=>{if((0,b.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 I.ZodError(r.common.issues);return this._error=t,this._error}}};function Z(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var G=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 b.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,b.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 Au(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,b.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,b.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,b.isAsync)(s)?s:Promise.resolve(s));return Au(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.ZodIssueCode.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new $e({schema:this,typeName:q.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 De.create(this,this._def)}nullable(){return rt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return yt.create(this)}promise(){return Lt.create(this,this._def)}or(e){return yr.create([this,e],this._def)}and(e){return vr.create(this,e,this._def)}transform(e){return new $e({...Z(this._def),schema:this,typeName:q.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new Sr({...Z(this._def),innerType:this,defaultValue:t,typeName:q.ZodDefault})}brand(){return new Fn({typeName:q.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new Tr({...Z(this._def),innerType:this,catchValue:t,typeName:q.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Bn.create(this,e)}readonly(){return xr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};y.ZodType=G;y.Schema=G;y.ZodSchema=G;var hp=/^c[^\s-]{8,}$/i,fp=/^[0-9a-z]+$/,pp=/^[0-9A-HJKMNP-TV-Z]{26}$/i,mp=/^[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,gp=/^[a-z0-9_-]{21}$/i,yp=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,vp=/^[-+]?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)?)??$/,bp=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,wp="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",co,_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])$/,kp=/^(?:(?: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])$/,Sp=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Tp=/^(([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])$/,xp=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Cp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Pu="((\\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])))",Ep=new RegExp(`^${Pu}$`);function ju(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 Ip(r){return new RegExp(`^${ju(r)}$`)}function Ou(r){let e=`${Pu}T${ju(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 Rp(r,e){return!!((e==="v4"||!e)&&_p.test(r)||(e==="v6"||!e)&&Sp.test(r))}function Ap(r,e){if(!yp.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 $p(r,e){return!!((e==="v4"||!e)&&kp.test(r)||(e==="v6"||!e)&&Tp.test(r))}var zt=class r extends G{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==A.ZodParsedType.string){let i=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(i,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.string,received:i.parsedType}),b.INVALID}let n=new b.ParseStatus,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{code:I.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,b.addIssueToContext)(s,{code:I.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,b.addIssueToContext)(s,{code:I.ZodIssueCode.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&(0,b.addIssueToContext)(s,{code:I.ZodIssueCode.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")bp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"email",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")co||(co=new RegExp(wp,"u")),co.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"emoji",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")mp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"uuid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")gp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"nanoid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")hp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"cuid",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")fp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"cuid2",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")pp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"ulid",code:I.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,b.addIssueToContext)(s,{validation:"url",code:I.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,b.addIssueToContext)(s,{validation:"regex",code:I.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,b.addIssueToContext)(s,{code:I.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,b.addIssueToContext)(s,{code:I.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,b.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Ou(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?Ep.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Ip(i).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{code:I.ZodIssueCode.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?vp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"duration",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Rp(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"ip",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?Ap(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"jwt",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?$p(e.data,i.version)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"cidr",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?xp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"base64",code:I.ZodIssueCode.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Cp.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{validation:"base64url",code:I.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:I.ZodIssueCode.invalid_string,...N.errorUtil.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...N.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...N.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...N.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...N.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...N.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...N.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...N.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...N.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...N.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...N.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...N.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...N.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...N.errorUtil.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...N.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...N.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...N.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...N.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...N.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...N.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...N.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...N.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...N.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...N.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,N.errorUtil.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodString=zt;zt.create=r=>new zt({checks:[],typeName:q.ZodString,coerce:r?.coerce??!1,...Z(r)});function Pp(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 dr=class r extends G{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,b.addIssueToContext)(i,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.number,received:i.parsedType}),b.INVALID}let n,s=new b.ParseStatus;for(let i of this._def.checks)i.kind==="int"?A.util.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),(0,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Pp(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),(0,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.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,N.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:N.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:N.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:N.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:N.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:N.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:N.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:N.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:N.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&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)}};y.ZodNumber=dr;dr.create=r=>new dr({checks:[],typeName:q.ZodNumber,coerce:r?.coerce||!1,...Z(r)});var hr=class r extends G{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 b.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,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.bigint,received:t.parsedType}),b.INVALID}gte(e,t){return this.setLimit("min",e,!0,N.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,N.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,N.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,N.errorUtil.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:N.errorUtil.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:N.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:N.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:N.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:N.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:N.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};y.ZodBigInt=hr;hr.create=r=>new hr({checks:[],typeName:q.ZodBigInt,coerce:r?.coerce??!1,...Z(r)});var fr=class extends G{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==A.ZodParsedType.boolean){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.boolean,received:n.parsedType}),b.INVALID}return(0,b.OK)(e.data)}};y.ZodBoolean=fr;fr.create=r=>new fr({typeName:q.ZodBoolean,coerce:r?.coerce||!1,...Z(r)});var pr=class r extends G{_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,b.addIssueToContext)(i,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.date,received:i.parsedType}),b.INVALID}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(i,{code:I.ZodIssueCode.invalid_date}),b.INVALID}let n=new b.ParseStatus,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),(0,b.addIssueToContext)(s,{code:I.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,b.addIssueToContext)(s,{code:I.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:N.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:N.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};y.ZodDate=pr;pr.create=r=>new pr({checks:[],coerce:r?.coerce||!1,typeName:q.ZodDate,...Z(r)});var un=class extends G{_parse(e){if(this._getType(e)!==A.ZodParsedType.symbol){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.symbol,received:n.parsedType}),b.INVALID}return(0,b.OK)(e.data)}};y.ZodSymbol=un;un.create=r=>new un({typeName:q.ZodSymbol,...Z(r)});var mr=class extends G{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.undefined,received:n.parsedType}),b.INVALID}return(0,b.OK)(e.data)}};y.ZodUndefined=mr;mr.create=r=>new mr({typeName:q.ZodUndefined,...Z(r)});var gr=class extends G{_parse(e){if(this._getType(e)!==A.ZodParsedType.null){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.null,received:n.parsedType}),b.INVALID}return(0,b.OK)(e.data)}};y.ZodNull=gr;gr.create=r=>new gr({typeName:q.ZodNull,...Z(r)});var Dt=class extends G{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,b.OK)(e.data)}};y.ZodAny=Dt;Dt.create=r=>new Dt({typeName:q.ZodAny,...Z(r)});var gt=class extends G{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,b.OK)(e.data)}};y.ZodUnknown=gt;gt.create=r=>new gt({typeName:q.ZodUnknown,...Z(r)});var Ve=class extends G{_parse(e){let t=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.never,received:t.parsedType}),b.INVALID}};y.ZodNever=Ve;Ve.create=r=>new Ve({typeName:q.ZodNever,...Z(r)});var ln=class extends G{_parse(e){if(this._getType(e)!==A.ZodParsedType.undefined){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.void,received:n.parsedType}),b.INVALID}return(0,b.OK)(e.data)}};y.ZodVoid=ln;ln.create=r=>new ln({typeName:q.ZodVoid,...Z(r)});var yt=class r extends G{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==A.ZodParsedType.array)return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:t.parsedType}),b.INVALID;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&((0,b.addIssueToContext)(t,{code:o?I.ZodIssueCode.too_big:I.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,b.addIssueToContext)(t,{code:I.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,b.addIssueToContext)(t,{code:I.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 Le(t,o,t.path,a)))).then(o=>b.ParseStatus.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Le(t,o,t.path,a)));return b.ParseStatus.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:N.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:N.errorUtil.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:N.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}};y.ZodArray=yt;yt.create=(r,e)=>new yt({type:r,minLength:null,maxLength:null,exactLength:null,typeName:q.ZodArray,...Z(e)});function an(r){if(r instanceof Ee){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=De.create(an(n))}return new Ee({...r._def,shape:()=>e})}else return r instanceof yt?new yt({...r._def,type:an(r.element)}):r instanceof De?De.create(an(r.unwrap())):r instanceof rt?rt.create(an(r.unwrap())):r instanceof tt?tt.create(r.items.map(e=>an(e))):r}var Ee=class r extends G{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,b.addIssueToContext)(c,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:c.parsedType}),b.INVALID}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ve&&this._def.unknownKeys==="strip"))for(let c in s.data)o.includes(c)||a.push(c);let l=[];for(let c of o){let f=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:f._parse(new Le(s,p,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof Ve){let c=this._def.unknownKeys;if(c==="passthrough")for(let f of a)l.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(c==="strict")a.length>0&&((0,b.addIssueToContext)(s,{code:I.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];l.push({key:{status:"valid",value:f},value:c._parse(new Le(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let f of l){let p=await f.key,v=await f.value;c.push({key:p,value:v,alwaysSet:f.alwaysSet})}return c}).then(c=>b.ParseStatus.mergeObjectSync(n,c)):b.ParseStatus.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return N.errorUtil.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:N.errorUtil.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:q.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 an(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 De;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Nu(A.util.objectKeys(this.shape))}};y.ZodObject=Ee;Ee.create=(r,e)=>new Ee({shape:()=>r,unknownKeys:"strip",catchall:Ve.create(),typeName:q.ZodObject,...Z(e)});Ee.strictCreate=(r,e)=>new Ee({shape:()=>r,unknownKeys:"strict",catchall:Ve.create(),typeName:q.ZodObject,...Z(e)});Ee.lazycreate=(r,e)=>new Ee({shape:r,unknownKeys:"strip",catchall:Ve.create(),typeName:q.ZodObject,...Z(e)});var yr=class extends G{_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 I.ZodError(a.ctx.common.issues));return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_union,unionErrors:o}),b.INVALID}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},f=l._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(l=>new I.ZodError(l));return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_union,unionErrors:a}),b.INVALID}}get options(){return this._def.options}};y.ZodUnion=yr;yr.create=(r,e)=>new yr({options:r,typeName:q.ZodUnion,...Z(e)});var mt=r=>r instanceof br?mt(r.schema):r instanceof $e?mt(r.innerType()):r instanceof wr?[r.value]:r instanceof _r?r.options:r instanceof kr?A.util.objectValues(r.enum):r instanceof Sr?mt(r._def.innerType):r instanceof mr?[void 0]:r instanceof gr?[null]:r instanceof De?[void 0,...mt(r.unwrap())]:r instanceof rt?[null,...mt(r.unwrap())]:r instanceof Fn||r instanceof xr?mt(r.unwrap()):r instanceof Tr?mt(r._def.innerType):[],Os=class r extends G{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.object)return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:t.parsedType}),b.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,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),b.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=mt(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:q.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...Z(n)})}};y.ZodDiscriminatedUnion=Os;function ho(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 l=ho(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.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],l=ho(o,a);if(!l.valid)return{valid:!1};s.push(l.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 vr=class extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if((0,b.isAborted)(i)||(0,b.isAborted)(o))return b.INVALID;let a=ho(i.value,o.value);return a.valid?(((0,b.isDirty)(i)||(0,b.isDirty)(o))&&t.dirty(),{status:t.value,value:a.data}):((0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_intersection_types}),b.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};y.ZodIntersection=vr;vr.create=(r,e,t)=>new vr({left:r,right:e,typeName:q.ZodIntersection,...Z(t)});var tt=class r extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.array)return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.array,received:n.parsedType}),b.INVALID;if(n.data.length<this._def.items.length)return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),b.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,b.addIssueToContext)(n,{code:I.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new Le(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>b.ParseStatus.mergeArray(t,o)):b.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};y.ZodTuple=tt;tt.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new tt({items:r,typeName:q.ZodTuple,rest:null,...Z(e)})};var Ns=class r extends G{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,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.object,received:n.parsedType}),b.INVALID;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new Le(n,a,n.path,a)),value:o._parse(new Le(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?b.ParseStatus.mergeObjectAsync(t,s):b.ParseStatus.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,n){return t instanceof G?new r({keyType:e,valueType:t,typeName:q.ZodRecord,...Z(n)}):new r({keyType:zt.create(),valueType:e,typeName:q.ZodRecord,...Z(t)})}};y.ZodRecord=Ns;var cn=class extends G{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,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.map,received:n.parsedType}),b.INVALID;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new Le(n,a,n.path,[c,"key"])),value:i._parse(new Le(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,f=await l.value;if(c.status==="aborted"||f.status==="aborted")return b.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 l of o){let c=l.key,f=l.value;if(c.status==="aborted"||f.status==="aborted")return b.INVALID;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}}}};y.ZodMap=cn;cn.create=(r,e,t)=>new cn({valueType:e,keyType:r,typeName:q.ZodMap,...Z(t)});var dn=class r extends G{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==A.ZodParsedType.set)return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.set,received:n.parsedType}),b.INVALID;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&((0,b.addIssueToContext)(n,{code:I.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,b.addIssueToContext)(n,{code:I.ZodIssueCode.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let f of l){if(f.status==="aborted")return b.INVALID;f.status==="dirty"&&t.dirty(),c.add(f.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new Le(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:N.errorUtil.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:N.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};y.ZodSet=dn;dn.create=(r,e)=>new dn({valueType:r,minSize:null,maxSize:null,typeName:q.ZodSet,...Z(e)});var Ms=class r extends G{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==A.ZodParsedType.function)return(0,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.function,received:t.parsedType}),b.INVALID;function n(a,l){return(0,b.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,js.getErrorMap)(),js.defaultErrorMap].filter(c=>!!c),issueData:{code:I.ZodIssueCode.invalid_arguments,argumentsError:l}})}function s(a,l){return(0,b.makeIssue)({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,js.getErrorMap)(),js.defaultErrorMap].filter(c=>!!c),issueData:{code:I.ZodIssueCode.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Lt){let a=this;return(0,b.OK)(async function(...l){let c=new I.ZodError([]),f=await a._def.args.parseAsync(l,i).catch(k=>{throw c.addIssue(n(l,k)),c}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(k=>{throw c.addIssue(s(p,k)),c})})}else{let a=this;return(0,b.OK)(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new I.ZodError([n(l,c.error)]);let f=Reflect.apply(o,this,c.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new I.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:tt.create(e).rest(gt.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||tt.create([]).rest(gt.create()),returns:t||gt.create(),typeName:q.ZodFunction,...Z(n)})}};y.ZodFunction=Ms;var br=class extends G{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};y.ZodLazy=br;br.create=(r,e)=>new br({getter:r,typeName:q.ZodLazy,...Z(e)});var wr=class extends G{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(t,{received:t.data,code:I.ZodIssueCode.invalid_literal,expected:this._def.value}),b.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}};y.ZodLiteral=wr;wr.create=(r,e)=>new wr({value:r,typeName:q.ZodLiteral,...Z(e)});function Nu(r,e){return new _r({values:r,typeName:q.ZodEnum,...Z(e)})}var _r=class r extends G{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,b.addIssueToContext)(t,{expected:A.util.joinValues(n),received:t.parsedType,code:I.ZodIssueCode.invalid_type}),b.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,b.addIssueToContext)(t,{received:t.data,code:I.ZodIssueCode.invalid_enum_value,options:n}),b.INVALID}return(0,b.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(n=>!e.includes(n)),{...this._def,...t})}};y.ZodEnum=_r;_r.create=Nu;var kr=class extends G{_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,b.addIssueToContext)(n,{expected:A.util.joinValues(s),received:n.parsedType,code:I.ZodIssueCode.invalid_type}),b.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,b.addIssueToContext)(n,{received:n.data,code:I.ZodIssueCode.invalid_enum_value,options:s}),b.INVALID}return(0,b.OK)(e.data)}get enum(){return this._def.values}};y.ZodNativeEnum=kr;kr.create=(r,e)=>new kr({values:r,typeName:q.ZodNativeEnum,...Z(e)});var Lt=class extends G{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,b.addIssueToContext)(t,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.promise,received:t.parsedType}),b.INVALID;let n=t.parsedType===A.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,b.OK)(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};y.ZodPromise=Lt;Lt.create=(r,e)=>new Lt({type:r,typeName:q.ZodPromise,...Z(e)});var $e=class extends G{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===q.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,b.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 b.INVALID;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?b.INVALID:l.status==="dirty"||t.value==="dirty"?(0,b.DIRTY)(l.value):l});{if(t.value==="aborted")return b.INVALID;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?b.INVALID:a.status==="dirty"||t.value==="dirty"?(0,b.DIRTY)(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?b.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"?b.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,b.isValid)(o))return b.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,b.isValid)(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):b.INVALID);A.util.assertNever(s)}};y.ZodEffects=$e;y.ZodTransformer=$e;$e.create=(r,e,t)=>new $e({schema:r,typeName:q.ZodEffects,effect:e,...Z(t)});$e.createWithPreprocess=(r,e,t)=>new $e({schema:e,effect:{type:"preprocess",transform:r},typeName:q.ZodEffects,...Z(t)});var De=class extends G{_parse(e){return this._getType(e)===A.ZodParsedType.undefined?(0,b.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodOptional=De;De.create=(r,e)=>new De({innerType:r,typeName:q.ZodOptional,...Z(e)});var rt=class extends G{_parse(e){return this._getType(e)===A.ZodParsedType.null?(0,b.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};y.ZodNullable=rt;rt.create=(r,e)=>new rt({innerType:r,typeName:q.ZodNullable,...Z(e)});var Sr=class extends G{_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}};y.ZodDefault=Sr;Sr.create=(r,e)=>new Sr({innerType:r,typeName:q.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Z(e)});var Tr=class extends G{_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,b.isAsync)(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new I.ZodError(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new I.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};y.ZodCatch=Tr;Tr.create=(r,e)=>new Tr({innerType:r,typeName:q.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Z(e)});var hn=class extends G{_parse(e){if(this._getType(e)!==A.ZodParsedType.nan){let n=this._getOrReturnCtx(e);return(0,b.addIssueToContext)(n,{code:I.ZodIssueCode.invalid_type,expected:A.ZodParsedType.nan,received:n.parsedType}),b.INVALID}return{status:"valid",value:e.data}}};y.ZodNaN=hn;hn.create=r=>new hn({typeName:q.ZodNaN,...Z(r)});y.BRAND=Symbol("zod_brand");var Fn=class extends G{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};y.ZodBranded=Fn;var Bn=class r extends G{_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"?b.INVALID:i.status==="dirty"?(t.dirty(),(0,b.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"?b.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:q.ZodPipeline})}};y.ZodPipeline=Bn;var xr=class extends G{_parse(e){let t=this._def.innerType._parse(e),n=s=>((0,b.isValid)(s)&&(s.value=Object.freeze(s.value)),s);return(0,b.isAsync)(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};y.ZodReadonly=xr;xr.create=(r,e)=>new xr({innerType:r,typeName:q.ZodReadonly,...Z(e)});function $u(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Mu(r,e={},t){return r?Dt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=$u(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=$u(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):Dt.create()}y.late={object:Ee.lazycreate};var q;(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"})(q||(y.ZodFirstPartyTypeKind=q={}));var jp=(r,e={message:`Input not instance of ${r.name}`})=>Mu(t=>t instanceof r,e);y.instanceof=jp;var zu=zt.create;y.string=zu;var Du=dr.create;y.number=Du;var Op=hn.create;y.nan=Op;var Np=hr.create;y.bigint=Np;var Lu=fr.create;y.boolean=Lu;var Mp=pr.create;y.date=Mp;var zp=un.create;y.symbol=zp;var Dp=mr.create;y.undefined=Dp;var Lp=gr.create;y.null=Lp;var Up=Dt.create;y.any=Up;var qp=gt.create;y.unknown=qp;var Fp=Ve.create;y.never=Fp;var Bp=ln.create;y.void=Bp;var Kp=yt.create;y.array=Kp;var Zp=Ee.create;y.object=Zp;var Gp=Ee.strictCreate;y.strictObject=Gp;var Vp=yr.create;y.union=Vp;var Hp=Os.create;y.discriminatedUnion=Hp;var Wp=vr.create;y.intersection=Wp;var Jp=tt.create;y.tuple=Jp;var Yp=Ns.create;y.record=Yp;var Xp=cn.create;y.map=Xp;var Qp=dn.create;y.set=Qp;var em=Ms.create;y.function=em;var tm=br.create;y.lazy=tm;var rm=wr.create;y.literal=rm;var nm=_r.create;y.enum=nm;var sm=kr.create;y.nativeEnum=sm;var im=Lt.create;y.promise=im;var Uu=$e.create;y.effect=Uu;y.transformer=Uu;var om=De.create;y.optional=om;var am=rt.create;y.nullable=am;var um=$e.createWithPreprocess;y.preprocess=um;var lm=Bn.create;y.pipeline=lm;var cm=()=>zu().optional();y.ostring=cm;var dm=()=>Du().optional();y.onumber=dm;var hm=()=>Lu().optional();y.oboolean=hm;y.coerce={string:(r=>zt.create({...r,coerce:!0})),number:(r=>dr.create({...r,coerce:!0})),boolean:(r=>fr.create({...r,coerce:!0})),bigint:(r=>hr.create({...r,coerce:!0})),date:(r=>pr.create({...r,coerce:!0}))};y.NEVER=b.INVALID});var fo=ee(Ue=>{"use strict";var fm=Ue&&Ue.__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]})),fn=Ue&&Ue.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&fm(e,r,t)};Object.defineProperty(Ue,"__esModule",{value:!0});fn($s(),Ue);fn(lo(),Ue);fn(Eu(),Ue);fn(Un(),Ue);fn(qu(),Ue);fn(As(),Ue)});var Ku=ee(Ie=>{"use strict";var Fu=Ie&&Ie.__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]})),pm=Ie&&Ie.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),mm=Ie&&Ie.__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)&&Fu(e,r,t);return pm(e,r),e},gm=Ie&&Ie.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Fu(e,r,t)};Object.defineProperty(Ie,"__esModule",{value:!0});Ie.z=void 0;var Bu=mm(fo());Ie.z=Bu;gm(fo(),Ie);Ie.default=Bu});var ve=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.AutopilotNextMsg=d.RunnerUpdateResultMsg=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=void 0;d.missingAgentCapabilities=ym;d.parseRunnerMsg=bm;d.parseServerMsg=wm;var u=Ku();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.37";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 ym(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 vm=r=>r.includes(d.NEEDS_INPUT_COMMENT_MARKER)||d.LEGACY_NEEDS_INPUT_COMMENT_MARKERS.some(e=>r.includes(e));d.needsInputMarkerIn=vm;d.RunStatus=u.z.enum(["queued","running","posting","awaiting_approval","needs_input","succeeded","failed","timed_out"]);d.ACTIVE_RUN_STATUSES=["queued","running","posting","awaiting_approval"];d.TriggerType=u.z.enum(["label_added","comment_keyword","status_changed"]);d.ActionType=u.z.enum(["plan_only","implement","respond","deploy"]);d.LabelAddedTrigger=u.z.object({type:u.z.literal("label_added"),label:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-planned"),failedLabel:u.z.string().min(1).default("agent-failed")});d.CommentKeywordTrigger=u.z.object({type:u.z.literal("comment_keyword"),keyword:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-implemented"),failedLabel:u.z.string().min(1).default("agent-failed")});d.StatusChangedTrigger=u.z.object({type:u.z.literal("status_changed"),status:u.z.string().min(1),doneLabel:u.z.string().min(1).default("agent-deployed"),failedLabel:u.z.string().min(1).default("agent-failed")});d.TriggerConfig=u.z.discriminatedUnion("type",[d.LabelAddedTrigger,d.CommentKeywordTrigger,d.StatusChangedTrigger]);d.PlanOnlyAction=u.z.object({type:u.z.literal("plan_only"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(900),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default("")});d.ImplementAction=u.z.object({type:u.z.literal("implement"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(7200).default(1800),maxTurns:u.z.number().int().positive().max(500).default(120),requireApproval:u.z.boolean().default(!0),branchTemplate:u.z.string().min(1).default("agent/{{issueKey}}").refine(r=>r.includes("{{issueKey}}"),{message:"branchTemplate must contain {{issueKey}}"}),baseBranch:u.z.string().min(1).default("main"),jiraTransition:u.z.string().optional(),jiraTransitionOnStart:u.z.string().optional(),jiraTransitionOnMerge:u.z.string().optional(),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default(""),updateMemory:u.z.boolean().default(!1),writeTests:u.z.boolean().default(!0),runTests:u.z.boolean().default(!0),mergeOnApprove:u.z.boolean().default(!0),mergeMethod:u.z.enum(["squash","merge","rebase"]).default("squash")});d.RespondAction=u.z.object({type:u.z.literal("respond"),promptTemplate:u.z.string().min(1),timeoutSeconds:u.z.number().int().positive().max(3600).default(600),agent:u.z.string().default(d.DEFAULT_AGENT_ID),model:u.z.string().default("")});d.DeployStep=u.z.object({name:u.z.string().min(1).max(120),run:u.z.string().min(1).max(4e3),continueOnError:u.z.boolean().default(!1)});d.PromotionMode=u.z.enum(["deploy_only","merge_and_deploy"]);d.EnvironmentConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),rank:u.z.number().int().nonnegative(),auditBeforeDeploy:u.z.enum(["","security","testing"]).default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default(""),useDedicatedCheckout:u.z.boolean().default(!1),promotionMode:d.PromotionMode.default("deploy_only"),ticketBranchTemplate:u.z.string().default("agent/{{issueKey}}"),steps:u.z.array(d.DeployStep).default([]),workdir:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(21600).default(1800),requiredSecrets:u.z.array(u.z.string()).default([]),requireApproval:u.z.boolean().default(!1),requireSyncCheck:u.z.boolean().default(!1),previousEnvBranch:u.z.string().optional(),deployFromColumn:u.z.string().default(""),deployToColumn:u.z.string().default("")});d.DeployAction=u.z.object({type:u.z.literal("deploy"),envSelection:u.z.enum(["fixed","from_comment"]).default("from_comment"),environmentId:u.z.string().optional(),requireStatus:u.z.string().optional()});d.ActionConfig=u.z.discriminatedUnion("type",[d.PlanOnlyAction,d.ImplementAction,d.RespondAction,d.DeployAction]);d.ProjectConfig=u.z.object({id:u.z.string(),name:u.z.string(),jiraProjectKey:u.z.string(),repoName:u.z.string(),jiraSiteUrl:u.z.string().default(""),defaultAgent:u.z.string().default("claude-code"),componentRoutes:u.z.array(u.z.object({component:u.z.string().min(1),repoName:u.z.string().min(1)})).default([])});d.RuleConfig=u.z.object({id:u.z.string(),projectId:u.z.string(),name:u.z.string(),enabled:u.z.boolean(),trigger:d.TriggerConfig,action:d.ActionConfig});d.HelloMsg=u.z.object({type:u.z.literal("hello"),protocolVersion:u.z.string(),runnerVersion:u.z.string(),platform:u.z.string(),justBooted:u.z.boolean().optional()});d.HeartbeatMsg=u.z.object({type:u.z.literal("heartbeat"),ts:u.z.string()});d.RunClaimMsg=u.z.object({type:u.z.literal("run.claim"),requestId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),triggerFingerprint:u.z.string(),dedupKey:u.z.string().optional(),triggeredByAccountId:u.z.string().optional()});d.RunLogMsg=u.z.object({type:u.z.literal("run.log"),runId:u.z.string(),seq:u.z.number().int().nonnegative(),ts:u.z.string(),level:u.z.enum(["info","warn","error","agent"]),message:u.z.string().max(16384)});d.RunUsageMsg=u.z.object({type:u.z.literal("run.usage"),runId:u.z.string(),inputTokens:u.z.number().int().nonnegative(),outputTokens:u.z.number().int().nonnegative(),cacheReadTokens:u.z.number().int().nonnegative().optional(),costUsd:u.z.number().nonnegative().optional(),turns:u.z.number().int().nonnegative().optional()});d.RunStatusMsg=u.z.object({type:u.z.literal("run.status"),runId:u.z.string(),status:d.RunStatus,error:u.z.string().optional(),errorKind:u.z.enum(["guard"]).optional(),costUsd:u.z.number().nonnegative().optional(),inputTokens:u.z.number().int().nonnegative().optional(),outputTokens:u.z.number().int().nonnegative().optional(),resultSummary:u.z.string().max(2e3).optional(),billingMode:u.z.enum(["subscription","api","unknown"]).optional(),model:u.z.string().max(200).optional(),prUrl:u.z.string().optional(),headSha:u.z.string().optional(),deployedRef:u.z.string().optional(),retryAvailable:u.z.boolean().optional()});d.ProjectTestResultMsg=u.z.object({type:u.z.literal("project.test.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string(),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")}))});d.RuleDiagnoseResultMsg=u.z.object({type:u.z.literal("rule.diagnose.result"),requestId:u.z.string(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string(),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")})),matchedCount:u.z.number().int().nonnegative(),excludedCount:u.z.number().int().nonnegative(),excludedSample:u.z.array(u.z.string()).max(5)});d.DeployClaimMsg=u.z.object({type:u.z.literal("deploy.claim"),requestId:u.z.string(),projectId:u.z.string(),ruleId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environmentName:u.z.string(),requestedByAccountId:u.z.string().optional(),requestedByDisplayName:u.z.string().default(""),dedupKey:u.z.string(),triggerFingerprint:u.z.string()});d.DeployClaimResultMsg=u.z.object({type:u.z.literal("deploy.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),environment:d.EnvironmentConfig.optional(),reason:u.z.string().optional(),code:u.z.enum(["ok","duplicate","unknown_environment","not_permitted","unlinked_jira_account","promotion_order","jira_disabled","rule_disabled","cap"]).optional()});d.JiraUsersResultMsg=u.z.object({type:u.z.literal("jira.users.result"),requestId:u.z.string(),ok:u.z.boolean(),users:u.z.array(u.z.object({accountId:u.z.string(),displayName:u.z.string(),email:u.z.string().default(""),active:u.z.boolean().default(!0)})).default([]),error:u.z.string().optional()});d.ChatStreamMsg=u.z.object({type:u.z.literal("chat.stream"),requestId:u.z.string(),seq:u.z.number().int().nonnegative(),text:u.z.string().max(8e3)});d.ChatUsageMsg=u.z.object({type:u.z.literal("chat.usage"),requestId:u.z.string(),inputTokens:u.z.number().int().nonnegative(),outputTokens:u.z.number().int().nonnegative(),cacheReadTokens:u.z.number().int().nonnegative().optional(),turns:u.z.number().int().nonnegative().optional()});d.ChatListMsg=u.z.object({type:u.z.literal("chat.list"),requestId:u.z.string(),projectId:u.z.string()});d.ChatListResultMsg=u.z.object({type:u.z.literal("chat.list.result"),requestId:u.z.string(),sessions:u.z.array(u.z.object({sessionId:u.z.string(),title:u.z.string().default(""),updatedAt:u.z.string().default(""),messageCount:u.z.number().int().nonnegative().default(0)})).default([])});d.ChatLoadMsg=u.z.object({type:u.z.literal("chat.load"),requestId:u.z.string(),sessionId:u.z.string()});d.ChatLoadResultMsg=u.z.object({type:u.z.literal("chat.load.result"),requestId:u.z.string(),ok:u.z.boolean(),projectId:u.z.string().default(""),messages:u.z.array(u.z.object({role:u.z.enum(["user","agent"]),text:u.z.string()})).default([]),error:u.z.string().optional()});d.RepoDocsMsg=u.z.object({type:u.z.literal("repo.docs"),requestId:u.z.string(),projectId:u.z.string()});d.RepoDocsResultMsg=u.z.object({type:u.z.literal("repo.docs.result"),requestId:u.z.string(),ok:u.z.boolean(),docs:u.z.array(u.z.object({path:u.z.string(),sizeBytes:u.z.number().int().nonnegative().default(0),updatedAt:u.z.string().default("")})).default([]),error:u.z.string().optional()});d.RepoDocReadMsg=u.z.object({type:u.z.literal("repo.doc.read"),requestId:u.z.string(),projectId:u.z.string(),path:u.z.string().max(400)});d.RepoDocReadResultMsg=u.z.object({type:u.z.literal("repo.doc.read.result"),requestId:u.z.string(),ok:u.z.boolean(),path:u.z.string().default(""),content:u.z.string().default(""),truncated:u.z.boolean().default(!1),error:u.z.string().optional()});d.BoardFetchMsg=u.z.object({type:u.z.literal("board.fetch"),requestId:u.z.string(),projectId:u.z.string()});d.BoardFetchResultMsg=u.z.object({type:u.z.literal("board.fetch.result"),requestId:u.z.string(),ok:u.z.boolean(),browseBaseUrl:u.z.string().default(""),columns:u.z.array(u.z.object({name:u.z.string(),issues:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),labels:u.z.array(u.z.string()).default([])})).default([])})).default([]),error:u.z.string().optional()});d.BoardTriggerMsg=u.z.object({type:u.z.literal("board.trigger"),requestId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),comment:u.z.string().max(2e3).default(""),removeLabel:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),reimplement:u.z.boolean().default(!1)});d.BoardTriggerResultMsg=u.z.object({type:u.z.literal("board.trigger.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});d.EpicListMsg=u.z.object({type:u.z.literal("epic.list"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().default("")});d.EpicChild=u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string(),statusCategory:u.z.string(),labels:u.z.array(u.z.string()).default([])});d.EpicListResultMsg=u.z.object({type:u.z.literal("epic.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),epics:u.z.array(u.z.object({key:u.z.string(),summary:u.z.string(),status:u.z.string()})).default([]),children:u.z.array(d.EpicChild).default([])});d.EpicSuggestMsg=u.z.object({type:u.z.literal("epic.suggest"),requestId:u.z.string(),projectId:u.z.string(),epicKey:u.z.string().min(1),model:u.z.string().default("")});d.EpicSuggestResultMsg=u.z.object({type:u.z.literal("epic.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),issueKey:u.z.string().default(""),reason:u.z.string().default(""),considered:u.z.number().int().default(0)});d.AuditRole=u.z.enum(["security","testing","architecture"]);d.AuditSeverity=u.z.enum(["critical","high","medium","low","info"]);d.AuditScope=u.z.object({kind:u.z.enum(["repo","ticket","branch"]).default("repo"),ref:u.z.string().default("")});d.AuditFinding=u.z.object({id:u.z.string().min(1),title:u.z.string().min(1),ruleId:u.z.string().max(20).default(""),severity:d.AuditSeverity,area:u.z.string().default(""),evidence:u.z.array(u.z.object({file:u.z.string().min(1),line:u.z.number().int().positive().optional(),note:u.z.string().default("")})).min(1),fix:u.z.string().default("")});d.AuditRecord=u.z.object({id:u.z.string(),role:d.AuditRole,createdAt:u.z.string(),model:u.z.string().default(""),summary:u.z.string().default(""),packNames:u.z.array(u.z.string()).default([]),findings:u.z.array(d.AuditFinding).default([]),costUsd:u.z.number().default(0),review:u.z.object({selected:u.z.array(u.z.string()),updatedAt:u.z.string()}).optional(),verdicts:u.z.record(u.z.object({verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().default(""),by:u.z.string().default(""),at:u.z.string().default("")})).default({}),lessonsWritten:u.z.array(u.z.string()).default([]),ticketed:u.z.record(u.z.string()).default({}),scope:d.AuditScope.default({kind:"repo",ref:""}),testRun:u.z.array(u.z.object({command:u.z.string(),exitCode:u.z.number().int(),durationMs:u.z.number().int().default(0),tail:u.z.string().default("")})).optional()});d.AuditStartMsg=u.z.object({type:u.z.literal("audit.start"),requestId:u.z.string(),projectId:u.z.string(),role:d.AuditRole,model:u.z.string().default(""),scope:d.AuditScope.default({kind:"repo",ref:""})});d.AuditStartResultMsg=u.z.object({type:u.z.literal("audit.start.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditListMsg=u.z.object({type:u.z.literal("audit.list"),requestId:u.z.string(),projectId:u.z.string()});d.AuditStatsMsg=u.z.object({type:u.z.literal("audit.stats"),requestId:u.z.string(),projectIds:u.z.array(u.z.string()).max(200).default([]),since:u.z.string().default("")});d.AuditStatsResultMsg=u.z.object({type:u.z.literal("audit.stats.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),byProject:u.z.record(u.z.object({audits:u.z.number().int().default(0),findings:u.z.number().int().default(0),valid:u.z.number().int().default(0),falsePositive:u.z.number().int().default(0),wontFix:u.z.number().int().default(0),unreviewed:u.z.number().int().default(0)})).default({})});d.AuditListResultMsg=u.z.object({type:u.z.literal("audit.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audits:u.z.array(u.z.object({id:u.z.string(),role:d.AuditRole,createdAt:u.z.string(),findingCount:u.z.number().int(),bySeverity:u.z.record(u.z.number().int()).default({})})).default([])});d.AuditGetMsg=u.z.object({type:u.z.literal("audit.get"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string()});d.AuditGetResultMsg=u.z.object({type:u.z.literal("audit.get.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.AuditReviewMsg=u.z.object({type:u.z.literal("audit.review"),requestId:u.z.string(),projectId:u.z.string(),auditId:u.z.string(),selected:u.z.array(u.z.string()).optional(),ticketed:u.z.array(u.z.object({findingId:u.z.string(),issueKey:u.z.string()})).default([]),verdicts:u.z.array(u.z.object({findingId:u.z.string(),verdict:u.z.enum(["valid","false-positive","wont-fix"]),note:u.z.string().max(2e3).default("")})).default([]),verdictBy:u.z.string().default("")});d.AuditReviewResultMsg=u.z.object({type:u.z.literal("audit.review.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),audit:d.AuditRecord.optional()});d.KnowledgeListMsg=u.z.object({type:u.z.literal("knowledge.list"),requestId:u.z.string(),projectId:u.z.string()});d.KnowledgeFile=u.z.object({role:d.AuditRole,level:u.z.enum(["global","org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string(),content:u.z.string(),editable:u.z.boolean().default(!1)});d.KnowledgeListResultMsg=u.z.object({type:u.z.literal("knowledge.list.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),files:u.z.array(d.KnowledgeFile).default([])});d.KnowledgeSaveMsg=u.z.object({type:u.z.literal("knowledge.save"),requestId:u.z.string(),projectId:u.z.string(),role:d.AuditRole,level:u.z.enum(["org","project"]),source:u.z.enum(["pack","lessons"]),name:u.z.string().min(1).max(100),content:u.z.string().max(6e4),append:u.z.boolean().default(!1),by:u.z.string().default("")});d.KnowledgeSaveResultMsg=u.z.object({type:u.z.literal("knowledge.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional()});d.TeamCredsMsg=u.z.object({type:u.z.literal("team.creds"),requestId:u.z.string(),emails:u.z.array(u.z.string()).max(200)});d.TeamCredsResultMsg=u.z.object({type:u.z.literal("team.creds.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),githubShared:u.z.boolean().default(!1),sharedGithubLogin:u.z.string().default(""),entries:u.z.array(u.z.object({email:u.z.string(),jira:u.z.enum(["own","runner-account","missing"]),jiraAs:u.z.string().default(""),github:u.z.enum(["own","shared","missing"]),githubAs:u.z.string().default("")})).default([])});d.ChatFile=u.z.object({name:u.z.string().min(1).max(255),contentBase64:u.z.string().min(1).max(6e6)});d.ChatTurnMsg=u.z.object({type:u.z.literal("chat.turn"),requestId:u.z.string(),projectId:u.z.string(),sessionId:u.z.string().optional(),message:u.z.string().min(1).max(2e4),userName:u.z.string().default(""),model:u.z.string().default(""),files:u.z.array(d.ChatFile).max(8).default([])});d.ChatTurnResultMsg=u.z.object({type:u.z.literal("chat.turn.result"),requestId:u.z.string(),ok:u.z.boolean(),sessionId:u.z.string().default(""),reply:u.z.string().default(""),error:u.z.string().optional(),inputTokens:u.z.number().int().nonnegative().default(0),outputTokens:u.z.number().int().nonnegative().default(0),cacheReadTokens:u.z.number().int().nonnegative().default(0),costUsd:u.z.number().nonnegative().default(0),model:u.z.string().max(200).default("")});d.ChatCreateTicketMsg=u.z.object({type:u.z.literal("chat.create.ticket"),requestId:u.z.string(),projectId:u.z.string(),summary:u.z.string().min(1).max(250),description:u.z.string().default(""),triggerComment:u.z.string().default(""),requestedBy:u.z.string().default(""),requestedByEmail:u.z.string().default(""),asEpic:u.z.boolean().default(!1),children:u.z.array(u.z.object({summary:u.z.string().min(1),description:u.z.string().default("")})).max(20).default([]),files:u.z.array(d.ChatFile).max(8).default([])});d.ChatCreateTicketResultMsg=u.z.object({type:u.z.literal("chat.create.ticket.result"),requestId:u.z.string(),ok:u.z.boolean(),issueKey:u.z.string().default(""),error:u.z.string().optional(),childKeys:u.z.array(u.z.string()).default([])});d.EnvPreflightMsg=u.z.object({type:u.z.literal("env.preflight"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string().default(""),steps:u.z.array(d.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),workdir:u.z.string().default(""),branch:u.z.string().default(""),publicUrl:u.z.string().default("")});d.EnvPreflightResultMsg=u.z.object({type:u.z.literal("env.preflight.result"),requestId:u.z.string(),ok:u.z.boolean(),checks:u.z.array(u.z.object({name:u.z.string(),ok:u.z.boolean(),detail:u.z.string().default(""),kind:u.z.enum(["connection","content"]).default("connection"),fix:u.z.array(u.z.string()).default([]),fixNote:u.z.string().default("")})).default([])});d.DeploySuggestResultMsg=u.z.object({type:u.z.literal("deploy.suggest.result"),requestId:u.z.string(),ok:u.z.boolean(),steps:u.z.array(d.DeployStep).default([]),requiredSecrets:u.z.array(u.z.string()).default([]),notes:u.z.string().default(""),error:u.z.string().optional(),docPath:u.z.string().default(""),docContent:u.z.string().max(1e5).default("")});d.SetupStatusMsg=u.z.object({type:u.z.literal("setup.status"),requestId:u.z.string(),repoNames:u.z.array(u.z.string()).max(100).default([])});d.SetupStatusResultMsg=u.z.object({type:u.z.literal("setup.status.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),jiraConfigured:u.z.boolean().default(!1),jiraEmail:u.z.string().default(""),claude:u.z.object({installed:u.z.boolean(),version:u.z.string().default(""),loggedIn:u.z.boolean()}).optional(),githubTokenSet:u.z.boolean().default(!1),githubLogin:u.z.string().default(""),deploysEnabled:u.z.boolean().default(!1),jiraUserCount:u.z.number().int().default(0),repos:u.z.array(u.z.object({repoName:u.z.string(),mapped:u.z.boolean(),pathExists:u.z.boolean().default(!1),isGit:u.z.boolean().default(!1),claudeMd:u.z.boolean().default(!1),deployMd:u.z.boolean().default(!1),testMd:u.z.boolean().default(!1),defaultBranch:u.z.string().default(""),githubToken:u.z.boolean().default(!1),githubTokenOwn:u.z.boolean().default(!1)})).default([])});d.SetupClaudeMdGenerateMsg=u.z.object({type:u.z.literal("setup.claudemd.generate"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy","design"]).default("claude"),streamId:u.z.string().default("")});d.SetupClaudeMdGenerateResultMsg=u.z.object({type:u.z.literal("setup.claudemd.generate.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),content:u.z.string().default("")});d.SetupClaudeMdSaveMsg=u.z.object({type:u.z.literal("setup.claudemd.save"),requestId:u.z.string(),projectId:u.z.string(),kind:u.z.enum(["claude","deploy","design"]).default("claude"),overwrite:u.z.boolean().default(!1),content:u.z.string().max(1e5)});d.SetupClaudeMdSaveResultMsg=u.z.object({type:u.z.literal("setup.claudemd.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});d.RepoDocSaveMsg=u.z.object({type:u.z.literal("repo.doc.save"),requestId:u.z.string(),projectId:u.z.string(),relPath:u.z.string().min(1).max(200),overwrite:u.z.boolean().default(!1),content:u.z.string().max(2e5)});d.RepoDocSaveResultMsg=u.z.object({type:u.z.literal("repo.doc.save.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default("")});d.RunnerUpdateMsg=u.z.object({type:u.z.literal("runner.update"),requestId:u.z.string()});d.RunnerUpdateResultMsg=u.z.object({type:u.z.literal("runner.update.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),note:u.z.string().default(""),scheduled:u.z.boolean().default(!1)});d.AutopilotNextMsg=u.z.object({type:u.z.literal("autopilot.next"),requestId:u.z.string()});d.AutopilotNextResultMsg=u.z.object({type:u.z.literal("autopilot.next.result"),requestId:u.z.string(),ok:u.z.boolean(),error:u.z.string().optional(),item:u.z.object({id:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),ruleId:u.z.string(),baseOverride:u.z.string().default(""),branchOverride:u.z.string().default(""),continueBranch:u.z.boolean().default(!1)}).nullable().default(null),pausedUntil:u.z.string().default("")});d.AutopilotReportMsg=u.z.object({type:u.z.literal("autopilot.report"),requestId:u.z.string(),itemId:u.z.string(),outcome:u.z.enum(["claimed","failed","paused"]),runId:u.z.string().default(""),error:u.z.string().default("")});d.RunnerToServerMsg=u.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.AuditStatsResultMsg,d.AutopilotNextMsg,d.AutopilotReportMsg]);d.HelloAckMsg=u.z.object({type:u.z.literal("hello.ack"),runnerId:u.z.string(),runnerName:u.z.string(),serverTime:u.z.string()});d.ConfigMsg=u.z.object({type:u.z.literal("config"),projects:u.z.array(d.ProjectConfig),rules:u.z.array(d.RuleConfig),environments:u.z.array(d.EnvironmentConfig).default([]),pollingPaused:u.z.boolean().default(!1)});d.RunClaimResultMsg=u.z.object({type:u.z.literal("run.claim.result"),requestId:u.z.string(),accepted:u.z.boolean(),runId:u.z.string().optional(),reason:u.z.string().optional(),claudeProfile:u.z.string().optional(),actorEmail:u.z.string().optional()});d.ProjectTestMsg=u.z.object({type:u.z.literal("project.test"),requestId:u.z.string(),projectId:u.z.string()});d.RuleDiagnoseMsg=u.z.object({type:u.z.literal("rule.diagnose"),requestId:u.z.string(),ruleId:u.z.string()});d.RunCancelMsg=u.z.object({type:u.z.literal("run.cancel"),runId:u.z.string()});d.RunApprovedMsg=u.z.object({type:u.z.literal("run.approved"),runId:u.z.string(),headSha:u.z.string().optional()});d.RunRejectedMsg=u.z.object({type:u.z.literal("run.rejected"),runId:u.z.string()});d.RunRetryPushMsg=u.z.object({type:u.z.literal("run.retryPush"),runId:u.z.string()});d.DeployStartMsg=u.z.object({type:u.z.literal("deploy.start"),runId:u.z.string(),projectId:u.z.string(),issueKey:u.z.string(),issueSummary:u.z.string().default(""),environment:d.EnvironmentConfig,requestedBy:u.z.string().default(""),attempt:u.z.number().int().positive().default(1)});d.DeployFixMsg=u.z.object({type:u.z.literal("deploy.fix"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),steps:u.z.array(u.z.object({name:u.z.string(),run:u.z.string(),continueOnError:u.z.boolean().default(!1)})),failedStep:u.z.string().default(""),errorText:u.z.string().max(8e3).default("")});d.DeploySuggestMsg=u.z.object({type:u.z.literal("deploy.suggest"),requestId:u.z.string(),projectId:u.z.string(),environmentName:u.z.string(),notes:u.z.string().default(""),timeoutSeconds:u.z.number().int().positive().max(1800).default(300)});d.JiraUsersMsg=u.z.object({type:u.z.literal("jira.users"),requestId:u.z.string(),query:u.z.string().default("")});d.ServerToRunnerMsg=u.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.AuditStatsMsg,d.AutopilotNextResultMsg]);d.EnrollRequest=u.z.object({enrollToken:u.z.string().min(10),name:u.z.string().min(1).max(100),platform:u.z.string(),runnerVersion:u.z.string()});d.EnrollResponse=u.z.object({runnerId:u.z.string(),runnerToken:u.z.string(),controlPlaneWsUrl:u.z.string()});function bm(r){return d.RunnerToServerMsg.parse(r)}function wm(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
|
|
|
@@ -174,7 +174,9 @@ DIAGNOSIS:
|
|
|
174
174
|
FIX:
|
|
175
175
|
One sentence per changed step: what changes and why that fixes the cause above. Steps you do not mention stay as they are.
|
|
176
176
|
|
|
177
|
-
Then the COMPLETE corrected step list (every step, changed or not, same order) as a \`\`\`json block: an array of {"name": "...", "run": "...", "continueOnError": false}. Rules: change as little as possible; never delete a safety step; if the cause lives outside the steps (uncommitted work, a missing secret, a broken service), say so in DIAGNOSIS and return the steps UNCHANGED rather than inventing a workaround. NEVER propose a change that would break the RUNNING service: when the machine facts show the app's runtime differs from the runner's (different node/python versions), pin the app's own runtime by ABSOLUTE PATH in the steps - do not rebuild or reinstall the app's dependencies for the runner's runtime, which "fixes" the deploy while poisoning the app it deploys
|
|
177
|
+
Then the COMPLETE corrected step list (every step, changed or not, same order) as a \`\`\`json block: an array of {"name": "...", "run": "...", "continueOnError": false}. Rules: change as little as possible; never delete a safety step; if the cause lives outside the steps (uncommitted work, a missing secret, a broken service), say so in DIAGNOSIS and return the steps UNCHANGED rather than inventing a workaround. NEVER propose a change that would break the RUNNING service: when the machine facts show the app's runtime differs from the runner's (different node/python versions), pin the app's own runtime by ABSOLUTE PATH in the steps - do not rebuild or reinstall the app's dependencies for the runner's runtime, which "fixes" the deploy while poisoning the app it deploys.
|
|
178
|
+
|
|
179
|
+
Finally: the deploy DOCUMENT is the answer key future suggestions are generated from. If the commands it describes are what produced the broken steps, the fix is incomplete until the document tells the new truth. In that case add, after the json block, the COMPLETE corrected document as a \`\`\`markdown block - the whole file, not a diff, changing only what the fix requires. If the document is already right, add no markdown block.`;d.DEPLOY_DOC_SUGGEST_PROMPT_TEMPLATE=`You are a release engineer. This repository ships a deploy document written by its operators - it is the ground truth for how "{{envName}}" is deployed. Your ONLY job is to translate that document into executable steps.
|
|
178
180
|
|
|
179
181
|
The document ({{docPath}}):
|
|
180
182
|
---
|
|
@@ -232,54 +234,54 @@ Rules for the steps:
|
|
|
232
234
|
- Reference secrets as environment variables ($DEPLOY_HOST), never literal values, and list every variable you use in "requiredSecrets".
|
|
233
235
|
- Prefer commands that are safe to re-run; a deploy may be retried.
|
|
234
236
|
- Order matters: install, build, test (if cheap), then release.
|
|
235
|
-
- If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var
|
|
236
|
-
`).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(
|
|
237
|
-
`).filter(s=>s.startsWith("??")).map(s=>s.slice(3).trim()).slice(0,500).map(s=>{try{let i=
|
|
237
|
+
- If you genuinely cannot tell how this repo is deployed, return an empty "steps" array and explain what is missing in "notes".`});var rl={};ps(rl,{DELETE_MANIFEST_FILE:()=>pn,MAX_CHANGED_FILES:()=>Ls,MAX_CHANGED_LINES:()=>Us,applyDeleteManifest:()=>po,branchForIssue:()=>ko,branchSha:()=>Bs,branchesDiffer:()=>Co,checkDiffSafety:()=>bo,commitAll:()=>Fs,deleteStaleBranch:()=>yo,diffAgainstDefault:()=>Ks,envCheckoutPath:()=>tl,envCheckoutsRoot:()=>el,fetchBase:()=>mn,headSha:()=>Gn,mergeTicketBranch:()=>To,originUrl:()=>Er,parseOwnerRepo:()=>He,prepareEnvCheckout:()=>So,pruneWorktrees:()=>_o,pushBranch:()=>wo,pushEnvBranch:()=>xo,pushWipBranch:()=>mo,removeWorktree:()=>gn,statusSnapshot:()=>go,worktreeAdd:()=>vo,worktreeFingerprint:()=>qs,worktreesRoot:()=>Zn});async function V(r,e,t={}){try{let{stdout:n}=await Ju("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 po(r){let e={deleted:[],refused:[]},t=ue.default.join(r,pn);if(!be.default.existsSync(t))return e;let n=ue.default.resolve(r),s=be.default.readFileSync(t,"utf8").split(`
|
|
238
|
+
`).map(i=>i.trim()).filter(i=>i&&!i.startsWith("#"));for(let i of s.slice(0,200)){if(ue.default.isAbsolute(i)){e.refused.push(`${i} - absolute paths are not allowed`);continue}let o=ue.default.resolve(n,i);if(o!==n&&!o.startsWith(n+ue.default.sep)){e.refused.push(`${i} - escapes the worktree`);continue}let a=ue.default.relative(n,o).split(ue.default.sep).join("/");if(a===pn)continue;if(Qu.some(c=>c.test(a))){e.refused.push(`${i} - protected path (CI/hook files are never touched)`);continue}let l;try{l=be.default.lstatSync(o)}catch{e.refused.push(`${i} - no such file`);continue}if(l.isDirectory()){e.refused.push(`${i} - is a directory (list the files inside it instead)`);continue}try{be.default.rmSync(o),e.deleted.push(a)}catch(c){e.refused.push(`${i} - ${c instanceof Error?c.message:"delete failed"}`)}}return be.default.rmSync(t,{force:!0}),e}async function mo(r,e){await V(r,["push","--force","origin",`HEAD:refs/heads/${e}`],{timeoutMs:3e5})}async function qs(r){let e=await V(r,["status","--porcelain"]),t=await V(r,["diff","--numstat"]),n=e.split(`
|
|
239
|
+
`).filter(s=>s.startsWith("??")).map(s=>s.slice(3).trim()).slice(0,500).map(s=>{try{let i=be.default.statSync(ue.default.join(r,s));return`${s}:${i.size}:${i.mtimeMs}`}catch{return s}}).join(`
|
|
238
240
|
`);return`${e}
|
|
239
241
|
--
|
|
240
242
|
${t}
|
|
241
243
|
--
|
|
242
|
-
${n}`}async function
|
|
244
|
+
${n}`}async function go(r){let e=(await V(r,["rev-parse","--abbrev-ref","HEAD"])).trim(),t=(await V(r,["log","--oneline","-1"])).trim(),n=(await V(r,["status","--porcelain"])).trim(),s=n?n.split(`
|
|
243
245
|
`):[],i=s.slice(0,15).join(`
|
|
244
246
|
`),o=s.length>15?`
|
|
245
247
|
(\u2026 ${s.length-15} more)`:"";return`branch ${e} @ ${t}
|
|
246
248
|
working tree: ${s.length?`
|
|
247
|
-
${i}${o}`:"clean"}`}function
|
|
248
|
-
`))i.startsWith("worktree ")&&(s=i.slice(9).trim()),i===`branch refs/heads/${e}`&&s&&s.startsWith(n)&&await V(r,["worktree","remove","--force",s]);await V(r,["worktree","prune"])}catch{}try{await V(r,["branch","-D",e])}catch{}}async function
|
|
249
|
-
`).filter(Boolean),s=n.filter(
|
|
250
|
-
`).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Fs(r,e,t=6e4){let s=(await V(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await V(r,["diff","--stat",`${s}...${e}`]),o=await V(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function Hu(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(me.default.existsSync(ie.default.join(Sr.default.homedir(),".cache","ticketpilot"))?ie.default.join(Sr.default.homedir(),".cache","ticketpilot"):ie.default.join(Sr.default.homedir(),".cache","allwright"));return ie.default.join(r,"env-checkouts")}function Uu(r){return r.replace(/[^\w.-]+/g,"_")}function Gu(r,e){return ie.default.join(Hu(),Uu(r),Uu(e))}async function vo(r){let e=Gu(r.repoName,r.envName);return await V(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),me.default.existsSync(ie.default.join(e,".git"))?await V(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(me.default.rmSync(e,{recursive:!0,force:!0}),me.default.mkdirSync(ie.default.dirname(e),{recursive:!0,mode:448}),await V(r.repoPath,["worktree","prune"]).catch(()=>{}),await V(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await V(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await V(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function bo(r,e,t){try{await V(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 V(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await V(r,["-c",`user.name=${Ku}`,"-c",`user.email=${Zu}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await V(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 _o(r,e){try{await V(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 wo(r,e,t){try{return await Bu("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 Tr(r){return(await V(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,Sr,ie,qu,Fu,Bu,Ku,Zu,zs,Ds,Vu,hn,Lt=ds(()=>{"use strict";me=R(require("node:fs"),1),Sr=R(require("node:os"),1),ie=R(require("node:path"),1),qu=require("node:child_process"),Fu=require("node:util"),Bu=(0,Fu.promisify)(qu.execFile),Ku="Allwright Agent",Zu="agent@ticketpilot.local",zs=200,Ds=2e4,Vu=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];hn=".ticketpilot-delete"});function Bs(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 De(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function Qu(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(),l=r.jiraUsers[c]?"own":n.has(c)?"runner-account":"missing",f=l==="own"?r.jiraUsers[c].email:l==="runner-account"?c:"",p=r.githubUsers[c]?"own":s?"shared":"missing",b=p==="own"?r.githubUsers[c].login??"":p==="shared"?i:"";return{email:c,jira:l,jiraAs:f,github:p,githubAs:b}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var xr=ds(()=>{"use strict"});var Ir={};hs(Ir,{GitHubClient:()=>Le});var $m,Le,nt=ds(()=>{"use strict";$m=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",Le=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${$m}${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}}throw new Error(`GitHub refused the PR (422): ${i?.message??"validation failed"}`)}return{number:i.number,url:i.html_url,state:i.state,merged:i.merged??!1,headSha:i.head.sha,mergeableState:null}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async 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 kt=Q((U_,Bl)=>{"use strict";var ql=["nodebuffer","arraybuffer","fragments"],Fl=typeof Blob<"u";Fl&&ql.push("blob");Bl.exports={BINARY_TYPES:ql,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Fl,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Qn=Q((q_,di)=>{"use strict";var{EMPTY_BUFFER:Sg}=kt(),sa=Buffer[Symbol.species];function Tg(r,e){if(r.length===0)return Sg;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 sa(t.buffer,t.byteOffset,n):t}function Kl(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function Zl(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function xg(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function ia(r){if(ia.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new sa(r):ArrayBuffer.isView(r)?e=new sa(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),ia.readOnly=!1),e}di.exports={concat:Tg,mask:Kl,toArrayBuffer:xg,toBuffer:ia,unmask:Zl};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");di.exports.mask=function(e,t,n,s,i){i<48?Kl(e,t,n,s,i):r.mask(e,t,n,s,i)},di.exports.unmask=function(e,t){e.length<32?Zl(e,t):r.unmask(e,t)}}catch{}});var Gl=Q((F_,Hl)=>{"use strict";var Vl=Symbol("kDone"),oa=Symbol("kRun"),aa=class{constructor(e){this[Vl]=()=>{this.pending--,this[oa]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[oa]()}[oa](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Vl])}}};Hl.exports=aa});var Tn=Q((B_,Xl)=>{"use strict";var es=require("zlib"),Wl=Qn(),Cg=Gl(),{kStatusCode:Jl}=kt(),Eg=Buffer[Symbol.species],Ig=Buffer.from([0,0,255,255]),fi=Symbol("permessage-deflate"),St=Symbol("total-length"),kn=Symbol("callback"),qt=Symbol("buffers"),Sn=Symbol("error"),hi,ua=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,!hi){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;hi=new Cg(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[kn];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){hi.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){hi.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"?es.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=es.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[fi]=this,this._inflate[St]=0,this._inflate[qt]=[],this._inflate.on("error",Ag),this._inflate.on("data",Yl)}this._inflate[kn]=n,this._inflate.write(e),t&&this._inflate.write(Ig),this._inflate.flush(()=>{let i=this._inflate[Sn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Wl.concat(this._inflate[qt],this._inflate[St]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[St]=0,this._inflate[qt]=[],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"?es.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=es.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[St]=0,this._deflate[qt]=[],this._deflate.on("data",Rg)}this._deflate[kn]=n,this._deflate.write(e),this._deflate.flush(es.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Wl.concat(this._deflate[qt],this._deflate[St]);t&&(i=new Eg(i.buffer,i.byteOffset,i.length-4)),this._deflate[kn]=null,this._deflate[St]=0,this._deflate[qt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Xl.exports=ua;function Rg(r){this[qt].push(r),this[St]+=r.length}function Yl(r){if(this[St]+=r.length,this[fi]._maxPayload<1||this[St]<=this[fi]._maxPayload){this[qt].push(r);return}this[Sn]=new RangeError("Max payload size exceeded"),this[Sn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Sn][Jl]=1009,this.removeListener("data",Yl),this.reset()}function Ag(r){if(this[fi]._inflate=null,this[Sn]){this[kn](this[Sn]);return}r[Jl]=1007,this[kn](r)}});var xn=Q((K_,pi)=>{"use strict";var{isUtf8:Ql}=require("buffer"),{hasBlob:$g}=kt(),Pg=[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 jg(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function ca(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 Og(r){return $g&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}pi.exports={isBlob:Og,isValidStatusCode:jg,isValidUTF8:ca,tokenChars:Pg};if(Ql)pi.exports.isValidUTF8=function(r){return r.length<24?ca(r):Ql(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");pi.exports.isValidUTF8=function(e){return e.length<32?ca(e):r(e)}}catch{}});var pa=Q((Z_,od)=>{"use strict";var{Writable:Ng}=require("stream"),ed=Tn(),{BINARY_TYPES:Mg,EMPTY_BUFFER:td,kStatusCode:zg,kWebSocket:Dg}=kt(),{concat:la,toArrayBuffer:Lg,unmask:Ug}=Qn(),{isValidStatusCode:qg,isValidUTF8:rd}=xn(),mi=Buffer[Symbol.species],qe=0,nd=1,sd=2,id=3,da=4,ha=5,gi=6,fa=class extends Ng{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Mg[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[Dg]=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=qe}_write(e,t,n){if(this._opcode===8&&this._state==qe)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 mi(n.buffer,n.byteOffset+e,n.length-e),new mi(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 mi(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 qe:this.getInfo(e);break;case nd:this.getPayloadLength16(e);break;case sd:this.getPayloadLength64(e);break;case id:this.getMask();break;case da:this.getData(e);break;case ha:case gi: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[ed.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=nd:this._payloadLength===127?this._state=sd: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=id:this._state=da}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=da}getData(e){let t=td;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&&Ug(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=ha,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[ed.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===qe&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=qe;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=la(n,t):this._binaryType==="arraybuffer"?s=Lg(la(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=qe):(this._state=gi,setImmediate(()=>{this.emit("message",s,!0),this._state=qe,this.startLoop(e)}))}else{let s=la(n,t);if(!this._skipUTF8Validation&&!rd(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ha||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=qe):(this._state=gi,setImmediate(()=>{this.emit("message",s,!1),this._state=qe,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,td),this.end();else{let n=e.readUInt16BE(0);if(!qg(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new mi(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!rd(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=qe;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=qe):(this._state=gi,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=qe,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[zg]=s,o}};od.exports=fa});var ya=Q((H_,cd)=>{"use strict";var{Duplex:V_}=require("stream"),{randomFillSync:Fg}=require("crypto"),{types:{isUint8Array:Bg}}=require("util"),ad=Tn(),{EMPTY_BUFFER:Kg,kWebSocket:Zg,NOOP:Vg}=kt(),{isBlob:Cn,isValidStatusCode:Hg}=xn(),{mask:ud,toBuffer:Dr}=Qn(),Fe=Symbol("kByteLength"),Gg=Buffer.alloc(4),yi=8*1024,Lr,En=yi,We=0,Wg=1,Jg=2,ma=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=We,this.onerror=Vg,this[Zg]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Gg,t.generateMask?t.generateMask(n):(En===yi&&(Lr===void 0&&(Lr=Buffer.alloc(yi)),Fg(Lr,0,yi),En=0),n[0]=Lr[En++],n[1]=Lr[En++],n[2]=Lr[En++],n[3]=Lr[En++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[Fe]!==void 0?a=t[Fe]:(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 l=Buffer.allocUnsafe(s?a+i:i);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=c,c===126?l.writeUInt16BE(a,2):c===127&&(l[2]=l[3]=0,l.writeUIntBE(a,4,6)),t.mask?(l[1]|=128,l[i-4]=n[0],l[i-3]=n[1],l[i-2]=n[2],l[i-1]=n[3],o?[l,e]:s?(ud(e,n,l,i,a),[l]):(ud(e,n,e,0,a),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=Kg;else{if(typeof e!="number"||!Hg(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(Bg(t))i.set(t,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[Fe]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==We?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):Cn(e)?(s=e.size,i=!1):(e=Dr(e),s=e.length,i=Dr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Fe]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Cn(e)?this._state!==We?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==We?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):Cn(e)?(s=e.size,i=!1):(e=Dr(e),s=e.length,i=Dr.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Fe]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Cn(e)?this._state!==We?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==We?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[ad.extensionName],i=t.binary?2:1,o=t.compress,a,c;typeof e=="string"?(a=Buffer.byteLength(e),c=!1):Cn(e)?(a=e.size,c=!1):(e=Dr(e),a=e.length,c=Dr.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 l={[Fe]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};Cn(e)?this._state!==We?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==We?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[Fe],this._state=Jg,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(ga,this,a,s);return}this._bufferedBytes-=n[Fe];let o=Dr(i);t?this.dispatch(o,t,n,s):(this._state=We,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Yg,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[ad.extensionName];this._bufferedBytes+=n[Fe],this._state=Wg,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");ga(this,c,s);return}this._bufferedBytes-=n[Fe],this._state=We,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===We&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Fe],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Fe],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=ma;function ga(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 Yg(r,e,t){ga(r,e,t),r.onerror(e)}});var vd=Q((G_,yd)=>{"use strict";var{kForOnEventAttribute:ts,kListener:va}=kt(),ld=Symbol("kCode"),dd=Symbol("kData"),hd=Symbol("kError"),fd=Symbol("kMessage"),pd=Symbol("kReason"),In=Symbol("kTarget"),md=Symbol("kType"),gd=Symbol("kWasClean"),Tt=class{constructor(e){this[In]=null,this[md]=e}get target(){return this[In]}get type(){return this[md]}};Object.defineProperty(Tt.prototype,"target",{enumerable:!0});Object.defineProperty(Tt.prototype,"type",{enumerable:!0});var Ur=class extends Tt{constructor(e,t={}){super(e),this[ld]=t.code===void 0?0:t.code,this[pd]=t.reason===void 0?"":t.reason,this[gd]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[ld]}get reason(){return this[pd]}get wasClean(){return this[gd]}};Object.defineProperty(Ur.prototype,"code",{enumerable:!0});Object.defineProperty(Ur.prototype,"reason",{enumerable:!0});Object.defineProperty(Ur.prototype,"wasClean",{enumerable:!0});var Rn=class extends Tt{constructor(e,t={}){super(e),this[hd]=t.error===void 0?null:t.error,this[fd]=t.message===void 0?"":t.message}get error(){return this[hd]}get message(){return this[fd]}};Object.defineProperty(Rn.prototype,"error",{enumerable:!0});Object.defineProperty(Rn.prototype,"message",{enumerable:!0});var rs=class extends Tt{constructor(e,t={}){super(e),this[dd]=t.data===void 0?null:t.data}get data(){return this[dd]}};Object.defineProperty(rs.prototype,"data",{enumerable:!0});var Xg={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[ts]&&s[va]===e&&!s[ts])return;let n;if(r==="message")n=function(i,o){let a=new rs("message",{data:o?i:i.toString()});a[In]=this,vi(e,this,a)};else if(r==="close")n=function(i,o){let a=new Ur("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[In]=this,vi(e,this,a)};else if(r==="error")n=function(i){let o=new Rn("error",{error:i,message:i.message});o[In]=this,vi(e,this,o)};else if(r==="open")n=function(){let i=new Tt("open");i[In]=this,vi(e,this,i)};else return;n[ts]=!!t[ts],n[va]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[va]===e&&!t[ts]){this.removeListener(r,t);break}}};yd.exports={CloseEvent:Ur,ErrorEvent:Rn,Event:Tt,EventTarget:Xg,MessageEvent:rs};function vi(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var bi=Q((W_,bd)=>{"use strict";var{tokenChars:ns}=xn();function it(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Qg(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,c=-1,l=-1,f=-1,p=0;for(;p<r.length;p++)if(l=r.charCodeAt(p),o===void 0)if(f===-1&&ns[l]===1)c===-1&&(c=p);else if(p!==0&&(l===32||l===9))f===-1&&c!==-1&&(f=p);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let T=r.slice(c,f);l===44?(it(e,T,t),t=Object.create(null)):o=T,c=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(f===-1&&ns[l]===1)c===-1&&(c=p);else if(l===32||l===9)f===-1&&c!==-1&&(f=p);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),it(t,r.slice(c,f),!0),l===44&&(it(e,o,t),t=Object.create(null),o=void 0),c=f=-1}else if(l===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(ns[l]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);c===-1?c=p:n||(n=!0),s=!1}else if(i)if(ns[l]===1)c===-1&&(c=p);else if(l===34&&c!==-1)i=!1,f=p;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(l===34&&r.charCodeAt(p-1)===61)i=!0;else if(f===-1&&ns[l]===1)c===-1&&(c=p);else if(c!==-1&&(l===32||l===9))f===-1&&(f=p);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let T=r.slice(c,f);n&&(T=T.replace(/\\/g,""),n=!1),it(t,a,T),l===44&&(it(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||l===32||l===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=p);let b=r.slice(c,f);return o===void 0?it(e,b,t):(a===void 0?it(t,b,!0):n?it(t,a,b.replace(/\\/g,"")):it(t,a,b),it(e,o,t)),e}function ey(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(", ")}bd.exports={format:ey,parse:Qg}});var Si=Q((X_,$d)=>{"use strict";var ty=require("events"),ry=require("https"),ny=require("http"),kd=require("net"),sy=require("tls"),{randomBytes:iy,createHash:oy}=require("crypto"),{Duplex:J_,Readable:Y_}=require("stream"),{URL:ba}=require("url"),Ft=Tn(),ay=pa(),uy=ya(),{isBlob:cy}=xn(),{BINARY_TYPES:_d,CLOSE_TIMEOUT:ly,EMPTY_BUFFER:_i,GUID:dy,kForOnEventAttribute:_a,kListener:hy,kStatusCode:fy,kWebSocket:de,NOOP:Sd}=kt(),{EventTarget:{addEventListener:py,removeEventListener:my}}=vd(),{format:gy,parse:yy}=bi(),{toBuffer:vy}=Qn(),Td=Symbol("kAborted"),wa=[8,13],xt=["CONNECTING","OPEN","CLOSING","CLOSED"],by=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,oe=class r extends ty{constructor(e,t,n){super(),this._binaryType=_d[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]),xd(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){_d.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 ay({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 uy(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[de]=this,i[de]=this,e[de]=this,s.on("conclude",ky),s.on("drain",Sy),s.on("error",Ty),s.on("message",xy),s.on("ping",Cy),s.on("pong",Ey),i.onerror=Iy,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Id),e.on("data",ki),e.on("end",Rd),e.on("error",Ad),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[Ft.extensionName]&&this._extensions[Ft.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){Ae(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())}),Ed(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){ka(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){ka(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){ka(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Ft.extensionName]||(s.compress=!1),this._sender.send(e||_i,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){Ae(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(oe,"CONNECTING",{enumerable:!0,value:xt.indexOf("CONNECTING")});Object.defineProperty(oe.prototype,"CONNECTING",{enumerable:!0,value:xt.indexOf("CONNECTING")});Object.defineProperty(oe,"OPEN",{enumerable:!0,value:xt.indexOf("OPEN")});Object.defineProperty(oe.prototype,"OPEN",{enumerable:!0,value:xt.indexOf("OPEN")});Object.defineProperty(oe,"CLOSING",{enumerable:!0,value:xt.indexOf("CLOSING")});Object.defineProperty(oe.prototype,"CLOSING",{enumerable:!0,value:xt.indexOf("CLOSING")});Object.defineProperty(oe,"CLOSED",{enumerable:!0,value:xt.indexOf("CLOSED")});Object.defineProperty(oe.prototype,"CLOSED",{enumerable:!0,value:xt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(oe.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(oe.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[_a])return e[hy];return null},set(e){for(let t of this.listeners(r))if(t[_a]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[_a]:!0})}})});oe.prototype.addEventListener=py;oe.prototype.removeEventListener=my;$d.exports=oe;function xd(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:ly,protocolVersion:wa[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,!wa.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${wa.join(", ")})`);let i;if(e instanceof ba)i=e;else try{i=new ba(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 C=new SyntaxError(c);if(r._redirects===0)throw C;wi(r,C);return}let l=o?443:80,f=iy(16).toString("base64"),p=o?ry.request:ny.request,b=new Set,T;if(s.createConnection=s.createConnection||(o?wy:_y),s.defaultPort=s.defaultPort||l,s.port=i.port||l,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&&(T=new Ft({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=gy({[Ft.extensionName]:T.offer()})),t.length){for(let C of t){if(typeof C!="string"||!by.test(C)||b.has(C))throw new SyntaxError("An invalid or duplicated subprotocol was specified");b.add(C)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let C=s.path.split(":");s.socketPath=C[0],s.path=C[1]}let S;if(s.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?s.socketPath:i.host;let C=n&&n.headers;if(n={...n,headers:{}},C)for(let[k,N]of Object.entries(C))n.headers[k.toLowerCase()]=N}else if(r.listenerCount("redirect")===0){let C=a?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!C||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,C||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),S=r._req=p(s),r._redirects&&r.emit("redirect",r.url,S)}else S=r._req=p(s);s.timeout&&S.on("timeout",()=>{Ae(r,S,"Opening handshake has timed out")}),S.on("error",C=>{S===null||S[Td]||(S=r._req=null,wi(r,C))}),S.on("response",C=>{let k=C.headers.location,N=C.statusCode;if(k&&s.followRedirects&&N>=300&&N<400){if(++r._redirects>s.maxRedirects){Ae(r,S,"Maximum redirects exceeded");return}S.abort();let W;try{W=new ba(k,e)}catch{let m=new SyntaxError(`Invalid URL: ${k}`);wi(r,m);return}xd(r,W,t,n)}else r.emit("unexpected-response",S,C)||Ae(r,S,`Unexpected server response: ${C.statusCode}`)}),S.on("upgrade",(C,k,N)=>{if(r.emit("upgrade",C),r.readyState!==oe.CONNECTING)return;S=r._req=null;let W=C.headers.upgrade;if(W===void 0||W.toLowerCase()!=="websocket"){Ae(r,k,"Invalid Upgrade header");return}let h=oy("sha1").update(f+dy).digest("base64");if(C.headers["sec-websocket-accept"]!==h){Ae(r,k,"Invalid Sec-WebSocket-Accept header");return}let m=C.headers["sec-websocket-protocol"],y;if(m!==void 0?b.size?b.has(m)||(y="Server sent an invalid subprotocol"):y="Server sent a subprotocol but none was requested":b.size&&(y="Server sent no subprotocol"),y){Ae(r,k,y);return}m&&(r._protocol=m);let x=C.headers["sec-websocket-extensions"];if(x!==void 0){if(!T){Ae(r,k,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let j;try{j=yy(x)}catch{Ae(r,k,"Invalid Sec-WebSocket-Extensions header");return}let z=Object.keys(j);if(z.length!==1||z[0]!==Ft.extensionName){Ae(r,k,"Server indicated an extension that was not requested");return}try{T.accept(j[Ft.extensionName])}catch{Ae(r,k,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Ft.extensionName]=T}r.setSocket(k,N,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(S,r):S.end()}function wi(r,e){r._readyState=oe.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function _y(r){return r.path=r.socketPath,kd.connect(r)}function wy(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=kd.isIP(r.host)?"":r.host),sy.connect(r)}function Ae(r,e,t){r._readyState=oe.CLOSING;let n=new Error(t);Error.captureStackTrace(n,Ae),e.setHeader?(e[Td]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(wi,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function ka(r,e,t){if(e){let n=cy(e)?e.size:vy(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${xt[r.readyState]})`);process.nextTick(t,n)}}function ky(r,e){let t=this[de];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[de]!==void 0&&(t._socket.removeListener("data",ki),process.nextTick(Cd,t._socket),r===1005?t.close():t.close(r,e))}function Sy(){let r=this[de];r.isPaused||r._socket.resume()}function Ty(r){let e=this[de];e._socket[de]!==void 0&&(e._socket.removeListener("data",ki),process.nextTick(Cd,e._socket),e.close(r[fy])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function wd(){this[de].emitClose()}function xy(r,e){this[de].emit("message",r,e)}function Cy(r){let e=this[de];e._autoPong&&e.pong(r,!this._isServer,Sd),e.emit("ping",r)}function Ey(r){this[de].emit("pong",r)}function Cd(r){r.resume()}function Iy(r){let e=this[de];e.readyState!==oe.CLOSED&&(e.readyState===oe.OPEN&&(e._readyState=oe.CLOSING,Ed(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Ed(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Id(){let r=this[de];if(this.removeListener("close",Id),this.removeListener("data",ki),this.removeListener("end",Rd),r._readyState=oe.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[de]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",wd),r._receiver.on("finish",wd))}function ki(r){this[de]._receiver.write(r)||this.pause()}function Rd(){let r=this[de];r._readyState=oe.CLOSING,r._receiver.end(),this.end()}function Ad(){let r=this[de];this.removeListener("error",Ad),this.on("error",Sd),r&&(r._readyState=oe.CLOSING,this.destroy())}});var Nd=Q((ew,Od)=>{"use strict";var Q_=Si(),{Duplex:Ry}=require("stream");function Pd(r){r.emit("close")}function Ay(){!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 $y(r,e){let t=!0,n=new Ry({...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(Pd,n);return}let o=!1;r.once("error",function(c){o=!0,i(c)}),r.once("close",function(){o||i(s),process.nextTick(Pd,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",Ay),n.on("error",jd),n}Od.exports=$y});var Sa=Q((tw,Md)=>{"use strict";var{tokenChars:Py}=xn();function jy(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&&Py[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}Md.exports={parse:jy}});var Bd=Q((nw,Fd)=>{"use strict";var Oy=require("events"),Ti=require("http"),{Duplex:rw}=require("stream"),{createHash:Ny}=require("crypto"),zd=bi(),qr=Tn(),My=Sa(),zy=Si(),{CLOSE_TIMEOUT:Dy,GUID:Ly,kWebSocket:Uy}=kt(),qy=/^[+/0-9A-Za-z]{22}==$/,Dd=0,Ld=1,qd=2,Ta=class extends Oy{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:Dy,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:zy,...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=Ti.createServer((n,s)=>{let i=Ti.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=Fy(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=Dd}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===qd){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(ss,this);return}if(e&&this.once("close",e),this._state!==Ld)if(this._state=Ld,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(ss,this):process.nextTick(ss,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{ss(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",Ud);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Fr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Fr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!qy.test(i)){Fr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Fr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){is(t,400);return}let c=e.headers["sec-websocket-protocol"],l=new Set;if(c!==void 0)try{l=My.parse(c)}catch{Fr(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 b=new qr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let T=zd.parse(f);T[qr.extensionName]&&(b.accept(T[qr.extensionName]),p[qr.extensionName]=b)}catch{Fr(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let b={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(b,(T,S,C,k)=>{if(!T)return is(t,S||401,C,k);this.completeUpgrade(p,i,l,e,t,n,s)});return}if(!this.options.verifyClient(b))return is(t,401)}this.completeUpgrade(p,i,l,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Uy])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Dd)return is(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Ny("sha1").update(t+Ly).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&&(l.push(`Sec-WebSocket-Protocol: ${p}`),f._protocol=p)}if(e[qr.extensionName]){let p=e[qr.extensionName].params,b=zd.format({[qr.extensionName]:[p]});l.push(`Sec-WebSocket-Extensions: ${b}`),f._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
249
|
+
${i}${o}`:"clean"}`}function Zn(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(be.default.existsSync(ue.default.join(Cr.default.homedir(),".cache","ticketpilot"))?ue.default.join(Cr.default.homedir(),".cache","ticketpilot"):ue.default.join(Cr.default.homedir(),".cache","allwright"));return ue.default.join(r,"worktrees")}async function mn(r,e){try{await V(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 yo(r,e){try{let t=await V(r,["worktree","list","--porcelain"]),n=Zn(),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 V(r,["worktree","remove","--force",s]);await V(r,["worktree","prune"])}catch{}try{await V(r,["branch","-D",e])}catch{}}async function vo(r,e,t,n){be.default.mkdirSync(ue.default.dirname(e),{recursive:!0,mode:448}),await V(r,["worktree","add","-b",t,e,`origin/${n}`])}async function Fs(r,e){if(await V(r,["add","-A"]),!(await V(r,["status","--porcelain"])).trim())throw new Error("Claude wrote no changes - nothing to commit");await V(r,["-c",`user.name=${Yu}`,"-c",`user.email=${Xu}`,"commit","-m",e])}async function bo(r,e){let n=(await V(r,["diff","--name-only",`origin/${e}...HEAD`])).split(`
|
|
251
|
+
`).filter(Boolean),s=n.filter(c=>Qu.some(f=>f.test(c))),i=await V(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<=Ls&&o+a<=Us,files:n.length,insertions:o,deletions:a,forbidden:s}}async function wo(r,e){await V(r,["fetch","--prune","origin",`+refs/heads/${e}:refs/remotes/origin/${e}`],{timeoutMs:12e4}).catch(()=>V(r,["update-ref","-d",`refs/remotes/origin/${e}`]).catch(()=>{})),await V(r,["push","--force-with-lease","-u","origin",e],{timeoutMs:3e5})}async function Gn(r){return(await V(r,["rev-parse","HEAD"])).trim()}async function Bs(r,e){try{return(await V(r,["rev-parse","--verify",`refs/heads/${e}`])).trim()}catch{return null}}async function gn(r,e){try{await V(r,["worktree","remove","--force",e])}catch{be.default.rmSync(e,{recursive:!0,force:!0})}}async function _o(r,e=[]){let t=new Set(e.map(s=>ue.default.basename(ue.default.resolve(s))).filter(s=>s.length>0)),n=Zn();if(be.default.existsSync(n))for(let s of be.default.readdirSync(n))t.has(s)||be.default.rmSync(ue.default.join(n,s),{recursive:!0,force:!0});for(let s of r)try{await V(s,["worktree","prune"])}catch{}}async function ko(r,e){return await V(r,["fetch","origin","--prune"]).catch(()=>{}),(await V(r,["branch","-r","--list",`*${e}*`])).split(`
|
|
252
|
+
`).map(s=>s.trim()).filter(s=>s&&!s.includes("->"))[0]??null}async function Ks(r,e,t=6e4){let s=(await V(r,["symbolic-ref","refs/remotes/origin/HEAD"]).catch(()=>"")).trim().replace("refs/remotes/","")||"origin/main",i=await V(r,["diff","--stat",`${s}...${e}`]),o=await V(r,["diff",`${s}...${e}`]);return{base:s,stat:i.slice(0,4e3),diff:o.slice(0,t)}}function el(){let r=process.env.ALLWRIGHT_CACHE_DIR??process.env.TICKETPILOT_CACHE_DIR??(be.default.existsSync(ue.default.join(Cr.default.homedir(),".cache","ticketpilot"))?ue.default.join(Cr.default.homedir(),".cache","ticketpilot"):ue.default.join(Cr.default.homedir(),".cache","allwright"));return ue.default.join(r,"env-checkouts")}function Vu(r){return r.replace(/[^\w.-]+/g,"_")}function tl(r,e){return ue.default.join(el(),Vu(r),Vu(e))}async function So(r){let e=tl(r.repoName,r.envName);return await V(r.repoPath,["fetch","origin",r.branch],{timeoutMs:3e5}),be.default.existsSync(ue.default.join(e,".git"))?await V(e,["fetch","origin",r.branch],{timeoutMs:3e5}):(be.default.rmSync(e,{recursive:!0,force:!0}),be.default.mkdirSync(ue.default.dirname(e),{recursive:!0,mode:448}),await V(r.repoPath,["worktree","prune"]).catch(()=>{}),await V(r.repoPath,["worktree","add","--detach",e,`origin/${r.branch}`])),r.attached?await V(e,["checkout","-B",r.branch,`origin/${r.branch}`]):await V(e,["checkout","--force","--detach",`origin/${r.branch}`]),e}async function To(r,e,t){try{await V(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 V(r,["merge-base","--is-ancestor",`origin/${e}`,"HEAD"]),{ok:!0,alreadyMerged:!0}}catch{}try{return await V(r,["-c",`user.name=${Yu}`,"-c",`user.email=${Xu}`,"merge","--no-ff","-m",t,`origin/${e}`]),{ok:!0}}catch(n){return await V(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 xo(r,e){try{await V(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 Co(r,e,t){try{return await Ju("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 Er(r){return(await V(r,["config","--get","remote.origin.url"])).trim()}function He(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 be,Cr,ue,Hu,Wu,Ju,Yu,Xu,Ls,Us,Qu,pn,Ut=fs(()=>{"use strict";be=R(require("node:fs"),1),Cr=R(require("node:os"),1),ue=R(require("node:path"),1),Hu=require("node:child_process"),Wu=require("node:util"),Ju=(0,Wu.promisify)(Hu.execFile),Yu="Allwright Agent",Xu="agent@ticketpilot.local",Ls=200,Us=2e4,Qu=[/^\.github\/workflows\//,/^\.git\b/,/(^|\/)\.githooks\//];pn=".ticketpilot-delete"});function Zs(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 qe(r,e){return r.repos[e]?.github?.token??r.github?.token??null}function ol(r,e){let t=[r.jira,...Object.values(r.repos).map(a=>a.jira)].filter(a=>!!a),n=new Set(t.map(a=>a.email.toLowerCase())),s=!!r.github?.token||Object.values(r.repos).some(a=>a.github?.token),i=r.github?.login??Object.values(r.repos).find(a=>a.github?.login)?.github?.login??"",o=e.map(a=>{let l=a.trim().toLowerCase(),c=r.jiraUsers[l]?"own":n.has(l)?"runner-account":"missing",f=c==="own"?r.jiraUsers[l].email:c==="runner-account"?l:"",p=r.githubUsers[l]?"own":s?"shared":"missing",v=p==="own"?r.githubUsers[l].login??"":p==="shared"?i:"";return{email:l,jira:c,jiraAs:f,github:p,githubAs:v}});return{githubShared:s,sharedGithubLogin:i,entries:o}}var Ir=fs(()=>{"use strict"});var $r={};ps($r,{GitHubClient:()=>Fe});var Lm,Fe,it=fs(()=>{"use strict";Lm=process.env.TICKETPILOT_GITHUB_API??"https://api.github.com",Fe=class{constructor(e){this.token=e}token;async request(e,t,n){let s=await fetch(`${Lm}${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}}throw new Error(`GitHub refused the PR (422): ${i?.message??"validation failed"}`)}return{number:i.number,url:i.html_url,state:i.state,merged:i.merged??!1,headSha:i.head.sha,mergeableState:null}}async getReviews(e,t,n){let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}/reviews?per_page=100`);return(s??[]).map(i=>({state:i.state??"",commitId:i.commit_id??"",user:i.user?.login??"",submittedAt:i.submitted_at??""}))}async getPullRequest(e,t,n){try{let{data:s}=await this.request("GET",`/repos/${e}/${t}/pulls/${n}`);return{number:s.number,url:s.html_url,state:s.state,merged:s.merged,headSha:s.head.sha,mergeableState:s.mergeable_state??null}}catch(s){if(s instanceof Error&&s.message.includes("-> 404"))return null;throw s}}async 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 kt=ee((Xw,Wc)=>{"use strict";var Vc=["nodebuffer","arraybuffer","fragments"],Hc=typeof Blob<"u";Hc&&Vc.push("blob");Wc.exports={BINARY_TYPES:Vc,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Hc,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var ts=ee((Qw,mi)=>{"use strict";var{EMPTY_BUFFER:Pg}=kt(),la=Buffer[Symbol.species];function jg(r,e){if(r.length===0)return Pg;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 la(t.buffer,t.byteOffset,n):t}function Jc(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function Yc(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Og(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function ca(r){if(ca.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new la(r):ArrayBuffer.isView(r)?e=new la(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),ca.readOnly=!1),e}mi.exports={concat:jg,mask:Jc,toArrayBuffer:Og,toBuffer:ca,unmask:Yc};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");mi.exports.mask=function(e,t,n,s,i){i<48?Jc(e,t,n,s,i):r.mask(e,t,n,s,i)},mi.exports.unmask=function(e,t){e.length<32?Yc(e,t):r.unmask(e,t)}}catch{}});var ed=ee((e_,Qc)=>{"use strict";var Xc=Symbol("kDone"),da=Symbol("kRun"),ha=class{constructor(e){this[Xc]=()=>{this.pending--,this[da]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[da]()}[da](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Xc])}}};Qc.exports=ha});var Cn=ee((t_,sd)=>{"use strict";var rs=require("zlib"),td=ts(),Ng=ed(),{kStatusCode:rd}=kt(),Mg=Buffer[Symbol.species],zg=Buffer.from([0,0,255,255]),yi=Symbol("permessage-deflate"),St=Symbol("total-length"),Tn=Symbol("callback"),Ft=Symbol("buffers"),xn=Symbol("error"),gi,fa=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,!gi){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;gi=new Ng(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[Tn];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){gi.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){gi.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"?rs.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=rs.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[yi]=this,this._inflate[St]=0,this._inflate[Ft]=[],this._inflate.on("error",Lg),this._inflate.on("data",nd)}this._inflate[Tn]=n,this._inflate.write(e),t&&this._inflate.write(zg),this._inflate.flush(()=>{let i=this._inflate[xn];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=td.concat(this._inflate[Ft],this._inflate[St]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[St]=0,this._inflate[Ft]=[],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"?rs.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=rs.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[St]=0,this._deflate[Ft]=[],this._deflate.on("data",Dg)}this._deflate[Tn]=n,this._deflate.write(e),this._deflate.flush(rs.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=td.concat(this._deflate[Ft],this._deflate[St]);t&&(i=new Mg(i.buffer,i.byteOffset,i.length-4)),this._deflate[Tn]=null,this._deflate[St]=0,this._deflate[Ft]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};sd.exports=fa;function Dg(r){this[Ft].push(r),this[St]+=r.length}function nd(r){if(this[St]+=r.length,this[yi]._maxPayload<1||this[St]<=this[yi]._maxPayload){this[Ft].push(r);return}this[xn]=new RangeError("Max payload size exceeded"),this[xn].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[xn][rd]=1009,this.removeListener("data",nd),this.reset()}function Lg(r){if(this[yi]._inflate=null,this[xn]){this[Tn](this[xn]);return}r[rd]=1007,this[Tn](r)}});var En=ee((r_,vi)=>{"use strict";var{isUtf8:id}=require("buffer"),{hasBlob:Ug}=kt(),qg=[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 Fg(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function pa(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 Bg(r){return Ug&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}vi.exports={isBlob:Bg,isValidStatusCode:Fg,isValidUTF8:pa,tokenChars:qg};if(id)vi.exports.isValidUTF8=function(r){return r.length<24?pa(r):id(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");vi.exports.isValidUTF8=function(e){return e.length<32?pa(e):r(e)}}catch{}});var ba=ee((n_,hd)=>{"use strict";var{Writable:Kg}=require("stream"),od=Cn(),{BINARY_TYPES:Zg,EMPTY_BUFFER:ad,kStatusCode:Gg,kWebSocket:Vg}=kt(),{concat:ma,toArrayBuffer:Hg,unmask:Wg}=ts(),{isValidStatusCode:Jg,isValidUTF8:ud}=En(),bi=Buffer[Symbol.species],Ke=0,ld=1,cd=2,dd=3,ga=4,ya=5,wi=6,va=class extends Kg{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Zg[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[Vg]=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 bi(n.buffer,n.byteOffset+e,n.length-e),new bi(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 bi(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 ld:this.getPayloadLength16(e);break;case cd:this.getPayloadLength64(e);break;case dd:this.getMask();break;case ga:this.getData(e);break;case ya:case wi: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[od.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=ld:this._payloadLength===127?this._state=cd: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=dd:this._state=ga}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=ga}getData(e){let t=ad;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&&Wg(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=ya,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[od.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=ma(n,t):this._binaryType==="arraybuffer"?s=Hg(ma(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Ke):(this._state=wi,setImmediate(()=>{this.emit("message",s,!0),this._state=Ke,this.startLoop(e)}))}else{let s=ma(n,t);if(!this._skipUTF8Validation&&!ud(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ya||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Ke):(this._state=wi,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,ad),this.end();else{let n=e.readUInt16BE(0);if(!Jg(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new bi(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!ud(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=wi,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[Gg]=s,o}};hd.exports=va});var ka=ee((i_,md)=>{"use strict";var{Duplex:s_}=require("stream"),{randomFillSync:Yg}=require("crypto"),{types:{isUint8Array:Xg}}=require("util"),fd=Cn(),{EMPTY_BUFFER:Qg,kWebSocket:ey,NOOP:ty}=kt(),{isBlob:In,isValidStatusCode:ry}=En(),{mask:pd,toBuffer:qr}=ts(),Ze=Symbol("kByteLength"),ny=Buffer.alloc(4),_i=8*1024,Fr,Rn=_i,Ye=0,sy=1,iy=2,wa=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=Ye,this.onerror=ty,this[ey]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||ny,t.generateMask?t.generateMask(n):(Rn===_i&&(Fr===void 0&&(Fr=Buffer.alloc(_i)),Yg(Fr,0,_i),Rn=0),n[0]=Fr[Rn++],n[1]=Fr[Rn++],n[2]=Fr[Rn++],n[3]=Fr[Rn++]),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 l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(pd(e,n,c,i,a),[c]):(pd(e,n,e,0,a),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=Qg;else{if(typeof e!="number"||!ry(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(Xg(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!==Ye?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):In(e)?(s=e.size,i=!1):(e=qr(e),s=e.length,i=qr.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};In(e)?this._state!==Ye?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Ye?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):In(e)?(s=e.size,i=!1):(e=qr(e),s=e.length,i=qr.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};In(e)?this._state!==Ye?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==Ye?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[fd.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):In(e)?(a=e.size,l=!1):(e=qr(e),a=e.length,l=qr.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:l,rsv1:o};In(e)?this._state!==Ye?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==Ye?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=iy,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=qr(i);t?this.dispatch(o,t,n,s):(this._state=Ye,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(oy,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[fd.extensionName];this._bufferedBytes+=n[Ze],this._state=sy,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");_a(this,l,s);return}this._bufferedBytes-=n[Ze],this._state=Ye,n.readOnly=!1,this.sendFrame(r.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===Ye&&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)}};md.exports=wa;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 oy(r,e,t){_a(r,e,t),r.onerror(e)}});var Td=ee((o_,Sd)=>{"use strict";var{kForOnEventAttribute:ns,kListener:Sa}=kt(),gd=Symbol("kCode"),yd=Symbol("kData"),vd=Symbol("kError"),bd=Symbol("kMessage"),wd=Symbol("kReason"),An=Symbol("kTarget"),_d=Symbol("kType"),kd=Symbol("kWasClean"),Tt=class{constructor(e){this[An]=null,this[_d]=e}get target(){return this[An]}get type(){return this[_d]}};Object.defineProperty(Tt.prototype,"target",{enumerable:!0});Object.defineProperty(Tt.prototype,"type",{enumerable:!0});var Br=class extends Tt{constructor(e,t={}){super(e),this[gd]=t.code===void 0?0:t.code,this[wd]=t.reason===void 0?"":t.reason,this[kd]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[gd]}get reason(){return this[wd]}get wasClean(){return this[kd]}};Object.defineProperty(Br.prototype,"code",{enumerable:!0});Object.defineProperty(Br.prototype,"reason",{enumerable:!0});Object.defineProperty(Br.prototype,"wasClean",{enumerable:!0});var $n=class extends Tt{constructor(e,t={}){super(e),this[vd]=t.error===void 0?null:t.error,this[bd]=t.message===void 0?"":t.message}get error(){return this[vd]}get message(){return this[bd]}};Object.defineProperty($n.prototype,"error",{enumerable:!0});Object.defineProperty($n.prototype,"message",{enumerable:!0});var ss=class extends Tt{constructor(e,t={}){super(e),this[yd]=t.data===void 0?null:t.data}get data(){return this[yd]}};Object.defineProperty(ss.prototype,"data",{enumerable:!0});var ay={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[ns]&&s[Sa]===e&&!s[ns])return;let n;if(r==="message")n=function(i,o){let a=new ss("message",{data:o?i:i.toString()});a[An]=this,ki(e,this,a)};else if(r==="close")n=function(i,o){let a=new Br("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[An]=this,ki(e,this,a)};else if(r==="error")n=function(i){let o=new $n("error",{error:i,message:i.message});o[An]=this,ki(e,this,o)};else if(r==="open")n=function(){let i=new Tt("open");i[An]=this,ki(e,this,i)};else return;n[ns]=!!t[ns],n[Sa]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Sa]===e&&!t[ns]){this.removeListener(r,t);break}}};Sd.exports={CloseEvent:Br,ErrorEvent:$n,Event:Tt,EventTarget:ay,MessageEvent:ss};function ki(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var Si=ee((a_,xd)=>{"use strict";var{tokenChars:is}=En();function at(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function uy(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,a,l=-1,c=-1,f=-1,p=0;for(;p<r.length;p++)if(c=r.charCodeAt(p),o===void 0)if(f===-1&&is[c]===1)l===-1&&(l=p);else if(p!==0&&(c===32||c===9))f===-1&&l!==-1&&(f=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let k=r.slice(l,f);c===44?(at(e,k,t),t=Object.create(null)):o=k,l=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(f===-1&&is[c]===1)l===-1&&(l=p);else if(c===32||c===9)f===-1&&l!==-1&&(f=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),at(t,r.slice(l,f),!0),c===44&&(at(e,o,t),t=Object.create(null),o=void 0),l=f=-1}else if(c===61&&l!==-1&&f===-1)a=r.slice(l,p),l=f=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(s){if(is[c]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);l===-1?l=p:n||(n=!0),s=!1}else if(i)if(is[c]===1)l===-1&&(l=p);else if(c===34&&l!==-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&&is[c]===1)l===-1&&(l=p);else if(l!==-1&&(c===32||c===9))f===-1&&(f=p);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let k=r.slice(l,f);n&&(k=k.replace(/\\/g,""),n=!1),at(t,a,k),c===44&&(at(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=f=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=p);let v=r.slice(l,f);return o===void 0?at(e,v,t):(a===void 0?at(t,v,!0):n?at(t,a,v.replace(/\\/g,"")):at(t,a,v),at(e,o,t)),e}function ly(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(", ")}xd.exports={format:ly,parse:uy}});var Ei=ee((c_,zd)=>{"use strict";var cy=require("events"),dy=require("https"),hy=require("http"),Id=require("net"),fy=require("tls"),{randomBytes:py,createHash:my}=require("crypto"),{Duplex:u_,Readable:l_}=require("stream"),{URL:Ta}=require("url"),Bt=Cn(),gy=ba(),yy=ka(),{isBlob:vy}=En(),{BINARY_TYPES:Cd,CLOSE_TIMEOUT:by,EMPTY_BUFFER:Ti,GUID:wy,kForOnEventAttribute:xa,kListener:_y,kStatusCode:ky,kWebSocket:me,NOOP:Rd}=kt(),{EventTarget:{addEventListener:Sy,removeEventListener:Ty}}=Td(),{format:xy,parse:Cy}=Si(),{toBuffer:Ey}=ts(),Ad=Symbol("kAborted"),Ca=[8,13],xt=["CONNECTING","OPEN","CLOSING","CLOSED"],Iy=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,le=class r extends cy{constructor(e,t,n){super(),this._binaryType=Cd[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Ti,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]),$d(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Cd.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 gy({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 yy(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[me]=this,i[me]=this,e[me]=this,s.on("conclude",$y),s.on("drain",Py),s.on("error",jy),s.on("message",Oy),s.on("ping",Ny),s.on("pong",My),i.onerror=zy,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Od),e.on("data",Ci),e.on("end",Nd),e.on("error",Md),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[Bt.extensionName]&&this._extensions[Bt.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){je(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())}),jd(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){Ea(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||Ti,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){Ea(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||Ti,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){Ea(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Bt.extensionName]||(s.compress=!1),this._sender.send(e||Ti,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){je(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(le,"CONNECTING",{enumerable:!0,value:xt.indexOf("CONNECTING")});Object.defineProperty(le.prototype,"CONNECTING",{enumerable:!0,value:xt.indexOf("CONNECTING")});Object.defineProperty(le,"OPEN",{enumerable:!0,value:xt.indexOf("OPEN")});Object.defineProperty(le.prototype,"OPEN",{enumerable:!0,value:xt.indexOf("OPEN")});Object.defineProperty(le,"CLOSING",{enumerable:!0,value:xt.indexOf("CLOSING")});Object.defineProperty(le.prototype,"CLOSING",{enumerable:!0,value:xt.indexOf("CLOSING")});Object.defineProperty(le,"CLOSED",{enumerable:!0,value:xt.indexOf("CLOSED")});Object.defineProperty(le.prototype,"CLOSED",{enumerable:!0,value:xt.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(le.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(le.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[xa])return e[_y];return null},set(e){for(let t of this.listeners(r))if(t[xa]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[xa]:!0})}})});le.prototype.addEventListener=Sy;le.prototype.removeEventListener=Ty;zd.exports=le;function $d(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:by,protocolVersion:Ca[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,!Ca.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Ca.join(", ")})`);let i;if(e instanceof Ta)i=e;else try{i=new Ta(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let x=new SyntaxError(l);if(r._redirects===0)throw x;xi(r,x);return}let c=o?443:80,f=py(16).toString("base64"),p=o?dy.request:hy.request,v=new Set,k;if(s.createConnection=s.createConnection||(o?Ay:Ry),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&&(k=new Bt({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=xy({[Bt.extensionName]:k.offer()})),t.length){for(let x of t){if(typeof x!="string"||!Iy.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[j,S]of Object.entries(x))n.headers[j.toLowerCase()]=S}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",()=>{je(r,T,"Opening handshake has timed out")}),T.on("error",x=>{T===null||T[Ad]||(T=r._req=null,xi(r,x))}),T.on("response",x=>{let j=x.headers.location,S=x.statusCode;if(j&&s.followRedirects&&S>=300&&S<400){if(++r._redirects>s.maxRedirects){je(r,T,"Maximum redirects exceeded");return}T.abort();let J;try{J=new Ta(j,e)}catch{let z=new SyntaxError(`Invalid URL: ${j}`);xi(r,z);return}$d(r,J,t,n)}else r.emit("unexpected-response",T,x)||je(r,T,`Unexpected server response: ${x.statusCode}`)}),T.on("upgrade",(x,j,S)=>{if(r.emit("upgrade",x),r.readyState!==le.CONNECTING)return;T=r._req=null;let J=x.headers.upgrade;if(J===void 0||J.toLowerCase()!=="websocket"){je(r,j,"Invalid Upgrade header");return}let M=my("sha1").update(f+wy).digest("base64");if(x.headers["sec-websocket-accept"]!==M){je(r,j,"Invalid Sec-WebSocket-Accept header");return}let z=x.headers["sec-websocket-protocol"],Q;if(z!==void 0?v.size?v.has(z)||(Q="Server sent an invalid subprotocol"):Q="Server sent a subprotocol but none was requested":v.size&&(Q="Server sent no subprotocol"),Q){je(r,j,Q);return}z&&(r._protocol=z);let h=x.headers["sec-websocket-extensions"];if(h!==void 0){if(!k){je(r,j,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let g;try{g=Cy(h)}catch{je(r,j,"Invalid Sec-WebSocket-Extensions header");return}let w=Object.keys(g);if(w.length!==1||w[0]!==Bt.extensionName){je(r,j,"Server indicated an extension that was not requested");return}try{k.accept(g[Bt.extensionName])}catch{je(r,j,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Bt.extensionName]=k}r.setSocket(j,S,{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 xi(r,e){r._readyState=le.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Ry(r){return r.path=r.socketPath,Id.connect(r)}function Ay(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Id.isIP(r.host)?"":r.host),fy.connect(r)}function je(r,e,t){r._readyState=le.CLOSING;let n=new Error(t);Error.captureStackTrace(n,je),e.setHeader?(e[Ad]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(xi,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Ea(r,e,t){if(e){let n=vy(e)?e.size:Ey(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${xt[r.readyState]})`);process.nextTick(t,n)}}function $y(r,e){let t=this[me];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[me]!==void 0&&(t._socket.removeListener("data",Ci),process.nextTick(Pd,t._socket),r===1005?t.close():t.close(r,e))}function Py(){let r=this[me];r.isPaused||r._socket.resume()}function jy(r){let e=this[me];e._socket[me]!==void 0&&(e._socket.removeListener("data",Ci),process.nextTick(Pd,e._socket),e.close(r[ky])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Ed(){this[me].emitClose()}function Oy(r,e){this[me].emit("message",r,e)}function Ny(r){let e=this[me];e._autoPong&&e.pong(r,!this._isServer,Rd),e.emit("ping",r)}function My(r){this[me].emit("pong",r)}function Pd(r){r.resume()}function zy(r){let e=this[me];e.readyState!==le.CLOSED&&(e.readyState===le.OPEN&&(e._readyState=le.CLOSING,jd(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function jd(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Od(){let r=this[me];if(this.removeListener("close",Od),this.removeListener("data",Ci),this.removeListener("end",Nd),r._readyState=le.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[me]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Ed),r._receiver.on("finish",Ed))}function Ci(r){this[me]._receiver.write(r)||this.pause()}function Nd(){let r=this[me];r._readyState=le.CLOSING,r._receiver.end(),this.end()}function Md(){let r=this[me];this.removeListener("error",Md),this.on("error",Rd),r&&(r._readyState=le.CLOSING,this.destroy())}});var qd=ee((h_,Ud)=>{"use strict";var d_=Ei(),{Duplex:Dy}=require("stream");function Dd(r){r.emit("close")}function Ly(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Ld(r){this.removeListener("error",Ld),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Uy(r,e){let t=!0,n=new Dy({...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(Dd,n);return}let o=!1;r.once("error",function(l){o=!0,i(l)}),r.once("close",function(){o||i(s),process.nextTick(Dd,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",Ly),n.on("error",Ld),n}Ud.exports=Uy});var Ia=ee((f_,Fd)=>{"use strict";var{tokenChars:qy}=En();function Fy(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&&qy[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}Fd.exports={parse:Fy}});var Wd=ee((m_,Hd)=>{"use strict";var By=require("events"),Ii=require("http"),{Duplex:p_}=require("stream"),{createHash:Ky}=require("crypto"),Bd=Si(),Kr=Cn(),Zy=Ia(),Gy=Ei(),{CLOSE_TIMEOUT:Vy,GUID:Hy,kWebSocket:Wy}=kt(),Jy=/^[+/0-9A-Za-z]{22}==$/,Kd=0,Zd=1,Vd=2,Ra=class extends By{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:Vy,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Gy,...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=Ii.createServer((n,s)=>{let i=Ii.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=Yy(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=Kd}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===Vd){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(os,this);return}if(e&&this.once("close",e),this._state!==Zd)if(this._state=Zd,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(os,this):process.nextTick(os,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{os(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",Gd);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Zr(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Zr(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Jy.test(i)){Zr(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Zr(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){as(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Zy.parse(l)}catch{Zr(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 Kr({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let k=Bd.parse(f);k[Kr.extensionName]&&(v.accept(k[Kr.extensionName]),p[Kr.extensionName]=v)}catch{Zr(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,(k,T,x,j)=>{if(!k)return as(t,T||401,x,j);this.completeUpgrade(p,i,c,e,t,n,s)});return}if(!this.options.verifyClient(v))return as(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[Wy])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Kd)return as(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Ky("sha1").update(t+Hy).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[Kr.extensionName]){let p=e[Kr.extensionName].params,v=Bd.format({[Kr.extensionName]:[p]});c.push(`Sec-WebSocket-Extensions: ${v}`),f._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
|
|
251
253
|
`).join(`\r
|
|
252
|
-
`)),i.removeListener("error",
|
|
254
|
+
`)),i.removeListener("error",Gd),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(os,this)})),a(f,s)}};Hd.exports=Ra;function Yy(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 os(r){r._state=Vd,r.emit("close")}function Gd(){this.destroy()}function as(r,e,t,n){t=t||Ii.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} ${Ii.STATUS_CODES[e]}\r
|
|
253
255
|
`+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
|
|
254
256
|
`)+`\r
|
|
255
257
|
\r
|
|
256
|
-
`+t)}function Fr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Fr),r.emit("wsClientError",o,t,e)}else is(t,n,s,i)}});var Xd={};hs(Xd,{buildSetupReport:()=>sv,claudeLoggedIn:()=>Yd,repoDefaultBranch:()=>Jd});function Jd(r){let e=(...s)=>{try{return(0,Ii.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 Yd(r=Gd.default.homedir()){if(Bt.default.existsSync(Kr.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Bt.default.readFileSync(Kr.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function sv(r,e){let t=!1,n="";if(us&&Date.now()-us.at<6e4)t=us.installed,n=us.version;else{try{let{stdout:o}=await nv(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}us={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=Bt.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:c,isGit:c&&Bt.default.existsSync(Kr.default.join(a.path,".git")),claudeMd:c&&Bt.default.existsSync(Kr.default.join(a.path,"CLAUDE.md")),deployMd:c&&Bt.default.existsSync(Kr.default.join(a.path,"DEPLOY.md")),testMd:c&&Bt.default.existsSync(Kr.default.join(a.path,"TEST.md")),githubToken:!!De(r,o),githubTokenOwn:!!a.github?.token,defaultBranch:c?Jd(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:Yd()},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 Ii,Bt,Gd,Kr,Wd,nv,us,Qd=ds(()=>{"use strict";Ii=require("node:child_process"),Bt=R(require("node:fs"),1),Gd=R(require("node:os"),1),Kr=R(require("node:path"),1),Wd=require("node:util");xr();nv=(0,Wd.promisify)(Ii.execFile);us=null});var at=R(require("node:fs"),1),eh=R(require("node:os"),1),An=R(require("node:path"),1),ut=require("node:child_process"),Ri=require("node:crypto"),Zr=R(require("node:readline/promises"),1);var Za=R(Ka(),1),{program:pv,createCommand:mv,createArgument:gv,createOption:yv,CommanderError:vv,InvalidArgumentError:bv,InvalidOptionArgumentError:_v,Command:Va,Argument:wv,Option:kv,Help:Sv}=Za.default;var pt=R(require("node:fs"),1),_s=R(require("node:os"),1),ws=R(require("node:path"),1);var w={};hs(w,{BRAND:()=>Wh,DIRTY:()=>Kt,EMPTY_PATH:()=>Eh,INVALID:()=>L,NEVER:()=>Of,OK:()=>ye,ParseStatus:()=>fe,Schema:()=>H,ZodAny:()=>Rt,ZodArray:()=>ft,ZodBigInt:()=>Vt,ZodBoolean:()=>Ht,ZodBranded:()=>On,ZodCatch:()=>sr,ZodDate:()=>Gt,ZodDefault:()=>nr,ZodDiscriminatedUnion:()=>ys,ZodEffects:()=>Oe,ZodEnum:()=>tr,ZodError:()=>ke,ZodFirstPartyTypeKind:()=>U,ZodFunction:()=>bs,ZodIntersection:()=>Xt,ZodIssueCode:()=>E,ZodLazy:()=>Qt,ZodLiteral:()=>er,ZodMap:()=>Yr,ZodNaN:()=>Qr,ZodNativeEnum:()=>rr,ZodNever:()=>Ke,ZodNull:()=>Jt,ZodNullable:()=>Xe,ZodNumber:()=>Zt,ZodObject:()=>Se,ZodOptional:()=>Pe,ZodParsedType:()=>P,ZodPipeline:()=>Nn,ZodPromise:()=>At,ZodReadonly:()=>ir,ZodRecord:()=>vs,ZodSchema:()=>H,ZodSet:()=>Xr,ZodString:()=>It,ZodSymbol:()=>Wr,ZodTransformer:()=>Oe,ZodTuple:()=>Ye,ZodType:()=>H,ZodUndefined:()=>Wt,ZodUnion:()=>Yt,ZodUnknown:()=>ht,ZodVoid:()=>Jr,addIssueToContext:()=>$,any:()=>sf,array:()=>cf,bigint:()=>Qh,boolean:()=>nu,coerce:()=>jf,custom:()=>eu,date:()=>ef,datetimeRegex:()=>Xa,defaultErrorMap:()=>lt,discriminatedUnion:()=>ff,effect:()=>xf,enum:()=>kf,function:()=>bf,getErrorMap:()=>Vr,getParsedType:()=>Je,instanceof:()=>Yh,intersection:()=>pf,isAborted:()=>ms,isAsync:()=>Hr,isDirty:()=>gs,isValid:()=>Et,late:()=>Jh,lazy:()=>_f,literal:()=>wf,makeIssue:()=>jn,map:()=>yf,nan:()=>Xh,nativeEnum:()=>Sf,never:()=>af,null:()=>nf,nullable:()=>Ef,number:()=>ru,object:()=>lf,objectUtil:()=>Hi,oboolean:()=>Pf,onumber:()=>$f,optional:()=>Cf,ostring:()=>Af,pipeline:()=>Rf,preprocess:()=>If,promise:()=>Tf,quotelessJson:()=>Th,record:()=>gf,set:()=>vf,setErrorMap:()=>Ch,strictObject:()=>df,string:()=>tu,symbol:()=>tf,transformer:()=>xf,tuple:()=>mf,undefined:()=>rf,union:()=>hf,unknown:()=>of,util:()=>J,void:()=>uf});var J;(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})(J||(J={}));var Hi;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Hi||(Hi={}));var P=J.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Je=r=>{switch(typeof r){case"undefined":return P.undefined;case"string":return P.string;case"number":return Number.isNaN(r)?P.nan:P.number;case"boolean":return P.boolean;case"function":return P.function;case"bigint":return P.bigint;case"symbol":return P.symbol;case"object":return Array.isArray(r)?P.array:r===null?P.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?P.promise:typeof Map<"u"&&r instanceof Map?P.map:typeof Set<"u"&&r instanceof Set?P.set:typeof Date<"u"&&r instanceof Date?P.date:P.object;default:return P.unknown}};var E=J.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"]),Th=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),ke=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 l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],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,J.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()}};ke.create=r=>new ke(r);var xh=(r,e)=>{let t;switch(r.code){case E.invalid_type:r.received===P.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case E.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,J.jsonStringifyReplacer)}`;break;case E.unrecognized_keys:t=`Unrecognized key(s) in object: ${J.joinValues(r.keys,", ")}`;break;case E.invalid_union:t="Invalid input";break;case E.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${J.joinValues(r.options)}`;break;case E.invalid_enum_value:t=`Invalid enum value. Expected ${J.joinValues(r.options)}, received '${r.received}'`;break;case E.invalid_arguments:t="Invalid function arguments";break;case E.invalid_return_type:t="Invalid function return type";break;case E.invalid_date:t="Invalid date";break;case E.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}"`:J.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case E.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 E.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 E.custom:t="Invalid input";break;case E.invalid_intersection_types:t="Intersection results could not be merged";break;case E.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case E.not_finite:t="Number must be finite";break;default:t=e.defaultError,J.assertNever(r)}return{message:t}},lt=xh;var Ha=lt;function Ch(r){Ha=r}function Vr(){return Ha}var jn=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(l=>!!l).slice().reverse();for(let l of c)a=l(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},Eh=[];function $(r,e){let t=Vr(),n=jn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===lt?void 0:lt].filter(s=>!!s)});r.common.issues.push(n)}var fe=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 L;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 L;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}}},L=Object.freeze({status:"aborted"}),Kt=r=>({status:"dirty",value:r}),ye=r=>({status:"valid",value:r}),ms=r=>r.status==="aborted",gs=r=>r.status==="dirty",Et=r=>r.status==="valid",Hr=r=>typeof Promise<"u"&&r instanceof Promise;var O;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(O||(O={}));var je=class{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Ga=(r,e)=>{if(Et(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 ke(r.common.issues);return this._error=t,this._error}}};function B(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 H=class{get description(){return this._def.description}_getType(e){return Je(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Je(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new fe,ctx:{common:e.parent.common,data:e.data,parsedType:Je(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Hr(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:Je(e)},s=this._parseSync({data:e,path:n.path,parent:n});return Ga(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Je(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return Et(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=>Et(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:Je(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(Hr(s)?s:Promise.resolve(s));return Ga(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:E.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 Oe({schema:this,typeName:U.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Pe.create(this,this._def)}nullable(){return Xe.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ft.create(this)}promise(){return At.create(this,this._def)}or(e){return Yt.create([this,e],this._def)}and(e){return Xt.create(this,e,this._def)}transform(e){return new Oe({...B(this._def),schema:this,typeName:U.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new nr({...B(this._def),innerType:this,defaultValue:t,typeName:U.ZodDefault})}brand(){return new On({typeName:U.ZodBranded,type:this,...B(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new sr({...B(this._def),innerType:this,catchValue:t,typeName:U.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Nn.create(this,e)}readonly(){return ir.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Ih=/^c[^\s-]{8,}$/i,Rh=/^[0-9a-z]+$/,Ah=/^[0-9A-HJKMNP-TV-Z]{26}$/i,$h=/^[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,Ph=/^[a-z0-9_-]{21}$/i,jh=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Oh=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Nh=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Mh="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Gi,zh=/^(?:(?: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])$/,Dh=/^(?:(?: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])$/,Lh=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Uh=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,qh=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Fh=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ja="((\\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])))",Bh=new RegExp(`^${Ja}$`);function Ya(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 Kh(r){return new RegExp(`^${Ya(r)}$`)}function Xa(r){let e=`${Ja}T${Ya(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 Zh(r,e){return!!((e==="v4"||!e)&&zh.test(r)||(e==="v6"||!e)&&Lh.test(r))}function Vh(r,e){if(!jh.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 Hh(r,e){return!!((e==="v4"||!e)&&Dh.test(r)||(e==="v6"||!e)&&Uh.test(r))}var It=class r extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==P.string){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.string,received:i.parsedType}),L}let n=new fe,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:E.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:E.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:E.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&$(s,{code:E.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Nh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"email",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")Gi||(Gi=new RegExp(Mh,"u")),Gi.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"emoji",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")$h.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"uuid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Ph.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"nanoid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Ih.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")Rh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid2",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Ah.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ulid",code:E.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:E.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:E.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:E.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:E.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:E.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?Xa(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?Bh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Kh(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Oh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"duration",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Zh(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ip",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?Vh(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"jwt",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?Hh(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cidr",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?qh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Fh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64url",code:E.invalid_string,message:i.message}),n.dirty()):J.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement(s=>e.test(s),{validation:t,code:E.invalid_string,...O.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...O.errToObj(e)})}url(e){return this._addCheck({kind:"url",...O.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...O.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...O.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...O.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...O.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...O.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...O.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...O.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...O.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...O.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...O.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...O.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...O.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...O.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...O.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...O.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...O.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...O.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...O.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...O.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...O.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...O.errToObj(t)})}nonempty(e){return this.min(1,O.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}};It.create=r=>new It({checks:[],typeName:U.ZodString,coerce:r?.coerce??!1,...B(r)});function Gh(r,e){let t=(r.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,s=t>n?t:n,i=Number.parseInt(r.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Zt=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)!==P.number){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.number,received:i.parsedType}),L}let n,s=new fe;for(let i of this._def.checks)i.kind==="int"?J.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:E.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?Gh(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.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:E.not_finite,message:i.message}),s.dirty()):J.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,O.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:O.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:O.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:O.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:O.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:O.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:O.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:O.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:O.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"&&J.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)}};Zt.create=r=>new Zt({checks:[],typeName:U.ZodNumber,coerce:r?.coerce||!1,...B(r)});var Vt=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)!==P.bigint)return this._getInvalidInput(e);let n,s=new fe;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:E.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):J.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return $(t,{code:E.invalid_type,expected:P.bigint,received:t.parsedType}),L}gte(e,t){return this.setLimit("min",e,!0,O.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:O.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:O.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:O.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:O.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.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}};Vt.create=r=>new Vt({checks:[],typeName:U.ZodBigInt,coerce:r?.coerce??!1,...B(r)});var Ht=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==P.boolean){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.boolean,received:n.parsedType}),L}return ye(e.data)}};Ht.create=r=>new Ht({typeName:U.ZodBoolean,coerce:r?.coerce||!1,...B(r)});var Gt=class r extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==P.date){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.date,received:i.parsedType}),L}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_date}),L}let n=new fe,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:E.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:E.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):J.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:O.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:O.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}};Gt.create=r=>new Gt({checks:[],coerce:r?.coerce||!1,typeName:U.ZodDate,...B(r)});var Wr=class extends H{_parse(e){if(this._getType(e)!==P.symbol){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.symbol,received:n.parsedType}),L}return ye(e.data)}};Wr.create=r=>new Wr({typeName:U.ZodSymbol,...B(r)});var Wt=class extends H{_parse(e){if(this._getType(e)!==P.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.undefined,received:n.parsedType}),L}return ye(e.data)}};Wt.create=r=>new Wt({typeName:U.ZodUndefined,...B(r)});var Jt=class extends H{_parse(e){if(this._getType(e)!==P.null){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.null,received:n.parsedType}),L}return ye(e.data)}};Jt.create=r=>new Jt({typeName:U.ZodNull,...B(r)});var Rt=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return ye(e.data)}};Rt.create=r=>new Rt({typeName:U.ZodAny,...B(r)});var ht=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return ye(e.data)}};ht.create=r=>new ht({typeName:U.ZodUnknown,...B(r)});var Ke=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return $(t,{code:E.invalid_type,expected:P.never,received:t.parsedType}),L}};Ke.create=r=>new Ke({typeName:U.ZodNever,...B(r)});var Jr=class extends H{_parse(e){if(this._getType(e)!==P.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.void,received:n.parsedType}),L}return ye(e.data)}};Jr.create=r=>new Jr({typeName:U.ZodVoid,...B(r)});var ft=class r extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==P.array)return $(t,{code:E.invalid_type,expected:P.array,received:t.parsedType}),L;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&($(t,{code:o?E.too_big:E.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:E.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:E.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new je(t,o,t.path,a)))).then(o=>fe.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new je(t,o,t.path,a)));return fe.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:O.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:O.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:O.toString(t)}})}nonempty(e){return this.min(1,e)}};ft.create=(r,e)=>new ft({type:r,minLength:null,maxLength:null,exactLength:null,typeName:U.ZodArray,...B(e)});function Gr(r){if(r instanceof Se){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Pe.create(Gr(n))}return new Se({...r._def,shape:()=>e})}else return r instanceof ft?new ft({...r._def,type:Gr(r.element)}):r instanceof Pe?Pe.create(Gr(r.unwrap())):r instanceof Xe?Xe.create(Gr(r.unwrap())):r instanceof Ye?Ye.create(r.items.map(e=>Gr(e))):r}var Se=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=J.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==P.object){let l=this._getOrReturnCtx(e);return $(l,{code:E.invalid_type,expected:P.object,received:l.parsedType}),L}let{status:n,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ke&&this._def.unknownKeys==="strip"))for(let l in s.data)o.includes(l)||a.push(l);let c=[];for(let l of o){let f=i[l],p=s.data[l];c.push({key:{status:"valid",value:l},value:f._parse(new je(s,p,s.path,l)),alwaysSet:l in s.data})}if(this._def.catchall instanceof Ke){let l=this._def.unknownKeys;if(l==="passthrough")for(let f of a)c.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(l==="strict")a.length>0&&($(s,{code:E.unrecognized_keys,keys:a}),n.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let f of a){let p=s.data[f];c.push({key:{status:"valid",value:f},value:l._parse(new je(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let f of c){let p=await f.key,b=await f.value;l.push({key:p,value:b,alwaysSet:f.alwaysSet})}return l}).then(l=>fe.mergeObjectSync(n,l)):fe.mergeObjectSync(n,c)}get shape(){return this._def.shape()}strict(e){return O.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:O.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:U.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of J.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 J.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new r({...this._def,shape:()=>t})}deepPartial(){return Gr(this)}partial(e){let t={};for(let n of J.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 J.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];for(;i instanceof Pe;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return Qa(J.objectKeys(this.shape))}};Se.create=(r,e)=>new Se({shape:()=>r,unknownKeys:"strip",catchall:Ke.create(),typeName:U.ZodObject,...B(e)});Se.strictCreate=(r,e)=>new Se({shape:()=>r,unknownKeys:"strict",catchall:Ke.create(),typeName:U.ZodObject,...B(e)});Se.lazycreate=(r,e)=>new Se({shape:r,unknownKeys:"strip",catchall:Ke.create(),typeName:U.ZodObject,...B(e)});var Yt=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 ke(a.ctx.common.issues));return $(t,{code:E.invalid_union,unionErrors:o}),L}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 l={...t,common:{...t.common,issues:[]},parent:null},f=c._parseSync({data:t.data,path:t.path,parent:l});if(f.status==="valid")return f;f.status==="dirty"&&!i&&(i={result:f,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new ke(c));return $(t,{code:E.invalid_union,unionErrors:a}),L}}get options(){return this._def.options}};Yt.create=(r,e)=>new Yt({options:r,typeName:U.ZodUnion,...B(e)});var dt=r=>r instanceof Qt?dt(r.schema):r instanceof Oe?dt(r.innerType()):r instanceof er?[r.value]:r instanceof tr?r.options:r instanceof rr?J.objectValues(r.enum):r instanceof nr?dt(r._def.innerType):r instanceof Wt?[void 0]:r instanceof Jt?[null]:r instanceof Pe?[void 0,...dt(r.unwrap())]:r instanceof Xe?[null,...dt(r.unwrap())]:r instanceof On||r instanceof ir?dt(r.unwrap()):r instanceof sr?dt(r._def.innerType):[],ys=class r extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.object)return $(t,{code:E.invalid_type,expected:P.object,received:t.parsedType}),L;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:E.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),L)}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=dt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:U.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...B(n)})}};function Wi(r,e){let t=Je(r),n=Je(e);if(r===e)return{valid:!0,data:r};if(t===P.object&&n===P.object){let s=J.objectKeys(e),i=J.objectKeys(r).filter(a=>s.indexOf(a)!==-1),o={...r,...e};for(let a of i){let c=Wi(r[a],e[a]);if(!c.valid)return{valid:!1};o[a]=c.data}return{valid:!0,data:o}}else if(t===P.array&&n===P.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=Wi(o,a);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return t===P.date&&n===P.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var Xt=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(ms(i)||ms(o))return L;let a=Wi(i.value,o.value);return a.valid?((gs(i)||gs(o))&&t.dirty(),{status:t.value,value:a.data}):($(n,{code:E.invalid_intersection_types}),L)};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}))}};Xt.create=(r,e,t)=>new Xt({left:r,right:e,typeName:U.ZodIntersection,...B(t)});var Ye=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==P.array)return $(n,{code:E.invalid_type,expected:P.array,received:n.parsedType}),L;if(n.data.length<this._def.items.length)return $(n,{code:E.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),L;!this._def.rest&&n.data.length>this._def.items.length&&($(n,{code:E.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 je(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>fe.mergeArray(t,o)):fe.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};Ye.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ye({items:r,typeName:U.ZodTuple,rest:null,...B(e)})};var vs=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!==P.object)return $(n,{code:E.invalid_type,expected:P.object,received:n.parsedType}),L;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new je(n,a,n.path,a)),value:o._parse(new je(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?fe.mergeObjectAsync(t,s):fe.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:U.ZodRecord,...B(n)}):new r({keyType:It.create(),valueType:e,typeName:U.ZodRecord,...B(t)})}},Yr=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!==P.map)return $(n,{code:E.invalid_type,expected:P.map,received:n.parsedType}),L;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,c],l)=>({key:s._parse(new je(n,a,n.path,[l,"key"])),value:i._parse(new je(n,c,n.path,[l,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of o){let l=await c.key,f=await c.value;if(l.status==="aborted"||f.status==="aborted")return L;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(l.value,f.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let l=c.key,f=c.value;if(l.status==="aborted"||f.status==="aborted")return L;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(l.value,f.value)}return{status:t.value,value:a}}}};Yr.create=(r,e,t)=>new Yr({valueType:e,keyType:r,typeName:U.ZodMap,...B(t)});var Xr=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==P.set)return $(n,{code:E.invalid_type,expected:P.set,received:n.parsedType}),L;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&($(n,{code:E.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:E.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 l=new Set;for(let f of c){if(f.status==="aborted")return L;f.status==="dirty"&&t.dirty(),l.add(f.value)}return{status:t.value,value:l}}let a=[...n.data.values()].map((c,l)=>i._parse(new je(n,c,n.path,l)));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:O.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:O.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Xr.create=(r,e)=>new Xr({valueType:r,minSize:null,maxSize:null,typeName:U.ZodSet,...B(e)});var bs=class r extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.function)return $(t,{code:E.invalid_type,expected:P.function,received:t.parsedType}),L;function n(a,c){return jn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Vr(),lt].filter(l=>!!l),issueData:{code:E.invalid_arguments,argumentsError:c}})}function s(a,c){return jn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Vr(),lt].filter(l=>!!l),issueData:{code:E.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof At){let a=this;return ye(async function(...c){let l=new ke([]),f=await a._def.args.parseAsync(c,i).catch(T=>{throw l.addIssue(n(c,T)),l}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(T=>{throw l.addIssue(s(p,T)),l})})}else{let a=this;return ye(function(...c){let l=a._def.args.safeParse(c,i);if(!l.success)throw new ke([n(c,l.error)]);let f=Reflect.apply(o,this,l.data),p=a._def.returns.safeParse(f,i);if(!p.success)throw new ke([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:Ye.create(e).rest(ht.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||Ye.create([]).rest(ht.create()),returns:t||ht.create(),typeName:U.ZodFunction,...B(n)})}},Qt=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})}};Qt.create=(r,e)=>new Qt({getter:r,typeName:U.ZodLazy,...B(e)});var er=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return $(t,{received:t.data,code:E.invalid_literal,expected:this._def.value}),L}return{status:"valid",value:e.data}}get value(){return this._def.value}};er.create=(r,e)=>new er({value:r,typeName:U.ZodLiteral,...B(e)});function Qa(r,e){return new tr({values:r,typeName:U.ZodEnum,...B(e)})}var tr=class r extends H{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return $(t,{expected:J.joinValues(n),received:t.parsedType,code:E.invalid_type}),L}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:E.invalid_enum_value,options:n}),L}return ye(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})}};tr.create=Qa;var rr=class extends H{_parse(e){let t=J.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==P.string&&n.parsedType!==P.number){let s=J.objectValues(t);return $(n,{expected:J.joinValues(s),received:n.parsedType,code:E.invalid_type}),L}if(this._cache||(this._cache=new Set(J.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=J.objectValues(t);return $(n,{received:n.data,code:E.invalid_enum_value,options:s}),L}return ye(e.data)}get enum(){return this._def.values}};rr.create=(r,e)=>new rr({values:r,typeName:U.ZodNativeEnum,...B(e)});var At=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.promise&&t.common.async===!1)return $(t,{code:E.invalid_type,expected:P.promise,received:t.parsedType}),L;let n=t.parsedType===P.promise?t.data:Promise.resolve(t.data);return ye(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};At.create=(r,e)=>new At({type:r,typeName:U.ZodPromise,...B(e)});var Oe=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===U.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{$(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 L;let c=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return c.status==="aborted"?L:c.status==="dirty"?Kt(c.value):t.value==="dirty"?Kt(c.value):c});{if(t.value==="aborted")return L;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?L:a.status==="dirty"?Kt(a.value):t.value==="dirty"?Kt(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"?L:(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"?L:(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(!Et(o))return L;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=>Et(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):L);J.assertNever(s)}};Oe.create=(r,e,t)=>new Oe({schema:r,typeName:U.ZodEffects,effect:e,...B(t)});Oe.createWithPreprocess=(r,e,t)=>new Oe({schema:e,effect:{type:"preprocess",transform:r},typeName:U.ZodEffects,...B(t)});var Pe=class extends H{_parse(e){return this._getType(e)===P.undefined?ye(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Pe.create=(r,e)=>new Pe({innerType:r,typeName:U.ZodOptional,...B(e)});var Xe=class extends H{_parse(e){return this._getType(e)===P.null?ye(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Xe.create=(r,e)=>new Xe({innerType:r,typeName:U.ZodNullable,...B(e)});var nr=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===P.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};nr.create=(r,e)=>new nr({innerType:r,typeName:U.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...B(e)});var sr=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 Hr(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new ke(n.common.issues)},input:n.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new ke(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};sr.create=(r,e)=>new sr({innerType:r,typeName:U.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...B(e)});var Qr=class extends H{_parse(e){if(this._getType(e)!==P.nan){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.nan,received:n.parsedType}),L}return{status:"valid",value:e.data}}};Qr.create=r=>new Qr({typeName:U.ZodNaN,...B(r)});var Wh=Symbol("zod_brand"),On=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}},Nn=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"?L:i.status==="dirty"?(t.dirty(),Kt(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"?L:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:U.ZodPipeline})}},ir=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=s=>(Et(s)&&(s.value=Object.freeze(s.value)),s);return Hr(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};ir.create=(r,e)=>new ir({innerType:r,typeName:U.ZodReadonly,...B(e)});function Wa(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function eu(r,e={},t){return r?Rt.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Wa(e,n),c=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:c})}});if(!i){let o=Wa(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):Rt.create()}var Jh={object:Se.lazycreate},U;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(U||(U={}));var Yh=(r,e={message:`Input not instance of ${r.name}`})=>eu(t=>t instanceof r,e),tu=It.create,ru=Zt.create,Xh=Qr.create,Qh=Vt.create,nu=Ht.create,ef=Gt.create,tf=Wr.create,rf=Wt.create,nf=Jt.create,sf=Rt.create,of=ht.create,af=Ke.create,uf=Jr.create,cf=ft.create,lf=Se.create,df=Se.strictCreate,hf=Yt.create,ff=ys.create,pf=Xt.create,mf=Ye.create,gf=vs.create,yf=Yr.create,vf=Xr.create,bf=bs.create,_f=Qt.create,wf=er.create,kf=tr.create,Sf=rr.create,Tf=At.create,xf=Oe.create,Cf=Pe.create,Ef=Xe.create,If=Oe.createWithPreprocess,Rf=Nn.create,Af=()=>tu().optional(),$f=()=>ru().optional(),Pf=()=>nu().optional(),jf={string:(r=>It.create({...r,coerce:!0})),number:(r=>Zt.create({...r,coerce:!0})),boolean:(r=>Ht.create({...r,coerce:!0})),bigint:(r=>Vt.create({...r,coerce:!0})),date:(r=>Gt.create({...r,coerce:!0}))};var Of=L;var su=w.object({baseUrl:w.string().url(),email:w.string().email(),apiToken:w.string().min(1)}),Ji=w.object({controlPlaneUrl:w.string().url(),runnerId:w.string().optional(),runnerToken:w.string().optional(),runnerName:w.string().default(_s.default.hostname()),jira:su.optional(),repos:w.record(w.object({path:w.string(),jira:su.optional(),github:w.object({token:w.string().min(1),login:w.string().optional()}).optional()})).default({}),github:w.object({token:w.string().min(1),login:w.string().optional()}).optional(),githubUsers:w.record(w.object({token:w.string().min(1),login:w.string().optional()})).default({}),deploy:w.object({enabled:w.boolean().default(!1)}).default({enabled:!1}),environments:w.record(w.object({secrets:w.record(w.string()).default({})})).default({}),claudeProfiles:w.record(w.object({configDir:w.string()})).default({}),claudeBin:w.string().default("claude"),agents:w.record(w.object({bin:w.string()})).default({}),jiraUsers:w.record(w.object({email:w.string().email(),apiToken:w.string().min(1)})).default({}),auditSchedules:w.array(w.object({repoName:w.string(),role:w.enum(["security","testing"]),intervalHours:w.number().int().min(6).max(720)})).default([]),pollIntervalSeconds:w.number().int().min(10).max(600).default(30)});function ee(){let r=process.env.ALLWRIGHT_CONFIG_DIR??process.env.TICKETPILOT_CONFIG_DIR;if(r)return r;let e=ws.default.join(_s.default.homedir(),".config","allwright"),t=ws.default.join(_s.default.homedir(),".config","ticketpilot");return!pt.default.existsSync(e)&&pt.default.existsSync(t)?t:e}function $t(){return ws.default.join(ee(),"runner.json")}function le(){let r=$t();if(!pt.default.existsSync(r))return null;let e=JSON.parse(pt.default.readFileSync(r,"utf8"));return Ji.parse(e)}function ce(r){let e=ee();pt.default.mkdirSync(e,{recursive:!0,mode:448});let t=$t(),n=t+".tmp";pt.default.writeFileSync(n,JSON.stringify(r,null,2)+`
|
|
257
|
-
`,{mode:384}),pt.default.renameSync(n,t),pt.default.chmodSync(t,384)}function
|
|
258
|
-
`).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=
|
|
258
|
+
`+t)}function Zr(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Zr),r.emit("wsClientError",o,t,e)}else as(t,n,s,i)}});var oh={};ps(oh,{buildSetupReport:()=>gv,claudeLoggedIn:()=>ih,repoDefaultBranch:()=>sh});function sh(r){let e=(...s)=>{try{return(0,ji.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 ih(r=rh.default.homedir()){if(Kt.default.existsSync(Vr.default.join(r,".claude",".credentials.json")))return!0;try{return!!JSON.parse(Kt.default.readFileSync(Vr.default.join(r,".claude.json"),"utf8")).oauthAccount}catch{return!1}}async function gv(r,e){let t=!1,n="";if(cs&&Date.now()-cs.at<6e4)t=cs.installed,n=cs.version;else{try{let{stdout:o}=await mv(r.claudeBin,["--version"],{timeout:1e4});t=!0,n=o.trim().slice(0,60)}catch{t=!1}cs={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 l=Kt.default.existsSync(a.path);return{repoName:o,mapped:!0,pathExists:l,isGit:l&&Kt.default.existsSync(Vr.default.join(a.path,".git")),claudeMd:l&&Kt.default.existsSync(Vr.default.join(a.path,"CLAUDE.md")),deployMd:l&&Kt.default.existsSync(Vr.default.join(a.path,"DEPLOY.md")),testMd:l&&Kt.default.existsSync(Vr.default.join(a.path,"TEST.md")),githubToken:!!qe(r,o),githubTokenOwn:!!a.github?.token,defaultBranch:l?sh(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:ih()},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 ji,Kt,rh,Vr,nh,mv,cs,ah=fs(()=>{"use strict";ji=require("node:child_process"),Kt=R(require("node:fs"),1),rh=R(require("node:os"),1),Vr=R(require("node:path"),1),nh=require("node:util");Ir();mv=(0,nh.promisify)(ji.execFile);cs=null});var Ct=R(require("node:fs"),1),uh=R(require("node:os"),1),ds=R(require("node:path"),1),Et=require("node:child_process"),Oi=require("node:crypto"),Hr=R(require("node:readline/promises"),1);var Xa=R(Ya(),1),{program:Cv,createCommand:Ev,createArgument:Iv,createOption:Rv,CommanderError:Av,InvalidArgumentError:$v,InvalidOptionArgumentError:Pv,Command:Qa,Argument:jv,Option:Ov,Help:Nv}=Xa.default;var pt=R(require("node:fs"),1),ks=R(require("node:os"),1),Ss=R(require("node:path"),1);var _={};ps(_,{BRAND:()=>nf,DIRTY:()=>Zt,EMPTY_PATH:()=>Nh,INVALID:()=>L,NEVER:()=>Ff,OK:()=>we,ParseStatus:()=>ye,Schema:()=>H,ZodAny:()=>At,ZodArray:()=>ft,ZodBigInt:()=>Vt,ZodBoolean:()=>Ht,ZodBranded:()=>zn,ZodCatch:()=>ir,ZodDate:()=>Wt,ZodDefault:()=>sr,ZodDiscriminatedUnion:()=>bs,ZodEffects:()=>ze,ZodEnum:()=>rr,ZodError:()=>xe,ZodFirstPartyTypeKind:()=>U,ZodFunction:()=>_s,ZodIntersection:()=>Qt,ZodIssueCode:()=>E,ZodLazy:()=>er,ZodLiteral:()=>tr,ZodMap:()=>en,ZodNaN:()=>rn,ZodNativeEnum:()=>nr,ZodNever:()=>Ge,ZodNull:()=>Yt,ZodNullable:()=>et,ZodNumber:()=>Gt,ZodObject:()=>Ce,ZodOptional:()=>Ne,ZodParsedType:()=>P,ZodPipeline:()=>Dn,ZodPromise:()=>$t,ZodReadonly:()=>or,ZodRecord:()=>ws,ZodSchema:()=>H,ZodSet:()=>tn,ZodString:()=>Rt,ZodSymbol:()=>Xr,ZodTransformer:()=>ze,ZodTuple:()=>Qe,ZodType:()=>H,ZodUndefined:()=>Jt,ZodUnion:()=>Xt,ZodUnknown:()=>ht,ZodVoid:()=>Qr,addIssueToContext:()=>$,any:()=>ff,array:()=>yf,bigint:()=>uf,boolean:()=>cu,coerce:()=>qf,custom:()=>au,date:()=>lf,datetimeRegex:()=>iu,defaultErrorMap:()=>ct,discriminatedUnion:()=>_f,effect:()=>jf,enum:()=>Af,function:()=>Ef,getErrorMap:()=>Wr,getParsedType:()=>Xe,instanceof:()=>of,intersection:()=>kf,isAborted:()=>ys,isAsync:()=>Jr,isDirty:()=>vs,isValid:()=>It,late:()=>sf,lazy:()=>If,literal:()=>Rf,makeIssue:()=>Mn,map:()=>xf,nan:()=>af,nativeEnum:()=>$f,never:()=>mf,null:()=>hf,nullable:()=>Nf,number:()=>lu,object:()=>vf,objectUtil:()=>Xi,oboolean:()=>Uf,onumber:()=>Lf,optional:()=>Of,ostring:()=>Df,pipeline:()=>zf,preprocess:()=>Mf,promise:()=>Pf,quotelessJson:()=>Ph,record:()=>Tf,set:()=>Cf,setErrorMap:()=>Oh,strictObject:()=>bf,string:()=>uu,symbol:()=>cf,transformer:()=>jf,tuple:()=>Sf,undefined:()=>df,union:()=>wf,unknown:()=>pf,util:()=>X,void:()=>gf});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 Xi;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(Xi||(Xi={}));var P=X.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Xe=r=>{switch(typeof r){case"undefined":return P.undefined;case"string":return P.string;case"number":return Number.isNaN(r)?P.nan:P.number;case"boolean":return P.boolean;case"function":return P.function;case"bigint":return P.bigint;case"symbol":return P.symbol;case"object":return Array.isArray(r)?P.array:r===null?P.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?P.promise:typeof Map<"u"&&r instanceof Map?P.map:typeof Set<"u"&&r instanceof Set?P.set:typeof Date<"u"&&r instanceof Date?P.date:P.object;default:return P.unknown}};var E=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"]),Ph=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,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),n}static assert(e){if(!(e instanceof r))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,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 jh=(r,e)=>{let t;switch(r.code){case E.invalid_type:r.received===P.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case E.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,X.jsonStringifyReplacer)}`;break;case E.unrecognized_keys:t=`Unrecognized key(s) in object: ${X.joinValues(r.keys,", ")}`;break;case E.invalid_union:t="Invalid input";break;case E.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${X.joinValues(r.options)}`;break;case E.invalid_enum_value:t=`Invalid enum value. Expected ${X.joinValues(r.options)}, received '${r.received}'`;break;case E.invalid_arguments:t="Invalid function arguments";break;case E.invalid_return_type:t="Invalid function return type";break;case E.invalid_date:t="Invalid date";break;case E.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 E.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 E.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 E.custom:t="Invalid input";break;case E.invalid_intersection_types:t="Intersection results could not be merged";break;case E.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case E.not_finite:t="Number must be finite";break;default:t=e.defaultError,X.assertNever(r)}return{message:t}},ct=jh;var eu=ct;function Oh(r){eu=r}function Wr(){return eu}var Mn=r=>{let{data:e,path:t,errorMaps:n,issueData:s}=r,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",l=n.filter(c=>!!c).slice().reverse();for(let c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}},Nh=[];function $(r,e){let t=Wr(),n=Mn({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===ct?void 0:ct].filter(s=>!!s)});r.common.issues.push(n)}var ye=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 L;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 L;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}}},L=Object.freeze({status:"aborted"}),Zt=r=>({status:"dirty",value:r}),we=r=>({status:"valid",value:r}),ys=r=>r.status==="aborted",vs=r=>r.status==="dirty",It=r=>r.status==="valid",Jr=r=>typeof Promise<"u"&&r instanceof Promise;var O;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(O||(O={}));var Me=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}},tu=(r,e)=>{if(It(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 K(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:n,description:s}=r;if(e&&(t||n))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:l}=r;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??n??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}var H=class{get description(){return this._def.description}_getType(e){return Xe(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Xe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ye,ctx:{common:e.parent.common,data:e.data,parsedType:Xe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Jr(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:Xe(e)},s=this._parseSync({data:e,path:n.path,parent:n});return tu(n,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Xe(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return It(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=>It(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:Xe(e)},s=this._parse({data:e,path:n.path,parent:n}),i=await(Jr(s)?s:Promise.resolve(s));return tu(n,i)}refine(e,t){let n=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:E.custom,...n(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,s)=>e(n)?!0:(s.addIssue(typeof t=="function"?t(n,s):t),!1))}_refinement(e){return new ze({schema:this,typeName:U.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ne.create(this,this._def)}nullable(){return et.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ft.create(this)}promise(){return $t.create(this,this._def)}or(e){return Xt.create([this,e],this._def)}and(e){return Qt.create(this,e,this._def)}transform(e){return new ze({...K(this._def),schema:this,typeName:U.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new sr({...K(this._def),innerType:this,defaultValue:t,typeName:U.ZodDefault})}brand(){return new zn({typeName:U.ZodBranded,type:this,...K(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new ir({...K(this._def),innerType:this,catchValue:t,typeName:U.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Dn.create(this,e)}readonly(){return or.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Mh=/^c[^\s-]{8,}$/i,zh=/^[0-9a-z]+$/,Dh=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Lh=/^[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,Uh=/^[a-z0-9_-]{21}$/i,qh=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Fh=/^[-+]?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)?)??$/,Bh=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Kh="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Qi,Zh=/^(?:(?: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])$/,Gh=/^(?:(?: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])$/,Vh=/^(([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]))$/,Hh=/^(([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])$/,Wh=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Jh=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nu="((\\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])))",Yh=new RegExp(`^${nu}$`);function su(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 Xh(r){return new RegExp(`^${su(r)}$`)}function iu(r){let e=`${nu}T${su(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 Qh(r,e){return!!((e==="v4"||!e)&&Zh.test(r)||(e==="v6"||!e)&&Vh.test(r))}function ef(r,e){if(!qh.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 tf(r,e){return!!((e==="v4"||!e)&&Gh.test(r)||(e==="v6"||!e)&&Hh.test(r))}var Rt=class r extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==P.string){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.string,received:i.parsedType}),L}let n=new ye,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:E.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:E.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:E.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&$(s,{code:E.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")Bh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"email",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")Qi||(Qi=new RegExp(Kh,"u")),Qi.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"emoji",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")Lh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"uuid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")Uh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"nanoid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Mh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")zh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cuid2",code:E.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")Dh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ulid",code:E.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:E.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:E.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:E.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:E.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:E.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()):i.kind==="datetime"?iu(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"datetime",message:i.message}),n.dirty()):i.kind==="date"?Yh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"date",message:i.message}),n.dirty()):i.kind==="time"?Xh(i).test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{code:E.invalid_string,validation:"time",message:i.message}),n.dirty()):i.kind==="duration"?Fh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"duration",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?Qh(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"ip",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?ef(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"jwt",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?tf(e.data,i.version)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"cidr",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?Wh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64",code:E.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?Jh.test(e.data)||(s=this._getOrReturnCtx(e,s),$(s,{validation:"base64url",code:E.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:E.invalid_string,...O.errToObj(n)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...O.errToObj(e)})}url(e){return this._addCheck({kind:"url",...O.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...O.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...O.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...O.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...O.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...O.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...O.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...O.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...O.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...O.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...O.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...O.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...O.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...O.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...O.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...O.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...O.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...O.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...O.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...O.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...O.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...O.errToObj(t)})}nonempty(e){return this.min(1,O.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}};Rt.create=r=>new Rt({checks:[],typeName:U.ZodString,coerce:r?.coerce??!1,...K(r)});function rf(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 Gt=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)!==P.number){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.number,received:i.parsedType}),L}let n,s=new ye;for(let i of this._def.checks)i.kind==="int"?X.isInteger(e.data)||(n=this._getOrReturnCtx(e,n),$(n,{code:E.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?rf(e.data,i.value)!==0&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.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:E.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,O.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:O.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:O.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:O.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:O.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:O.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:O.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:O.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:O.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)}};Gt.create=r=>new Gt({checks:[],typeName:U.ZodNumber,coerce:r?.coerce||!1,...K(r)});var Vt=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)!==P.bigint)return this._getInvalidInput(e);let n,s=new ye;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:E.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(e,n),$(n,{code:E.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:E.invalid_type,expected:P.bigint,received:t.parsedType}),L}gte(e,t){return this.setLimit("min",e,!0,O.toString(t))}gt(e,t){return this.setLimit("min",e,!1,O.toString(t))}lte(e,t){return this.setLimit("max",e,!0,O.toString(t))}lt(e,t){return this.setLimit("max",e,!1,O.toString(t))}setLimit(e,t,n,s){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:O.toString(s)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:O.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:O.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:O.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:O.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:O.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}};Vt.create=r=>new Vt({checks:[],typeName:U.ZodBigInt,coerce:r?.coerce??!1,...K(r)});var Ht=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==P.boolean){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.boolean,received:n.parsedType}),L}return we(e.data)}};Ht.create=r=>new Ht({typeName:U.ZodBoolean,coerce:r?.coerce||!1,...K(r)});var Wt=class r extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==P.date){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_type,expected:P.date,received:i.parsedType}),L}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return $(i,{code:E.invalid_date}),L}let n=new ye,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),$(s,{code:E.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:E.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:O.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:O.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}};Wt.create=r=>new Wt({checks:[],coerce:r?.coerce||!1,typeName:U.ZodDate,...K(r)});var Xr=class extends H{_parse(e){if(this._getType(e)!==P.symbol){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.symbol,received:n.parsedType}),L}return we(e.data)}};Xr.create=r=>new Xr({typeName:U.ZodSymbol,...K(r)});var Jt=class extends H{_parse(e){if(this._getType(e)!==P.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.undefined,received:n.parsedType}),L}return we(e.data)}};Jt.create=r=>new Jt({typeName:U.ZodUndefined,...K(r)});var Yt=class extends H{_parse(e){if(this._getType(e)!==P.null){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.null,received:n.parsedType}),L}return we(e.data)}};Yt.create=r=>new Yt({typeName:U.ZodNull,...K(r)});var At=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return we(e.data)}};At.create=r=>new At({typeName:U.ZodAny,...K(r)});var ht=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return we(e.data)}};ht.create=r=>new ht({typeName:U.ZodUnknown,...K(r)});var Ge=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return $(t,{code:E.invalid_type,expected:P.never,received:t.parsedType}),L}};Ge.create=r=>new Ge({typeName:U.ZodNever,...K(r)});var Qr=class extends H{_parse(e){if(this._getType(e)!==P.undefined){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.void,received:n.parsedType}),L}return we(e.data)}};Qr.create=r=>new Qr({typeName:U.ZodVoid,...K(r)});var ft=class r extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),s=this._def;if(t.parsedType!==P.array)return $(t,{code:E.invalid_type,expected:P.array,received:t.parsedType}),L;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&($(t,{code:o?E.too_big:E.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:E.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:E.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 Me(t,o,t.path,a)))).then(o=>ye.mergeArray(n,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Me(t,o,t.path,a)));return ye.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:O.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:O.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:O.toString(t)}})}nonempty(e){return this.min(1,e)}};ft.create=(r,e)=>new ft({type:r,minLength:null,maxLength:null,exactLength:null,typeName:U.ZodArray,...K(e)});function Yr(r){if(r instanceof Ce){let e={};for(let t in r.shape){let n=r.shape[t];e[t]=Ne.create(Yr(n))}return new Ce({...r._def,shape:()=>e})}else return r instanceof ft?new ft({...r._def,type:Yr(r.element)}):r instanceof Ne?Ne.create(Yr(r.unwrap())):r instanceof et?et.create(Yr(r.unwrap())):r instanceof Qe?Qe.create(r.items.map(e=>Yr(e))):r}var Ce=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=X.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==P.object){let c=this._getOrReturnCtx(e);return $(c,{code:E.invalid_type,expected:P.object,received:c.parsedType}),L}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 l=[];for(let c of o){let f=i[c],p=s.data[c];l.push({key:{status:"valid",value:c},value:f._parse(new Me(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)l.push({key:{status:"valid",value:f},value:{status:"valid",value:s.data[f]}});else if(c==="strict")a.length>0&&($(s,{code:E.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];l.push({key:{status:"valid",value:f},value:c._parse(new Me(s,p,s.path,f)),alwaysSet:f in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let c=[];for(let f of l){let p=await f.key,v=await f.value;c.push({key:p,value:v,alwaysSet:f.alwaysSet})}return c}).then(c=>ye.mergeObjectSync(n,c)):ye.mergeObjectSync(n,l)}get shape(){return this._def.shape()}strict(e){return O.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let s=this._def.errorMap?.(t,n).message??n.defaultError;return t.code==="unrecognized_keys"?{message:O.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:U.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let n of 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 Yr(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 Ne;)i=i._def.innerType;t[n]=i}return new r({...this._def,shape:()=>t})}keyof(){return ou(X.objectKeys(this.shape))}};Ce.create=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strip",catchall:Ge.create(),typeName:U.ZodObject,...K(e)});Ce.strictCreate=(r,e)=>new Ce({shape:()=>r,unknownKeys:"strict",catchall:Ge.create(),typeName:U.ZodObject,...K(e)});Ce.lazycreate=(r,e)=>new Ce({shape:r,unknownKeys:"strip",catchall:Ge.create(),typeName:U.ZodObject,...K(e)});var Xt=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 xe(a.ctx.common.issues));return $(t,{code:E.invalid_union,unionErrors:o}),L}if(t.common.async)return Promise.all(n.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let l of n){let c={...t,common:{...t.common,issues:[]},parent:null},f=l._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(l=>new xe(l));return $(t,{code:E.invalid_union,unionErrors:a}),L}}get options(){return this._def.options}};Xt.create=(r,e)=>new Xt({options:r,typeName:U.ZodUnion,...K(e)});var dt=r=>r instanceof er?dt(r.schema):r instanceof ze?dt(r.innerType()):r instanceof tr?[r.value]:r instanceof rr?r.options:r instanceof nr?X.objectValues(r.enum):r instanceof sr?dt(r._def.innerType):r instanceof Jt?[void 0]:r instanceof Yt?[null]:r instanceof Ne?[void 0,...dt(r.unwrap())]:r instanceof et?[null,...dt(r.unwrap())]:r instanceof zn||r instanceof or?dt(r.unwrap()):r instanceof ir?dt(r._def.innerType):[],bs=class r extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.object)return $(t,{code:E.invalid_type,expected:P.object,received:t.parsedType}),L;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:E.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),L)}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=dt(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new r({typeName:U.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...K(n)})}};function eo(r,e){let t=Xe(r),n=Xe(e);if(r===e)return{valid:!0,data:r};if(t===P.object&&n===P.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 l=eo(r[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===P.array&&n===P.array){if(r.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<r.length;i++){let o=r[i],a=e[i],l=eo(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===P.date&&n===P.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}var Qt=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=(i,o)=>{if(ys(i)||ys(o))return L;let a=eo(i.value,o.value);return a.valid?((vs(i)||vs(o))&&t.dirty(),{status:t.value,value:a.data}):($(n,{code:E.invalid_intersection_types}),L)};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}))}};Qt.create=(r,e,t)=>new Qt({left:r,right:e,typeName:U.ZodIntersection,...K(t)});var Qe=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==P.array)return $(n,{code:E.invalid_type,expected:P.array,received:n.parsedType}),L;if(n.data.length<this._def.items.length)return $(n,{code:E.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),L;!this._def.rest&&n.data.length>this._def.items.length&&($(n,{code:E.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...n.data].map((o,a)=>{let l=this._def.items[a]||this._def.rest;return l?l._parse(new Me(n,o,n.path,a)):null}).filter(o=>!!o);return n.common.async?Promise.all(i).then(o=>ye.mergeArray(t,o)):ye.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};Qe.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Qe({items:r,typeName:U.ZodTuple,rest:null,...K(e)})};var ws=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!==P.object)return $(n,{code:E.invalid_type,expected:P.object,received:n.parsedType}),L;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in n.data)s.push({key:i._parse(new Me(n,a,n.path,a)),value:o._parse(new Me(n,n.data[a],n.path,a)),alwaysSet:a in n.data});return n.common.async?ye.mergeObjectAsync(t,s):ye.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:U.ZodRecord,...K(n)}):new r({keyType:Rt.create(),valueType:e,typeName:U.ZodRecord,...K(t)})}},en=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!==P.map)return $(n,{code:E.invalid_type,expected:P.map,received:n.parsedType}),L;let s=this._def.keyType,i=this._def.valueType,o=[...n.data.entries()].map(([a,l],c)=>({key:s._parse(new Me(n,a,n.path,[c,"key"])),value:i._parse(new Me(n,l,n.path,[c,"value"]))}));if(n.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,f=await l.value;if(c.status==="aborted"||f.status==="aborted")return L;(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 l of o){let c=l.key,f=l.value;if(c.status==="aborted"||f.status==="aborted")return L;(c.status==="dirty"||f.status==="dirty")&&t.dirty(),a.set(c.value,f.value)}return{status:t.value,value:a}}}};en.create=(r,e,t)=>new en({valueType:e,keyType:r,typeName:U.ZodMap,...K(t)});var tn=class r extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==P.set)return $(n,{code:E.invalid_type,expected:P.set,received:n.parsedType}),L;let s=this._def;s.minSize!==null&&n.data.size<s.minSize.value&&($(n,{code:E.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:E.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(l){let c=new Set;for(let f of l){if(f.status==="aborted")return L;f.status==="dirty"&&t.dirty(),c.add(f.value)}return{status:t.value,value:c}}let a=[...n.data.values()].map((l,c)=>i._parse(new Me(n,l,n.path,c)));return n.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new r({...this._def,minSize:{value:e,message:O.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:O.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};tn.create=(r,e)=>new tn({valueType:r,minSize:null,maxSize:null,typeName:U.ZodSet,...K(e)});var _s=class r extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.function)return $(t,{code:E.invalid_type,expected:P.function,received:t.parsedType}),L;function n(a,l){return Mn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Wr(),ct].filter(c=>!!c),issueData:{code:E.invalid_arguments,argumentsError:l}})}function s(a,l){return Mn({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Wr(),ct].filter(c=>!!c),issueData:{code:E.invalid_return_type,returnTypeError:l}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof $t){let a=this;return we(async function(...l){let c=new xe([]),f=await a._def.args.parseAsync(l,i).catch(k=>{throw c.addIssue(n(l,k)),c}),p=await Reflect.apply(o,this,f);return await a._def.returns._def.type.parseAsync(p,i).catch(k=>{throw c.addIssue(s(p,k)),c})})}else{let a=this;return we(function(...l){let c=a._def.args.safeParse(l,i);if(!c.success)throw new xe([n(l,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:Qe.create(e).rest(ht.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||Qe.create([]).rest(ht.create()),returns:t||ht.create(),typeName:U.ZodFunction,...K(n)})}},er=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})}};er.create=(r,e)=>new er({getter:r,typeName:U.ZodLazy,...K(e)});var tr=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return $(t,{received:t.data,code:E.invalid_literal,expected:this._def.value}),L}return{status:"valid",value:e.data}}get value(){return this._def.value}};tr.create=(r,e)=>new tr({value:r,typeName:U.ZodLiteral,...K(e)});function ou(r,e){return new rr({values:r,typeName:U.ZodEnum,...K(e)})}var rr=class r extends H{_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:E.invalid_type}),L}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:E.invalid_enum_value,options:n}),L}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})}};rr.create=ou;var nr=class extends H{_parse(e){let t=X.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==P.string&&n.parsedType!==P.number){let s=X.objectValues(t);return $(n,{expected:X.joinValues(s),received:n.parsedType,code:E.invalid_type}),L}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:E.invalid_enum_value,options:s}),L}return we(e.data)}get enum(){return this._def.values}};nr.create=(r,e)=>new nr({values:r,typeName:U.ZodNativeEnum,...K(e)});var $t=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==P.promise&&t.common.async===!1)return $(t,{code:E.invalid_type,expected:P.promise,received:t.parsedType}),L;let n=t.parsedType===P.promise?t.data:Promise.resolve(t.data);return we(n.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};$t.create=(r,e)=>new $t({type:r,typeName:U.ZodPromise,...K(e)});var ze=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===U.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{$(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 L;let l=await this._def.schema._parseAsync({data:a,path:n.path,parent:n});return l.status==="aborted"?L:l.status==="dirty"?Zt(l.value):t.value==="dirty"?Zt(l.value):l});{if(t.value==="aborted")return L;let a=this._def.schema._parseSync({data:o,path:n.path,parent:n});return a.status==="aborted"?L:a.status==="dirty"?Zt(a.value):t.value==="dirty"?Zt(a.value):a}}if(s.type==="refinement"){let o=a=>{let l=s.refinement(a,i);if(n.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(n.common.async===!1){let a=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return a.status==="aborted"?L:(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"?L:(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(!It(o))return L;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=>It(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):L);X.assertNever(s)}};ze.create=(r,e,t)=>new ze({schema:r,typeName:U.ZodEffects,effect:e,...K(t)});ze.createWithPreprocess=(r,e,t)=>new ze({schema:e,effect:{type:"preprocess",transform:r},typeName:U.ZodEffects,...K(t)});var Ne=class extends H{_parse(e){return this._getType(e)===P.undefined?we(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ne.create=(r,e)=>new Ne({innerType:r,typeName:U.ZodOptional,...K(e)});var et=class extends H{_parse(e){return this._getType(e)===P.null?we(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};et.create=(r,e)=>new et({innerType:r,typeName:U.ZodNullable,...K(e)});var sr=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===P.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};sr.create=(r,e)=>new sr({innerType:r,typeName:U.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...K(e)});var ir=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 Jr(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}};ir.create=(r,e)=>new ir({innerType:r,typeName:U.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...K(e)});var rn=class extends H{_parse(e){if(this._getType(e)!==P.nan){let n=this._getOrReturnCtx(e);return $(n,{code:E.invalid_type,expected:P.nan,received:n.parsedType}),L}return{status:"valid",value:e.data}}};rn.create=r=>new rn({typeName:U.ZodNaN,...K(r)});var nf=Symbol("zod_brand"),zn=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}},Dn=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"?L:i.status==="dirty"?(t.dirty(),Zt(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"?L:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:n.path,parent:n})}}static create(e,t){return new r({in:e,out:t,typeName:U.ZodPipeline})}},or=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=s=>(It(s)&&(s.value=Object.freeze(s.value)),s);return Jr(t)?t.then(s=>n(s)):n(t)}unwrap(){return this._def.innerType}};or.create=(r,e)=>new or({innerType:r,typeName:U.ZodReadonly,...K(e)});function ru(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function au(r,e={},t){return r?At.create().superRefine((n,s)=>{let i=r(n);if(i instanceof Promise)return i.then(o=>{if(!o){let a=ru(e,n),l=a.fatal??t??!0;s.addIssue({code:"custom",...a,fatal:l})}});if(!i){let o=ru(e,n),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}}):At.create()}var sf={object:Ce.lazycreate},U;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(U||(U={}));var of=(r,e={message:`Input not instance of ${r.name}`})=>au(t=>t instanceof r,e),uu=Rt.create,lu=Gt.create,af=rn.create,uf=Vt.create,cu=Ht.create,lf=Wt.create,cf=Xr.create,df=Jt.create,hf=Yt.create,ff=At.create,pf=ht.create,mf=Ge.create,gf=Qr.create,yf=ft.create,vf=Ce.create,bf=Ce.strictCreate,wf=Xt.create,_f=bs.create,kf=Qt.create,Sf=Qe.create,Tf=ws.create,xf=en.create,Cf=tn.create,Ef=_s.create,If=er.create,Rf=tr.create,Af=rr.create,$f=nr.create,Pf=$t.create,jf=ze.create,Of=Ne.create,Nf=et.create,Mf=ze.createWithPreprocess,zf=Dn.create,Df=()=>uu().optional(),Lf=()=>lu().optional(),Uf=()=>cu().optional(),qf={string:(r=>Rt.create({...r,coerce:!0})),number:(r=>Gt.create({...r,coerce:!0})),boolean:(r=>Ht.create({...r,coerce:!0})),bigint:(r=>Vt.create({...r,coerce:!0})),date:(r=>Wt.create({...r,coerce:!0}))};var Ff=L;var du=_.object({baseUrl:_.string().url(),email:_.string().email(),apiToken:_.string().min(1)}),to=_.object({controlPlaneUrl:_.string().url(),runnerId:_.string().optional(),runnerToken:_.string().optional(),runnerName:_.string().default(ks.default.hostname()),jira:du.optional(),repos:_.record(_.object({path:_.string(),jira:du.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=Ss.default.join(ks.default.homedir(),".config","allwright"),t=Ss.default.join(ks.default.homedir(),".config","ticketpilot");return!pt.default.existsSync(e)&&pt.default.existsSync(t)?t:e}function Pt(){return Ss.default.join(te(),"runner.json")}function pe(){let r=Pt();if(!pt.default.existsSync(r))return null;let e=JSON.parse(pt.default.readFileSync(r,"utf8"));return to.parse(e)}function he(r){let e=te();pt.default.mkdirSync(e,{recursive:!0,mode:448});let t=Pt(),n=t+".tmp";pt.default.writeFileSync(n,JSON.stringify(r,null,2)+`
|
|
259
|
+
`,{mode:384}),pt.default.renameSync(n,t),pt.default.chmodSync(t,384)}function Ts(r,e){return`${r}:${e}`}function ar(r,e,t){return r.environments[Ts(e,t)]?.secrets??{}}function re(){let r=pe();if(!r)throw new Error(`No runner config found at ${Pt()}. Run \`allwright init\` first.`);return r}var xs=require("node:child_process"),Ae=R(require("node:fs"),1),Cs=R(require("node:path"),1);var Bf=new Set(["runner.log","runner.pid"]);function Kf(r){return Ae.default.readdirSync(r).filter(e=>!Bf.has(e)&&!/\.bak-\d+$/.test(e)).sort()}function hu(r){let e=te();if(!Ae.default.existsSync(e))throw new Error(`nothing to export - ${e} does not exist`);let t=Kf(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=Cs.default.resolve(r||`ticketpilot-backup-${n}.tgz`);return Ae.default.writeFileSync(s,"",{mode:384}),(0,xs.execFileSync)("tar",["-czf",s,"-C",e,...t]),Ae.default.chmodSync(s,384),{file:s,entries:t}}function fu(r){let e=Cs.default.resolve(r);if(!Ae.default.existsSync(e))throw new Error(`backup file not found: ${e}`);let t=(0,xs.execFileSync)("tar",["-tzf",e],{encoding:"utf8"}).split(`
|
|
260
|
+
`).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;Ae.default.existsSync(n)&&Ae.default.readdirSync(n).length&&(s=`${n}.bak-${Date.now()}`,Ae.default.renameSync(n,s)),Ae.default.mkdirSync(n,{recursive:!0,mode:448}),(0,xs.execFileSync)("tar",["-xzf",e,"-C",n]);for(let i of Ae.default.readdirSync(n)){let o=Cs.default.join(n,i);Ae.default.statSync(o).isFile()&&Ae.default.chmodSync(o,384)}return{restored:t.map(i=>i.replace(/\/$/,"")).sort(),previousDir:s}}var nn=R(require("node:fs"),1),jt=R(require("node:path"),1),Es=".ticketpilot-attachments",Zf=15*1024*1024,Gf=50*1024*1024,pu=20;function mu(r,e){let t=jt.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 sn(r,e,t,n){if(!e.length)return"";let s=jt.default.join(t,Es);nn.default.mkdirSync(s,{recursive:!0});let i=new Set,o=[],a=0;for(let l of e){if(o.length>=pu){n("warn",`attachment cap reached (${pu} files) - skipping the rest`);break}if(l.size>Zf){n("warn",`skipping attachment "${l.filename}" - ${Wf(l.size)} MB exceeds the 15 MB limit`);continue}if(a+l.size>Gf){n("warn",`attachment size budget reached - skipping "${l.filename}" and the rest`);break}try{let c=await r.downloadAttachment(l.contentUrl),f=mu(l.filename,i);nn.default.writeFileSync(jt.default.join(s,f),c),a+=c.length,o.push(`- ${Es}/${f} (${l.mimeType||"unknown type"}, ${ro(c.length)} KB)`),n("info",`Downloaded attachment "${l.filename}" (${ro(c.length)} KB)`)}catch(c){n("warn",`could not download attachment "${l.filename}": ${c instanceof Error?c.message:c}`)}}return o.length?`
|
|
259
261
|
|
|
260
262
|
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:
|
|
261
263
|
${o.join(`
|
|
262
264
|
`)}
|
|
263
|
-
Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(
|
|
265
|
+
Read them with the Read tool when relevant; images (screenshots) can be viewed directly.`:(Ot(t),"")}function Ot(r){nn.default.rmSync(jt.default.join(r,Es),{recursive:!0,force:!0})}var Vf=4*1024*1024,Hf=16*1024*1024;function gu(r,e,t){let n=jt.default.join(r,Es,`chat-${e.replace(/[^\w-]/g,"")}`);if(!t.length)return{section:"",dir:n};nn.default.mkdirSync(n,{recursive:!0});let s=new Set,i=[],o=0,a=jt.default.relative(r,n);for(let c of t){let f=Buffer.from(c.contentBase64,"base64");if(f.length>Vf||o+f.length>Hf){i.push(`- (skipped "${c.name}" - over the upload size budget)`);continue}let p=mu(c.name,s);nn.default.writeFileSync(jt.default.join(n,p),f),o+=f.length,i.push(`- ${a}/${p} (${ro(f.length)} KB)`)}return{section:`
|
|
264
266
|
|
|
265
267
|
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:
|
|
266
268
|
${i.join(`
|
|
267
269
|
`)}
|
|
268
|
-
Read them with the Read tool; images can be viewed directly.`,dir:n}}var
|
|
270
|
+
Read them with the Read tool; images can be viewed directly.`,dir:n}}var ro=r=>Math.max(1,Math.round(r/1024)),Wf=r=>Math.round(r/(1024*1024)*10)/10;var _e=R(require("node:fs"),1),Rs=R(require("node:path"),1);function on(){return Rs.default.join(te(),"runner.pid")}function Is(){return Rs.default.join(te(),"runner.log")}function yu(){_e.default.mkdirSync(te(),{recursive:!0,mode:448});let r=_e.default.openSync(Is(),"a",384);try{_e.default.chmodSync(Is(),384)}catch{}return r}function ur(){let r=on();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 lr(r){try{return process.kill(r,0),!0}catch{return!1}}function vu(r){_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(on(),String(r),{mode:384})}function bu(r){ur()===r&&_e.default.rmSync(on(),{force:!0})}function no(){return Rs.default.join(te(),"runner.lock")}function Ln(){let r=no();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:lr(e)?e:null}function wu(){let r=Ln();return r?{ok:!1,pid:r}:(_e.default.mkdirSync(te(),{recursive:!0,mode:448}),_e.default.writeFileSync(no(),String(process.pid),{mode:384}),{ok:!0})}function so(){try{let r=no();_e.default.existsSync(r)&&Number(_e.default.readFileSync(r,"utf8").trim())===process.pid&&_e.default.rmSync(r,{force:!0})}catch{}}var zs=R(require("node:fs"),1),Kn=R(require("node:path"),1),Zu=R(ve(),1);async function Gu(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:Ds})});if(!t.ok){let i=await t.text().catch(()=>"");throw new Error(`enrollment failed (${t.status}): ${i.slice(0,300)}`)}let n=Zu.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[Kn.default.dirname(r),Kn.default.dirname(Kn.default.dirname(r))]){let t=Kn.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 Ds=_m();Ut();var sl="Posted automatically by Allwright",km=["Posted automatically by TicketPilot"],nt=r=>r.includes(sl)||km.some(e=>r.includes(e));var Re=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:nl(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:nl(t.fields.description),labels:t.fields.labels??[],status:t.fields.status?.name??"",comments:s,attachments:i}}async listAllComments(e){let t=await this.fetchCommentPage(e,0),n=t.total??t.comments.length;if(n<=t.comments.length)return t.comments;let s=Math.max(0,n-200),i=s===0?[...t.comments]:[];for(;i.length<Math.min(n,200);){let o=await this.fetchCommentPage(e,s+i.length);if(!o.comments.length)break;i.push(...o.comments)}return i.slice(-200)}async fetchCommentPage(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}/comment?startAt=${t}&maxResults=100`);return{comments:n.comments??[],total:n.total}}async downloadAttachment(e){let t=await fetch(e,{headers:this.headers()});if(!t.ok)throw new Error(`attachment download failed: ${t.status}`);return Buffer.from(await t.arrayBuffer())}async lastEnteredStatus(e,t){let n=await this.request("GET",`/rest/api/3/issue/${encodeURIComponent(e)}?expand=changelog&fields=status`),s=t.toLowerCase(),i=null;for(let o of n.changelog?.histories??[])(o.items??[]).some(l=>(l.field==="status"||l.fieldId==="status")&&(l.toString??"").toLowerCase()===s)&&(!i||new Date(o.created)>new Date(i.at))&&(i={at:o.created,author:o.author?.displayName??"unknown",authorAccountId:o.author?.accountId??null});return i}async createIssue(e,t,n,s="Task",i){return{key:(await this.request("POST","/rest/api/3/issue",{fields:{project:{key:e},issuetype:{name:s},summary:t.slice(0,250),description:Eo(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:Eo(t)})}async addComment(e,t){let n=`${t}
|
|
269
271
|
|
|
270
272
|
---
|
|
271
|
-
_${
|
|
273
|
+
_${sl} - never treated as a trigger._`;await this.request("POST",`/rest/api/3/issue/${encodeURIComponent(e)}/comment`,{body:Eo(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 nl(r){if(!r)return"";let e=[],t=n=>{n.text&&e.push(n.text),n.type==="hardBreak"&&e.push(`
|
|
272
274
|
`);for(let s of n.content??[])t(s);n.type&&["paragraph","heading","listItem","codeBlock","blockquote"].includes(n.type)&&e.push(`
|
|
273
275
|
`)};return t(r),e.join("").replace(/\n{3,}/g,`
|
|
274
276
|
|
|
275
|
-
`).trim()}function
|
|
277
|
+
`).trim()}function Eo(r){let e=r.replace(/\r\n/g,`
|
|
276
278
|
`).split(`
|
|
277
|
-
`),t=[],n=0,s=i=>{let o=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g,
|
|
278
|
-
`)||" "}]});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
|
|
279
|
+
`),t=[],n=0,s=i=>{let o=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g,l=0,c;for(;(c=a.exec(i))!==null;){c.index>l&&o.push({type:"text",text:i.slice(l,c.index)});let 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"}]}),l=c.index+f.length}return l<i.length&&o.push({type:"text",text:i.slice(l)}),o.length?o:[{type:"text",text:" "}]};for(;n<e.length;){let i=e[n];if(i.trim()===""){n++;continue}let o=i.match(/^```(\w*)\s*$/);if(o){let p=[];for(n++;n<e.length&&!/^```\s*$/.test(e[n]);)p.push(e[n]),n++;n++,t.push({type:"codeBlock",attrs:o[1]?{language:o[1]}:{},content:[{type:"text",text:p.join(`
|
|
280
|
+
`)||" "}]});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 il(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:
|
|
279
281
|
|
|
280
282
|
allwright jira user-add ${s}
|
|
281
283
|
|
|
282
|
-
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.`}}
|
|
284
|
+
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.`}}Ir();var Rr=require("node:child_process"),yn=R(require("node:fs"),1),Io=R(require("node:os"),1),Ao=R(require("node:path"),1);var Vn="allwright",al=`/etc/systemd/system/${Vn}.service`,Ro="ticketpilot-runner";function $o(){let r=process.env.SUDO_USER&&process.env.SUDO_USER!=="root"?process.env.SUDO_USER:"",e=r||Io.default.userInfo().username,t=r?Ao.default.join("/home",r):Io.default.homedir();return{nodePath:process.execPath,scriptPath:yn.default.realpathSync(process.argv[1]),user:e,home:t}}function Po(r){let e=Ao.default.dirname(r.nodePath);return`[Unit]
|
|
283
285
|
Description=Allwright runner
|
|
284
286
|
After=network-online.target
|
|
285
287
|
|
|
@@ -291,11 +293,14 @@ Environment=PATH=${e}:/usr/local/bin:/usr/bin:/bin
|
|
|
291
293
|
ExecStart=${r.nodePath} ${r.scriptPath} start --foreground
|
|
292
294
|
Restart=always
|
|
293
295
|
RestartSec=5
|
|
296
|
+
# The runner drains on SIGTERM (finishes active runs/deploys before exiting).
|
|
297
|
+
# Give it room - systemd's default 90s would SIGKILL a run mid-flight.
|
|
298
|
+
TimeoutStopSec=2h
|
|
294
299
|
|
|
295
300
|
[Install]
|
|
296
301
|
WantedBy=multi-user.target
|
|
297
|
-
`}function
|
|
298
|
-
`+t);return}try{(0,
|
|
302
|
+
`}function ul(){return process.platform==="linux"&&yn.default.existsSync("/run/systemd/system")}function ll(r){if(!ul())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=$o(),t=Po(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 ${al}:`),r.info(`
|
|
303
|
+
`+t);return}try{(0,Rr.execFileSync)("systemctl",["disable","--now",Ro]),r.info(`stopped the old ${Ro} service - this one replaces it`)}catch{}let n=Ln();if(n)try{process.kill(n,"SIGTERM"),r.info(`stopped the running runner (pid ${n}) - the service takes over`)}catch{}yn.default.writeFileSync(al,t),(0,Rr.execFileSync)("systemctl",["daemon-reload"]),(0,Rr.execFileSync)("systemctl",["enable","--now",Vn]),(0,Rr.execFileSync)("systemctl",["restart",Vn]),r.info(`Installed and started (runs as ${e.user}, survives reboots).`),r.info(`Watch it: journalctl -u ${Vn} -f`),r.info("Status: allwright service status")}function cl(r){if(!ul())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[Vn,Ro]){try{(0,Rr.execFileSync)("systemctl",["disable","--now",e])}catch{}let t=`/etc/systemd/system/${e}.service`;yn.default.existsSync(t)&&yn.default.rmSync(t)}(0,Rr.execFileSync)("systemctl",["daemon-reload"]),r.info("Service removed. The runner config and credentials were not touched.")}var dl=R(ve(),1);function hl(r){return r.filter(e=>e.statusCategory!=="done"&&!e.labels.includes("agent-implemented")&&!e.labels.includes(dl.NEEDS_INPUT_LABEL))}function fl(r,e,t){let n=t.map(s=>{let i=(s.description??"").trim().slice(0,600);return`- ${s.key} [${s.status}] ${s.summary}${i?`
|
|
299
304
|
${i.replace(/\n+/g," ")}`:""}`}).join(`
|
|
300
305
|
`);return`You are looking at this repository to help sequence work on the Jira epic ${r} ("${e}"). These child tickets are still pending:
|
|
301
306
|
|
|
@@ -306,9 +311,9 @@ Pick the ONE ticket that should be implemented FIRST. Weigh, in this order: (1)
|
|
|
306
311
|
Answer with ONLY a fenced json block, nothing after it:
|
|
307
312
|
\`\`\`json
|
|
308
313
|
{"issueKey": "<one of the keys above>", "reason": "<2-3 sentences: why this one first, and what it unblocks>"}
|
|
309
|
-
\`\`\``}function
|
|
314
|
+
\`\`\``}function pl(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 Uo=require("node:crypto"),Ll=R(require("node:fs"),1);var jo=R(require("node:fs"),1),Gs=R(require("node:path"),1),Vs=R(ve(),1),Sm={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 gl(r,e,t,n={}){let s=e.map(l=>`### Pack: ${l.name}
|
|
310
315
|
|
|
311
|
-
${
|
|
316
|
+
${l.content}`).join(`
|
|
312
317
|
|
|
313
318
|
`),i=t.trim()?`
|
|
314
319
|
|
|
@@ -326,7 +331,7 @@ Read whatever surrounding code you need for context, but every finding must be a
|
|
|
326
331
|
|
|
327
332
|
${n.testResults}
|
|
328
333
|
|
|
329
|
-
Fold what these results show - failures, flaky exits, suspiciously green suites - into your findings with the rest of the audit.`:"";return`${
|
|
334
|
+
Fold what these results show - failures, flaky exits, suspiciously green suites - into your findings with the rest of the audit.`:"";return`${Sm[r]}
|
|
330
335
|
|
|
331
336
|
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.
|
|
332
337
|
|
|
@@ -340,8 +345,8 @@ Explore the repository first - entry points, routes, storage, tests - then audit
|
|
|
340
345
|
"evidence": [{"file": "<repo-relative path>", "line": <number, omit if n/a>, "note": "<what is there>"}],
|
|
341
346
|
"fix": "<2-4 sentences: concrete fix, specific to this code>"}]}
|
|
342
347
|
\`\`\`
|
|
343
|
-
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
|
|
344
|
-
`).length:0}catch{return null}}function
|
|
348
|
+
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 yl(r){let t=r.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```(?![\s\S]*```)/)?.[1]??r.match(/\{[\s\S]*"findings"[\s\S]*\}/)?.[0];if(!t)return{error:"the agent's report contained no JSON block"};let n;try{n=JSON.parse(t)}catch{return{error:"the agent's JSON report did not parse"}}if(!Array.isArray(n.findings))return{error:"the report has no findings array"};let s=[],i=0,o=new Set;for(let a of n.findings.slice(0,25)){let l=Tm(a),c=l?Vs.AuditFinding.safeParse(l):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 Tm(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:"",...ml(i.line)?{line:ml(i.line)}:{},note:typeof i.note=="string"?i.note:""})).filter(i=>i.file):[],s=typeof e.ruleId=="string"?e.ruleId.trim().toUpperCase():"";return{id:xm(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:Vs.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 ml(r){let e=typeof r=="number"?r:typeof r=="string"?parseInt(r,10):NaN;return Number.isInteger(e)&&e>0?e:void 0}function xm(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"finding"}function Cm(r){try{let e=jo.default.readFileSync(r,"utf8");return e?e.split(`
|
|
349
|
+
`).length:0}catch{return null}}function vl(r,e){let t=Gs.default.resolve(r),n=[],s=[],i=0;for(let o of e){let a=[];for(let l of o.evidence){let c=l.file.trim().replace(/^\.\//,""),f=Gs.default.resolve(t,c);if(f!==t&&!f.startsWith(t+Gs.default.sep))continue;let p;try{p=jo.default.statSync(f)}catch{continue}if(p.isFile()){if(l.line!==void 0){let v=Cm(f);if(v!==null&&l.line>v){a.push({...l,line:void 0}),i++;continue}}a.push(l)}}if(!a.length){s.push({title:o.title,files:o.evidence.map(l=>l.file)});continue}n.push({...o,evidence:a})}return{findings:n,droppedFindings:s,correctedLines:i}}var Hn=R(require("node:fs"),1),Oo=R(require("node:path"),1),bl=R(ve(),1);var Em=20;function wl(){return Oo.default.join(te(),"audits.json")}function vn(){try{return{byProject:JSON.parse(Hn.default.readFileSync(wl(),"utf8")).byProject??{}}}catch{return{byProject:{}}}}function _l(r){let e=wl();Hn.default.mkdirSync(Oo.default.dirname(e),{recursive:!0,mode:448});let t=e+".tmp";Hn.default.writeFileSync(t,JSON.stringify(r,null,2),{mode:384}),Hn.default.renameSync(t,e)}function kl(r,e){let t=vn(),n=t.byProject[r]??[];n.unshift(bl.AuditRecord.parse(e)),t.byProject[r]=n.slice(0,Em),_l(t)}function Sl(r){return(vn().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 Tl(r,e){let t=vn(),n=e?Date.parse(e):NaN,s={};for(let i of r){let o=(t.byProject[i]??[]).filter(l=>!Number.isFinite(n)||Date.parse(l.createdAt)>=n);if(!o.length)continue;let a={audits:o.length,findings:0,valid:0,falsePositive:0,wontFix:0,unreviewed:0};for(let l of o){a.findings+=l.findings.length;for(let c of l.findings){let f=l.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 No(r,e,t){let n=vn(),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 _l(n),i}function xl(r,e){return(vn().byProject[r]??[]).find(s=>s.role===e&&(s.scope?.kind??"repo")==="repo")?.createdAt??null}function Cl(r,e){return(vn().byProject[r]??[]).find(t=>t.id===e)??null}Ut();var Se=R(require("node:fs"),1),st=R(require("node:path"),1),Il=R(ve(),1);var Im=`# Security baseline - what to check in any repo
|
|
345
350
|
|
|
346
351
|
Every rule has a stable id. Findings must cite the id they violate.
|
|
347
352
|
|
|
@@ -384,7 +389,7 @@ Every rule has a stable id. Findings must cite the id they violate.
|
|
|
384
389
|
- **SEC-042** TLS/redirect handling that downgrades to http.
|
|
385
390
|
|
|
386
391
|
Prioritize by real exploitability in THIS codebase, not by rule order.
|
|
387
|
-
`,
|
|
392
|
+
`,Rm=`# Test gaps - what to check in any repo
|
|
388
393
|
|
|
389
394
|
Every rule has a stable id. Findings must cite the id they violate.
|
|
390
395
|
|
|
@@ -414,7 +419,7 @@ Every rule has a stable id. Findings must cite the id they violate.
|
|
|
414
419
|
flaky suspects.
|
|
415
420
|
|
|
416
421
|
Report the GAP and why it is risky here, not generic coverage philosophy.
|
|
417
|
-
`,
|
|
422
|
+
`,Am=`# GDPR readiness - data-protection audit for repos with EU exposure
|
|
418
423
|
|
|
419
424
|
FIRST decide exposure: if this product clearly has no EU users, no personal
|
|
420
425
|
data, or is a purely static/internal tool, say so in ONE summary sentence and
|
|
@@ -458,7 +463,7 @@ rules below. Cite the rule id AND map the area to the closest GDPR article
|
|
|
458
463
|
|
|
459
464
|
Severity: many users' data exposed or a missing legal-basis mechanism is
|
|
460
465
|
high/critical; hygiene and documentation gaps are medium/low.
|
|
461
|
-
|
|
466
|
+
`,$m=`# Architecture health - is this repository structurally sound?
|
|
462
467
|
|
|
463
468
|
Every rule has a stable id. Findings must cite the id they violate. Judge
|
|
464
469
|
against what THIS codebase is trying to be (a static site does not need
|
|
@@ -497,216 +502,222 @@ deviations.
|
|
|
497
502
|
|
|
498
503
|
Summarize with an overall verdict: is this repository HEALTHY for its
|
|
499
504
|
purpose, and what are the 2-3 structural moves with the best payoff?
|
|
500
|
-
`,
|
|
505
|
+
`,El={security:[{name:"baseline.md",content:Im},{name:"gdpr.md",content:Am}],testing:[{name:"test-gaps.md",content:Rm}],architecture:[{name:"architecture-health.md",content:$m}]},Pm=["You are auditing code you can READ but never run or change.","You are auditing test coverage by READING code and tests","\\`area\\`"];function Mo(r){return st.default.join(te(),"knowledge",r)}function Rl(r,e){return st.default.join(r,".ticketpilot","knowledge",`${e}.md`)}function zo(r,e){return st.default.join(r,".ticketpilot","lessons",`${e}.md`)}function Al(r,e){let t=[],n=Mo(r),s=[];if(Se.default.existsSync(n)){for(let l of Se.default.readdirSync(n)){if(!l.endsWith(".md"))continue;let c=st.default.join(n,l),f=Se.default.readFileSync(c,"utf8");if(Pm.some(p=>f.includes(p))&&El[r].map(v=>v.name).includes(l)&&!f.includes("SEC-0")&&!f.includes("TEST-0")&&!f.includes("GDPR-0")){Se.default.rmSync(c);continue}s.push(l)}s.sort()}let i=new Set(s);for(let l of El[r])i.has(l.name)||t.push({level:"global",source:"pack",name:l.name,content:l.content,editable:!1});for(let l of s)t.push({level:"org",source:"pack",name:l,content:Se.default.readFileSync(st.default.join(n,l),"utf8").slice(0,3e4),editable:!0});let o=Rl(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 $l(r,e){let t=Al(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 Do(r,e,t,n="project"){let s=n==="org"?st.default.join(Mo(e),"org-lessons.md"):zo(r,e);Se.default.mkdirSync(st.default.dirname(s),{recursive:!0});let i=Se.default.existsSync(s)?"":`# ${e} lessons (${n} level)
|
|
501
506
|
|
|
502
507
|
Human-confirmed corrections and rules. Every ${e} audit reads this FIRST. Reference rule ids (SEC-001 style) when overriding a rule.
|
|
503
508
|
|
|
504
|
-
`;
|
|
509
|
+
`;Se.default.appendFileSync(s,i+t.trimEnd()+`
|
|
505
510
|
|
|
506
|
-
`)}function
|
|
511
|
+
`)}function Pl(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}
|
|
507
512
|
Finding \`${r.id}\` [${r.severity}] was marked **${e}**`+(n?` by ${n}`:"")+`.${t?` Reason: ${t}`:""}
|
|
508
|
-
`+(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
|
|
509
|
-
${r.trim()}`}function
|
|
510
|
-
`)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function
|
|
511
|
-
[killed: timed out]`},s);
|
|
513
|
+
`+(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 jl(r,e){return`## ${new Date().toISOString().slice(0,10)} \xB7 taught${e?` by ${e}`:""}
|
|
514
|
+
${r.trim()}`}function Ol(r){let e=[];for(let t of Il.AuditRole.options)for(let n of Al(t,r))e.push({role:t,...n});return e}function Nl(r,e,t,n,s,i){if(!/^[a-zA-Z0-9._-]+\.md$/.test(s))throw new Error("file name must be a simple .md name");let o=t==="org"?st.default.join(Mo(e),s):n==="lessons"?zo(r,e):Rl(r,e);Se.default.mkdirSync(st.default.dirname(o),{recursive:!0}),Se.default.writeFileSync(o,i,{mode:t==="org"?384:420})}var Lo=()=>new Date().toISOString(),m={info:r=>console.log(`${Lo()} [info] ${r}`),warn:r=>console.warn(`${Lo()} [warn] ${r}`),error:r=>console.error(`${Lo()} [error] ${r}`)};var Ml=require("node:child_process"),zl=R(require("node:fs"),1),Dl=R(require("node:path"),1);function Hs(r){for(let e of["TEST.md","TESTING.md","docs/TEST.md"]){let t=Dl.default.join(r,e);if(zl.default.existsSync(t))return t}return null}function Ws(r){let e=[];for(let t of r.matchAll(/```(?:bash|sh|shell)?\s*\n([\s\S]*?)```/g))for(let n of t[1].split(`
|
|
515
|
+
`)){let s=n.trim();!s||s.startsWith("#")||e.push(s)}return e.slice(0,10)}async function Js(r,e,t={}){let n=[],s=t.perCommandTimeoutMs??6e5;for(let i of e){t.onProgress?.(`running: ${i}`);let o=Date.now(),a=await new Promise(l=>{let c=(0,Ml.spawn)("bash",["-lc",i],{cwd:r,env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),f="",p=k=>{f+=k.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+=`
|
|
516
|
+
[killed: timed out]`},s);c.on("close",k=>{clearTimeout(v),l({command:i,exitCode:k??-1,durationMs:Date.now()-o,tail:f.slice(-4e3)})}),c.on("error",k=>{clearTimeout(v),l({command:i,exitCode:-1,durationMs:Date.now()-o,tail:String(k)})})});t.onProgress?.(`exit ${a.exitCode} in ${Math.round(a.durationMs/1e3)}s: ${i}`),n.push(a)}return n}async function bn(r){let{packs:e,lessons:t}=$l(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}
|
|
512
517
|
|
|
513
|
-
${
|
|
518
|
+
${T.description}`.slice(0,4e3)}catch{v=`Ticket ${p} (could not fetch its text from Jira).`}let k=await ko(r.repoPath,p).catch(()=>null);if(k){let{base:T,stat:x,diff:j}=await Ks(r.repoPath,k).catch(()=>({base:"",stat:"",diff:""}));n=`${v}
|
|
514
519
|
|
|
515
|
-
Its implementation branch \`${
|
|
520
|
+
Its implementation branch \`${k}\` vs \`${T}\`:
|
|
516
521
|
\`\`\`
|
|
517
|
-
${
|
|
522
|
+
${x}\`\`\`
|
|
518
523
|
\`\`\`diff
|
|
519
|
-
${
|
|
520
|
-
\`\`\``}else n=`${
|
|
524
|
+
${j}
|
|
525
|
+
\`\`\``}else n=`${v}
|
|
521
526
|
|
|
522
|
-
No implementation branch found for ${p} - audit the parts of the codebase this ticket touches or would touch.`}else if(r.scope.kind==="branch"&&r.scope.ref){let{base:p,stat:
|
|
527
|
+
No implementation branch found for ${p} - audit the parts of the codebase this ticket touches or would touch.`}else if(r.scope.kind==="branch"&&r.scope.ref){let{base:p,stat:v,diff:k}=await Ks(r.repoPath,r.scope.ref);n=`The diff of \`${r.scope.ref}\` vs \`${p}\`:
|
|
523
528
|
\`\`\`
|
|
524
|
-
${
|
|
529
|
+
${v}\`\`\`
|
|
525
530
|
\`\`\`diff
|
|
526
|
-
${
|
|
527
|
-
\`\`\``}let s,i;if(r.role==="testing"){let p=
|
|
528
|
-
(exit ${
|
|
529
|
-
${
|
|
531
|
+
${k}
|
|
532
|
+
\`\`\``}let s,i;if(r.role==="testing"){let p=Hs(r.repoPath),v=p?Ws(Ll.default.readFileSync(p,"utf8")):[];v.length&&(m.info(`Audit (testing): executing ${v.length} TEST.md command(s)`),i=await Js(r.repoPath,v,{onProgress:k=>m.info(`[test-run] ${k}`)}),s=i.map(k=>`$ ${k.command}
|
|
533
|
+
(exit ${k.exitCode}, ${Math.round(k.durationMs/1e3)}s)
|
|
534
|
+
${k.tail.slice(-2e3)}`).join(`
|
|
530
535
|
|
|
531
536
|
---
|
|
532
537
|
|
|
533
|
-
`))}let o=r.model||r.agent.adapter.deepModel,a=await r.agent.adapter.run({repoPath:r.repoPath,prompt:cc(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,No.randomUUID)(),model:o,onLog:(p,b)=>{p==="agent"&&g.info(`[audit:${r.role}] ${b.slice(0,160)}`)}}),c=lc(a.resultText);if("error"in c)return{ok:!1,error:c.error};let l=dc(r.repoPath,c.findings);for(let p of l.droppedFindings)g.warn(`[audit:${r.role}] dropped "${p.title}" - cited files do not exist: `+p.files.join(", "));let f={id:(0,No.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:c.summary,packNames:e.map(p=>p.name),findings:l.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return mc(r.projectId,f),g.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${l.findings.length} finding(s)`+(c.dropped?`, ${c.dropped} malformed`:"")+(l.droppedFindings.length?`, ${l.droppedFindings.length} dropped for citing files that do not exist`:"")+(l.correctedLines?`, ${l.correctedLines} bad line number(s) stripped`:"")),{ok:!0,audit:f}}var Nr=R(pe(),1);var Hc=R(require("node:fs"),1),Go=R(require("node:path"),1),ri=require("node:crypto"),Re=R(pe(),1);var Er=R(pe(),1);var Mo=R(require("node:fs"),1),jc=R(require("node:os"),1),Ws=R(require("node:path"),1),Oc=require("node:child_process"),Nc=R(require("node:readline"),1),Mc=R(pe(),1),xm=4e3,Cm={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Em(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??Ws.default.join(jc.default.homedir(),".claude");try{if(Mo.default.existsSync(Ws.default.join(e,".credentials.json"))||Mo.default.existsSync(Ws.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Im(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Cm[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Em(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,Oc.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,l=0,f=0,p=()=>{if(!r.onUsage)return;let W=Date.now();W-f<xm||(f=W,r.onUsage({inputTokens:a,outputTokens:c,cacheReadTokens:l,turns:o}))},b=!1,T=()=>{b||(b=!0,clearTimeout(C),r.signal?.removeEventListener("abort",S),n(i))},S=()=>{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",S,{once:!0});let C=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(),Nc.default.createInterface({input:s.stdout}).on("line",W=>{if(!W.trim())return;let h;try{h=JSON.parse(W)}catch{r.onLog("agent",W.slice(0,1e3));return}if(h.type==="system"&&h.subtype==="init")i.model=typeof h.model=="string"?h.model:void 0,r.onLog("info",`Claude Code session started (model: ${h.model??"default"})`);else if(h.type==="assistant"){o+=1;let m=h.message?.usage;m&&(a+=Number(m.input_tokens??0)+Number(m.cache_creation_input_tokens??0),c+=Number(m.output_tokens??0),l+=Number(m.cache_read_input_tokens??0),p());for(let y of h.message?.content??[])if(y.type==="text"&&y.text?.trim())r.onLog("agent",y.text.trim().slice(0,4e3));else if(y.type==="tool_use"){let x=y.input??{},j=["file_path","path","pattern","command","description","url"].map(D=>typeof x[D]=="string"?`${D}=${x[D]}`:null).filter(Boolean).join(" "),z=JSON.stringify(x).slice(0,400);r.onLog("info",`tool ${y.name} ${j?`${j} `:""}${z}`)}}else h.type==="result"&&(i.costUsd=Number(h.total_cost_usd??0),i.inputTokens=Number(h.usage?.input_tokens??0)+Number(h.usage?.cache_creation_input_tokens??0),i.outputTokens=Number(h.usage?.output_tokens??0),a=Math.max(i.inputTokens,a),c=Math.max(i.outputTokens,c),i.inputTokens=a,i.outputTokens=c,l=Number(h.usage?.cache_read_input_tokens??l),i.cacheReadTokens=l,r.onUsage&&(r.onUsage({inputTokens:a,outputTokens:c,cacheReadTokens:l,costUsd:i.costUsd,turns:o}),f=Date.now()),h.subtype==="success"&&!h.is_error?(i.ok=!0,i.resultText=String(h.result??"")):h.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${r.maxTurns??60}-turn limit before finishing`):(i.error=String(h.result??h.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 N="";s.stderr.on("data",W=>{N=(N+W.toString()).slice(-2e3)}),s.on("error",W=>{i.error=`failed to start ${r.bin}: ${W.message}`,r.onLog("error",i.error),T()}),s.on("close",W=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${W}${N?`: ${N.slice(-500)}`:""}`),T()})})}var Js={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:Mc.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:Im};var zc=require("node:child_process"),Dc=R(require("node:readline"),1),Lc=R(pe(),1);async function Rm(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,zc.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(),Dc.default.createInterface({input:n.stdout}).on("line",p=>{if(!p.trim())return;let b;try{b=JSON.parse(p)}catch{r.onLog("agent",p.slice(0,1e3));return}let T=b.item??b.msg??b,S=T?.type??b.type,C=T?.text??T?.message??"";S==="agent_message"&&typeof C=="string"&&C.trim()?(i=C,r.onLog("agent",C.trim().slice(0,4e3))):S==="command_execution"||S==="exec_command_begin"?r.onLog("info",`tool ${String(T?.command??"").slice(0,300)}`):S==="error"&&typeof C=="string"&&C&&r.onLog("error",C.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 zo={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:Lc.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:Rm};var Am={[Js.id]:Js,[zo.id]:zo};function Ut(r){return Am[r||Er.DEFAULT_AGENT_ID]??null}function vt(r,e){return!e||e===Js.id?r.claudeBin:r.agents[e]?.bin??e}function Ys(r,e){let t=Ut(r);if(!t)return`no agent adapter named "${r}" on this runner - update the runner, or set the rule's agent to "${Er.DEFAULT_AGENT_ID}"`;let n=(0,Er.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 He(r,e,t){let n=e.defaultAgent||Er.DEFAULT_AGENT_ID,s=Ut(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,Er.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:vt(r,s.id)}}function bt(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}var Gc=R(pe(),1);nt();xr();Lt();var we=R(require("node:fs"),1),vn=R(require("node:path"),1);var Pm=w.object({runId:w.string(),issueKey:w.string(),repoName:w.string(),owner:w.string(),repo:w.string(),prNumber:w.number().int(),prUrl:w.string(),branch:w.string(),headSha:w.string(),doneLabel:w.string(),failedLabel:w.string(),jiraTransition:w.string().optional(),mergeOnApprove:w.boolean().default(!1),mergeMethod:w.enum(["squash","merge","rebase"]).default("squash"),changesRequestedNotified:w.boolean().optional(),conflictNotified:w.boolean().optional()}),jm=w.record(Pm),Om=w.object({runId:w.string(),issueKey:w.string(),issueSummary:w.string().default(""),projectId:w.string(),repoName:w.string(),environmentName:w.string(),requestedBy:w.string().default(""),createdAt:w.string()}),Nm=w.record(Om),Mm=w.object({runId:w.string(),issueKey:w.string(),kind:w.enum(["plan","implement"]),repoPath:w.string(),sessionId:w.string(),doneLabel:w.string(),failedLabel:w.string(),timeoutSeconds:w.number(),createdAt:w.string(),questionsPostedAt:w.string(),rounds:w.number().int().default(1),nextLogSeq:w.number().int().nonnegative().default(0),baseRepoPath:w.string().optional(),repoName:w.string().optional(),branch:w.string().optional(),baseBranch:w.string().optional(),jiraTransition:w.string().optional(),jiraTransitionOnMerge:w.string().optional(),requireApproval:w.boolean().optional(),maxTurns:w.number().int().optional(),runTests:w.boolean().default(!0),mergeOnApprove:w.boolean().default(!1),mergeMethod:w.enum(["squash","merge","rebase"]).default("squash"),issueSummary:w.string().default(""),claudeConfigDir:w.string().optional(),agent:w.string().optional(),model:w.string().optional(),actorEmail:w.string().optional()}),zm=w.object({runId:w.string(),issueKey:w.string(),issueSummary:w.string().default(""),repoName:w.string(),baseRepoPath:w.string(),branch:w.string(),baseBranch:w.string(),headSha:w.string(),requireApproval:w.boolean(),mergeOnApprove:w.boolean().default(!1),mergeMethod:w.enum(["squash","merge","rebase"]).default("squash"),doneLabel:w.string(),failedLabel:w.string(),jiraTransition:w.string().optional(),jiraTransitionOnMerge:w.string().optional(),actorEmail:w.string().optional(),resultSummary:w.string().default(""),costUsd:w.number().default(0),nextLogSeq:w.number().int().default(1e5),createdAt:w.string()}),Dm=w.record(zm),Lm=w.object({runId:w.string(),issueKey:w.string(),repoName:w.string(),owner:w.string(),repo:w.string(),prNumber:w.number().int(),prUrl:w.string(),jiraTransitionOnMerge:w.string().default(""),createdAt:w.string()}),Um=w.record(Lm),qm=w.record(Mm);function Uc(){return vn.default.join(ee(),"pending-runs.json")}function Do(){return vn.default.join(ee(),"pending-deploys.json")}function Lo(){return vn.default.join(ee(),"pending-inputs.json")}function Uo(){return vn.default.join(ee(),"merge-watch.json")}function qo(){return vn.default.join(ee(),"pending-pushes.json")}function Fo(){let r=qo();if(!we.default.existsSync(r))return{};try{return Dm.parse(JSON.parse(we.default.readFileSync(r,"utf8")))}catch{return{}}}function Bo(r){let e=Fo();e[r.runId]=r,_t(qo(),e)}function Xs(r){return Fo()[r]??null}function Ko(r){let e=Fo();r in e&&(delete e[r],_t(qo(),e))}function Qs(){let r=Uo();if(!we.default.existsSync(r))return{};try{return Um.parse(JSON.parse(we.default.readFileSync(r,"utf8")))}catch{return{}}}function qc(r){let e=Qs();e[r.runId]=r,_t(Uo(),e)}function Hn(r){let e=Qs();r in e&&(delete e[r],_t(Uo(),e))}function Gn(){let r=Uc();if(!we.default.existsSync(r))return{};try{return jm.parse(JSON.parse(we.default.readFileSync(r,"utf8")))}catch{return{}}}function _t(r,e){we.default.mkdirSync(ee(),{recursive:!0,mode:448});let t=r+".tmp";we.default.writeFileSync(t,JSON.stringify(e,null,2)+`
|
|
534
|
-
`,{mode:384}),
|
|
538
|
+
`))}let o=r.model||r.agent.adapter.deepModel,a=await r.agent.adapter.run({repoPath:r.repoPath,prompt:gl(r.role,e,t,{scopeNote:n,testResults:s}),timeoutSeconds:480,bin:r.agent.bin,mode:"read_only",maxTurns:120,sessionId:(0,Uo.randomUUID)(),model:o,onLog:(p,v)=>{p==="agent"&&m.info(`[audit:${r.role}] ${v.slice(0,160)}`)}}),l=yl(a.resultText);if("error"in l)return{ok:!1,error:l.error};let c=vl(r.repoPath,l.findings);for(let p of c.droppedFindings)m.warn(`[audit:${r.role}] dropped "${p.title}" - cited files do not exist: `+p.files.join(", "));let f={id:(0,Uo.randomUUID)(),role:r.role,createdAt:new Date().toISOString(),model:a.model||o,summary:l.summary,packNames:e.map(p=>p.name),findings:c.findings,costUsd:a.costUsd??0,ticketed:{},verdicts:{},lessonsWritten:[],scope:r.scope,...i?{testRun:i}:{}};return kl(r.projectId,f),m.info(`Audit (${r.role}${r.scope.kind!=="repo"?` \xB7 ${r.scope.kind}:${r.scope.ref}`:""}) done: ${c.findings.length} finding(s)`+(l.dropped?`, ${l.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 Dr=R(ve(),1);var Qo=R(require("node:fs"),1),si=R(require("node:path"),1),ii=require("node:crypto"),Pe=R(ve(),1);var Ar=R(ve(),1);var qo=R(require("node:fs"),1),Ul=R(require("node:os"),1),Ys=R(require("node:path"),1),ql=require("node:child_process"),Fl=R(require("node:readline"),1),Bl=R(ve(),1),jm=4e3,Om={read_only:["Read(./**)","Glob(./**)","Grep(./**)"],edit_no_shell:["Read(./**)","Glob(./**)","Grep(./**)","Edit(./**)","Write(./**)"]};function Nm(r){if(process.env.ANTHROPIC_API_KEY)return"API key";let e=r??Ys.default.join(Ul.default.homedir(),".claude");try{if(qo.default.existsSync(Ys.default.join(e,".credentials.json"))||qo.default.existsSync(Ys.default.join(e,"credentials.json")))return"subscription"}catch{}return"unknown"}async function Mm(r){let e=["-p","--output-format","stream-json","--verbose","--allowedTools",Om[r.mode].join(","),"--max-turns",String(r.maxTurns??60),...r.model?["--model",r.model]:[],...r.resume?["--resume",r.sessionId]:["--session-id",r.sessionId]],t=Nm(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,ql.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,l=0,c=0,f=0,p=()=>{if(!r.onUsage)return;let J=Date.now();J-f<jm||(f=J,r.onUsage({inputTokens:a,outputTokens:l,cacheReadTokens:c,turns:o}))},v=!1,k=()=>{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(),Fl.default.createInterface({input:s.stdout}).on("line",J=>{if(!J.trim())return;let M;try{M=JSON.parse(J)}catch{r.onLog("agent",J.slice(0,1e3));return}if(M.type==="system"&&M.subtype==="init")i.model=typeof M.model=="string"?M.model:void 0,r.onLog("info",`Claude Code session started (model: ${M.model??"default"})`);else if(M.type==="assistant"){o+=1;let z=M.message?.usage;z&&(a+=Number(z.input_tokens??0)+Number(z.cache_creation_input_tokens??0),l+=Number(z.output_tokens??0),c+=Number(z.cache_read_input_tokens??0),p());for(let Q of M.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??{},g=["file_path","path","pattern","command","description","url"].map(C=>typeof h[C]=="string"?`${C}=${h[C]}`:null).filter(Boolean).join(" "),w=JSON.stringify(h).slice(0,400);r.onLog("info",`tool ${Q.name} ${g?`${g} `:""}${w}`)}}else M.type==="result"&&(i.costUsd=Number(M.total_cost_usd??0),i.inputTokens=Number(M.usage?.input_tokens??0)+Number(M.usage?.cache_creation_input_tokens??0),i.outputTokens=Number(M.usage?.output_tokens??0),a=Math.max(i.inputTokens,a),l=Math.max(i.outputTokens,l),i.inputTokens=a,i.outputTokens=l,c=Number(M.usage?.cache_read_input_tokens??c),i.cacheReadTokens=c,r.onUsage&&(r.onUsage({inputTokens:a,outputTokens:l,cacheReadTokens:c,costUsd:i.costUsd,turns:o}),f=Date.now()),M.subtype==="success"&&!M.is_error?(i.ok=!0,i.resultText=String(M.result??"")):M.subtype==="error_max_turns"?(i.turnLimitHit=!0,i.error=`hit the ${r.maxTurns??60}-turn limit before finishing`):(i.error=String(M.result??M.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 S="";s.stderr.on("data",J=>{S=(S+J.toString()).slice(-2e3)}),s.on("error",J=>{i.error=`failed to start ${r.bin}: ${J.message}`,r.onLog("error",i.error),k()}),s.on("close",J=>{!i.ok&&!i.error&&(i.error=i.timedOut?i.error:`claude exited with code ${J}${S?`: ${S.slice(-500)}`:""}`),k()})})}var Xs={id:"claude-code",displayName:"Claude Code",fastModel:"claude-sonnet-5",deepModel:"claude-fable-5",capabilities:Bl.REGISTERED_AGENTS.find(r=>r.id==="claude-code").capabilities,run:Mm};var Kl=require("node:child_process"),Zl=R(require("node:readline"),1),Gl=R(ve(),1);async function zm(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,Kl.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(l),t(s))},l=setTimeout(()=>{s.timedOut=!0,s.error=`run exceeded ${r.timeoutSeconds}s wall-clock limit`,r.onLog("error",s.error),n.kill("SIGTERM"),setTimeout(()=>n.kill("SIGKILL"),5e3).unref()},r.timeoutSeconds*1e3);n.stdin.write(r.prompt),n.stdin.end(),Zl.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 k=v.item??v.msg??v,T=k?.type??v.type,x=k?.text??k?.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(k?.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 Fo={id:"codex",fastModel:"",deepModel:"",displayName:"OpenAI Codex CLI (experimental)",capabilities:Gl.REGISTERED_AGENTS.find(r=>r.id==="codex").capabilities,run:zm};var Dm={[Xs.id]:Xs,[Fo.id]:Fo};function qt(r){return Dm[r||Ar.DEFAULT_AGENT_ID]??null}function vt(r,e){return!e||e===Xs.id?r.claudeBin:r.agents[e]?.bin??e}function Qs(r,e){let t=qt(r);if(!t)return`no agent adapter named "${r}" on this runner - update the runner, or set the rule's agent to "${Ar.DEFAULT_AGENT_ID}"`;let n=(0,Ar.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 We(r,e,t){let n=e.defaultAgent||Ar.DEFAULT_AGENT_ID,s=qt(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,Ar.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:vt(r,s.id)}}function bt(r,e){return r.replace(/\{\{(\w+)\}\}/g,(t,n)=>n in e?e[n]:t)}var ec=R(ve(),1);it();Ir();Ut();var Te=R(require("node:fs"),1),wn=R(require("node:path"),1);var Um=_.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"),changesRequestedNotified:_.boolean().optional(),conflictNotified:_.boolean().optional()}),qm=_.record(Um),Fm=_.object({runId:_.string(),issueKey:_.string(),issueSummary:_.string().default(""),projectId:_.string(),repoName:_.string(),environmentName:_.string(),requestedBy:_.string().default(""),createdAt:_.string()}),Bm=_.record(Fm),Km=_.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()}),Zm=_.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()}),Gm=_.record(Zm),Vm=_.object({runId:_.string(),issueKey:_.string(),repoName:_.string(),owner:_.string(),repo:_.string(),prNumber:_.number().int(),prUrl:_.string(),jiraTransitionOnMerge:_.string().default(""),createdAt:_.string()}),Hm=_.record(Vm),Wm=_.record(Km);function Vl(){return wn.default.join(te(),"pending-runs.json")}function Bo(){return wn.default.join(te(),"pending-deploys.json")}function Ko(){return wn.default.join(te(),"pending-inputs.json")}function Zo(){return wn.default.join(te(),"merge-watch.json")}function Go(){return wn.default.join(te(),"pending-pushes.json")}function Vo(){let r=Go();if(!Te.default.existsSync(r))return{};try{return Gm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function Ho(r){let e=Vo();e[r.runId]=r,wt(Go(),e)}function ei(r){return Vo()[r]??null}function Wo(r){let e=Vo();r in e&&(delete e[r],wt(Go(),e))}function ti(){let r=Zo();if(!Te.default.existsSync(r))return{};try{return Hm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function Hl(r){let e=ti();e[r.runId]=r,wt(Zo(),e)}function Wn(r){let e=ti();r in e&&(delete e[r],wt(Zo(),e))}function Jn(){let r=Vl();if(!Te.default.existsSync(r))return{};try{return qm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function wt(r,e){Te.default.mkdirSync(te(),{recursive:!0,mode:448});let t=r+".tmp";Te.default.writeFileSync(t,JSON.stringify(e,null,2)+`
|
|
539
|
+
`,{mode:384}),Te.default.renameSync(t,r),Te.default.chmodSync(r,384)}function Wl(r){wt(Vl(),r)}function _n(r){let e=Jn();e[r.runId]=r,Wl(e)}function Jo(r){return Jn()[r]??null}function Pr(r){let e=Jn();r in e&&(delete e[r],Wl(e))}function Yo(){let r=Bo();if(!Te.default.existsSync(r))return{};try{return Bm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function Jl(r){let e=Yo();e[r.runId]=r,wt(Bo(),e)}function ri(r){return Yo()[r]??null}function ni(r){let e=Yo();r in e&&(delete e[r],wt(Bo(),e))}function kn(){let r=Ko();if(!Te.default.existsSync(r))return{};try{return Wm.parse(JSON.parse(Te.default.readFileSync(r,"utf8")))}catch{return{}}}function Yl(r){let e=kn();e[r.runId]=r,wt(Ko(),e)}function ot(r){let e=kn();r in e&&(delete e[r],wt(Ko(),e))}var Jm=`
|
|
540
|
+
|
|
541
|
+
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 ea(r){return Qo.default.existsSync(si.default.join(r,"DESIGN.md"))?`
|
|
542
|
+
|
|
543
|
+
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 tc=5,Xl=2,Ym=8,Ql=2,Xm="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 Qm(r,e,t,n){let s=Date.now(),i="";n&&(i=await n().catch(()=>""));let o=await r.run(e),a=0,l="",c=n?Ym:Xl;for(;!o.ok&&o.turnLimitHit&&!o.cancelled&&r.capabilities.sessionResume;){if(a>=c){l=`resume cap (${c}) reached`;break}if(n&&a>=Xl){let p=await n().catch(()=>""),v=p!==""&&p!==i;if(i=p,!v){l="the last resume produced no new work";break}if(Date.now()-s>e.timeoutSeconds*Ql*1e3){l=`wall-clock budget (${Ql}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:Xm,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)${l?` (stopped: ${l})`:""}. The ticket is probably too large for one run: raise the rule's max turns, or split the ticket.`),o}var Xo=new Map;function rc(r){let e=Xo.get(r);return e?(e.abort(),!0):!1}async function Xn(r,e,t,n,s){let i=new AbortController;Xo.set(r,i);try{return await Qm(e,{...t,signal:i.signal},n,s)}finally{Xo.delete(r)}}function jr(r,e,t=0){let n=t;return{emit:(a,l)=>{e.send({type:"run.log",runId:r,seq:n++,ts:new Date().toISOString(),level:a,message:l}),a!=="agent"&&m.info(`[run ${r}] ${l}`)},setStatus:(a,l={})=>{e.send({type:"run.status",runId:r,status:a,...l})},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 oi(r){return r.rule.action.type==="implement"?rg(r):r.rule.action.type==="respond"?tg(r):eg(r)}async function eg(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=jr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="plan_only")return;let a=Qs(o.agent,o.type);if(a){e("error",a),await Sn(r,a),t("failed",{error:a});return}let l=(0,ii.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=bt(o.promptTemplate,{issueKey:c.key,summary:c.summary,description:c.description||"(no description)",comments:es(c.comments)})+await sn(r.jira,c.attachments,r.repoPath,e)+ea(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 Xn(r.runId,qt(o.agent),{repoPath:r.repoPath,prompt:f,timeoutSeconds:o.timeoutSeconds,bin:vt(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"read_only",model:o.model||void 0,sessionId:l,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 Sn(r,T),t(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let k=ai(p.resultText);if(k){await ui({kind:"plan",runId:r.runId,issueKey:r.issueKey,repoPath:r.repoPath,sessionId:l,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},k,e,t,v);return}await sc({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 Sn(r,f),t("failed",{error:f})}finally{Ot(r.repoPath)}}async function nc(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=jr(r.runId,n.transport,r.nextLogSeq);try{i("running"),s("info",`Reply received on ${r.issueKey} - continuing run \`${r.runId}\``);let l=mc(e)+await sn(n.jiraFor(r.repoName??""),t,r.repoPath,s),c=await Xn(r.runId,qt(r.agent),{repoPath:r.repoPath,prompt:l,timeoutSeconds:r.timeoutSeconds,bin:vt(n.cfg,r.agent??""),configDir:r.claudeConfigDir,mode:"read_only",model:r.model||void 0,sessionId:r.sessionId,resume:!0,onLog:(v,k)=>s(v,k),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 _t(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,v),ot(r.runId),i(c.timedOut?"timed_out":"failed",{error:v,...c.cancelled?{errorKind:"guard"}:{},...f});return}let p=ai(c.resultText);if(p){if(r.rounds>=tc){await gc(n.jiraFor(r.repoName??""),r,s,i,f);return}await ui({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 sc({runId:r.runId,issueKey:r.issueKey,doneLabel:r.doneLabel,jira:n.jiraFor(r.repoName??""),resultText:c.resultText,costFields:f,emit:s,setStatus:i}),ot(r.runId)}catch(l){let c=l instanceof Error?l.message:String(l);s("error",`Run failed: ${c}`),await _t(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,c),ot(r.runId),i("failed",{error:c})}finally{Ot(r.repoPath)}}async function sc(r){let{runId:e,issueKey:t,doneLabel:n,jira:s,resultText:i,costFields:o,emit:a,setStatus:l}=r;l("posting",o),a("info",`Posting plan to ${t} (${i.length} chars)`);let c=`
|
|
535
544
|
|
|
536
545
|
---
|
|
537
|
-
_Allwright plan-only run \`${e}\` \xB7 cost $${o.costUsd.toFixed(4)} \xB7 no code was written._`;await s.addComment(t,i+
|
|
546
|
+
_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:[Pe.NEEDS_INPUT_LABEL]}),a("info",`Labeled ${t} with "${n}"`),l("succeeded",{...o,resultSummary:Yn(i)}),a("info",`Run succeeded \xB7 $${o.costUsd.toFixed(4)}`)}async function tg(r){let{emit:e,setStatus:t,sendUsage:n}=jr(r.runId,r.transport),s=r.rule.action;if(s.type!=="respond")return;let i=Qs(s.agent,s.type);if(i){e("error",i),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
|
|
538
547
|
|
|
539
|
-
${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=bt(s.promptTemplate,{issueKey:o.key,summary:o.summary,description:o.description||"(no description)",comments:
|
|
548
|
+
${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=bt(s.promptTemplate,{issueKey:o.key,summary:o.summary,description:o.description||"(no description)",comments:es(o.comments),question:r.question?.body??"(see the latest comment on the ticket)",questionAuthor:r.question?.author??"the commenter"})+await sn(r.jira,o.attachments,r.repoPath,e)+ea(r.repoPath);e("info",`Starting Claude Code in ${r.repoPath} - read-only tools, path-jailed, timeout ${s.timeoutSeconds}s`);let l=await Xn(r.runId,qt(s.agent),{repoPath:r.repoPath,prompt:a,timeoutSeconds:s.timeoutSeconds,bin:vt(r.cfg,s.agent),configDir:r.claudeConfigDir,mode:"read_only",model:s.model||void 0,sessionId:(0,ii.randomUUID)(),onLog:(f,p)=>e(f,p),onUsage:n},e),c={costUsd:l.costUsd,inputTokens:l.inputTokens,outputTokens:l.outputTokens,billingMode:l.billingMode,model:l.model};if(!l.ok||!l.resultText.trim()){let f=l.error??"Claude Code produced no answer";e("error",`Run failed: ${f}`),await r.jira.addComment(r.issueKey,`**Allwright could not answer this question.**
|
|
540
549
|
|
|
541
550
|
Error: ${f.slice(0,800)}
|
|
542
551
|
|
|
543
|
-
Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(p=>
|
|
552
|
+
Ask again in a new comment to retry. (run \`${r.runId}\`)`).catch(p=>m.error(`could not post answer failure to ${r.issueKey}: ${p}`)),t(l.timedOut?"timed_out":"failed",{error:f,...l.cancelled?{errorKind:"guard"}:{},...c});return}t("posting",c),e("info",`Posting answer to ${r.issueKey} (${l.resultText.length} chars)`),await r.jira.addComment(r.issueKey,l.resultText),t("succeeded",{...c,resultSummary:Yn(l.resultText)}),e("info",`Run succeeded \xB7 $${l.costUsd.toFixed(4)}`)}catch(o){let a=o instanceof Error?o.message:String(o);e("error",`Run failed: ${a}`),t("failed",{error:a})}finally{Ot(r.repoPath)}}async function ic(r,e,t,n){let s=`${e}-wip`;try{return Ot(r),await Fs(r,`WIP: turn limit exhausted (Allwright run ${t})`),await mo(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 oc(r){return`
|
|
544
553
|
|
|
545
|
-
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
|
|
554
|
+
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 rg(r){let{emit:e,setStatus:t,sendUsage:n,nextSeq:s}=jr(r.runId,r.transport),{trigger:i}=r.rule,o=r.rule.action;if(o.type!=="implement")return;let a=Qs(o.agent,o.type);if(a){e("error",a),await Sn(r,a),t("failed",{error:a});return}let l=si.default.join(Zn(),r.runId),c=bt(o.branchTemplate,{issueKey:r.issueKey}),f=(0,ii.randomUUID)(),p=!1,v=!1;try{if(!Zs(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(z){e("warn",`Jira start transition failed: ${z instanceof Error?z.message:z} - continuing anyway`)}let k=await Er(r.repoPath);if(e("info",`Repo origin: ${k}`),!He(k))throw new Error(`origin "${k}" 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 mn(r.repoPath,x),await yo(r.repoPath,c),await vo(r.repoPath,l,c,x),p=!0;let j=bt(o.promptTemplate,{issueKey:T.key,summary:T.summary,description:T.description||"(no description)",comments:es(T.comments)})+await sn(r.jira,T.attachments,l,e)+ea(l)+Jm+(o.writeTests?ec.WRITE_TESTS_PROMPT:"")+(o.updateMemory?Pe.MEMORY_UPDATE_PROMPT:"");e("info",`Starting Claude Code in the worktree - edit tools enabled, path-jailed, no shell, timeout ${o.timeoutSeconds}s`);let S=await Xn(r.runId,qt(o.agent),{repoPath:l,prompt:j,timeoutSeconds:o.timeoutSeconds,bin:vt(r.cfg,o.agent),configDir:r.claudeConfigDir,mode:"edit_no_shell",model:o.model||void 0,maxTurns:o.maxTurns,sessionId:f,onLog:(z,Q)=>e(z,Q),onUsage:n},e,()=>qs(l)),J={costUsd:S.costUsd,inputTokens:S.inputTokens,outputTokens:S.outputTokens,billingMode:S.billingMode,model:S.model};if(!S.ok){let z=S.error??"Claude Code failed";e("error",`Run failed: ${z}`);let Q=z;if(S.turnLimitHit){let h=await ic(l,c,r.runId,e);h&&(Q+=oc(h))}await Sn(r,Q),t(S.timedOut?"timed_out":"failed",{error:z,...S.cancelled?{errorKind:"guard"}:{},...J});return}let M=ai(S.resultText);if(M){v=!0,await ui({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:l,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},M,e,t,J);return}Ot(l),await uc({runId:r.runId,issueKey:r.issueKey,issueSummary:T.summary,worktreePath:l,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:S.resultText,costFields:J,runTests:o.runTests,mergeOnApprove:o.mergeOnApprove,mergeMethod:o.mergeMethod,emit:e,setStatus:t})}catch(k){let T=k instanceof Error?k.message:String(k);e("error",`Run failed: ${T}`),await Sn(r,T),t("failed",{error:T})}finally{p&&!v&&await gn(r.repoPath,l).catch(()=>{})}}async function ac(r,e,t,n){let{emit:s,setStatus:i,sendUsage:o,nextSeq:a}=jr(r.runId,n.transport,r.nextLogSeq),l=r.repoPath,c=!1;try{if(!Zs(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=mc(e)+await sn(n.jiraFor(r.repoName??""),t,l,s),p=await Xn(r.runId,qt(r.agent),{repoPath:l,prompt:f,timeoutSeconds:r.timeoutSeconds,bin:vt(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,()=>qs(l)),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 j=await ic(l,r.branch,r.runId,s);j&&(x+=oc(j))}await _t(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,x),ot(r.runId),i(p.timedOut?"timed_out":"failed",{error:T,...p.cancelled?{errorKind:"guard"}:{},...v});return}let k=ai(p.resultText);if(k){if(r.rounds>=tc){await gc(n.jiraFor(r.repoName??""),r,s,i,v);return}c=!0,await ui({kind:"implement",runId:r.runId,issueKey:r.issueKey,repoPath:l,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},k,s,i,v);return}Ot(l),await uc({runId:r.runId,issueKey:r.issueKey,issueSummary:r.issueSummary,worktreePath:l,baseRepoPath:r.baseRepoPath??l,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}),ot(r.runId)}catch(f){let p=f instanceof Error?f.message:String(f);s("error",`Run failed: ${p}`),await _t(n.jiraFor(r.repoName??""),r.issueKey,r.runId,r.failedLabel,p),ot(r.runId),i("failed",{error:p})}finally{c||await gn(r.baseRepoPath??l,l).catch(()=>{})}}async function uc(r){let{runId:e,issueKey:t,issueSummary:n,worktreePath:s,baseRepoPath:i,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:f,doneLabel:p,failedLabel:v,repoName:k,jira:T,cfg:x,actorEmail:j,runTests:S,mergeOnApprove:J,mergeMethod:M,resultText:z,costFields:Q,emit:h,setStatus:g}=r,w=await po(s);w.deleted.length&&h("info",`Deleted ${w.deleted.length} file(s) listed in ${pn}: `+w.deleted.slice(0,10).join(", ")+(w.deleted.length>10?", \u2026":""));for(let F of w.refused)h("warn",`${pn} entry refused: ${F}`);h("info","Committing changes"),await Fs(s,`${t}: ${n}
|
|
546
555
|
|
|
547
|
-
Allwright run ${e}`);let
|
|
548
|
-
${
|
|
556
|
+
Allwright run ${e}`);let C=await bo(s,a);if(!C.ok){let F=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 ${Ls}/${Us})`;h("error",F),await _t(T,t,e,v,F),g("failed",{error:F,errorKind:"guard",...Q});return}h("info",`Diff: ${C.files} file(s), +${C.insertions}/-${C.deletions}`);let D="";if(S){let F=Hs(s);if(!F)h("info","No TEST.md in this repo - skipping the test run (nothing documented to run)");else{let ae=Ws(Qo.default.readFileSync(F,"utf8"));if(!ae.length)h("info",`${si.default.basename(F)} lists no commands - nothing to run`);else{h("info",`Running ${ae.length} documented test command(s) - no tokens, plain shell`);let ie=await Js(s,ae,{perCommandTimeoutMs:15*6e4}),ce=ie.filter(fe=>fe.exitCode!==0);for(let fe of ie)h(fe.exitCode===0?"info":"warn",`${fe.exitCode===0?"PASS":"FAIL"} ${fe.command} (exit ${fe.exitCode})`+(fe.exitCode===0?"":`
|
|
557
|
+
${fe.tail.slice(-1500)}`));D=`
|
|
549
558
|
|
|
550
559
|
### Tests
|
|
551
|
-
`+
|
|
552
|
-
`)+(
|
|
560
|
+
`+ie.map(fe=>`- ${fe.exitCode===0?"PASS":"FAIL"} \`${fe.command}\``).join(`
|
|
561
|
+
`)+(ce.length?`
|
|
553
562
|
|
|
554
|
-
**${
|
|
563
|
+
**${ce.length} of ${ie.length} failed.** Output is in the run log.`:`
|
|
555
564
|
|
|
556
|
-
All ${
|
|
565
|
+
All ${ie.length} passed.`),ce.length&&h("warn",`${ce.length} test command(s) failed - the PR will say so; review before merging`)}}}let Y=await Er(s),B=He(Y);if(!B){let F=`origin "${Y}" is not a GitHub remote - implement mode supports GitHub only`;h("error",F),await _t(T,t,e,v,F),g("failed",{error:F,...Q});return}let se=await Gn(s),W=ng(z);try{await lc({gitDir:s,ownerRepo:B,runId:e,issueKey:t,issueSummary:n,branch:o,baseBranch:a,jiraTransition:l,jiraTransitionOnMerge:c,requireApproval:f,doneLabel:p,failedLabel:v,repoName:k,jira:T,cfg:x,actorEmail:j,mergeOnApprove:J,mergeMethod:M,summary:W,cost:Q,testReport:D,emit:h,setStatus:g})}catch(F){let ae=F instanceof Error?F.message:String(F);Ho({runId:e,issueKey:t,issueSummary:n,mergeOnApprove:J,mergeMethod:M,repoName:k,baseRepoPath:i,branch:o,baseBranch:a,headSha:se,requireApproval:f,doneLabel:p,failedLabel:v,jiraTransition:l,jiraTransitionOnMerge:c,actorEmail:j,resultSummary:W,costUsd:Q.costUsd,nextLogSeq:1e5,createdAt:new Date().toISOString()}),h("error",`Run failed: ${ae}`),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 _t(T,t,e,v,`${ae}
|
|
557
566
|
|
|
558
|
-
The agent's commit survived on the runner - "Retry push" on the dashboard's run page re-pushes it without a new agent run.`),
|
|
567
|
+
The agent's commit survived on the runner - "Retry push" on the dashboard's run page re-pushes it without a new agent run.`),g("failed",{error:ae,retryAvailable:!0,...Q})}}async function lc(r){let{gitDir:e,ownerRepo:t,runId:n,issueKey:s,issueSummary:i,mergeOnApprove:o,mergeMethod:a,branch:l,baseBranch:c,jiraTransition:f,jiraTransitionOnMerge:p,requireApproval:v,doneLabel:k,failedLabel:T,repoName:x,jira:j,cfg:S,actorEmail:J,summary:M,cost:z,testReport:Q,emit:h,setStatus:g}=r;h("info",`Pushing ${l} to origin`),await wo(e,l);let w=await Bs(e,l),C=`${M}${Q??""}
|
|
559
568
|
|
|
560
569
|
---
|
|
561
|
-
Jira: ${new URL(`/browse/${s}`,
|
|
562
|
-
_Allwright implement run \`${n}\` \xB7 cost $${
|
|
570
|
+
Jira: ${new URL(`/browse/${s}`,S.jira?.baseUrl??"").toString()}
|
|
571
|
+
_Allwright implement run \`${n}\` \xB7 cost $${z.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 D=Zs(pe()??S,x,J);D.source==="user"&&h("info",`PR will be authored with ${J}'s own GitHub token`);let B=await new Fe(D.token).createPullRequest(t.owner,t.repo,{title:`${s}: ${i}`.slice(0,250),head:l,base:c,body:C});h("info",`PR ready: ${B.url}`),Hl({runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:B.number,prUrl:B.url,jiraTransitionOnMerge:p??"",createdAt:new Date().toISOString()}),g("posting",z);let se={runId:n,issueKey:s,repoName:x,owner:t.owner,repo:t.repo,prNumber:B.number,prUrl:B.url,branch:l,headSha:w,doneLabel:k,failedLabel:T,jiraTransition:f,mergeOnApprove:o,mergeMethod:a};v?(_n(se),await j.addComment(s,`**Allwright opened a pull request for review.**
|
|
563
572
|
|
|
564
|
-
PR: ${
|
|
573
|
+
PR: ${B.url}
|
|
565
574
|
|
|
566
|
-
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}\`)`),
|
|
575
|
+
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}\`)`),g("awaiting_approval",{...z,prUrl:B.url,headSha:w,resultSummary:Yn(M),retryAvailable:!1}),h("info",`Awaiting approval on the dashboard \xB7 $${z.costUsd.toFixed(4)}`)):(await cc({jira:j,issueKey:s},se,h),g("succeeded",{...z,prUrl:B.url,headSha:w,resultSummary:Yn(M),retryAvailable:!1}),h("info",`Run succeeded \xB7 ${B.url} \xB7 $${z.costUsd.toFixed(4)}`))}async function cc(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.**
|
|
567
576
|
|
|
568
577
|
PR: ${e.prUrl}`+(n?`
|
|
569
578
|
|
|
570
579
|
Note: ${n}`:"")+`
|
|
571
580
|
|
|
572
|
-
(run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[
|
|
581
|
+
(run \`${e.runId}\`)`),await r.jira.editLabels(e.issueKey,{add:[e.doneLabel],remove:[Pe.NEEDS_INPUT_LABEL]}),n}async function Qn(r,e,t){let n=Jo(e);if(!n){m.warn(`run.approved for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:s,setStatus:i}=fc(r,e);try{let o=qe(pe()??r.cfg,n.repoName);if(!o)throw new Error("GitHub token missing on this runner");let a=new Fe(o);s("info",`Approval received for ${n.issueKey} - verifying PR state`);let l=await a.getPullRequest(n.owner,n.repo,n.prNumber);if(!l)throw new Error(`PR #${n.prNumber} no longer exists on GitHub`);if(l.state==="closed"&&!l.merged)throw new Error(`PR #${n.prNumber} was closed on GitHub without merging`);let c=t??n.headSha;if(l.state==="open"&&l.headSha!==c){let f=`PR #${n.prNumber} changed since review started (${c.slice(0,7)} \u2192 ${l.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:l.headSha,resultSummary:f});return}if(n.mergeOnApprove&&l.state==="open"&&!l.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}
|
|
573
582
|
|
|
574
|
-
PR: ${n.prUrl}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:
|
|
583
|
+
PR: ${n.prUrl}`),i("awaiting_approval",{prUrl:n.prUrl,headSha:l.headSha,resultSummary:p});return}s("info",`PR #${n.prNumber} merged`)}await cc({jira:r.jiraFor(n.repoName??""),issueKey:n.issueKey},n,s),i("succeeded",{prUrl:n.prUrl}),s("info","Run completed after approval"),Pr(e)}catch(o){let a=o instanceof Error?o.message:String(o);s("error",`Approval handling failed: ${a}`),await pc(r,n,a),i("failed",{error:a}),Pr(e)}}async function dc(r,e){let t=Jo(e);if(!t){m.warn(`run.rejected for ${e}: no pending entry (already processed?) - ignoring`);return}let{emit:n,setStatus:s}=fc(r,e);try{let i=qe(pe()??r.cfg,t.repoName);if(!i)throw new Error("GitHub token missing on this runner");let o=new Fe(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.**
|
|
575
584
|
|
|
576
|
-
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"),
|
|
585
|
+
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"),Pr(e)}catch(i){let o=i instanceof Error?i.message:String(i);n("error",`Rejection handling failed: ${o}`),await pc(r,t,o),s("failed",{error:o}),Pr(e)}}async function hc(r,e){let t=ei(e);if(!t){m.warn(`run.retryPush for ${e}: no retry record (already pushed, or invalidated?)`);let{emit:a,setStatus:l,sendUsage:c}=jr(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."),l("failed",{retryAvailable:!1});return}let{emit:n,setStatus:s,sendUsage:i,nextSeq:o}=jr(e,r.transport,t.nextLogSeq);try{let a=await Bs(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.`),Wo(e),s("failed",{retryAvailable:!1});return}let l=await Er(t.baseRepoPath),c=He(l);if(!c)throw new Error(`origin "${l}" 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 lc({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}),Wo(e),await f.editLabels(t.issueKey,{remove:[t.failedLabel]}).catch(()=>{})}catch(a){let l=a instanceof Error?a.message:String(a);n("error",`Retry push failed: ${l}`),Ho({...t,nextLogSeq:o()}),s("failed",{error:l,retryAvailable:!0})}}function fc(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"&&m.info(`[run ${e}] ${o}`)},setStatus:(i,o={})=>{r.transport.send({type:"run.status",runId:e,status:i,...o})}}}async function pc(r,e,t){try{await r.jiraFor(e.repoName??"").addComment(e.issueKey,`**Allwright could not complete the approval decision.**
|
|
577
586
|
|
|
578
587
|
Error: ${t.slice(0,800)}
|
|
579
588
|
|
|
580
589
|
PR: ${e.prUrl}
|
|
581
|
-
(run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){
|
|
590
|
+
(run \`${e.runId}\`)`),await r.jiraFor(e.repoName??"").editLabels(e.issueKey,{add:[e.failedLabel]})}catch(n){m.error(`could not post decision failure to ${e.issueKey}: ${n}`)}}function es(r){if(!r.length)return"(no comments)";let e=6e4,t=r.map(i=>`${i.author} (${i.created}):
|
|
582
591
|
${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(`
|
|
583
592
|
---
|
|
584
|
-
`)}function
|
|
593
|
+
`)}function mc(r){return`The ticket author replied:
|
|
585
594
|
|
|
586
595
|
${r}
|
|
587
596
|
|
|
588
|
-
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 ${
|
|
589
|
-
`,1)[0].trim(),n=o=>o.replace(/[^a-z]/gi,"").toUpperCase();if(n(t)!==n(
|
|
590
|
-
`);return s<0?null:e.slice(s+1).trim()||null}async function
|
|
597
|
+
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 ${Pe.NEEDS_INPUT_MARKER} marker).`}function ai(r){let e=r.trim(),t=e.split(`
|
|
598
|
+
`,1)[0].trim(),n=o=>o.replace(/[^a-z]/gi,"").toUpperCase();if(n(t)!==n(Pe.NEEDS_INPUT_MARKER))return null;let s=e.indexOf(`
|
|
599
|
+
`);return s<0?null:e.slice(s+1).trim()||null}async function ui(r,e,t,n,s){t("info",`Claude needs more information - posting questions to ${r.issueKey}`),await r.jira.addComment(r.issueKey,`**${Pe.NEEDS_INPUT_COMMENT_MARKER} before it can continue.**
|
|
591
600
|
|
|
592
601
|
${e}
|
|
593
602
|
|
|
594
|
-
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:[
|
|
603
|
+
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:[Pe.NEEDS_INPUT_LABEL]}),Yl({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:Yn(e)}),t("info",`Waiting for a reply on ${r.issueKey} (label "${Pe.NEEDS_INPUT_LABEL}")`)}async function gc(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 _t(r,e.issueKey,e.runId,e.failedLabel,i),ot(e.runId),n("failed",{error:i,...s})}async function Sn(r,e){await _t(r.jira,r.issueKey,r.runId,r.rule.trigger.failedLabel,e)}async function _t(r,e,t,n,s){try{await r.addComment(e,`**Allwright run failed.**
|
|
595
604
|
|
|
596
605
|
Error: ${s.slice(0,800)}
|
|
597
606
|
|
|
598
|
-
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:[
|
|
599
|
-
`)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var
|
|
607
|
+
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:[Pe.NEEDS_INPUT_LABEL]})}catch(i){m.error(`could not post failure comment to ${e}: ${i}`)}}function ng(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 Yn(r){for(let e of r.split(`
|
|
608
|
+
`)){let t=e.replace(/^#+\s*/,"").trim();if(t.length>10)return t.slice(0,200)}return r.slice(0,200)}var Nr=R(require("node:fs"),1),Or=R(require("node:path"),1),Mr=require("node:child_process"),ra=R(require("node:readline"),1),na=require("node:crypto"),zr=R(ve(),1);var kc=R(ve(),1);Ut();it();Ir();var yc=4e3,sg=4e3;function sa(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,sg)}),s!=="agent"&&m.info(`[deploy ${r.runId}] ${i}`)},setStatus:(s,i={})=>{r.transport.send({type:"run.status",runId:r.runId,status:s,...i})}}}async function li(r){let{emit:e,setStatus:t}=sa(r),n=r.environment;try{let s=ig(r);if(s){e("error",s),await Je(r,`**Allwright could not deploy to \`${n.name}\`.**
|
|
600
609
|
|
|
601
|
-
${s}`),t("failed",{error:s});return}if(n.requireApproval){
|
|
610
|
+
${s}`),t("failed",{error:s});return}if(n.requireApproval){Jl({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 Je(r,`**Allwright: deploy to \`${n.name}\` needs approval.**
|
|
602
611
|
|
|
603
|
-
${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
|
|
612
|
+
${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 Sc(r,e,t)}catch(s){let i=s instanceof Error?s.message:String(s);e("error",`Deploy failed: ${i}`),await Je(r,`**Allwright deploy to \`${n.name}\` failed.**
|
|
604
613
|
|
|
605
614
|
${i.slice(0,800)}
|
|
606
615
|
|
|
607
|
-
(run \`${r.runId}\`)`),t("failed",{error:i})}}function
|
|
616
|
+
(run \`${r.runId}\`)`),t("failed",{error:i})}}function ig(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=ar(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 Sc(r,e,t){let n=r.environment,s=ar(r.cfg,r.project.repoName,n.name),i=cg(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 j=We(r.cfg,r.project,"assist"),S="error"in j?{ok:!1,error:j.error}:await bn({projectId:r.project.id,repoPath:r.repoPath,role:n.auditBeforeDeploy,scope:{kind:"repo",ref:""},model:"",agent:j,jira:r.jira});if(!S.ok)e("warn",`Pre-deploy audit could not run: ${S.error} - deploying anyway (advisory)`);else if(!S.audit.findings.length)e("info","Pre-deploy audit: no findings \u2713");else{let J={};for(let M of S.audit.findings)J[M.severity]=(J[M.severity]??0)+1;e("warn",`Pre-deploy audit: ${S.audit.findings.length} finding(s) (`+Object.entries(J).map(([M,z])=>`${z} ${M}`).join(", ")+") - full report on the Audits page. Deploying anyway (advisory).");for(let M of S.audit.findings.slice(0,5))e("warn",` [${M.severity}] ${M.title} - ${M.evidence[0]?.file??""}`)}}catch(j){e("warn",`Pre-deploy audit crashed: ${j instanceof Error?j.message:String(j)} - deploying anyway`)}}if(n.requireSyncCheck){if(!n.previousEnvBranch||!n.branch){let S=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",S),await Je(r,`**Allwright refused to deploy to \`${n.name}\`.**
|
|
608
617
|
|
|
609
|
-
${
|
|
618
|
+
${S}
|
|
610
619
|
|
|
611
|
-
(run \`${r.runId}\`)`),t("failed",{error:
|
|
620
|
+
(run \`${r.runId}\`)`),t("failed",{error:S,errorKind:"guard"});return}let j=await ag(r,e);if(j){await Je(r,j.comment),t("failed",{error:j.error,...j.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 So({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 j=bt(n.ticketBranchTemplate,{issueKey:r.issueKey});e("info",`Merging "${j}" into "${n.branch}"`);let S=await To(a,j,`Deploy ${r.issueKey} to ${n.name}
|
|
612
621
|
|
|
613
|
-
Allwright run ${r.runId}`);if(!
|
|
622
|
+
Allwright run ${r.runId}`);if(!S.ok){e("error",S.reason??"merge failed"),await Je(r,`**Allwright deploy to \`${n.name}\` failed before running anything.**
|
|
614
623
|
|
|
615
|
-
${
|
|
624
|
+
${S.reason}`),t("failed",{error:S.reason});return}S.alreadyMerged?e("info",`"${j}" is already in "${n.branch}" - nothing to merge`):(e("info",`Pushing "${n.branch}" to origin`),await xo(a,n.branch))}let c=await Gn(a).catch(()=>"");c&&e("info",`Deploying commit ${c.slice(0,10)}`);let f=ug(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,k=n.timeoutSeconds*1e3;for(let[j,S]of n.steps.entries()){let J=k-(Date.now()-o);if(J<=0){let z=`deploy exceeded its ${n.timeoutSeconds}s budget before step ${j+1}`;e("error",z),await Je(r,`**Allwright deploy to \`${n.name}\` timed out.**
|
|
616
625
|
|
|
617
|
-
${
|
|
626
|
+
${z}`),t("timed_out",{error:z,deployedRef:c});return}e("info",`\u25B6 step ${j+1}/${n.steps.length}: ${S.name}`);let M=await lg({command:S.run,cwd:f,env:p,timeoutMs:J,onLine:(z,Q)=>{v++,v===yc&&e("warn","(output truncated - deploy log limit reached)"),!(v>=yc)&&e(z,i(Q))}});if(M.timedOut){let z=`step "${S.name}" hit the ${n.timeoutSeconds}s deploy budget and was killed`;e("error",z),await Je(r,`**Allwright deploy to \`${n.name}\` timed out.**
|
|
618
627
|
|
|
619
|
-
${
|
|
628
|
+
${z}`),t("timed_out",{error:z,deployedRef:c});return}if(M.code!==0){if(S.continueOnError){e("warn",`step "${S.name}" exited ${M.code} - continuing (marked continue-on-error)`);continue}let z="";try{z=i(await go(a))}catch{}let Q=`step ${j+1} "${S.name}" failed with exit code ${M.code}`+(M.tail?`: ${i(M.tail)}`:"")+(z?`
|
|
620
629
|
|
|
621
630
|
Checkout at failure:
|
|
622
|
-
${
|
|
631
|
+
${z}`:"");e("error",Q),await Je(r,`**Allwright deploy to \`${n.name}\` failed.**
|
|
623
632
|
|
|
624
|
-
Step ${
|
|
633
|
+
Step ${j+1} \`${S.name}\` exited ${M.code}.
|
|
625
634
|
|
|
626
|
-
`+(
|
|
627
|
-
${i(
|
|
635
|
+
`+(M.tail?`\`\`\`
|
|
636
|
+
${i(M.tail).slice(0,1200)}
|
|
628
637
|
\`\`\`
|
|
629
638
|
|
|
630
|
-
`:"")+(
|
|
639
|
+
`:"")+(z?`Checkout at failure:
|
|
631
640
|
\`\`\`
|
|
632
|
-
${
|
|
641
|
+
${z.slice(0,800)}
|
|
633
642
|
\`\`\`
|
|
634
643
|
|
|
635
|
-
`:"")+`Nothing after it ran. Full log is on the Allwright dashboard. (run \`${r.runId}\`)`),t("failed",{error:
|
|
644
|
+
`:"")+`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 ${j+1}/${n.steps.length}: ${S.name}`)}t("posting");let T=Math.round((Date.now()-o)/1e3);r.issueKey!==zr.BRANCH_DEPLOY_ISSUE_KEY&&await Je(r,`**Allwright deployed \`${r.issueKey}\` to \`${n.name}\`.**
|
|
636
645
|
|
|
637
|
-
`+(
|
|
638
|
-
`:"")+`${n.steps.length} step(s) in ${
|
|
646
|
+
`+(c?`Commit: \`${c.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
|
|
647
|
+
`:"")+`${n.steps.length} step(s) in ${T}s.`+(r.requestedBy?` Requested by ${r.requestedBy}.`:"")+`
|
|
639
648
|
|
|
640
|
-
(run \`${r.runId}\`)`);let
|
|
649
|
+
(run \`${r.runId}\`)`);let x=await og(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 og(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}.**
|
|
641
650
|
|
|
642
651
|
`+(t?`Commit: \`${t.slice(0,10)}\`${n.branch?` on \`${n.branch}\``:""}
|
|
643
|
-
`:"")+(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(
|
|
652
|
+
`:"")+(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(l){e("warn",`${a.key}: sweep failed (${l instanceof Error?l.message:l}) - left in "${n.deployFromColumn}"`)}return e("info",`Moved ${o}/${i.length} ticket(s) to "${n.deployToColumn}"`),o}async function ag(r,e){let t=r.environment,n=t.previousEnvBranch,s=(a,l=!1)=>({error:a,guard:l,comment:`**Allwright could not deploy \`${r.issueKey}\` to \`${t.name}\`.**
|
|
644
653
|
|
|
645
654
|
${a}
|
|
646
655
|
|
|
647
|
-
(run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await
|
|
656
|
+
(run \`${r.runId}\`)`});e("info",`Checking "${t.branch}" is in sync with "${n}" before deploying`);try{await mn(r.repoPath,n),await mn(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 Co(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=qe(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 Er(r.repoPath),l=He(a);if(!l)throw new Error(`could not parse a GitHub owner/repo from origin "${a}"`);let f=await new Fe(o).createPullRequest(l.owner,l.repo,{title:`Sync ${t.name} (${t.branch}) with ${n}`,head:n,base:t.branch,body:`Allwright opened this automatically while trying to deploy \`${r.issueKey}\` to \`${t.name}\`: \`${t.branch}\` doesn't have everything that's on \`${n}\` yet, so deploying now would ship different code than what was validated there. Merge this PR, then retry the deploy.
|
|
648
657
|
|
|
649
|
-
(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
|
|
650
|
-
`)}))},
|
|
658
|
+
(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 ug(r,e){if(!e.trim())return r;let t=Or.default.resolve(r,e),n=Or.default.relative(r,t);if(n.startsWith("..")||Or.default.isAbsolute(n))throw new Error(`working directory "${e}" is outside the repository checkout`);return t}function lg(r){return new Promise(e=>{let t=(0,Mr.spawn)("bash",["-lc",r.command],{cwd:r.cwd,env:r.env,detached:!0,stdio:["ignore","pipe","pipe"]}),n=[],s=c=>{n.push(c),n.length>20&&n.shift()},i=!1,o=!1,a=c=>{i||(i=!0,clearTimeout(l),e({code:c,timedOut:o,tail:n.join(`
|
|
659
|
+
`)}))},l=setTimeout(()=>{o=!0,vc(t.pid,"SIGTERM"),setTimeout(()=>vc(t.pid,"SIGKILL"),1e4).unref()},r.timeoutMs);ra.default.createInterface({input:t.stdout}).on("line",c=>{s(c),r.onLine("info",c)}),ra.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 vc(r,e){if(r)try{process.kill(-r,e)}catch{try{process.kill(r,e)}catch{}}}function cg(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 Je(r,e){if(r.issueKey!==zr.BRANCH_DEPLOY_ISSUE_KEY)try{await r.jira.addComment(r.issueKey,e)}catch(t){m.error(`could not post deploy comment to ${r.issueKey}: ${t}`)}}function ia(r){return ri(r)!==null}async function Tc(r,e){let t=ri(e);if(!t)return;let{emit:n,setStatus:s}=sa({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}),ni(e);return}ni(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 Sc(o,n,s)}catch(a){let l=a instanceof Error?a.message:String(a);n("error",`Deploy failed: ${l}`),await Je(o,`**Allwright deploy failed.**
|
|
651
660
|
|
|
652
|
-
${
|
|
661
|
+
${l.slice(0,800)}`),s("failed",{error:l})}}async function xc(r,e){let t=ri(e);if(!t)return;let{emit:n,setStatus:s}=sa({runId:e,transport:r.transport});ni(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.**
|
|
653
662
|
|
|
654
|
-
No deploy step was executed. (run \`${e}\`)`)}catch(o){
|
|
663
|
+
No deploy step was executed. (run \`${e}\`)`)}catch(o){m.error(`could not post rejection comment to ${t.issueKey}: ${o}`)}s("failed",{error:"deploy rejected by a reviewer"})}var dg=_.object({steps:_.array(zr.DeployStep).max(50).default([]),requiredSecrets:_.array(_.string()).max(50).default([]),notes:_.string().default("")}),hg=[".ticketpilot/deploy.md","DEPLOY.md","DEPLOYMENT.md","docs/DEPLOY.md","docs/deploy.md","docs/deployment.md"],bc=24e3;function ci(r){for(let e of hg){let t=Or.default.join(r,e);try{if(!Nr.default.existsSync(t))continue;let n=Nr.default.readFileSync(t,"utf8");if(!n.trim())continue;return{path:e,content:n.length>bc?n.slice(0,bc)+`
|
|
655
664
|
|
|
656
|
-
[\u2026document truncated\u2026]`:n}}catch{continue}}return null}var
|
|
665
|
+
[\u2026document truncated\u2026]`:n}}catch{continue}}return null}var wc=["docker","docker-compose","pm2","systemctl","node","pnpm","npm","yarn","make","python3","pip","rsync","ssh","caddy","nginx"];function Cc(r){return Ec("bash",["-lc",`command -v ${JSON.stringify(r)}`]).trim().length>0}function Ec(r,e){try{let t=(0,Mr.spawnSync)(r,e,{encoding:"utf8",timeout:5e3});return t.status===0?t.stdout??"":""}catch{return""}}async function fg(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 pg(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?`
|
|
657
666
|
- absolute paths the document mentions, checked on THIS machine:
|
|
658
|
-
${t.map(s=>` - ${s}: ${
|
|
659
|
-
`)}`:""}function
|
|
667
|
+
${t.map(s=>` - ${s}: ${Nr.default.existsSync(s)?"EXISTS on this machine":"not found on this machine"}`).join(`
|
|
668
|
+
`)}`:""}function mg(){let r=[],e=(t,n)=>{try{let s=(0,Mr.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,Mr.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&&Nr.default.existsSync(s)&&e(`${t} at ${s}`,s)}return r.length?`
|
|
660
669
|
- runtime versions (a MISMATCH between the runner's PATH and the system install is a common root cause):
|
|
661
670
|
${r.map(t=>` ${t}`).join(`
|
|
662
|
-
`)}`:""}function
|
|
671
|
+
`)}`:""}function Ic(r,e,t,n=""){let s=wc.filter(a=>Cc(a)),i=wc.filter(a=>!s.includes(a)),o=Object.keys(ar(r,e,t));return`About the machine these steps will run on (gathered by the runner, trust it):
|
|
663
672
|
- available tools: ${s.join(", ")||"(none of the common ones)"}
|
|
664
673
|
- NOT installed: ${i.join(", ")||"(none missing)"}
|
|
665
|
-
- secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+
|
|
666
|
-
${
|
|
667
|
-
`),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,
|
|
668
|
-
`+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
|
|
669
|
-
`)[0].trim()||`Step ${e+1}`).slice(0,120)}
|
|
674
|
+
- secrets already stored for this environment (names only): ${o.join(", ")||"(none yet)"}`+mg()+pg(n)}async function Rc(r){let e=[];if(r.publicUrl?.trim()&&await fg(r.publicUrl.trim(),e),e.push(Nr.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=Or.default.isAbsolute(r.workdir)?r.workdir:Or.default.join(r.repoPath,r.workdir);e.push(Nr.default.existsSync(a)?{name:"workdir",ok:!0,detail:a}:{name:"workdir",ok:!1,detail:`does not exist: ${a}`})}if(r.branch){let a=Ec("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=ar(r.cfg,r.repoName,r.environmentName),n=new Set(r.requiredSecrets);for(let a of r.steps)for(let l of a.run.matchAll(/\$\{?([A-Z][A-Z0-9_]{2,})\}?/g))n.add(l[1]);let s=[...n].filter(a=>!t[a]&&!process.env[a]);e.push({name:"secrets",ok:s.length===0,detail:s.length?`missing: ${s.join(", ")} - set with: allwright env set "${r.repoName}" "${r.environmentName}" ${s[0]}=...`:`${n.size} present`});let i=new Set;for(let a of r.steps)for(let l of a.run.split(/&&|\|\||;|\|/)){let c=l.trim().split(/\s+/),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=>!Cc(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 Ac(r){let e=Ic(r.cfg,r.repoName,r.environmentName),t=bt(kc.DEPLOY_FIX_PROMPT_TEMPLATE,{envName:r.environmentName,steps:r.steps.map((c,f)=>`${f+1}. [${c.name}]${c.continueOnError?" (continues on error)":""}
|
|
675
|
+
${c.run}`).join(`
|
|
676
|
+
`),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,na.randomUUID)(),onLog:()=>{}});if(!n.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:n.error??"the agent produced no output"};let s=Pc(n.resultText),i=n.resultText.split(/```/)[0]?.trim()??"",a=/```(?:markdown|md)\s*\n([\s\S]*?)```/i.exec(n.resultText)?.[1]?.trim()??"",l=a?ci(r.repoPath):null;return s?{ok:!0,...s,notes:i||s.notes,docPath:l?.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 $c(r){let e=ci(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=Ic(r.cfg,r.repoName,r.environmentName,e.content),n=bt(zr.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,na.randomUUID)(),onLog:()=>{}});if(!s.ok)return{ok:!1,steps:[],requiredSecrets:[],notes:"",error:s.error??"Claude Code produced no output"};let i=Pc(s.resultText);return i?{ok:!0,...i}:(m.warn(`deploy step suggestion could not be parsed. Claude's raw answer follows:
|
|
677
|
+
`+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 Pc(r){for(let e of gg(r)){let t;try{t=JSON.parse(e)}catch{continue}let n=dg.safeParse(yg(t));if(n.success&&n.data.steps.length||n.success&&n.data.notes.trim())return n.data}return null}function gg(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 yg(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:_c(o,a),run:o.trim()}:null;if(!o||typeof o!="object")return null;let l=o,c=ta(l.run,l.command,l.cmd,l.script,l.shell);return c?{name:(ta(l.name,l.title,l.description)??_c(c,a)).slice(0,120),run:c,continueOnError:l.continueOnError===!0||l.continue_on_error===!0}:null}).filter(Boolean),s=e.requiredSecrets??e.required_secrets??e.secrets,i=Array.isArray(s)?s.filter(o=>typeof o=="string"):s&&typeof s=="object"?Object.keys(s):[];return{steps:n.slice(0,50),requiredSecrets:i.slice(0,50),notes:ta(e.notes,e.note,e.explanation)??""}}function ta(...r){for(let e of r)if(typeof e=="string"&&e.trim())return e.trim()}function _c(r,e){return(r.split(`
|
|
678
|
+
`)[0].trim()||`Step ${e+1}`).slice(0,120)}Ut();it();Ir();function di(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 jc=24*3600*1e3,hi=14,vg=hi*24*3600*1e3,bg=new Set(["to","on","this","the","a","an","env","environment","please","now","it"]),fi=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),m.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.`}),m.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;m.info(`config synced: ${e.length} project(s), ${t.length} rule(s) (${i} enabled), ${s.length} environment(s)`),n!==this.paused&&(m.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(),m.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=xl(t.id,e.role);if(!(n&&Date.now()-new Date(n).getTime()<e.intervalHours*36e5)){this.auditInFlight=!0;try{m.info(`Scheduled ${e.role} audit of ${e.repoName} starting (every ${e.intervalHours}h)`);let s=We(this.cfg,t,"assist");if("error"in s){m.warn(`Scheduled audit skipped: ${s.error}`);continue}let i=await bn({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;m.info(`Scheduled audit done: ${o} finding(s) - drift visible on the Audits page`)}else m.warn(`Scheduled audit failed: ${i.error}`)}catch(s){m.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){m.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){m.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=di(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 l=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;m.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 k=this.resolveClaudeProfile(p.runId,p.claudeProfile);this.enqueueForRepo(a.path,async()=>{try{await oi({runId:p.runId,rule:l,project:o,issueKey:t.issueKey,repoPath:a.path,cfg:this.cfg,jira:c,transport:this.transport,claudeConfigDir:k,actorEmail:p.actorEmail,continueBranch:t.continueBranch})}finally{this.inFlight.delete(v)}})}async sweepGitHubApprovals(){let e=Object.values(Jn());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=i=>{let o=qe(t,i);if(!o)return null;let a=n.get(o);return a||n.set(o,a=new Fe(o)),a};for(let i of e.slice(0,10)){let o=s(i.repoName);if(!o)continue;let a=`gh-approve:${i.runId}`;if(this.inFlight.has(a))continue;let l,c;try{[l,c]=await Promise.all([o.getReviews(i.owner,i.repo,i.prNumber),o.getPullRequest(i.owner,i.repo,i.prNumber)])}catch(k){m.warn(`review check failed for ${i.owner}/${i.repo}#${i.prNumber}: ${k instanceof Error?k.message:k}`);continue}if(!c)continue;let f={cfg:this.cfg,jiraFor:this.jiraFor,transport:this.transport};if(c.merged){m.info(`PR #${i.prNumber} for ${i.issueKey} was merged on GitHub - completing the run`),this.inFlight.add(a);try{await Qn(f,i.runId,c.headSha)}finally{this.inFlight.delete(a)}continue}if(c.state==="closed"){m.info(`PR #${i.prNumber} for ${i.issueKey} was closed unmerged on GitHub - failing the run`);let k=this.jiraFor(i.repoName),T=`PR #${i.prNumber} was closed on GitHub without merging`;await k.addComment(i.issueKey,`**Allwright: the pull request for this ticket was closed on GitHub without merging.**
|
|
670
679
|
|
|
671
680
|
PR: ${i.prUrl}
|
|
672
681
|
|
|
673
|
-
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
|
|
682
|
+
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 k.editLabels(i.issueKey,{add:[i.failedLabel]}).catch(()=>{}),this.transport.send({type:"run.status",runId:i.runId,status:"failed",error:T}),Pr(i.runId);continue}c.mergeableState==="dirty"?i.conflictNotified||(await this.jiraFor(i.repoName).addComment(i.issueKey,`**Allwright: the pull request for this ticket has merge conflicts.** The base branch moved after this change was built, so GitHub cannot merge it as-is.
|
|
674
683
|
|
|
675
684
|
PR: ${i.prUrl}
|
|
676
685
|
|
|
677
|
-
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,
|
|
686
|
+
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,_n(i),m.info(`merge conflicts on PR #${i.prNumber} for ${i.issueKey} - ticket notified`)):i.conflictNotified&&c.mergeableState!==null&&c.mergeableState!=="unknown"&&(i.conflictNotified=!1,_n(i));let p=l.filter(k=>k.state==="APPROVED"||k.state==="CHANGES_REQUESTED").sort((k,T)=>k.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}).
|
|
678
687
|
|
|
679
688
|
PR: ${i.prUrl}
|
|
680
689
|
|
|
681
|
-
Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),
|
|
690
|
+
Reply to the review on GitHub, or reject the run on the Allwright dashboard and re-trigger with new instructions. (run \`${i.runId}\`)`).catch(()=>{}),_n({...i,changesRequestedNotified:!0}),m.info(`changes requested on PR #${i.prNumber} for ${i.issueKey} - ticket notified`));continue}if(v.commitId===c.headSha){m.info(`PR #${i.prNumber} for ${i.issueKey} approved on GitHub by ${v.user} - completing the run`),this.inFlight.add(a);try{await Qn(f,i.runId,v.commitId)}catch(k){m.warn(`github-approval completion failed for ${i.runId}: ${k instanceof Error?k.message:k}`)}finally{this.inFlight.delete(a)}}}}}async sweepMergedPRs(){let e=Object.values(ti());if(!e.length)return;let t=pe()??this.cfg,n=new Map,s=a=>{let l=qe(t,a);if(!l)return null;let c=n.get(l);return c||n.set(l,c=new Fe(l)),c},i=20,o=720*3600*1e3;for(let a of e.slice(0,i)){let l=s(a.repoName);if(!l)continue;if(Date.now()-new Date(a.createdAt).getTime()>o){m.warn(`merge watch for ${a.issueKey} PR #${a.prNumber} is over 30 days old - dropping`),Wn(a.runId);continue}let c;try{c=await l.getPullRequest(a.owner,a.repo,a.prNumber)}catch(v){m.warn(`merge check failed for ${a.owner}/${a.repo}#${a.prNumber}: ${v instanceof Error?v.message:v}`);continue}if(!c){Wn(a.runId);continue}if(c.state==="open")continue;if(!c.merged){Wn(a.runId);continue}let f=this.jiraFor(a.repoName),p="";if(a.jiraTransitionOnMerge)try{p=await f.transitionByName(a.issueKey,a.jiraTransitionOnMerge)?`
|
|
682
691
|
|
|
683
692
|
Ticket moved to **${a.jiraTransitionOnMerge}**.`:`
|
|
684
693
|
|
|
685
|
-
Note: no transition named "${a.jiraTransitionOnMerge}" is available from this ticket's current status - move it manually.`}catch(
|
|
694
|
+
Note: no transition named "${a.jiraTransitionOnMerge}" is available from this ticket's current status - move it manually.`}catch(v){p=`
|
|
686
695
|
|
|
687
|
-
Note: the "${a.jiraTransitionOnMerge}" transition failed: ${
|
|
696
|
+
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.**
|
|
688
697
|
|
|
689
|
-
PR: ${a.prUrl} (merged at \`${
|
|
698
|
+
PR: ${a.prUrl} (merged at \`${c.headSha.slice(0,10)}\`)${p}
|
|
690
699
|
|
|
691
|
-
(run \`${a.runId}\`)`)}catch(
|
|
700
|
+
(run \`${a.runId}\`)`)}catch(v){m.warn(`could not post merge comment to ${a.issueKey}: ${v instanceof Error?v.message:v}`);continue}m.info(`PR #${a.prNumber} for ${a.issueKey} merged - ticket updated`),Wn(a.runId)}}async sweepNeedsInput(e){let t;try{t=await this.jiraOf(e).search(`project = "${e.jiraProjectKey}" AND labels = "${Dr.NEEDS_INPUT_LABEL}"`,10)}catch(s){m.warn(`needs-input sweep failed for ${e.jiraProjectKey}: ${s instanceof Error?s.message:s}`);return}if(!t.length)return;let n=kn();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:[Dr.NEEDS_INPUT_LABEL]}).catch(()=>{}),m.warn(`${s.key}: needs-input label with no local pending record - removed`);continue}let o=null;for(let a of i){let l=`resume:${a.runId}`;if(this.inFlight.has(l))continue;if(Date.now()-new Date(a.createdAt).getTime()>vg){this.inFlight.add(l),this.abandonStaleInput(a,e).finally(()=>this.inFlight.delete(l));continue}try{o=o??await this.jiraOf(e).getIssue(s.key)}catch(T){m.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=>!nt(T.body)&&new Date(T.created).getTime()>c);if(!f.length)continue;let p=es(f),v=o.attachments;this.inFlight.add(l),m.info(`reply received on ${s.key} - resuming run ${a.runId}`),await this.jiraOf(e).editLabels(s.key,{remove:[Dr.NEEDS_INPUT_LABEL]}).catch(T=>{m.warn(`could not remove needs-input label on ${s.key}: ${T}`)});let k={jiraFor:this.jiraFor,transport:this.transport,cfg:this.cfg};a.kind==="implement"?this.enqueueForRepo(a.baseRepoPath??a.repoPath,async()=>{try{await ac(a,p,v,k)}finally{this.inFlight.delete(l)}}):this.enqueueForRepo(a.repoPath,async()=>{try{await nc(a,p,v,k)}finally{this.inFlight.delete(l)}})}}}async abandonStaleInput(e,t){m.warn(`${e.issueKey}: needs-input unanswered for over ${hi}d - abandoning run ${e.runId}`);try{await this.jiraOf(t).addComment(e.issueKey,`**Allwright gave up waiting for an answer.**
|
|
692
701
|
|
|
693
|
-
No reply arrived within ${
|
|
702
|
+
No reply arrived within ${hi} 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:[Dr.NEEDS_INPUT_LABEL]})}catch(n){m.warn(`could not post staleness notice for ${e.issueKey}: ${n}`)}e.kind==="implement"&&await gn(e.baseRepoPath??e.repoPath,e.repoPath).catch(()=>{}),ot(e.runId),this.transport.send({type:"run.status",runId:e.runId,status:"failed",error:`no reply within ${hi} 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=di(t,i.components??[]);if("error"in a){this.warnRoutingOnce(`${e.id}:${i.issueKey}`,`${i.issueKey}: ${a.error}`);continue}let l=a.project,c=l.repoName===t.repoName?n:this.cfg.repos[l.repoName]?.path;if(!c){this.warnRoutingOnce(`${e.id}:${i.issueKey}:path`,`${i.issueKey}: routed to repo "${l.repoName}" but it has no local checkout - run: allwright repo add "${l.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"&&m.warn(`claim rejected for ${i.issueKey}: ${f.reason??"unknown"}`);continue}this.inFlight.add(o),m.info(`claimed run ${f.runId} for ${i.issueKey}`+(l.repoName!==t.repoName?` (routed \u2192 ${l.repoName})`:"")+(f.claudeProfile?` (claude profile "${f.claudeProfile}")`:""));let p=this.resolveClaudeProfile(f.runId,f.claudeProfile);this.enqueueForRepo(c,async()=>{try{await oi({runId:f.runId,rule:e,project:l,issueKey:i.issueKey,repoPath:c,cfg:this.cfg,jira:this.jiraOf(l),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()-jc;for(let l of i){let c=await this.jiraOf(t).getIssue(l.key);for(let f of c.comments){if(!f.body.toLowerCase().includes(o)||nt(f.body)||new Date(f.created).getTime()<a||!f.id)continue;let p=`respond:${f.id}`;if(this.inFlight.has(p))continue;let v=di(t,l.components??[]);if("error"in v){this.warnRoutingOnce(`${e.id}:${l.key}`,`${l.key}: ${v.error}`);continue}let k=v.project,T=k.repoName===t.repoName?n:this.cfg.repos[k.repoName]?.path;if(!T){this.warnRoutingOnce(`${e.id}:${l.key}:path`,`${l.key}: routed to repo "${k.repoName}" but it has no local checkout - run: allwright repo add "${k.repoName}" /path/to/checkout`);continue}let x=await this.transport.claimRun({ruleId:e.id,issueKey:l.key,issueSummary:l.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"&&m.warn(`respond claim rejected for ${l.key}: ${x.reason??"unknown"}`);continue}this.inFlight.add(p),m.info(`claimed respond run ${x.runId}: ${l.key} (comment ${f.id})`+(k.repoName!==t.repoName?` (routed \u2192 ${k.repoName})`:"")+(x.claudeProfile?` (claude profile "${x.claudeProfile}")`:""));let j={author:f.author,body:f.body},S=this.resolveClaudeProfile(x.runId,x.claudeProfile);this.enqueueForRepo(T,async()=>{try{await oi({runId:x.runId,rule:e,project:k,issueKey:l.key,repoPath:T,cfg:this.cfg,jira:this.jiraOf(k),transport:this.transport,question:j,claudeConfigDir:S,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){m.warn(`revision sweep failed for ${t.jiraProjectKey}: ${o instanceof Error?o.message:o}`);return}let i=n.keyword.toLowerCase();for(let o of s)try{let a=await this.jiraOf(t).getIssue(o.key),l=null;for(let f of a.comments)nt(f.body)&&(l=Math.max(l??0,new Date(f.created).getTime()));if(l===null||!a.comments.some(f=>!nt(f.body)&&f.body.toLowerCase().includes(i)&&new Date(f.created).getTime()>l))continue;await this.jiraOf(t).editLabels(o.key,{remove:[n.doneLabel]}),m.info(`revision requested on ${o.key} (new "${n.keyword}" after completion) - done label removed, rule will re-fire`)}catch(a){m.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.**
|
|
694
703
|
|
|
695
704
|
${a.reason}`+(i.requestedByAccountId?`
|
|
696
705
|
|
|
697
706
|
Jira account id: \`${i.requestedByAccountId}\``:"")+`
|
|
698
707
|
|
|
699
|
-
(run \`${a.runId}\`)`).catch(
|
|
700
|
-
`,{mode:384}),Mr.default.renameSync(t,e),Mr.default.chmodSync(e,384)}function $l(r,e,t,n){let s=ta(),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,Il)},{role:"agent",text:n.slice(0,Il)}),o.messages=o.messages.slice(-gg),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(c=>c.projectId===o.projectId).sort((c,l)=>l.updatedAt.localeCompare(c.updatedAt));for(let c of a.slice(mg))delete s[c.sessionId];yg(s)}function Pl(r){return Object.values(ta()).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 ra(r){return ta()[r]??null}var zr=R(require("node:fs"),1),Ue=R(require("node:path"),1),na=300,vg=4,jl=512*1024,bg=new Set([".git","node_modules","dist","build","out",".next","vendor","coverage",".venv","venv","__pycache__",".turbo",".cache"]),Ol=/\.mdx?$/i;function Nl(r){let e=Ue.default.resolve(r),t=[],n=(s,i)=>{if(i>vg||t.length>=na)return;let o;try{o=zr.default.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o){if(t.length>=na)return;if(!a.isFile()||!Ol.test(a.name))continue;let c=Ue.default.join(s,a.name);try{let l=zr.default.statSync(c);t.push({path:Ue.default.relative(e,c).split(Ue.default.sep).join("/"),sizeBytes:l.size,updatedAt:l.mtime.toISOString()})}catch{}}for(let a of o){if(t.length>=na)return;!a.isDirectory()||a.isSymbolicLink()||bg.has(a.name)||a.name.startsWith(".")||n(Ue.default.join(s,a.name),i+1)}};return n(e,0),t}function Ml(r,e){let t=Ue.default.resolve(r);if(!Ol.test(e))return{ok:!1,error:"only markdown files can be opened here"};let n=Ue.default.resolve(t,e);if(n!==t&&!n.startsWith(t+Ue.default.sep))return{ok:!1,error:"that path is outside the project checkout"};let s;try{s=zr.default.realpathSync(n)}catch{return{ok:!1,error:"file not found in this checkout"}}let i=(()=>{try{return zr.default.realpathSync(t)}catch{return t}})();if(s!==i&&!s.startsWith(i+Ue.default.sep))return{ok:!1,error:"that path links outside the project checkout"};let o;try{o=zr.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=zr.default.readFileSync(s,"utf8"),c=Buffer.byteLength(a,"utf8")>jl;return{ok:!0,path:Ue.default.relative(i,s).split(Ue.default.sep).join("/"),content:c?a.slice(0,jl):a,truncated:c}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"could not read the file"}}}var Ai=R(pe(),1);var li=R(require("node:fs"),1),zl=R(require("node:path"),1);var _g=w.object({id:w.string(),name:w.string().default(""),jiraProjectKey:w.string().default(""),repoName:w.string().default(""),jiraSiteUrl:w.string().default("")}),wg=w.array(_g);function Dl(){return zl.default.join(ee(),"synced-projects.json")}function Ll(r){try{let e=r.map(t=>({id:t.id,name:t.name,jiraProjectKey:t.jiraProjectKey,repoName:t.repoName,jiraSiteUrl:t.jiraSiteUrl??""}));li.default.mkdirSync(ee(),{recursive:!0}),li.default.writeFileSync(Dl(),JSON.stringify(e,null,2),{mode:384})}catch{}}function kg(){try{let r=wg.safeParse(JSON.parse(li.default.readFileSync(Dl(),"utf8")));return r.success?r.data:[]}catch{return[]}}function Ul(r){return kg().find(e=>e.repoName===r)??null}var By=R(Nd(),1),Ky=R(bi(),1),Zy=R(Tn(),1),Vy=R(pa(),1),Hy=R(ya(),1),Gy=R(Sa(),1),Kd=R(Si(),1),Wy=R(Bd(),1);var xa=Kd.default;var os=R(require("node:crypto"),1),ot=R(pe(),1);function Jy(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function Ca(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 Yy(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=ot.ProjectConfig.safeParse(a);c.success?n.push(c.data):Ca(t,"project","",c.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let c=ot.RuleConfig.safeParse(a);c.success?s.push(c.data):Ca(t,"rule",Jy(a),c.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let c=ot.EnvironmentConfig.safeParse(a);c.success?i.push(c.data):Ca(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 Xy=2e4,Qy=6e4,ev=5e3,xi=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===xa.OPEN}connect(){if(this.closed)return;g.info(`connecting to control plane at ${this.wsUrl}`);let e=new xa(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:ot.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()})},Xy)}),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,ot.parseServerMsg)(n)}catch(i){let o=Yy(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,Qy)}),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==="runner.update")return this.events.onRunnerUpdate(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>=ev){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=os.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=os.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:os.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=os.default.randomUUID(),n=await new Promise(s=>{let i=setTimeout(()=>{this.pending.delete(t),s(null)},15e3);this.pending.set(t,{resolve:s,timer:i}),this.sendNow({type:"deploy.claim",requestId:t,...e})});return!n||n.type!=="deploy.claim.result"?{accepted:!1,reason:"deploy authorization timed out"}:{accepted:n.accepted,runId:n.runId,environment:n.environment,reason:n.reason,code:n.code}}sendDeploySuggestResult(e,t){this.send({type:"deploy.suggest.result",requestId:e,...t})}sendChatTurnResult(e,t){this.send({type:"chat.turn.result",requestId:e,...t,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??""})}sendSetupClaudeMdGenerateResult(e,t){this.send({type:"setup.claudemd.generate.result",requestId:e,ok:t.ok,error:t.error,content:t.content??""})}sendSetupClaudeMdSaveResult(e,t){this.send({type:"setup.claudemd.save.result",requestId:e,ok:t.ok,error:t.error,note:t.note??""})}sendSetupStatusResult(e,t){this.send({type:"setup.status.result",requestId:e,ok:t.ok,error:t.error,jiraConfigured:t.jiraConfigured??!1,jiraEmail:t.jiraEmail??"",claude:t.claude,githubTokenSet:t.githubTokenSet??!1,githubLogin:t.githubLogin??"",deploysEnabled:t.deploysEnabled??!1,jiraUserCount:t.jiraUserCount??0,repos:t.repos??[]})}sendEnvPreflightResult(e,t){this.send({type:"env.preflight.result",requestId:e,...t,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 Br=R(require("node:fs"),1),Ea=R(require("node:path"),1),Ci=require("node:child_process"),Vd=require("node:util");xr();Lt();var Hd=R(pe(),1),Zd=(0,Vd.promisify)(Ci.execFile);function tv(r){try{return new URL(r).host}catch{return r}}function rv(r){try{return(0,Ci.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function Ei(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),b=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 ${b} is for ${p}.`,fix:[`allwright jira set "${e.repoName}"`],fixNote:`"${e.repoName}" in that command is this project's REPO NAME - the label that ties the project here to a checkout on the server (the same one used with allwright repo add). Not the Jira key, not a folder path. The command asks for three things for ${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 T=new Ie(o);try{let S=await T.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${S.displayName} on ${p} (${b})`});try{await T.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(C){s.push({name:"jira-project",ok:!1,detail:`cannot read project ${e.jiraProjectKey} on ${p}: ${as(C)}`})}}catch(S){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${as(S)}`})}}}let c=r.repos[e.repoName];if(c&&Br.default.existsSync(c.path)){let p=Ea.default.join(c.path,"CLAUDE.md"),b=Br.default.existsSync(p)&&Br.default.readFileSync(p,"utf8").trim().length>0;s.push({name:"memory-file",kind:"content",ok:b,detail:b?"CLAUDE.md present - the agent has project memory":"MISSING: CLAUDE.md at the repo root. Rules can't be enabled until the project has a memory file - it is what makes every run smarter than the last.",...b?{}:{fixNote:"No command needed: the setup step below this one drafts CLAUDE.md by reading the repo, shows it to you, and commits it when you approve. Writing it by hand works too - any honest description of what the project is and how it is built beats an empty file."}});let T=ea(c.path);s.push({name:"deploy-doc",kind:"content",ok:T!==null,detail:T?`${T.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.",...T?{}:{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(!Br.default.existsSync(c.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${c.path}`});else{let p=Br.default.existsSync(Ea.default.join(c.path,".git"));s.push({name:"repo-path",ok:!0,detail:`${c.path}${p?" (git checkout)":" (warning: not a git checkout)"}`})}let l=[...new Set([e.defaultAgent||"claude-code",...n??[]])];for(let p of l){let b=vt(r,p),T=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:S}=await Zd(b,["--version"],{timeout:15e3});s.push({name:T,ok:!0,detail:S.trim().slice(0,100)})}catch(S){s.push({name:T,ok:!1,detail:`cannot run "${b}" for agent "${p}": ${as(S)}`,fixNote:p==="claude-code"?"Install Claude Code on this server (npm install -g @anthropic-ai/claude-code) and log it in.":`Install the "${p}" CLI on this server, or point the runner at its binary in the config's agents section.`})}}try{let{stdout:p}=await Zd("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: ${as(p)}`})}let f=De(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 ${Hd.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(()=>(nt(),Ir)),b=new p(f),T=await b.whoami(),S=c&&Br.default.existsSync(c.path)?rv(c.path):null,C=S?Ve(S):null;if(!C)s.push({name:"github-token",ok:!0,detail:`authenticated as ${T} - repo access not checked (no local checkout yet)`});else{let k=await b.repoAccess(C.owner,C.repo);s.push({name:"github-token",ok:k.ok&&k.canPush,detail:k.ok?k.canPush?`${T} has push access to ${C.owner}/${C.repo}`:`${T} can read ${C.owner}/${C.repo} but NOT push to it - implement rules will fail at the push`:`${T} cannot see ${C.owner}/${C.repo}: ${k.error}`,...k.ok&&k.canPush?{}:{fix:[`allwright github set "${e.repoName}"`],fixNote:`Two ways: edit the existing PAT on GitHub and add ${C.owner}/${C.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:as(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 b=or(r,e.repoName,p.name),T=p.requiredSecrets.filter(S=>!b[S]&&!process.env[S]);s.push({name:`env:${p.name}`,ok:T.length===0,detail:T.length?`missing secret(s): ${T.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${T[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function as(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var he=new Va;he.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(Ms);function th(r){g.info(`Create the token at ${Ai.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Ai.GITHUB_TOKEN_PERMISSIONS.steps)g.info(` - ${e}`);g.info(Ai.GITHUB_TOKEN_PERMISSIONS.note),g.info(`Then paste it below for ${r}.`)}he.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",eh.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=Zr.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=Ji.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),l=await new Ie(c.jira).myself();g.info(`Jira credential OK - authenticated as ${l.displayName}`),c=await Lu(c,s),g.info(`Enrolled as runner "${c.runnerName}" (${c.runnerId})`),g.info(`Credentials saved to ${$t()} (mode 600, this machine only)`),g.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var Ia=he.command("repo").description("Map control-plane repo names to local checkouts");Ia.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=re();t.repos[r]={path:e},ce(t),g.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(Lt(),Wu));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?`)}});Ia.command("list").description("Show configured repo mappings").action(()=>{let r=re(),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 rh=he.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");rh.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=re(),t=e.claudeProfiles[r]?.configDir??`${$t().replace(/runner\.json$/,"")}claude-profiles/${r}`;at.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},ce(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,ut.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),g.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});rh.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=re(),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=at.default.existsSync(n.configDir)&&at.default.readdirSync(n.configDir).length>0;g.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});Ia.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=re();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),ce(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 Ra=he.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Ra.command("install").description("Install + start the systemd service - 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(`
|
|
701
|
-
`+Eo(Co()));return}rc(g)});Ra.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>nc(g));Ra.command("status").description("systemctl status for the runner service").action(()=>{(0,ut.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});he.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,ut.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 cs=he.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");cs.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=re();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=Ul(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 Ie(a).myself();if(e.repos[r].jira=a,ce(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 Ie(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.`)}g.info("Restart the background runner for this to take effect: allwright stop && allwright start");return}catch{g.info(`The token already on this server does not work on ${n} - asking for one that does.`)}}let o=Zr.default.createInterface({input:process.stdin,output:process.stdout});try{let c=(await o.question(s?`Jira base URL [${s}]: `:"Jira base URL for this repo (https://yourorg.atlassian.net): ")).trim()||s,f=(await o.question(i?`Jira account email [${i}]: `:"Jira account email: ")).trim()||i,p=(await o.question("Jira API token (id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!c||!f||!p)throw new Error("all three values are required");let b={baseUrl:c,email:f,apiToken:p},T=await new Ie(b).myself();g.info(`Jira credential OK - authenticated as ${T.displayName} on ${c}`),e.repos[r].jira=b,ce(e),g.info(`Saved: repo "${r}" now polls ${c} (other repos keep the runner-wide credential)`),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")}finally{o.close()}});cs.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=re();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)"}`)});cs.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=re(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Zr.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(l=>l.jira)].filter(l=>!!l),a=new Set,c=!1;for(let l of o)if(!a.has(l.baseUrl)){a.add(l.baseUrl);try{let f=await new Ie({baseUrl:l.baseUrl,email:s,apiToken:i}).myself();g.info(`${l.baseUrl}: OK - authenticated as ${f.displayName}`),c=!0}catch{g.warn(`${l.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},ce(e),g.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});cs.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=re(),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}`)});cs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=re(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],ce(e),g.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var $n=he.command("github").description("GitHub credential for implement-mode rules");$n.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=Zr.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??void th("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(()=>(nt(),Ir)),s=await new n(t).whoami(),i=re();i.github={token:t,login:s},ce(i),g.info(`GitHub token OK - authenticated as ${s}`),g.info(`Saved to ${$t()} (mode 600, this machine only)`)}finally{e.close()}});$n.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=re();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&&at.default.existsSync(n))try{let i=(0,ut.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(()=>(nt(),Ir)),c=new a(t),l=await c.repoAccess(o.owner,o.repo);if(l.ok&&l.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=Zr.default.createInterface({input:process.stdin,output:process.stdout});try{th(`"${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(()=>(nt(),Ir)),a=await new o(i).whoami();e.repos[r].github={token:i,login:a},ce(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()}});$n.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=re(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Zr.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(()=>(nt(),Ir)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},ce(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()}});$n.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=re(),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`)});$n.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=re(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],ce(e),g.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});$n.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=re();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 Aa=he.command("audit").description("Recurring specialist audits on this runner");Aa.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=re();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}],ce(n),g.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});Aa.command("schedules").description("List scheduled audits").action(()=>{let r=re();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`)});Aa.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=re(),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");ce(t),g.info("Removed. Restart the runner to apply.")});var $a=he.command("deploy").description("Deployment settings for this machine");$a.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=re();r.deploy={enabled:!0},ce(r),g.info("deployments ENABLED on this runner"),g.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});$a.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=re();r.deploy={enabled:!1},ce(r),g.info("deployments DISABLED on this runner"),g.info("Restart the background runner for this to take effect: allwright stop && allwright start")});$a.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=re();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 Pa=he.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");Pa.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=re(),s=ks(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 l=a.slice(0,c).trim();i.secrets[l]=a.slice(c+1),o.push(l)}n.environments[s]=i,ce(n),g.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),g.info(`Saved to ${$t()} (mode 600, this machine only)`),g.info("Restart the background runner to pick these up: allwright stop && allwright start")});Pa.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=re(),s=ks(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,ce(n),g.info(`removed ${t.join(", ")} from ${s}`)});Pa.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=re(),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)"}`)});he.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=iu(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 ${An.default.basename(e.file)}`)}catch(e){g.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});he.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=rn();if(e&&nn(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=ou(r);g.info(`Restored ${t.restored.length} entries into ${ee()}`),t.previousDir&&g.info(`Previous config kept at ${t.previousDir}`),g.info("Start the runner and it will reconnect with the restored identity.")}catch(t){g.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});he.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=re(),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 Ei(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 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=fu();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",Qi);let t=new Ie(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 Ie(m),n.set(h,y)),y},i=new Map,o=(h,m)=>{let y=Xu(le()??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 x=`${y.creds.baseUrl}:${y.creds.email}:${y.creds.apiToken.slice(-6)}`,j=i.get(x);return j||(j=new Ie(y.creds),i.set(x,j)),{jira:j,authored:!0}}}},a=new URL("/api/runner/ws",r.controlPlaneUrl);a.protocol=a.protocol==="https:"?"wss:":"ws:";let c=[],l=[],f=[],p,b={cfg:r,jiraFor:s,transport:null},T=new Set,S=h=>{let m=c.find(x=>x.id===h),y=m&&r.repos[m.repoName];return m&&y?{project:m,repoPath:y.path}:null},C={cfg:r,jiraFor:s,get transport(){return b.transport},lookup:(h,m)=>{let y=S(h),x=f.find(j=>j.projectId===h&&j.name===m);return y&&x?{...y,environment:x}:null}},k=new xi(a.toString(),r.runnerToken,{runnerVersion:Ms},{onConfig:h=>{c=h.projects,Ll(h.projects),l=h.rules,f=h.environments,p.setConfig(h.projects,h.rules,h.pollingPaused,h.environments)},onDeployFix:async h=>{let m=S(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=He(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 x=await Tl({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,x)},onProjectTest:async h=>{let m=c.find(x=>x.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 Ei(le()??r,m,f.filter(x=>x.projectId===m.id),l.filter(x=>x.projectId===m.id).map(x=>"agent"in x.action?x.action.agent:"").filter(Boolean));k.sendProjectTestResult(h.requestId,y.every(x=>x.ok),y)},onRuleDiagnose:async h=>{let m=l.find(G=>G.id===h.ruleId),y=m&&c.find(G=>G.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 x=await Ei(le()??r,y,m.action.type==="deploy"?f.filter(G=>G.projectId===y.id):[]),j=m.action.type==="implement"?x:x.filter(G=>G.name!=="github-token"),{matchedCount:z,excludedCount:D,excludedSample:X}=await p.diagnoseRule(m,y);k.sendRuleDiagnoseResult(h.requestId,{checks:j,matchedCount:z,excludedCount:D,excludedSample:X})},onCancel:h=>{Jc(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(Qo(h)){vl(C,h).catch(y=>g.error(`deploy approval crashed for ${h}: ${y instanceof Error?y.stack:y}`));return}Yn(b,h,m).catch(y=>g.error(`approval handling crashed for ${h}: ${y instanceof Error?y.stack:y}`))},onRetryPush:h=>{let m=Xs(h),y=()=>ol(b,h).catch(x=>g.error(`retry push crashed for ${h}: ${x instanceof Error?x.stack:x}`));m?p.runOnRepoQueue(m.baseRepoPath,y):y()},onRejected:h=>{if(Qo(h)){bl(C,h).catch(m=>g.error(`deploy rejection crashed for ${h}: ${m instanceof Error?m.stack:m}`));return}il(b,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=S(h.projectId);if(!y){let x="this runner has no local checkout mapped for that project - run: allwright repo add <repoName> /path/to/checkout";g.error(`deploy ${h.runId}: ${x}`),k.send({type:"run.status",runId:h.runId,status:"failed",error:x});return}g.info(`deploy ${h.runId} requested from the dashboard: ${h.issueKey} \u2192 ${h.environment.name}`),p.runOnEnvironmentQueue(h.environment.id,()=>oi({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(x=>g.error(`deploy crashed for ${h.runId}: ${x instanceof Error?x.stack:x}`)))},onDeploySuggest:async h=>{let m=S(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=He(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 x=await xl({agent:y,repoPath:m.repoPath,repoName:m.project.repoName,environmentName:h.environmentName,notes:h.notes,timeoutSeconds:h.timeoutSeconds,cfg:r});k.sendDeploySuggestResult(h.requestId,x)},onEnvPreflight:async h=>{let m=S(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 Sl({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=S(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,Ri.randomUUID)(),x=!h.sessionId;if((x?0:ra(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 z=h.files.length?cu(m.repoPath,h.requestId,h.files):null,D="```",X=x?`You are the project assistant for "${m.project.name}" - this working directory is its repository, and you have read-only access.
|
|
708
|
+
(run \`${a.runId}\`)`).catch(c=>m.warn(`could not post refusal to ${i.issueKey}: ${c}`)),m.warn(`deploy refused for ${i.issueKey}: ${a.reason}`)):a.reason&&m.warn(`deploy claim rejected for ${i.issueKey}: ${a.reason}`);continue}let l=a.environment;this.inFlight.add(o),m.info(`claimed deploy ${a.runId}: ${i.issueKey} \u2192 ${l.name}`),this.enqueue(this.envQueues,l.id,async()=>{try{await li({runId:a.runId,project:t,environment:l,issueKey:i.issueKey,issueSummary:i.summary,repoPath:n,cfg:this.cfg,jira:this.jiraOf(t),transport:this.transport,requestedBy:i.requestedByDisplayName})}finally{this.inFlight.delete(o)}})}}async matchCommentDeploys(e,t){let n=e.trigger,s=e.action;if(n.type!=="comment_keyword"||s.type!=="deploy")return[];let i=await this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND updated >= "-2d" ORDER BY updated DESC`,15),o=n.keyword.toLowerCase(),a=Date.now()-jc,l=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 k of v.comments){if(!k.body.toLowerCase().includes(o)||nt(k.body)||new Date(k.created).getTime()<a||!k.id)continue;let T=s.envSelection==="fixed"?c:wg(k.body,n.keyword,l);f.push({issueKey:p.key,summary:p.summary,environmentName:T,requestedByAccountId:k.authorAccountId??void 0,requestedByDisplayName:k.author,dedupKey:`deploy:comment:${k.id}`,fingerprint:`comment "${n.keyword}" by ${k.author} at ${k.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 l of i){let c=await this.jiraOf(t).lastEnteredStatus(l.key,n.status);c&&a.push({issueKey:l.key,summary:l.summary,environmentName:o,requestedByAccountId:c.authorAccountId??void 0,requestedByDisplayName:c.author,dedupKey:`deploy:status:${e.id}:${l.key}:${c.at}`,fingerprint:`moved to "${n.status}" by ${c.author} at ${c.at}`})}return a}fixedEnvironmentName(e){return e?this.environments.find(t=>t.id===e)?.name??"":""}async matchLabelTrigger(e,t){let n=e.trigger;if(n.type!=="label_added")return[];let s=`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}", "${Dr.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}", "${Dr.NEEDS_INPUT_LABEL}")) ORDER BY updated DESC`,i=await this.jiraOf(t).search(s,10),o=n.keyword.toLowerCase(),a=[];for(let l of i){let f=[...(await this.jiraOf(t).getIssue(l.key)).comments].reverse().find(p=>p.body.toLowerCase().includes(o)&&!nt(p.body));f&&a.push({issueKey:l.key,components:l.components,summary:l.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 l=n.type==="status_changed"?await this.matchStatusDeploys(e,t):await this.matchCommentDeploys(e,t),c=l.filter(f=>f.environmentName);return{matchedCount:c.length,excludedCount:l.length-c.length,excludedSample:l.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[l,c]=await Promise.all([this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels not in ("${n.doneLabel}", "${n.failedLabel}")`,50),this.jiraOf(t).search(`project = "${t.jiraProjectKey}" AND labels = "${n.label}" AND labels in ("${n.doneLabel}", "${n.failedLabel}")`,50)]);return{matchedCount:l.length,excludedCount:c.length,excludedSample:c.slice(0,5).map(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 l of o)(await this.jiraOf(t).getIssue(l.key)).comments.some(f=>f.body.toLowerCase().includes(s))&&a.push(l.key);return{matchedCount:i.length,excludedCount:a.length,excludedSample:a.slice(0,5)}}enqueueForRepo(e,t){this.enqueue(this.repoQueues,e,t)}runOnRepoQueue(e,t){this.enqueue(this.repoQueues,e,t)}runOnEnvironmentQueue(e,t){this.enqueue(this.envQueues,e,t)}enqueue(e,t,n){let i=(e.get(t)??Promise.resolve()).then(async()=>{this.activeWork++;try{await n()}finally{this.activeWork--}}).catch(o=>{m.error(`run crashed: ${o instanceof Error?o.stack:o}`)});e.set(t,i)}};function wg(r,e,t){let n=r.toLowerCase().indexOf(e.toLowerCase());if(n<0)return"";let i=r.slice(n+e.length).split(/[^\w.-]+/).filter(Boolean);for(let o of i){let a=t.find(l=>l.toLowerCase()===o.toLowerCase());if(a)return a}for(let o of i)if(!bg.has(o.toLowerCase()))return o;return""}var Lr=R(require("node:fs"),1),Nc=R(require("node:path"),1);var _g=_.object({role:_.enum(["user","agent"]),text:_.string()}),kg=_.object({sessionId:_.string(),projectId:_.string(),title:_.string().default(""),updatedAt:_.string(),messages:_.array(_g).default([])}),Sg=_.record(kg),Tg=10,xg=200,Oc=2e4;function Mc(){return Nc.default.join(te(),"chat-sessions.json")}function oa(){let r=Mc();if(!Lr.default.existsSync(r))return{};try{return Sg.parse(JSON.parse(Lr.default.readFileSync(r,"utf8")))}catch{return{}}}function Cg(r){Lr.default.mkdirSync(te(),{recursive:!0,mode:448});let e=Mc(),t=e+".tmp";Lr.default.writeFileSync(t,JSON.stringify(r,null,2)+`
|
|
709
|
+
`,{mode:384}),Lr.default.renameSync(t,e),Lr.default.chmodSync(e,384)}function zc(r,e,t,n){let s=oa(),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,Oc)},{role:"agent",text:n.slice(0,Oc)}),o.messages=o.messages.slice(-xg),o.updatedAt=new Date().toISOString(),s[e]=o;let a=Object.values(s).filter(l=>l.projectId===o.projectId).sort((l,c)=>c.updatedAt.localeCompare(l.updatedAt));for(let l of a.slice(Tg))delete s[l.sessionId];Cg(s)}function Dc(r){return Object.values(oa()).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 aa(r){return oa()[r]??null}var Ur=R(require("node:fs"),1),Be=R(require("node:path"),1),ua=300,Eg=4,Lc=512*1024,Ig=new Set([".git","node_modules","dist","build","out",".next","vendor","coverage",".venv","venv","__pycache__",".turbo",".cache"]),Uc=/\.mdx?$/i;function qc(r){let e=Be.default.resolve(r),t=[],n=(s,i)=>{if(i>Eg||t.length>=ua)return;let o;try{o=Ur.default.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o){if(t.length>=ua)return;if(!a.isFile()||!Uc.test(a.name))continue;let l=Be.default.join(s,a.name);try{let c=Ur.default.statSync(l);t.push({path:Be.default.relative(e,l).split(Be.default.sep).join("/"),sizeBytes:c.size,updatedAt:c.mtime.toISOString()})}catch{}}for(let a of o){if(t.length>=ua)return;!a.isDirectory()||a.isSymbolicLink()||Ig.has(a.name)||a.name.startsWith(".")||n(Be.default.join(s,a.name),i+1)}};return n(e,0),t}function Fc(r,e){let t=Be.default.resolve(r);if(!Uc.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=Ur.default.realpathSync(n)}catch{return{ok:!1,error:"file not found in this checkout"}}let i=(()=>{try{return Ur.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=Ur.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=Ur.default.readFileSync(s,"utf8"),l=Buffer.byteLength(a,"utf8")>Lc;return{ok:!0,path:Be.default.relative(i,s).split(Be.default.sep).join("/"),content:l?a.slice(0,Lc):a,truncated:l}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"could not read the file"}}}var Ni=R(ve(),1);var pi=R(require("node:fs"),1),Bc=R(require("node:path"),1);var Rg=_.object({id:_.string(),name:_.string().default(""),jiraProjectKey:_.string().default(""),repoName:_.string().default(""),jiraSiteUrl:_.string().default("")}),Ag=_.array(Rg);function Kc(){return Bc.default.join(te(),"synced-projects.json")}function Zc(r){try{let e=r.map(t=>({id:t.id,name:t.name,jiraProjectKey:t.jiraProjectKey,repoName:t.repoName,jiraSiteUrl:t.jiraSiteUrl??""}));pi.default.mkdirSync(te(),{recursive:!0}),pi.default.writeFileSync(Kc(),JSON.stringify(e,null,2),{mode:384})}catch{}}function $g(){try{let r=Ag.safeParse(JSON.parse(pi.default.readFileSync(Kc(),"utf8")));return r.success?r.data:[]}catch{return[]}}function Gc(r){return $g().find(e=>e.repoName===r)??null}var Xy=R(qd(),1),Qy=R(Si(),1),ev=R(Cn(),1),tv=R(ba(),1),rv=R(ka(),1),nv=R(Ia(),1),Jd=R(Ei(),1),sv=R(Wd(),1);var Aa=Jd.default;var us=R(require("node:crypto"),1),ut=R(ve(),1);function iv(r){let e=r&&typeof r=="object"&&"name"in r?String(r.name):null;return e?`"${e}"`:"(unnamed)"}function $a(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 ov(r){if(!r||typeof r!="object"||r.type!=="config")return null;let e=r,t=[],n=[];for(let a of Array.isArray(e.projects)?e.projects:[]){let l=ut.ProjectConfig.safeParse(a);l.success?n.push(l.data):$a(t,"project","",l.error.issues[0]?.message??"invalid shape")}let s=[];for(let a of Array.isArray(e.rules)?e.rules:[]){let l=ut.RuleConfig.safeParse(a);l.success?s.push(l.data):$a(t,"rule",iv(a),l.error.issues[0]?.message??"invalid shape")}let i=[];for(let a of Array.isArray(e.environments)?e.environments:[]){let l=ut.EnvironmentConfig.safeParse(a);l.success?i.push(l.data):$a(t,"environment","",l.error.issues[0]?.message??"invalid shape")}return{msg:{type:"config",projects:n,rules:s,environments:i,pollingPaused:typeof e.pollingPaused=="boolean"?e.pollingPaused:!1},warnings:t}}var av=2e4,uv=6e4,lv=5e3,Ri=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===Aa.OPEN}connect(){if(this.closed)return;m.info(`connecting to control plane at ${this.wsUrl}`);let e=new Aa(this.wsUrl,{headers:{authorization:`Bearer ${this.runnerToken}`}});this.ws=e,e.on("open",()=>{this.backoffMs=1e3,this.sendNow({type:"hello",protocolVersion:ut.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()})},av)}),e.on("message",t=>{let n;try{n=JSON.parse(t.toString())}catch(i){m.warn(`ignoring malformed server message (bad JSON): ${i}`);return}let s;try{s=(0,ut.parseServerMsg)(n)}catch(i){let o=ov(n);if(!o){m.warn(`ignoring malformed server message: ${i}`);return}for(let a of o.warnings)m.warn(a);m.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)m.error("control plane rejected this runner version (protocol mismatch). Update with: npm install -g @ticketpilot/runner");else if(t===4003){m.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);m.warn(`disconnected (code ${t}); reconnecting in ${Math.round(s/1e3)}s`),setTimeout(()=>this.connect(),s),this.backoffMs=Math.min(this.backoffMs*2,uv)}),e.on("error",t=>{m.warn(`websocket error: ${t.message}`)})}handle(e){if(e.type==="hello.ack"){this.bootAnnounced=!0,m.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==="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>=lv){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=us.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=us.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:us.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=us.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??""})}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 Ai=R(require("node:fs"),1),Pn=R(require("node:path"),1),Xd=require("node:child_process"),cv=/\.mdx?$/i,Yd=6,dv=/^[\w.\- ()]+$/;function hv(r,e){let t=e.trim().replace(/\\/g,"/").replace(/^\.\//,"");if(!t)return{ok:!1,error:"empty path"};if(Pn.default.isAbsolute(t))return{ok:!1,error:"path must be repo-relative"};if(!cv.test(t))return{ok:!1,error:"only markdown files (.md) can be saved"};let n=t.split("/");if(n.length>Yd)return{ok:!1,error:`path deeper than ${Yd} levels`};for(let o of n)if(o==="."||o===".."||!dv.test(o))return{ok:!1,error:`invalid path segment "${o}"`};if(n[0]===".git")return{ok:!1,error:"cannot write under .git"};let s=Pn.default.resolve(r),i=Pn.default.resolve(s,t);return i!==s&&!i.startsWith(s+Pn.default.sep)?{ok:!1,error:"path escapes the checkout"}:{ok:!0,abs:i,rel:t}}async function Pa(r){let e=hv(r.repoPath,r.relPath);if(!e.ok)return{ok:!1,error:e.error};if(Ai.default.existsSync(e.abs)&&!r.overwrite)return{ok:!1,error:`${e.rel} already exists in this checkout`};Ai.default.mkdirSync(Pn.default.dirname(e.abs),{recursive:!0}),Ai.default.writeFileSync(e.abs,r.content.endsWith(`
|
|
710
|
+
`)?r.content:r.content+`
|
|
711
|
+
`);let t=s=>new Promise((i,o)=>{(0,Xd.execFile)("git",["-C",r.repoPath,...s],{timeout:12e4},(a,l,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 Gr=R(require("node:fs"),1),ja=R(require("node:path"),1),$i=require("node:child_process"),eh=require("node:util");Ir();Ut();var th=R(ve(),1),Qd=(0,eh.promisify)($i.execFile);function fv(r){try{return new URL(r).host}catch{return r}}function pv(r){try{return(0,$i.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim()}catch{return null}}async function Pi(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=fv(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 k=new Re(o);try{let T=await k.myself();s.push({name:"jira-auth",ok:!0,detail:`authenticated as ${T.displayName} on ${p} (${v})`});try{await k.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}: ${ls(x)}`})}}catch(T){s.push({name:"jira-auth",ok:!1,detail:`Jira auth failed on ${p}: ${ls(T)}`})}}}let l=r.repos[e.repoName];if(l&&Gr.default.existsSync(l.path)){let p=ja.default.join(l.path,"CLAUDE.md"),v=Gr.default.existsSync(p)&&Gr.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 k=ci(l.path);s.push({name:"deploy-doc",kind:"content",ok:k!==null,detail:k?`${k.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.",...k?{}:{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(!l)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(!Gr.default.existsSync(l.path))s.push({name:"repo-path",ok:!1,detail:`path does not exist: ${l.path}`});else{let p=Gr.default.existsSync(ja.default.join(l.path,".git"));s.push({name:"repo-path",ok:!0,detail:`${l.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=vt(r,p),k=p==="claude-code"?"claude-code":`agent:${p}`;try{let{stdout:T}=await Qd(v,["--version"],{timeout:15e3});s.push({name:k,ok:!0,detail:T.trim().slice(0,100)})}catch(T){s.push({name:k,ok:!1,detail:`cannot run "${v}" for agent "${p}": ${ls(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 Qd("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: ${ls(p)}`})}let f=qe(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 ${th.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(()=>(it(),$r)),v=new p(f),k=await v.whoami(),T=l&&Gr.default.existsSync(l.path)?pv(l.path):null,x=T?He(T):null;if(!x)s.push({name:"github-token",ok:!0,detail:`authenticated as ${k} - repo access not checked (no local checkout yet)`});else{let j=await v.repoAccess(x.owner,x.repo);s.push({name:"github-token",ok:j.ok&&j.canPush,detail:j.ok?j.canPush?`${k} has push access to ${x.owner}/${x.repo}`:`${k} can read ${x.owner}/${x.repo} but NOT push to it - implement rules will fail at the push`:`${k} cannot see ${x.owner}/${x.repo}: ${j.error}`,...j.ok&&j.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:ls(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=ar(r,e.repoName,p.name),k=p.requiredSecrets.filter(T=>!v[T]&&!process.env[T]);s.push({name:`env:${p.name}`,ok:k.length===0,detail:k.length?`missing secret(s): ${k.join(", ")} - allwright env set "${e.repoName}" "${p.name}" ${k[0]}=...`:`${p.steps.length} step(s), ${p.requiredSecrets.length} secret(s) present`+(p.branch?`, deploys origin/${p.branch}`:"")})}}return s}function ls(r){return(r instanceof Error?r.message:String(r)).slice(0,300)}var ge=new Qa;ge.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(Ds);function lh(r){m.info(`Create the token at ${Ni.GITHUB_TOKEN_PERMISSIONS.where}`);for(let e of Ni.GITHUB_TOKEN_PERMISSIONS.steps)m.info(` - ${e}`);m.info(Ni.GITHUB_TOKEN_PERMISSIONS.note),m.info(`Then paste it below for ${r}.`)}ge.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",uh.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=Hr.default.createInterface({input:process.stdin,output:process.stdout}),t=async(n,s,i=!1)=>{if(s)return s;let o=await e.question(`${n}: `);if(!o.trim())throw new Error(`${n} is required`);return o.trim()};try{let n=await t("Control plane URL",r.cpUrl),s=await t("Enrolment token (from the web UI)",r.enrollToken),i=await t("Jira base URL (https://yourorg.atlassian.net)",r.jiraUrl),o=await t("Jira account email",r.jiraEmail),a=await t("Jira API token (create at id.atlassian.com/manage-profile/security/api-tokens)",r.jiraToken,!0),l=to.parse({controlPlaneUrl:n,runnerName:r.name,jira:{baseUrl:i,email:o,apiToken:a}}),c=await new Re(l.jira).myself();m.info(`Jira credential OK - authenticated as ${c.displayName}`),l=await Gu(l,s),m.info(`Enrolled as runner "${l.runnerName}" (${l.runnerId})`),m.info(`Credentials saved to ${Pt()} (mode 600, this machine only)`),m.info("Next: map your repo with `allwright repo add <repoName> <localPath>`, then `allwright start`")}finally{e.close()}});var Oa=ge.command("repo").description("Map control-plane repo names to local checkouts");Oa.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=re();t.repos[r]={path:e},he(t),m.info(`mapped repo "${r}" -> ${e}`);try{let{originUrl:n}=await Promise.resolve().then(()=>(Ut(),rl));m.info(` origin remote: ${await n(e)} - make sure this is the repo you meant`)}catch{m.warn(` could not read an origin remote at ${e} - is it a git checkout?`)}});Oa.command("list").description("Show configured repo mappings").action(()=>{let r=re(),e=Object.entries(r.repos);if(!e.length)return m.info("no repos mapped yet");for(let[t,n]of e)m.info(`${t} -> ${n.path}`)});var ch=ge.command("claude").description("Per-user Claude login profiles - each teammate's runs bill their OWN Claude account");ch.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=re(),t=e.claudeProfiles[r]?.configDir??`${Pt().replace(/runner\.json$/,"")}claude-profiles/${r}`;Ct.default.mkdirSync(t,{recursive:!0,mode:448}),e.claudeProfiles[r]={configDir:t},he(e),m.info(`profile "${r}" -> ${t}`),m.info("Opening Claude Code with this profile. In it: run /login, complete the browser flow"),m.info("with the account this profile belongs to, then exit Claude (ctrl+c twice or /exit).");let n=(0,Et.spawn)(e.claudeBin,[],{env:{...process.env,CLAUDE_CONFIG_DIR:t},stdio:"inherit"});await new Promise(s=>n.on("exit",()=>s())),m.info(`Done. Assign it on the dashboard: Team -> the user -> Claude profile = "${r}".`),jn()});ch.command("list").description("Show configured Claude profiles and whether each looks logged in").action(()=>{let r=re(),e=Object.entries(r.claudeProfiles);if(m.info("default: this OS user's own Claude login (no profile)"),!e.length)return m.info("no named profiles yet - allwright claude login <name>");for(let[t,n]of e){let s=Ct.default.existsSync(n.configDir)&&Ct.default.readdirSync(n.configDir).length>0;m.info(`${t} -> ${n.configDir} ${s?"(logged in)":"(NOT logged in yet)"}`)}});Oa.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=re();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),m.info(`Removed "${r}" (was ${t})`),n.length&&m.info(`Also removed ${n.length} environment secret set(s): ${n.join(", ")}`),e.auditSchedules.length!==s&&m.info("Also removed its audit schedule(s)"),m.info("The checkout on disk was NOT touched - remove it yourself if you want it gone."),m.info("Restart the runner to apply. Dashboard project (if any) is deleted separately there.")});var Na=ge.command("service").description("Run the runner as a system service (starts on boot, restarts on crash)");Na.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){m.info(`
|
|
712
|
+
`+Po($o()));return}ll(m)});Na.command("uninstall").description("Stop and remove the systemd service (config/credentials untouched)").action(()=>cl(m));Na.command("status").description("systemctl status for the runner service").action(()=>{(0,Et.spawn)("systemctl",["status","allwright","--no-pager"],{stdio:"inherit"}).on("exit",e=>process.exit(e??0))});ge.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()=>{m.info("Updating: npm install -g allwright@latest");let r=(0,Et.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)}),m.info("Updated. Restart the runner service to load the new version (check active runs first).")});var hs=ge.command("jira").description("Per-repo Jira site overrides - for projects living on a different Atlassian site");hs.command("set <repoName>").description("Store Jira credentials for ONE repo's project (e.g. a project on a different *.atlassian.net site than the runner's main credential). Prompts on stdin; stored locally only, like every other credential.").action(async r=>{let e=re();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=Gc(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 l=await new Re(a).myself();if(e.repos[r].jira=a,he(e),m.info(`The token already on this server works on ${n} - authenticated as ${l.displayName}. Saved it for "${r}"; nothing to type.`),t?.jiraProjectKey)try{await new Re(a).search(`project = "${t.jiraProjectKey}"`,1),m.info(`Project ${t.jiraProjectKey} is readable with it.`)}catch{m.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.`)}jn();return}catch{m.info(`The token already on this server does not work on ${n} - asking for one that does.`)}}let o=Hr.default.createInterface({input:process.stdin,output:process.stdout});try{let l=(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(!l||!f||!p)throw new Error("all three values are required");let v={baseUrl:l,email:f,apiToken:p},k=await new Re(v).myself();m.info(`Jira credential OK - authenticated as ${k.displayName} on ${l}`),e.repos[r].jira=v,he(e),m.info(`Saved: repo "${r}" now polls ${l} (other repos keep the runner-wide credential)`),jn()}finally{o.close()}});hs.command("show").description("Show which Jira site each repo uses (never prints tokens)").action(()=>{let r=re();m.info(`runner-wide: ${r.jira?`${r.jira.baseUrl} (${r.jira.email})`:"(not configured)"}`);for(let[e,t]of Object.entries(r.repos))m.info(`${e} -> ${t.jira?`${t.jira.baseUrl} (${t.jira.email})`:"(runner-wide credential)"}`)});hs.command("user-add <ticketpilotEmail>").description("Store a PERSON's own Jira credential, so board buttons and Compose tickets they click post to Jira under THEIR Atlassian identity instead of the runner's account. Keyed by their Allwright login email. Prompts on stdin; stored locally only. Picked up on the next click - no restart needed.").action(async r=>{let e=re(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Hr.default.createInterface({input:process.stdin,output:process.stdout});try{let s=(await n.question(`Their ATLASSIAN account email [${t}]: `)).trim()||t,i=(await n.question("Their Jira API token (they create it at id.atlassian.com/manage-profile/security/api-tokens): ")).trim();if(!i)throw new Error("API token is required");let o=[e.jira,...Object.values(e.repos).map(c=>c.jira)].filter(c=>!!c),a=new Set,l=!1;for(let c of o)if(!a.has(c.baseUrl)){a.add(c.baseUrl);try{let f=await new Re({baseUrl:c.baseUrl,email:s,apiToken:i}).myself();m.info(`${c.baseUrl}: OK - authenticated as ${f.displayName}`),l=!0}catch{m.warn(`${c.baseUrl}: this credential does NOT work there (fine if they don't use that site)`)}}if(!l)throw new Error("credential failed on every configured Jira site - nothing saved");e.jiraUsers[t]={email:s,apiToken:i},he(e),m.info(`Saved. Dashboard actions by ${t} now post to Jira as ${s}. No restart needed.`)}finally{n.close()}});hs.command("user-list").description("Show which Allwright users have their own Jira credential here (never prints tokens)").action(()=>{let r=re(),e=Object.entries(r.jiraUsers);if(!e.length)return m.info("none yet - everyone's dashboard clicks require one: allwright jira user-add <their-ticketpilot-email>");for(let[t,n]of e)m.info(`${t} -> posts to Jira as ${n.email}`)});hs.command("user-remove <ticketpilotEmail>").description("Delete a person's stored Jira credential").action(r=>{let e=re(),t=r.trim().toLowerCase();if(!e.jiraUsers[t])throw new Error(`no credential stored for ${t}`);delete e.jiraUsers[t],he(e),m.info(`Removed. Dashboard actions by ${t} will now be refused until a new credential is added.`)});var On=ge.command("github").description("GitHub credential for implement-mode rules");On.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=Hr.default.createInterface({input:process.stdin,output:process.stdout});try{let t=r.token??void lh("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(()=>(it(),$r)),s=await new n(t).whoami(),i=re();i.github={token:t,login:s},he(i),m.info(`GitHub token OK - authenticated as ${s}`),m.info(`Saved to ${Pt()} (mode 600, this machine only)`)}finally{e.close()}});On.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=re();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&&Ct.default.existsSync(n))try{let i=(0,Et.execFileSync)("git",["-C",n,"remote","get-url","origin"],{encoding:"utf8",timeout:1e4}).trim(),o=He(i);if(o){let{GitHubClient:a}=await Promise.resolve().then(()=>(it(),$r)),l=new a(t),c=await l.repoAccess(o.owner,o.repo);if(c.ok&&c.canPush){let f=await l.whoami();m.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.`),m.info("Want a separately revocable one anyway? Paste it at the prompt below; press Enter to leave things as they are.")}}}catch{}let s=Hr.default.createInterface({input:process.stdin,output:process.stdout});try{lh(`"${r}"`);let i=(await s.question(`GitHub token for "${r}": `)).trim();if(!i&&t){m.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(()=>(it(),$r)),a=await new o(i).whoami();e.repos[r].github={token:i,login:a},he(e),m.info(`GitHub token OK - authenticated as ${a}`),m.info(`Saved: repo "${r}" now uses its own token (other repos keep the runner-wide one)`)}finally{s.close()}});On.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=re(),t=r.trim().toLowerCase();if(!t.includes("@"))throw new Error(`"${r}" doesn't look like an email`);let n=Hr.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(()=>(it(),$r)),o=await new i(s).whoami();e.githubUsers[t]={token:s,login:o},he(e),m.info(`GitHub token OK - authenticated as ${o}`),m.info(`Saved. Implement runs triggered by ${t} now open PRs as ${o}. No restart needed.`)}finally{n.close()}});On.command("user-list").description("Show which Allwright users have their own GitHub token here (never prints tokens)").action(()=>{let r=re(),e=Object.entries(r.githubUsers);if(!e.length)return m.info("no per-user GitHub tokens - everyone's PRs use the repo/runner-wide token");for(let[t]of e)m.info(`${t} -> own GitHub token stored`)});On.command("user-remove <ticketpilotEmail>").description("Delete a person's stored GitHub token (their runs fall back to the shared token)").action(r=>{let e=re(),t=r.trim().toLowerCase();if(!e.githubUsers[t])throw new Error(`no GitHub token stored for ${t}`);delete e.githubUsers[t],he(e),m.info(`Removed. ${t}'s runs use the repo/runner-wide token again.`)});On.command("show").description("Show which GitHub token each repo and person would use (never prints tokens)").action(()=>{let r=re();m.info(`runner-wide: ${r.github?.token?"token set":"(not configured)"}`);for(let[t,n]of Object.entries(r.repos))m.info(`${t} -> ${n.github?.token?"own repo token":"runner-wide token"}`);let e=Object.keys(r.githubUsers);m.info(e.length?`per-user tokens: ${e.join(", ")}`:"per-user tokens: (none)")});var Ma=ge.command("audit").description("Recurring specialist audits on this runner");Ma.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=re();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),m.info(`Scheduled: ${e} audit of "${r}" every ${s}h. Restart the runner to apply.`)});Ma.command("schedules").description("List scheduled audits").action(()=>{let r=re();if(!r.auditSchedules.length)return m.info("no scheduled audits - allwright audit schedule <repo> <role> <hours>");for(let e of r.auditSchedules)m.info(`${e.repoName} \xB7 ${e.role} \xB7 every ${e.intervalHours}h`)});Ma.command("unschedule <repoName> <role>").description("Remove a scheduled audit").action((r,e)=>{let t=re(),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),m.info("Removed. Restart the runner to apply.")});var za=ge.command("deploy").description("Deployment settings for this machine");za.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=re();r.deploy={enabled:!0},he(r),m.info("deployments ENABLED on this runner"),m.info("This runner will now execute the deploy steps configured for your environments. Review them in the dashboard before shipping to production."),jn()});za.command("disable").description("Stop this runner from executing any deploy steps").action(()=>{let r=re();r.deploy={enabled:!1},he(r),m.info("deployments DISABLED on this runner"),jn()});za.command("status").description("Show whether deployments are enabled here, and which env secrets are stored").action(()=>{let r=re();m.info(`deployments: ${r.deploy.enabled?"enabled":"disabled"}`);let e=Object.entries(r.environments);if(!e.length)return m.info("no environment secrets stored");for(let[t,n]of e){let s=Object.keys(n.secrets);m.info(`${t}: ${s.length?s.join(", "):"(no secrets)"}`)}});var Da=ge.command("env").description("Per-environment deploy secrets. Values stay on this machine, like your Jira token.");Da.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=re(),s=Ts(r,e),i=n.environments[s]??{secrets:{}},o=[];for(let a of t){let l=a.indexOf("=");if(l<=0)throw new Error(`expected KEY=VALUE, got "${a}"`);let c=a.slice(0,l).trim();i.secrets[c]=a.slice(l+1),o.push(c)}n.environments[s]=i,he(n),m.info(`stored ${o.length} secret(s) for ${s}: ${o.join(", ")}`),m.info(`Saved to ${Pt()} (mode 600, this machine only)`),jn()});Da.command("unset <repoName> <envName> <names...>").description("Remove stored secrets for an environment").action((r,e,t)=>{let n=re(),s=Ts(r,e),i=n.environments[s];if(!i)return m.info(`nothing stored for ${s}`);for(let o of t)delete i.secrets[o];n.environments[s]=i,he(n),m.info(`removed ${t.join(", ")} from ${s}`)});Da.command("list").description("Show which environments have secrets stored here (names only, never values)").action(()=>{let r=re(),e=Object.entries(r.environments);if(!e.length)return m.info("no environment secrets stored");for(let[t,n]of e)m.info(`${t}: ${Object.keys(n.secrets).join(", ")||"(none)"}`)});ge.command("export [file]").description("Back up ALL runner state (config+secrets, knowledge, audits, chats) to one tarball").action(r=>{try{let e=hu(r);m.info(`Backup written: ${e.file} (${e.entries.length} entries, mode 600)`),m.warn("This file CONTAINS YOUR SECRETS (Jira/GitHub tokens). Keep it private - anyone holding it can act as this runner."),m.info(`Restore on any machine with: allwright import ${ds.default.basename(e.file)}`)}catch(e){m.error(e instanceof Error?e.message:String(e)),process.exitCode=1}});ge.command("import <file>").description("Restore runner state from an `export` tarball (existing config is kept as a .bak dir)").action(r=>{let e=ur();if(e&&lr(e)){m.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=fu(r);m.info(`Restored ${t.restored.length} entries into ${te()}`),t.previousDir&&m.info(`Previous config kept at ${t.previousDir}`),m.info("Start the runner and it will reconnect with the restored identity.")}catch(t){m.error(t instanceof Error?t.message:String(t)),process.exitCode=1}});ge.command("test").description("Check local setup: Jira auth, repo mappings, Claude Code binary").action(async()=>{let r=re(),e=Object.keys(r.repos);if(!r.jira){m.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 Pi(r,s);for(let o of i){if(s.jiraProjectKey==="*"&&o.name==="jira-project")continue;let a=o.ok?"PASS":"FAIL";(o.ok?m.info:m.error)(`[${a}] ${o.name}: ${o.detail}`),n&&=o.ok}}n||(process.exitCode=1)});function jn(){let r=ur();if(r&&lr(r)&&process.platform!=="win32")try{process.kill(r,"SIGHUP"),m.info("running runner reloaded its config live - no restart needed");return}catch{}m.info("No background runner found to reload. Under systemd: sudo systemctl kill -s HUP allwright - otherwise it applies on the next allwright start.")}function yv(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=wu();e.ok||(m.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",so);let t=new Re(r.jira),n=new Map,s=h=>{let g=r.repos[h]?.jira;if(!g)return t;let w=n.get(h);return w||(w=new Re(g),n.set(h,w)),w},i=new Map,o=(h,g)=>{let w=il(pe()??r,h,g);switch(w.kind){case"legacy":return{jira:s(h),authored:!1};case"self":return{jira:s(h),authored:!0};case"missing":return{error:w.error};case"user":{let C=`${w.creds.baseUrl}:${w.creds.email}:${w.creds.apiToken.slice(-6)}`,D=i.get(C);return D||(D=new Re(w.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 l=[],c=[],f=[],p,v=null,k={cfg:r,jiraFor:s,transport:null},T=new Set,x=h=>{let g=l.find(C=>C.id===h),w=g&&r.repos[g.repoName];return g&&w?{project:g,repoPath:w.path}:null},j={cfg:r,jiraFor:s,get transport(){return k.transport},lookup:(h,g)=>{let w=x(h),C=f.find(D=>D.projectId===h&&D.name===g);return w&&C?{...w,environment:C}:null}},S=new Ri(a.toString(),r.runnerToken,{runnerVersion:Ds},{onConfig:h=>{l=h.projects,Zc(h.projects),c=h.rules,f=h.environments,p.setConfig(h.projects,h.rules,h.pollingPaused,h.environments)},onDeployFix:async h=>{let g=x(h.projectId);if(!g){S.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let w=We(r,g.project,"assist");if("error"in w){S.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:w.error});return}m.info(`investigating failed deploy of "${h.environmentName}" (step: ${h.failedStep||"?"})`);let C=await Ac({agent:w,repoPath:g.repoPath,repoName:g.project.repoName,environmentName:h.environmentName,steps:h.steps,failedStep:h.failedStep,errorText:h.errorText,cfg:r});S.sendDeploySuggestResult(h.requestId,C)},onProjectTest:async h=>{let g=l.find(C=>C.id===h.projectId);if(!g){S.sendProjectTestResult(h.requestId,!1,[{name:"config",ok:!1,detail:"project not in this runner's synced config yet"}]);return}m.info(`running connection test for project "${g.name}"`);let w=await Pi(pe()??r,g,f.filter(C=>C.projectId===g.id),c.filter(C=>C.projectId===g.id).map(C=>"agent"in C.action?C.action.agent:"").filter(Boolean));S.sendProjectTestResult(h.requestId,w.every(C=>C.ok),w)},onRuleDiagnose:async h=>{let g=c.find(W=>W.id===h.ruleId),w=g&&l.find(W=>W.id===g.projectId);if(!g||!w){S.sendRuleDiagnoseResult(h.requestId,{checks:[{name:"config",ok:!1,detail:"rule not in this runner's synced config yet"}],matchedCount:0,excludedCount:0,excludedSample:[]});return}m.info(`diagnosing rule "${g.name}"`);let C=await Pi(pe()??r,w,g.action.type==="deploy"?f.filter(W=>W.projectId===w.id):[]),D=g.action.type==="implement"?C:C.filter(W=>W.name!=="github-token"),{matchedCount:Y,excludedCount:B,excludedSample:se}=await p.diagnoseRule(g,w);S.sendRuleDiagnoseResult(h.requestId,{checks:D,matchedCount:Y,excludedCount:B,excludedSample:se})},onCancel:h=>{rc(h)?m.info(`run ${h} stopped from the dashboard`):m.warn(`cancel requested for run ${h}, but nothing is running under that id here - it likely finished already`)},onApproved:(h,g)=>{if(ia(h)){Tc(j,h).catch(w=>m.error(`deploy approval crashed for ${h}: ${w instanceof Error?w.stack:w}`));return}Qn(k,h,g).catch(w=>m.error(`approval handling crashed for ${h}: ${w instanceof Error?w.stack:w}`))},onRetryPush:h=>{let g=ei(h),w=()=>hc(k,h).catch(C=>m.error(`retry push crashed for ${h}: ${C instanceof Error?C.stack:C}`));g?p.runOnRepoQueue(g.baseRepoPath,w):w()},onRejected:h=>{if(ia(h)){xc(j,h).catch(g=>m.error(`deploy rejection crashed for ${h}: ${g instanceof Error?g.stack:g}`));return}dc(k,h).catch(g=>m.error(`rejection handling crashed for ${h}: ${g instanceof Error?g.stack:g}`))},onDeployStart:h=>{let g=`${h.runId}#${h.attempt}`;if(T.has(g))return;T.add(g);let w=x(h.projectId);if(!w){let C="this runner has no local checkout mapped for that project - run: allwright repo add <repoName> /path/to/checkout";m.error(`deploy ${h.runId}: ${C}`),S.send({type:"run.status",runId:h.runId,status:"failed",error:C});return}m.info(`deploy ${h.runId} requested from the dashboard: ${h.issueKey} \u2192 ${h.environment.name}`),p.runOnEnvironmentQueue(h.environment.id,()=>li({runId:h.runId,project:w.project,environment:h.environment,issueKey:h.issueKey,issueSummary:h.issueSummary,repoPath:w.repoPath,cfg:r,jira:s(w.project.repoName),transport:S,requestedBy:h.requestedBy}).catch(C=>m.error(`deploy crashed for ${h.runId}: ${C instanceof Error?C.stack:C}`)))},onDeploySuggest:async h=>{let g=x(h.projectId);if(!g){S.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:"this runner has no local checkout mapped for that project"});return}let w=We(r,g.project,"assist");if("error"in w){S.sendDeploySuggestResult(h.requestId,{ok:!1,steps:[],requiredSecrets:[],notes:"",error:w.error});return}m.info(`asking ${w.adapter.displayName} for "${h.environmentName}" deploy steps in ${g.repoPath}`);let C=await $c({agent:w,repoPath:g.repoPath,repoName:g.project.repoName,environmentName:h.environmentName,notes:h.notes,timeoutSeconds:h.timeoutSeconds,cfg:r});S.sendDeploySuggestResult(h.requestId,C)},onEnvPreflight:async h=>{let g=x(h.projectId);if(!g){S.sendEnvPreflightResult(h.requestId,{ok:!1,checks:[{name:"repo",ok:!1,detail:"no local checkout mapped for that project"}]});return}let w=await Rc({repoPath:g.repoPath,repoName:g.project.repoName,environmentName:h.environmentName,steps:h.steps,requiredSecrets:h.requiredSecrets,workdir:h.workdir,branch:h.branch,publicUrl:h.publicUrl,cfg:r});S.sendEnvPreflightResult(h.requestId,w)},onChatTurn:async h=>{let g=x(h.projectId);if(!g){S.sendChatTurnResult(h.requestId,{ok:!1,sessionId:h.sessionId??"",reply:"",error:"this runner has no local checkout mapped for that project"});return}let w=h.sessionId||(0,Oi.randomUUID)(),C=!h.sessionId;if((C?0:aa(w)?.messages.length??0)>=44){S.sendChatTurnResult(h.requestId,{ok:!1,sessionId:w,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 Y=h.files.length?gu(g.repoPath,h.requestId,h.files):null,B="```",se=C?`You are the project assistant for "${g.project.name}" - this working directory is its repository, and you have read-only access.
|
|
702
713
|
|
|
703
714
|
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.
|
|
704
715
|
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.
|
|
705
716
|
|
|
706
717
|
ONLY when the user explicitly asks for a ticket, propose it by ending your reply with EXACTLY one fenced block in this shape:
|
|
707
|
-
${
|
|
718
|
+
${B}ticket
|
|
708
719
|
{"summary": "\u2026", "description": "\u2026"}
|
|
709
|
-
${
|
|
720
|
+
${B}
|
|
710
721
|
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.
|
|
711
722
|
Write the description in plain human language, structured with these Markdown section headings in this order:
|
|
712
723
|
Story: - one or two sentences: who needs this and why.
|
|
@@ -715,18 +726,16 @@ Expected Flow: - the flow once this ticket is done, as numbered steps.
|
|
|
715
726
|
Current Flow: - how it behaves today; include ONLY when current behavior exists.
|
|
716
727
|
Acceptance Criteria: - testable bullet points a reviewer can check off one by one.
|
|
717
728
|
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.
|
|
718
|
-
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 ${
|
|
729
|
+
EXCEPTION - verbatim payloads: when the user supplies literal content that must land in the ticket exactly (file contents, error logs, specs, commands), include it in the description IN FULL inside a fenced code block - the word budget applies to your own prose around it, never to the user's payload. Never summarize such content and never replace it with a placeholder like "[insert content here]": a placeholder makes the ticket unimplementable, because the implementing agent only ever sees the ticket. Inside the ${B}ticket JSON, fence such payloads with ~~~ (tildes), NEVER with triple backticks - a nested ${B} would end the outer block early and corrupt the draft.
|
|
719
730
|
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:
|
|
720
731
|
{"epic": {"summary": "\u2026", "description": "\u2026"}, "tickets": [{"summary": "\u2026", "description": "\u2026"}, \u2026]}
|
|
721
732
|
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.
|
|
722
733
|
|
|
723
|
-
${h.userName||"The user"} says: ${h.message}`+(
|
|
734
|
+
${h.userName||"The user"} says: ${h.message}`+(Y?.section??""):`${h.userName||"The user"} says: ${h.message}`+(Y?.section??""),W=0,F;try{let ae=We(r,g.project,"chat");if("error"in ae){S.sendChatTurnResult(h.requestId,{ok:!1,sessionId:w,reply:"",error:ae.error});return}F=await ae.adapter.run({repoPath:g.repoPath,prompt:se,timeoutSeconds:180,bin:ae.bin,mode:"read_only",maxTurns:25,model:h.model||ae.adapter.fastModel,sessionId:w,resume:!C,onLog:(ie,ce)=>{ie==="agent"&&S.send({type:"chat.stream",requestId:h.requestId,seq:W++,text:ce.slice(0,8e3)})},onUsage:ie=>{S.send({type:"chat.usage",requestId:h.requestId,inputTokens:Math.round(ie.inputTokens),outputTokens:Math.round(ie.outputTokens),cacheReadTokens:ie.cacheReadTokens===void 0?void 0:Math.round(ie.cacheReadTokens),turns:ie.turns})}})}finally{Y&&Ct.default.rmSync(Y.dir,{recursive:!0,force:!0})}F.ok&&zc(h.projectId,w,h.message,F.resultText),S.sendChatTurnResult(h.requestId,{ok:F.ok,sessionId:w,reply:F.resultText,error:F.ok?void 0:F.error??"the agent produced no reply",inputTokens:F.inputTokens,outputTokens:F.outputTokens,cacheReadTokens:F.cacheReadTokens,costUsd:F.costUsd,model:F.model??""})},onChatList:h=>{S.sendChatListResult(h.requestId,Dc(h.projectId))},onRepoDocs:h=>{let g=x(h.projectId);if(!g){S.sendRepoDocsResult(h.requestId,{ok:!1,docs:[],error:"this runner has no local checkout mapped for that project"});return}S.sendRepoDocsResult(h.requestId,{ok:!0,docs:qc(g.repoPath)})},onRepoDocRead:h=>{let g=x(h.projectId);if(!g){S.sendRepoDocReadResult(h.requestId,{ok:!1,path:h.path,content:"",truncated:!1,error:"this runner has no local checkout mapped for that project"});return}let w=Fc(g.repoPath,h.path);S.sendRepoDocReadResult(h.requestId,{ok:w.ok,path:w.ok?w.path:h.path,content:w.ok?w.content:"",truncated:w.ok?w.truncated:!1,error:w.ok?void 0:w.error})},onChatLoad:h=>{let g=aa(h.sessionId);S.sendChatLoadResult(h.requestId,{ok:g!==null,projectId:g?.projectId??"",messages:g?.messages??[],error:g?void 0:"chat not found on this runner (pruned or never existed)"})},onBoardFetch:async h=>{let g=x(h.projectId);if(!g){S.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:"this runner has no local checkout mapped for that project"});return}try{let w=s(g.project.repoName),C;try{C=await w.searchBoard(`project = "${g.project.jiraProjectKey}" ORDER BY Rank ASC`,100)}catch{C=await w.searchBoard(`project = "${g.project.jiraProjectKey}" ORDER BY updated DESC`,100)}let D=await w.boardColumns(g.project.jiraProjectKey),Y;if(D){Y=D.map(W=>({name:W.name,issues:[]}));let se=new Map;for(let W of C){let F=D.findIndex(ie=>ie.statusIds.includes(W.statusId)),ae={key:W.key,summary:W.summary,labels:W.labels};if(F>=0)Y[F].issues.push(ae);else{let ie=se.get(W.status)??[];ie.push(ae),se.set(W.status,ie)}}for(let[W,F]of se)Y.push({name:W,issues:F})}else{let se=ce=>ce.trim().toLowerCase(),W=new Map,F=new Map;for(let ce of C){let fe=se(ce.status);W.has(fe)||W.set(fe,ce.status.trim());let La=F.get(fe)??[];La.push({key:ce.key,summary:ce.summary,labels:ce.labels}),F.set(fe,La)}let ae=[];try{ae=await w.projectStatuses(g.project.jiraProjectKey)}catch{}let ie=[];for(let ce of ae){let fe=se(ce);!ie.includes(fe)&&F.has(fe)&&ie.push(fe)}for(let ce of F.keys())ie.includes(ce)||ie.push(ce);Y=ie.map(ce=>({name:W.get(ce)??ce,issues:F.get(ce)??[]}))}let B=r.repos[g.project.repoName]?.jira??r.jira;S.sendBoardFetchResult(h.requestId,{ok:!0,browseBaseUrl:(B?.baseUrl??"").replace(/\/+$/,""),columns:Y})}catch(w){S.sendBoardFetchResult(h.requestId,{ok:!1,columns:[],error:w instanceof Error?w.message:String(w)})}},onBoardTrigger:async h=>{let g=x(h.projectId);if(!g){S.sendBoardTriggerResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let w=s(g.project.repoName),C=h.comment.trim()?o(g.project.repoName,h.requestedByEmail):{jira:w,authored:!1};if(C.error!==void 0){S.sendBoardTriggerResult(h.requestId,{ok:!1,error:C.error});return}if(h.reimplement){let D=await w.getIssue(h.issueKey),Y=D.comments.filter(W=>nt(W.body)),B=Y.length?Math.max(...Y.map(W=>new Date(W.created).getTime())):0;if(!D.comments.some(W=>!nt(W.body)&&new Date(W.created).getTime()>B)){S.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 w.editLabels(h.issueKey,{remove:["agent-implemented"]})}h.removeLabel.trim()&&await w.editLabels(h.issueKey,{remove:[h.removeLabel.trim()]}),h.comment.trim()&&await C.jira.addTriggerComment(h.issueKey,`${h.comment.trim()}`+(!C.authored&&h.requestedBy?`
|
|
724
735
|
|
|
725
|
-
_(requested by ${h.requestedBy} via Allwright)_`:"")),
|
|
736
|
+
_(requested by ${h.requestedBy} via Allwright)_`:"")),m.info(`Board action on ${h.issueKey}`+(h.comment?` comment "${h.comment.trim()}"`:"")+(h.removeLabel?` -label ${h.removeLabel}`:"")+(h.requestedBy?` by ${h.requestedBy}`:"")),S.sendBoardTriggerResult(h.requestId,{ok:!0})}catch(w){S.sendBoardTriggerResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onChatCreateTicket:async h=>{let g=x(h.projectId);if(!g){S.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:"this runner has no local checkout mapped for that project"});return}try{let w=o(g.project.repoName,h.requestedByEmail);if(w.error!==void 0){S.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:w.error});return}let C=`
|
|
726
737
|
|
|
727
738
|
---
|
|
728
|
-
_Created via Allwright Compose`+(!
|
|
739
|
+
_Created via Allwright Compose`+(!w.authored&&h.requestedBy?` by ${h.requestedBy}`:"")+", drafted with the project agent._",{key:D}=await w.jira.createIssue(g.project.jiraProjectKey,h.summary,(h.description||"(no description)")+C,h.asEpic?"Epic":"Task");h.files.length&&await w.jira.addAttachments(D,h.files.map(B=>({name:B.name,content:Buffer.from(B.contentBase64,"base64")}))).then(()=>m.info(`Compose attached ${h.files.length} file(s) to ${D}`)).catch(B=>m.warn(`Compose could not attach files to ${D}: ${B instanceof Error?B.message:B}`));let Y=[];if(h.asEpic){for(let B of h.children){let se=await w.jira.createIssue(g.project.jiraProjectKey,B.summary,B.description||"(no description)","Task",D);Y.push(se.key)}m.info(`Compose created epic ${D} with ${Y.length} child ticket(s)`),S.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:D,childKeys:Y});return}h.triggerComment.trim()&&await w.jira.addTriggerComment(D,`${h.triggerComment.trim()}`+(!w.authored&&h.requestedBy?`
|
|
729
740
|
|
|
730
|
-
_(requested by ${h.requestedBy} via Allwright)_`:"")),g.info(`Compose created ${j}`+(h.requestedBy?` for ${h.requestedBy}`:"")+(h.triggerComment?` with trigger "${h.triggerComment.trim()}"`:"")),k.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:j})}catch(y){k.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:y instanceof Error?y.message:String(y)})}},onAuditStart:async h=>{let m=S(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=He(r,m.project,"assist");if("error"in y){k.sendAuditStartResult(h.requestId,{ok:!1,error:y.error});return}let x=await yn({projectId:h.projectId,repoPath:m.repoPath,role:h.role,scope:h.scope,model:h.model,agent:y,jira:s(m.project.repoName)});if(!x.ok){k.sendAuditStartResult(h.requestId,{ok:!1,error:x.error});return}k.sendAuditStartResult(h.requestId,{ok:!0,audit:x.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:gc(h.projectId)})}catch(m){k.sendAuditListResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditGet:async h=>{try{let m=bc(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=Ao(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=S(h.projectId);if(y&&h.verdicts.length){let x=[];for(let j of h.verdicts){if(j.verdict==="valid"||m.lessonsWritten.includes(j.findingId))continue;let z=m.findings.find(D=>D.id===j.findingId);z&&(jo(y.repoPath,m.role,xc(z,j.verdict,j.note,h.verdictBy)),x.push(j.findingId),g.info(`Lesson written (${m.role}): ${j.verdict} - ${z.title.slice(0,60)}`))}x.length&&(m=Ao(h.projectId,h.auditId,{markLessonsWritten:x})??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=S(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:Ec(m.repoPath)})}catch(y){k.sendKnowledgeListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onKnowledgeSave:async h=>{let m=S(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?jo(m.repoPath,h.role,Cc(h.content,h.by),h.level):Ic(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=S(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 x=await y.epicChildren(h.epicKey);k.sendEpicListResult(h.requestId,{ok:!0,children:x})}else{let x=await y.searchEpics(m.project.jiraProjectKey);k.sendEpicListResult(h.requestId,{ok:!0,epics:x})}}catch(y){k.sendEpicListResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onEpicSuggest:async h=>{let m=S(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),x=await y.epicChildren(h.epicKey),j=ic(x);if(!j.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(j.length===1){k.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:j[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let z=await Promise.all(j.slice(0,12).map(async ae=>{try{let se=await y.getIssue(ae.key);return{...ae,description:se.description}}catch{return{...ae,description:""}}})),D=(await y.getIssue(h.epicKey).catch(()=>null))?.summary??"";g.info(`Epic suggest: weighing ${z.length} pending children of ${h.epicKey}`);let X=He(r,m.project,"assist");if("error"in X){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:X.error});return}let G=await X.adapter.run({repoPath:m.repoPath,prompt:oc(h.epicKey,D,z),timeoutSeconds:150,bin:X.bin,mode:"read_only",maxTurns:20,sessionId:(0,Ri.randomUUID)(),model:h.model||"claude-sonnet-5",onLog:()=>{}}),F=ac(G.resultText,z.map(ae=>ae.key));if("error"in F){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:F.error});return}g.info(`Epic suggest: ${h.epicKey} -> do ${F.issueKey} first`),k.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:F.issueKey,reason:F.reason,considered:z.length})}catch(y){k.sendEpicSuggestResult(h.requestId,{ok:!1,error:y instanceof Error?y.message:String(y)})}},onTeamCreds:async h=>{try{let m=le()??r;if(m.github?.token&&!m.github.login)try{let{GitHubClient:x}=await Promise.resolve().then(()=>(nt(),Ir));m.github.login=await new x(m.github.token).whoami(),ce(m)}catch{}let y=Qu(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=le()??r,{buildSetupReport:y}=await Promise.resolve().then(()=>(Qd(),Xd)),x=await y(m,h.repoNames);k.sendSetupStatusResult(h.requestId,{ok:!0,...x})}catch(m){k.sendSetupStatusResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdGenerate:async h=>{try{let m=S(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":"CLAUDE.md";g.info(`Setup: drafting ${y} for ${m.project.repoName}`);let x="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.",j='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.',z=He(r,m.project,"assist");if("error"in z){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,content:"",error:z.error});return}let X=(await z.adapter.run({repoPath:m.repoPath,prompt:h.kind==="deploy"?j:x,timeoutSeconds:240,bin:z.bin,mode:"read_only",maxTurns:40,sessionId:(0,Ri.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!X){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"the agent returned no content - try again"});return}k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!0,content:X})}catch(m){k.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onSetupClaudeMdSave:async h=>{try{let m=S(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":"CLAUDE.md",x=An.default.join(m.repoPath,y);if(at.default.existsSync(x)&&!h.overwrite){k.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:`${y} already exists in this checkout`});return}at.default.writeFileSync(x,h.content.endsWith(`
|
|
731
|
-
`)?h.content:h.content+`
|
|
732
|
-
`),g.info(`Setup: wrote human-approved CLAUDE.md to ${x}`);let j="",z=D=>new Promise((X,G)=>{(0,ut.execFile)("git",["-C",m.repoPath,...D],{timeout:12e4},(F,ae,se)=>F?G(new Error(se||F.message)):X())});try{await z(["add",y]),await z(["-c","user.name=Allwright","-c","user.email=runner@allwright.local","commit","-m",`Add ${y} (agent-drafted, human-approved via Allwright)`]);try{await z(["push"]),j="committed and pushed to the repo"}catch(D){j="committed locally, but push failed: "+(D instanceof Error?D.message.slice(0,200):"unknown")+" - push it from the server when convenient"}}catch(D){j="file written, but commit failed: "+(D instanceof Error?D.message.slice(0,200):"unknown")+" - commit it from the server when convenient"}k.sendSetupClaudeMdSaveResult(h.requestId,{ok:!0,note:j})}catch(m){k.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:m instanceof Error?m.message:String(m)})}},onAuditStats:h=>{try{k.sendAuditStatsResult(h.requestId,{ok:!0,byProject:yc(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}if(p&&p.busyCount>0){k.sendRunnerUpdateResult(h.requestId,{ok:!1,error:`a run is executing on this machine right now (${p.busyCount} active) - try again when it finishes`});return}g.info("Update requested from the dashboard - installing allwright@latest");let m=An.default.dirname(process.execPath),y=at.default.existsSync(An.default.join(m,"npm"))?An.default.join(m,"npm"):"npm";(0,ut.execFile)(y,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${m}:${process.env.PATH??""}`}},(x,j,z)=>{if(x){k.sendRunnerUpdateResult(h.requestId,{ok:!1,error:`npm install failed: ${(z||x.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)})},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)})}}});b.transport=k,p=new ci(r,s,k);let N=Object.values(_n()).filter(h=>h.kind==="implement").map(h=>h.repoPath);go(Object.values(r.repos).map(h=>h.path),N).catch(()=>{}),k.start(),p.start();let W=()=>{g.info("shutting down"),p.stop(),k.stop(),hu(process.pid),Qi(),process.exit(0)};process.on("SIGINT",W),process.on("SIGTERM",W)}he.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=re();if(r.foreground){iv(e);return}let t=rn();if(t&&nn(t)){g.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=zn();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=lu(),i=(0,ut.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),du(i.pid),g.info(`Runner started in the background (pid ${i.pid}).`),g.info(`Logs: ${Cs()}`),g.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});he.command("stop").description("Stop the background runner started by `start`").action(()=>{let r=rn();if(!r||!nn(r)){g.info("no background runner is running"),r&&at.default.rmSync(Mn(),{force:!0});return}process.kill(r,"SIGTERM"),g.info(`stop signal sent (pid ${r})`)});he.command("status").description("Check whether the background runner is running").action(()=>{let r=rn();r&&nn(r)?g.info(`running in the background (pid ${r})`):g.info("not running")});he.parseAsync().catch(r=>{g.error(r instanceof Error?r.message:String(r)),process.exit(1)});
|
|
741
|
+
_(requested by ${h.requestedBy} via Allwright)_`:"")),m.info(`Compose created ${D}`+(h.requestedBy?` for ${h.requestedBy}`:"")+(h.triggerComment?` with trigger "${h.triggerComment.trim()}"`:"")),S.sendChatCreateTicketResult(h.requestId,{ok:!0,issueKey:D})}catch(w){S.sendChatCreateTicketResult(h.requestId,{ok:!1,issueKey:"",error:w instanceof Error?w.message:String(w)})}},onAuditStart:async h=>{let g=x(h.projectId);if(!g){S.sendAuditStartResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{m.info(`Audit (${h.role}) starting on ${g.project.repoName}`+(h.scope.kind!=="repo"?` scoped to ${h.scope.kind}:${h.scope.ref}`:""));let w=We(r,g.project,"assist");if("error"in w){S.sendAuditStartResult(h.requestId,{ok:!1,error:w.error});return}let C=await bn({projectId:h.projectId,repoPath:g.repoPath,role:h.role,scope:h.scope,model:h.model,agent:w,jira:s(g.project.repoName)});if(!C.ok){S.sendAuditStartResult(h.requestId,{ok:!1,error:C.error});return}S.sendAuditStartResult(h.requestId,{ok:!0,audit:C.audit})}catch(w){S.sendAuditStartResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onAuditList:async h=>{try{S.sendAuditListResult(h.requestId,{ok:!0,audits:Sl(h.projectId)})}catch(g){S.sendAuditListResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onAuditGet:async h=>{try{let g=Cl(h.projectId,h.auditId);if(!g){S.sendAuditGetResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}S.sendAuditGetResult(h.requestId,{ok:!0,audit:g})}catch(g){S.sendAuditGetResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onAuditReview:async h=>{try{let g=No(h.projectId,h.auditId,{selected:h.selected,ticketed:h.ticketed,verdicts:h.verdicts,verdictBy:h.verdictBy});if(!g){S.sendAuditReviewResult(h.requestId,{ok:!1,error:"audit not found on this runner"});return}let w=x(h.projectId);if(w&&h.verdicts.length){let C=[];for(let D of h.verdicts){if(D.verdict==="valid"||g.lessonsWritten.includes(D.findingId))continue;let Y=g.findings.find(B=>B.id===D.findingId);Y&&(Do(w.repoPath,g.role,Pl(Y,D.verdict,D.note,h.verdictBy)),C.push(D.findingId),m.info(`Lesson written (${g.role}): ${D.verdict} - ${Y.title.slice(0,60)}`))}C.length&&(g=No(h.projectId,h.auditId,{markLessonsWritten:C})??g)}S.sendAuditReviewResult(h.requestId,{ok:!0,audit:g})}catch(g){S.sendAuditReviewResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onKnowledgeList:async h=>{let g=x(h.projectId);if(!g){S.sendKnowledgeListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{S.sendKnowledgeListResult(h.requestId,{ok:!0,files:Ol(g.repoPath)})}catch(w){S.sendKnowledgeListResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onKnowledgeSave:async h=>{let g=x(h.projectId);if(!g){S.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{h.append?Do(g.repoPath,h.role,jl(h.content,h.by),h.level):Nl(g.repoPath,h.role,h.level,h.source,h.name,h.content),m.info(`Knowledge ${h.append?"taught":"saved"}: ${h.role}/${h.level}/${h.name}`),S.sendKnowledgeSaveResult(h.requestId,{ok:!0})}catch(w){S.sendKnowledgeSaveResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onEpicList:async h=>{let g=x(h.projectId);if(!g){S.sendEpicListResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let w=s(g.project.repoName);if(h.epicKey){let C=await w.epicChildren(h.epicKey);S.sendEpicListResult(h.requestId,{ok:!0,children:C})}else{let C=await w.searchEpics(g.project.jiraProjectKey);S.sendEpicListResult(h.requestId,{ok:!0,epics:C})}}catch(w){S.sendEpicListResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onEpicSuggest:async h=>{let g=x(h.projectId);if(!g){S.sendEpicSuggestResult(h.requestId,{ok:!1,error:"this runner has no local checkout mapped for that project"});return}try{let w=s(g.project.repoName),C=await w.epicChildren(h.epicKey),D=hl(C);if(!D.length){S.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){S.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:D[0].key,reason:"It's the only pending ticket left in this epic.",considered:1});return}let Y=await Promise.all(D.slice(0,12).map(async ae=>{try{let ie=await w.getIssue(ae.key);return{...ae,description:ie.description}}catch{return{...ae,description:""}}})),B=(await w.getIssue(h.epicKey).catch(()=>null))?.summary??"";m.info(`Epic suggest: weighing ${Y.length} pending children of ${h.epicKey}`);let se=We(r,g.project,"assist");if("error"in se){S.sendEpicSuggestResult(h.requestId,{ok:!1,error:se.error});return}let W=await se.adapter.run({repoPath:g.repoPath,prompt:fl(h.epicKey,B,Y),timeoutSeconds:150,bin:se.bin,mode:"read_only",maxTurns:20,sessionId:(0,Oi.randomUUID)(),model:h.model||"claude-sonnet-5",onLog:()=>{}}),F=pl(W.resultText,Y.map(ae=>ae.key));if("error"in F){S.sendEpicSuggestResult(h.requestId,{ok:!1,error:F.error});return}m.info(`Epic suggest: ${h.epicKey} -> do ${F.issueKey} first`),S.sendEpicSuggestResult(h.requestId,{ok:!0,issueKey:F.issueKey,reason:F.reason,considered:Y.length})}catch(w){S.sendEpicSuggestResult(h.requestId,{ok:!1,error:w instanceof Error?w.message:String(w)})}},onTeamCreds:async h=>{try{let g=pe()??r;if(g.github?.token&&!g.github.login)try{let{GitHubClient:C}=await Promise.resolve().then(()=>(it(),$r));g.github.login=await new C(g.github.token).whoami(),he(g)}catch{}let w=ol(g,h.emails);S.sendTeamCredsResult(h.requestId,{ok:!0,...w})}catch(g){S.sendTeamCredsResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onSetupStatus:async h=>{try{let g=pe()??r,{buildSetupReport:w}=await Promise.resolve().then(()=>(ah(),oh)),C=await w(g,h.repoNames);S.sendSetupStatusResult(h.requestId,{ok:!0,...C})}catch(g){S.sendSetupStatusResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onSetupClaudeMdGenerate:async h=>{try{let g=x(h.projectId);if(!g){S.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let w=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md";m.info(`Setup: drafting ${w} for ${g.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.',Y=`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.`,B=We(r,g.project,"assist");if("error"in B){S.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,content:"",error:B.error});return}let W=(await B.adapter.run({repoPath:g.repoPath,prompt:h.kind==="deploy"?D:h.kind==="design"?Y:C,timeoutSeconds:240,bin:B.bin,mode:"read_only",maxTurns:40,sessionId:(0,Oi.randomUUID)(),onLog:()=>{}})).resultText.trim();if(!W){S.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:"the agent returned no content - try again"});return}S.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!0,content:W})}catch(g){S.sendSetupClaudeMdGenerateResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onSetupClaudeMdSave:async h=>{try{let g=x(h.projectId);if(!g){S.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let w=h.kind==="deploy"?"DEPLOY.md":h.kind==="design"?"DESIGN.md":"CLAUDE.md",C=await Pa({repoPath:g.repoPath,relPath:w,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${w} (agent-drafted, human-approved via Allwright)`});C.ok&&m.info(`Setup: wrote human-approved ${w} to ${g.repoPath}`),S.sendSetupClaudeMdSaveResult(h.requestId,C)}catch(g){S.sendSetupClaudeMdSaveResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onRepoDocSave:async h=>{try{let g=x(h.projectId);if(!g){S.sendRepoDocSaveResult(h.requestId,{ok:!1,error:"no local checkout mapped for that project"});return}let w=await Pa({repoPath:g.repoPath,relPath:h.relPath,content:h.content,overwrite:h.overwrite,commitMessage:`Add ${h.relPath.trim()} (written in Allwright Compose, human-approved)`});w.ok&&m.info(`Saved approved doc ${h.relPath} into ${g.repoPath}`),S.sendRepoDocSaveResult(h.requestId,w)}catch(g){S.sendRepoDocSaveResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onAuditStats:h=>{try{S.sendAuditStatsResult(h.requestId,{ok:!0,byProject:Tl(h.projectIds,h.since)})}catch(g){S.sendAuditStatsResult(h.requestId,{ok:!1,error:g instanceof Error?g.message:String(g)})}},onRunnerUpdate:async h=>{if(!process.env.INVOCATION_ID){S.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 g=()=>{m.info("Installing allwright@latest");let C=ds.default.dirname(process.execPath),D=Ct.default.existsSync(ds.default.join(C,"npm"))?ds.default.join(C,"npm"):"npm";(0,Et.execFile)(D,["install","-g","allwright@latest"],{timeout:18e4,env:{...process.env,PATH:`${C}:${process.env.PATH??""}`}},(Y,B,se)=>{if(Y){S.sendRunnerUpdateResult(h.requestId,{ok:!1,error:`npm install failed: ${(se||Y.message).slice(0,300)} - on the machine run: allwright update && sudo systemctl restart allwright`});return}S.sendRunnerUpdateResult(h.requestId,{ok:!0,note:"updated - restarting now, back in a few seconds"}),m.info("Update installed; exiting so systemd restarts on the new version"),setTimeout(()=>process.exit(0),1500)})};if(p.idle){g();return}if(v){S.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:"an update is already scheduled and will install once the current work finishes"});return}let w=p.busyCount;S.sendRunnerUpdateResult(h.requestId,{ok:!0,scheduled:!0,note:`scheduled - ${w} run(s)/deploy(s) active right now. Nothing is refused meanwhile; the install runs automatically as soon as this machine goes idle.`}),m.info(`Update scheduled: waiting for ${w} active run(s)/deploy(s) to finish`),v=setInterval(()=>{p.idle&&(clearInterval(v),v=null,g())},5e3)},onJiraUsers:async h=>{try{let g=await t.searchUsers(h.query);S.sendJiraUsersResult(h.requestId,{ok:!0,users:g})}catch(g){S.sendJiraUsersResult(h.requestId,{ok:!1,users:[],error:g instanceof Error?g.message:String(g)})}}});k.transport=S,p=new fi(r,s,S);let J=Object.values(kn()).filter(h=>h.kind==="implement").map(h=>h.repoPath);_o(Object.values(r.repos).map(h=>h.path),J).catch(()=>{}),S.start(),p.start();let M=()=>{m.info("shutting down"),v&&clearInterval(v),S.stop(),bu(process.pid),so(),process.exit(0)},z=!1,Q=()=>{if(z){m.warn("second stop signal - exiting NOW; the interrupted run will be marked failed"),M();return}if(z=!0,p.stop(),p.idle){M();return}m.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),M())},3e3)};process.on("SIGINT",Q),process.on("SIGTERM",Q),process.on("SIGHUP",()=>{try{let h=re();if(!h.jira)throw new Error("no Jira credentials in the reloaded config");for(let g of Object.keys(r))delete r[g];Object.assign(r,h),t=new Re(h.jira),n.clear(),m.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){m.error(`config reload failed - keeping the running config: ${h instanceof Error?h.message:String(h)}`)}})}ge.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=re();if(r.foreground){yv(e);return}let t=ur();if(t&&lr(t)){m.info(`already running in the background (pid ${t}). Use \`allwright status\` or \`stop\`.`);return}let n=Ln();if(n){m.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=yu(),i=(0,Et.spawn)(process.execPath,[process.argv[1],"start","--foreground"],{detached:!0,stdio:["ignore",s,s]});i.unref(),vu(i.pid),m.info(`Runner started in the background (pid ${i.pid}).`),m.info(`Logs: ${Is()}`),m.info("It will keep polling Jira until you run `allwright stop` - closing this terminal is fine.")});ge.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=ur();if(!e||!lr(e)){m.info("no background runner is running"),e&&Ct.default.rmSync(on(),{force:!0});return}if(r.force){process.kill(e,"SIGKILL"),Ct.default.rmSync(on(),{force:!0}),m.info(`killed (pid ${e}) - any interrupted run will show as failed on the dashboard`);return}process.kill(e,"SIGTERM"),m.info(`stop signal sent (pid ${e}) - it stops polling now and exits once active work finishes (watch \`allwright status\`). Use --force to kill immediately.`)});ge.command("status").description("Check whether the background runner is running").action(()=>{let r=ur();r&&lr(r)?m.info(`running in the background (pid ${r})`):m.info("not running")});ge.parseAsync().catch(r=>{m.error(r instanceof Error?r.message:String(r)),process.exit(1)});
|